A New Breed of Programmer

November 30, 2008

Technological breakthroughs can enable new groups of people to compete successfully. For instance, the introduction of machinery in the industrial revolution did a lot to put women on equal footing with men, by reducing the advantage of physical strength. Something similar is happening in programming right now.

Patience, carefulness, and the ability to remember many facts and details were probably essential traits for successful programmers back in the early days of computers. Mistakes cost a lot of time when you don’t have a computer of your own and have to wait for the result until the next day.

After the arrival of the minis and personal computers, every programmer could have his own machine. This made a new style of programming possible, with rapid feedback and continuous experimentation as critical ingredients. Using Lisp you could even alter your programs as they were running. Getting everything right on the first try became less important under the new circumstances, and so the set of personality traits needed to be successful shifted.

The backlash against AI took Lisp and similar languages down with it, and in the mid-nineties almost everyone was using languages that had retained the edit-compile-link-run cycle. At the same time, code bases were growing larger and once again programmers found their workflows interrupted by long periods of waiting; This time not for access to a terminal, but for the compiler and linker to finish.

The arrival of Java and the Web turned the tide again–Java by moving Lisp concepts such as garbage collection back into the mainstream, and the Web by alleviating the need to memorize facts. Once again, the advantages meticulous and detail-oriented programmers had over their peers were reduced.

I think the circumstances have changed so much that the best programmers today are a whole different breed from the elite of the early days. The benefit of being able to keep lots of details in mind is much smaller now that you can find almost anything with Google in just a few seconds, and with new languages and tools that let you try many different approaches rapidly. In fact, I think some of the traits that once defined super programmers may even become liabilities. If you can find detailed information about anything instantly just by knowing the right keywords to search for, then trying to remember everything yourself is wasted effort. Just like a lossy compression algorithm can achieve higher compression rates than lossless ones, a less detail-oriented person has greater free capacity for learning abstract concepts than those who attempt to remember everything.

6 Responses to “A New Breed of Programmer”

  1. JosefA Says:

    The brain is for processing, not storage. Computers are good at retaining stuff,the brain is good at compartmentalising it and employing it.

    Is that what you’re driving at?

    I had a colleague once who maintained that a good education should do nothing more than give people ever greater capacity to process knowledge.

  2. Stefan Says:

    Yes, and also that the skill set required from human beings changes as we are able to delegate more work to computers.

    You still need factual knowledge, it’s just that you can “store it” in a more abstracted form and use Google to sharpen it when needed.

  3. CarolN Says:

    I agree with your general point; I do think programming is being opened up to many more different kinds of people and things like being able to get errors sooner increase productivity and decrease the need to get things like syntax exactly right the first time.

    Even though it is no longer necessary to have every detail of programming knowledge in your head, it’s still necessary to know and remember:
    – how to fix an error when you get it
    – the keywords that you need to search for (ie the name of the function you can’t remember the arguments for)
    – the concepts that exist and should be used (ie there’s probably already a function for this, i just have to find it; or this situation is best handled by using recursion)
    – where the most reliable and accessible places for information are (ie looking up something on W3C.org may be faster and get you the definite correct answer as opposed to going on a google goose chase)

    So yes, different kinds of knowledge– but remembering certain kinds of things is still important.

  4. Stefan Says:

    CarolN: I agree completely.

  5. Nico Says:

    Most things can be found in just seconds with the help of Google, if you know what search terms to use. Still I think a good programmer should know the correct syntax instead of knowing how to find it online.

    I’ve passed certification exams that required you to know things like command syntaxes with all parameters by heart. It was a hard study, and industry peers thought I was crazy for even trying to get certified. I feel that after learning all that stuff and getting certified, I could do my job more efficiently.

  6. Stefan Says:

    I agree a good programmer should remember the syntax and know how to use his tools efficiently. It wasn’t syntax I was thinking about when I wrote the article.

    I’ll give you an example of what I had in mind. Instead of memorizing the implementation of red-black trees, one should learn the concept of trees in general and the time and space complexity of the most common variants. Only when you need to implement one yourself do you need to have a more detailed understanding.


Leave a Reply