Wednesday, 6 August 2014
This weekend I was reading The Wall Street Journal's website when I found an article by Christopher Mims with the provocative title Computer Programming Is a Trade; Let's Act Like It. Since I make my living as a software engineer, my first instinct was to get defensive about my chosen line of work. Then I read the article and concluded that the author is mostly right, but not for the reasons he thinks.
The author's thesis is that because programming is easy and college is hard, we as a society should prioritize skills training, because it doesn't take an advanced degree from MIT to bang together an app that mostly works. This is strictly true: a bright grade-schooler can follow the right tutorials to bang out a functioning game or app or website. After all, programming is little more than typing, right? And so is literature -- if you give enough monkeys enough typewriters, eventually they'll type out the complete works of William Shakespeare, or a column suitable for The Wall Street Journal, but that doesn't mean they're literary geniuses or journalists.
Just as writing is more than typing, programming is more than just writing down programs. Computers are cantankerous beasts, prone to fits of rage in the most mundane circumstances. Modern computing is built as a Tower of Babel of abstractions and metaphors -- and every abstraction leaks by failing to fully contain the ugly details of the implementation below. Working at any particular level of the tower requires detailed knowledge of the levels above and below, so that one knows how they work and how they break. All of this takes experience and training, and the knowledge to ask the right questions. My engineering degree gave me an exhaustive survey of computing from bottom to top: from the silicon transistors past the logic gates through the operating system up through networking and graphics and AI. There's nothing sacred about the degree -- these days there are plenty of great resources available online -- but it did package it up neatly, and answered questions I didn't even know I should ask.
Great literature demands a breadth of life experiences, and great programming demands a comprehensive knowledge of the machine. But even more, great literature and great programming demand a diversity of experiences.
Copyright 2014-2015 Ted Logan / firstname.lastname@example.org