Tuesday, May 15, 2012

Matters of more substance...

I was having a discussion today with the inimitable Mr. Teacup over on Twitter. I decided to summarize my thoughts in a less compact form, thus also giving him room to respond in more than 140 characters, and perhaps we can have a pleasant discussion. Or a well-reasoned unpleasant discussion, or who knows what, but at least we'll have room for it.

I don't know much of Mr. J.W.R. Teacup, Esq., but he has generally proven to be a well read and thoughtful dude, albeit perhaps further steeped in Marxist theory than I normally go for. (I'm more for pu-erh, or a nice chamomile. Marxists are often terribly bitter when oversteeped, although they add a pleasant flavor when part of a blend of other thinkers.) He is not, to the best of my knowledge, an engineer of any flavor, although it's quite possible. Which brings us to the current topic of discussion.

We were both holding forth on a subject somewhat near and dear to my heart, the question of whether everyone in the world should learn to code. He initially pointed out the post by Jeff Atwood titled "Please Don't Learn to Code" in which Jeff, a programmer himself, rightly points out that most people will never need to code, will be terribly bad at coding, and probably ought to focus on other things in life. All of which I hold to be true. However, I still believe everyone in the world should learn to code.

Actually no. I don't believe that. Here's what I do believe. Everyone in the world should be exposed to the practice of logic, of critical thinking, of problem decomposition, of forming hypotheses and testing them by painstakingly changing one variable at a time. The reason why I advocate for programming over any other science or engineering discipline is as follows. Computers are ubiquitous. Computers, at least these days, are pretty much unbreakable to a novice (ah, those halcyon days of setting IRQs by hand!) You can make a mess of things in your little sandbox, but a reboot will fix almost anything you may have done short of deleting your hard drive. Code is highly repeatable, unlike frogs. Type the same line of code 10 times, and it will do the same thing. And the behavior of your code is not already known, unlike the laws of physics, so you can't cheat by looking it up on the internet or in the back of the book. And you don't even need to know algebra!

This makes programming a superb microcosm for teaching and demonstrating the principles of certain types of well structured thought at a fairly early age. I will cheerfully agree that most people will suck at writing code. However, I believe that the process of learning how to write code will make them better people in a fundamental way, similiarly to the way that learning to critically read Stendhal will make them better people, despite knowledge of Stendhal being one of the most useless things known to man. The act of critical thought in and of itself, the ability to analyze, dissect, and be aware of one's own assumptions is a key part of an education, and one that I think is sadly lacking from both engineering and the liberal arts. Engineers avoid literary theory, claiming it's full of unwashed anarcho-Marxist hippies, literary theorists decry engineering as an oppressive tool of patriarchy and false consciousness, and both sides lose out on key intellectual tools.