Yes, Do Learn To Code!

My usual pre-work routine is to walk the dog (working at home, this is my counterpart to a commute), pour my first cup of coffee, and then curl up for a little while with Google Reader. I don’t know if it’s because I’ve selected feeds that are too closely aligned with my values and personal agenda, but it’s really rare that I’ll read a post that is just so wrong that it makes me angry. Jeff Atwood wrote a post like that: Please Don’t Learn To Code

To those who argue programming is an essential skill we should be teaching our children, right up there with reading, writing, and arithmetic: can you explain to me how Michael Bloomberg would be better at his day to day job of leading the largest city in the USA if he woke up one morning as a crack Java coder? It is obvious to me how being a skilled reader, a skilled writer, and at least high school level math are fundamental to performing the job of a politician. Or at any job, for that matter. But understanding variables and functions, pointers and recursion? I can’t see it.

Look, I love programming. I also believe programming is important … in the right context, for some people. But so are a lot of skills. I would no more urge everyone to learn programming than I would urge everyone to learn plumbing. That’d be ridiculous, right?

On the contrary: being able to think computationally and algorithmically should be a fundamental skill that’s possessed by modern humans, whether it’s a skill that they use on a professional basis in their lives or not. Every day I have to deal with a world full of people who show little or no ability to think clearly, and some level of being forced to develop some chunk of code to the point where it works correctly has to be a positive thing for people to know how to do, even if they never do it again.

When she was in graduate school, my wife had to take a class that required homework to be done in a spreadsheet. I did my best (and failed) to teach her how to use formulas and macros, but then I’d walk back into the room and see her summing columns with a calculator and typing the value into a cell.

Atwood is right that the goal of programming is to solve a problem, but he makes it sound like that’s a dirty thing, and the highest goal of a programmer is to duct tape together pre-existing modules and collect a check. Leaving aside the question of where those modules come from in the first place  (coded up by elves, I suppose) too often that approach leads to systems that are limited to the capabilities of those off the shelf modules and even more limited by the duct tape developers who lack the capability, imagination, time, or foresight to go beyond those limitations. We’ve made a lot of money over the years gutting and replacing these systems, and maybe even more building systems for clients whose in-house developers told them couldn’t be built at all.

I didn’t even intend to write software — I studied composition in college, and had to learn to write code in C for an electronic music class. It was only after I had enough experience as a developer that I was able to build tools that were a perfect solution to problems that I had as a composer and musician. Learning to program made me a better composer by teaching me a different fundamental modality of thinking, and being a composer has made me a better programmer. If you can successfully write a four voice fugue using common practice harmony, I can teach you to write bulletproof multithreaded code (here’s an article on one of my first real products that was a multithreaded DOS app that had at the time been running 24/7 for a decade).

I believe that everyone should learn to write a little code, and play an instrument, and make things out of wood, and tend a garden, and cook, and, yes, do a little plumbing, too. They shouldn’t learn these things because they’ll use them every day to earn a paycheck, they should learn them because it makes them better thinkers, and better able to take care of themselves. On top of that — if vast empires were being built on top of plumbing the way that they’re being built on software, I’d say that anyone who was happy to ignore it as a black art practiced by wizards was making a big mistake. The value of acquiring a new mode of thinking isn’t affected by the fact that most people won’t need to use pointers or recursion on a daily basis.

When my wife and I had our first child, my germ-phobic wife had a very  hard time with the pediatrician’s assurance that it was okay for our baby to put everything in his mouth, and that doing so was part of how he would learn about the world. I think that the way I learn things is by writing code about them. I don’t know if telling people to not explore that is being elitist, or condescending, or what, but it definitely strikes me as being very wrong.

Edit: There have been many many other similar responses to Atwood’s piece. I think that my favorite one is by Al Sweigart: A Modest Proposal: Please Don’t Learn to Code Because It Will Damage Your Tiny Brain

Edit 2: …or a much less snarky one that takes us back to the ancient Greeks from Vivek Haldar (always worth reading): Executable Thought

Brett g Porter

Brett g Porter

Lead Engineer, Audio+Music at Art+Logic
Audio+Music development engineer. Always looking for excuses to write code. Tweets at @bgporter.
Brett g Porter


Music (composer/trombonist/software) + Ice Cream (making/eating). Lead Software Engineer @Artiphon. Creator of @tmbotg. Exec board @ he/him.
@timur_audio @jetbrains @clion_ide Excellent news! Congratulations! - 14 hours ago
Brett g Porter
Brett g Porter

Latest posts by Brett g Porter (see all)


Creative Commons License

This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.


  1. jodielocklear

    Thanks bgporter for this interesting and thought provoking post. I am currently in the process of making a career transition from teaching art to UX design. I just recently wrote a similar post on my blog: This is a topic that I feel is important, not only for people in the IT/web development/design community, but for all people in the modern world.

    In general, and as a teacher, I have noticed a widening gap between tech savvy digital natives and non-tech savvy digital consumers. Without a general/foundational understanding of programming I believe that gap will continue to grow. In response to this post and your post concerning design, my advice to you is to get a foundational understanding of design under your belt. If you haven’t yet – check out Daniel Pink’s book, A Whole New Mind, Why Right-Brainers Will Rule The Future. Interesting read and maybe another perspective on this conversation.

    • bgporter

      Yeah, I’m a fan of Dan PInk in general and that book in particular.

      One other concern I have in this area (but forgot to put into the post) is that how we react to this is important. There’s an old article somewhere (I’m 90% certain that it was by Alan Kay) talking about the problem by imagining a parallel universe where society decided that everyone had to be ‘musically literate’ without a more specific point than that, so they invested millions into putting pianos in every classroom, but only gave the teachers a week of training. In a week, you can’t do too much more than teach someone to play ‘Chopsticks’. Instead of musical literacy, his thought experiment ends up with a nation that has Chopsticks literacy.

  2. cpenney

    To me what your argument suggests is that programming should be an important part of any liberal- arts based education, and I couldn’t agree more. Programming is a modern extension of both logical and analytical thinking that simply wasn’t available a generation or two before. It has flavors of rhetoric as well: how does one best state thier case?
    Programming has always had a creative aspect similar to musical composition, which led to my development as a programmer as well. You have a goal in mind ( albeit in composition a much more abstract goal than in most programming )’ you have certain tools or instruments ( and usually some methodology that provides constraints ) available to accomplish your goal, and then you have the choices of how to best organize and combine those tools using your chosen methodolgy/ constraints in a manner which achieves that goal.
    Here’s another integration of learning to program that’s truly gone much farther than I would have anticipated: Seymour Papert’s seminal work “mind storms” from the ’80s foresaw a world where children could learn the basics of mathematics, geometry and analytical thinking using the simple interactive programming language called “logo” and an interactive turtle they could manipulate via mathematical commands. But what do I see know with my 10- year-old son? He’s architecting worlds through minecraft, not just playing the game but by integrating and learning to program mods and plugins with Java; he’s literally learning programming to create his own virtual world. This is the way kids are learning to manipulate their world, using pure reason ( although with some pretty random results ). Where’s that going to lead? Heck if I know, but I do believe he’s exploring laws that govern cause and effect that extend well beyond his own simple desire to control his world.
    Then there’s the social and leadership skills he learns as he moderates his own mc server; I’m still trying to I figure out how I fell about that…


  1. Khan Academy Tackles CS Education | Art & Logic Software Development Blog - [...] developers differ (in ways both positive and negative) from self-taught developers. As I’ve said here before, I believe that…
  2. Learnable Programming | Art & Logic Software Development Blog - [...] Yes, Do Learn To Code! (May 15, 2012) Share this:Like this:LikeBe the first to like this. This entry was posted…
  3. Greatest Hits (Vol. 1) | Art & Logic Blog - […] Yes, Do Learn To Code! […]