It’s all zeros and ones
That look of half-confusion, half-familiarity, when you tell people you’re a computer programmer. In the popular imagination, we programmers are “good with computers”. Perhaps some think that we have to do math to write programs. Others may have seen movies where the programmer is an over-caffeinated man-boy who types, and switches windows, at ludicrous speed. Of course, we’re all tired of friends asking us to fix their PowerPoint presentation.
Then there are people with friends or family who program for a living. I’ve met a few of those, and in several cases, they’ve told me something like “In the end, for you guys, it’s all zeros and ones, right?”. This sounds nice, and nicely baffling, but it’s not very useful. You could equally say of writers and journalists, that “in the end it’s all about letters and punctuation marks.” I think the “zeros and ones” routine is cultivated by programmers who want to appear cool.
So how does one describe the job of a programmer accurately, and shortly? Not sure, but I have some ideas, mostly in the negative direction.
- Computer programming is not mainly about computers. Your job did not change in a significant way when you switched to mac, and you can write programs that work even if you’re largely ignorant of computer architecture.
- Many people program who are not computer programmers. Writing Excel macros, using Matlab, even writing the odd SQL query, are routine for engineers, economists, biologists. Some of them indeed have “got it”, the programming gene, the skill to build big programs, the appreciation of code as an object in itself, to be studied and manipulated with purpose, rather than just chasing after the compiler.
- Conversely, some people who have a degree in CS, even a higher degree in CS, may not be programmers. They may be good at complexity theory, or security, or software project management, but they lack the practical know-how to get code off the ground.
I think they key factor is the second one: seeing code as an object to be studied in its own right. One thing I love about computer programming is the importance of beauty. You work at your code to eliminate spurious complexity, to make it clearer, to make it smaller and easier to manipulate. And since code is the embodiment of your ideas about how to solve a problem, refining code goes hand in hand with a simpler and deeper understanding of the problem you’re solving. The simplifying impulse is not unique to computer programming, but computer programming makes simplification more critical than other fields.
So, I think that the main job of the computer programmer is to reduce the complexity of methods to solve problems. It’s somewhat troubling that under that definition, most of us are failing miserably.
If we were not in an industry where there’s money to be made, if we had all the time in the world, computer programmers would be zen masters.