Dave Winer, an early blogger, developer of syndication tech like RSS, and personality of some influence in the tech world, has a new post out arguing that learning to code won’t make you rich or powerful.
At face value, that certainly seems to be the case. No, coding doesn’t inherently make you rich, but it certainly can. That’s not the key point I disagree with, though, it’s the second adjective. What learning to code definitely does do is make you powerful. Not the kind of power that executives wield in the boardroom, but the real kind of power in the tradition of scientia est potentia: knowledge.
What lies behind Winer’s post is a critique of the evangelical community that has developed around organizations like Code.org, Codecademy, General Assembly, Flatiron School, Hacker School, etc., which have profited from a shortage of skilled programmers, and a rise in the profile of tech professions. Led by high-profile publicity in financial markets for firms like Twitter and Facebook, and supported by mainstream celebrities like Jobs-playing Ashton Kutcher, it has become increasingly common to aspire to change careers, or learn to code in one’s spare time. I know I’ve met a lot of developers recently who are in their second act of life, former lawyers, anthropologists, physicists, what-have-you. There is undoubtedly strong economic pressure to enter the software development world, so to enjoy higher-than-average salaries and a number of perks (despite Winer’s demonstrably false claim that most programmers eke out a “modest living” “if they make any money at all.” What? Has he seen the salary data on this? But I digress).
The promise of learning to code seems to be, as Winer observes, that one can enter a similar career track to multimillionaire startup founders. Of course, not everyone will be the next Zuck, but I find the underlying claim that therefore learning to code isn’t worthwhile quite troubling. While it’s obviously true that not everyone who learns to code will become rich overnight, or ever, that isn’t the primary reason to learn. Computational literacy, not just coding itself, is a skill which is valuable for many other reasons. We should not just learn to code, but to steal a phrase from MIT’s Mitchel Resnick, code to learn. Spend a few minutes and watch his talk, which puts it much better than I can.
The same kind of thought behind programming can help teach logic, critical thinking, problem solving, creativity, and a host of other skills. Data routinely shows that the US has fallen behind in STEM professions, and the state of childhood computer science education is abysmal. Not to mention the education system is increasingly focused on standardized tests which browbeat the creativity out of discovering new concepts. Computer science seems like a perfect place to concentrate our efforts. It is aggressively demanded by the market, is the subject of lots of groundbreaking research, and is fun and interesting most of all (when taught well)! Over time, I predict that the ability to understand the logic of systems one interacts with through code will become essential in even seemingly unrelated fields.
This has already begun to happen in the sciences and finance, where tools involving some programming are essential. Facility with R, Matlab, Mathematica and others is increasingly a requirement in many fields. I sent a draft of this post to my brother, a physics student, and he told me about a project he had to do involving software called LabVIEW. LabVIEW is a visual programming language for experiment design and data analysis in the sciences. My brother, who had some experience with programming already, had an easier time of it than some others, who found themselves having to learn to code out of context. This kind of occurence can only become more common.
I am of course, somewhat biased. I’ve been coding for most of my life. I learned to code as a child through a pirated copy of Microsoft QBASIC around age 7, and the similar BASIC on the TI-83+ calculator a few years later. I designed my first websites on AOL’s members pages in 1997 (I was born in 1989) and was receiving regular monthly checks for my web work by age 12. So it’s no big surprise that I went to Carnegie Mellon to study computer science (my problems with that program, though, will have to be for another blog post). I’m not stupid, but I’m not some kind of prodigy, I was just motivated and interested. My earliest programs were games and toys. They were creative and fun, I had no idea that I was learning math and computer science. When variables came around in 5th grade algebra, they were old hat. I’m sure that my early coding gave me a leg up in school; I even used BASIC to solve some 6th grade math assignments. I think everyone should have the opportunity to code to learn in this way.
Not everyone has to be quite like me to benefit from learning to code, though, nor should they. The important thing is being conversant with the conceptual landscape of code, much as we learn basic math and science as children. As Resnick says, not all programmers will become professionals, just as not everyone who can read and write will become authors or journalists, or everyone who can do algebra become mathematicians. If, as a society, we want to remain competitive with the world, and progress intellectually, we must embrace this way of thinking: Resnick’s programming as pedagogy.
I sometimes worry that in the world of walled gardens like iPad app stores, there are no longer opportunities to download something like QBASIC and just play around. That’s why projects like Resnick’s Scratch are so important. Scratch is a simple programming language that allows the creation of Flash animations and games. If it had existed when I was a kid, I would have spent quite a lot of time with it. Hopscotch is another project with great promise in extending fun opportunities for learning to children. Some educational institutions are already embracing programs like these, but it should be more of an imperative.
Returning to Winer’s post, he suggests that instead of learning to code, we should tinker with servers. I think learning sysadmin skills can also be a worthwhile pursuit, and personally got interested in Linux when in high school. I don’t think that this should be done at the exclusion of learning to code or learning mathematics, though. These skills all go hand in hand, and build on each other. No sysadmin can survive without shell scripting, which is of course a kind of coding. Similarly, programmers with no dev ops skills will be challenged by deploy and build issues. The great thing about the open source community and modern tools like GitHub is that if you start learning a little bit of everything, the returns compound and accelerate.
That being said, if you had to pick one, learning how to code is a stronger conceptual framework than knowing how HTTP or Unix work. These are just specific examples of systems with lots of details to become familiar with. If you’re coding to learn, not learning to code, you’ll probably get more out of a generalized programming curriculum than you will out of an IT administration one. However, I do encourage everyone to try everything at least once. Even if it won’t make you rich, it can help you become successful in whatever you end up doing.