I’m your next potential dream boss. I run a cool, rapidly growing company in the digital field, where the work is interesting and rewarding. But I’ve got to be honest about some unfortunate news: I’m probably not going to hire you. … If you want to survive in this economy, you’d be well-advised to learn how to speak computer code.
— Kirk McDonald, president of PubMatic, writing in the Wall Street Journal, 10 May 2013
This is another article beating the “everyone must learn to code” drum. Employers can’t find enough people with programming skills, schools aren’t turning out enough engineers, jobs at these cool companies are left unfilled because American students are too lazy or short-sighted to spend a summer learning “basic computer language.”
If only it was that simple. I have some complaints about this “everyone must code” movement, and Mr. McDonald’s article gives me a starting point because he touched on so many of them.
A dilettante is not a programmer
That isn’t writing at all, it’s typing. — Truman Capote
Learning a little bit of programming is probably worse than not learning it at all if you are going to be working with professional programmers. Anyone who has worked in the software business has had to deal with a manager or marketing or sales person who took a BASIC or Pascal class back in college. Although their exposure was shallow and short, they will refer back to it as if their mastery of a FOR…NEXT loop qualifies them to make decisions about programming projects. Consider Mr. McDonald’s example: “Suppose you’re sitting in a meeting with clients, and someone asks you how long a certain digital project is slated to take.” How exactly does knowing a little bit of Python help answer that question? I’d rather hire someone who said “I can’t tell you offhand but I will find out,” and then consulted people who can help estimate.
There are lots of people who have training and degrees in computer programming who can’t program: see Jeff Atwood’s article Why Can’t Programmers.. Program?. I can’t see how adding more amateurs to these ranks is a good thing. I specialize in debugging and fixing code that is abandoned or unsupported by the original programmer, so I see plenty of what happens when someone who half-understands programming tries to develop real programs.
Programming languages are not programming
Teach yourself just enough of the grammar and the logic of computer languages to be able to see the big picture. — Kirk McDonald
The grammar and logic of computer languages are not the big picture. Programming languages are not the hard part of programing; not even the most important part. Programming is methodically using software to solve problems — business problems, rocket guidance problems, selling ads online problems. Programming languages and APIs are tools to write programs: they aren’t programming. By analogy you know you are in a group of amateur photographers when they have $3,000 cameras but don’t know what an f-stop is or how it affects depth of field. Professional photographers talk about composition and lighting, not camera features.
Good programmers can construct, hold, and analyze complex models in their head. They can translate business requirements into code. They know how programming languages and software tools can be applied to solve a problem.
Not everyone has the talent or inclination to program
I never learned to skateboard. I can’t dance. I can’t play a musical instrument. I struggle learning foreign languages. I know people who can do those things well. They apply themselves because they are interested and motivated, in the same way I applied myself to computer programming, for years, until I got good at it. I used to tutor college students and teenagers, and I learned that very few people find programming interesting or fun. Students sit through the courses because they have to. Their experience paying me to write their Fibonacci sequence assignment while they tried and failed to understand recursion will be cited later in their career as programming expertise. Maybe they will estimate important projects based on that half-remembered exposure to Visual Basic.
I’m not saying programming should be exclusive. I’m all for the kind of curriculum upgrading and partnerships with business that Mr. McDonald supports. Anyone who wants to learn programming should be able to, and experienced programmers should help and mentor. But let’s not kid ourselves that everyone wants to program, or will have the combination of talent and interest to get good at it.
It’s setting people up to fail
Most people who try to learn to program are going to fail or lose interest. Telling high school and college students and job seekers that they don’t have a chance because they didn’t learn to “speak computer code” is creating a phony bar to entry. At best it’s a distraction, like business students forced to take a programming class they will forget about. At worst it’s another demoralizing episode—like trigonometry was for a lot of us— where students are told they must master something that most of them will find uninteresting and difficult and inapplicable to their life.
In most jobs some level of familiarity and comfort with computers and technology is required. But you don’t need to know how to write code to do most jobs. I’ve worked in ad agencies and most of the employees didn’t program but could do the job they were supposed to be doing just fine.
Programmers have worked hard to learn their skill
So the book can only be talking about a superficial familiarity, not a deep understanding. As Alexander Pope said, a little learning is a dangerous thing. — Peter Norvig
Suggesting that just anyone can learn programming in a summer spent with Python tutorials and getting “acquainted with APIs” trivializes the amount of real time and effort required to learn programming. Peter Norvig wrote Teach Yourself Programming in Ten Years, and I think he got it right. Malcolm Gladwell came to similar conclusions in “Outliers.” As a professional programmer with 35 years experience, much of it continuously upgrading my skills, I’m a bit offended at the suggestion that everyone and their mother can be programming after watching some videos online.
The idea that programming is something anyone can learn if they just sit down with a book and type examples is not just offensive to programmers—it’s a dangerously misleading idea for management to hold. It feeds the idea that programming is a rote skill that can be trained into anyone, and that programmers are therefore more or less interchangeable. Many of my friends and almost all of my colleagues are programmers, but I would flail for a while trying to do their jobs if I was rotated in as a new “resource” or headcount. Programmers tend to specialize. Our underlying expertise and experience, and our innate interest in programming, means that we can do another programming job better than someone fresh out of school, but we aren’t interchangeable.
So what do I tell my kids?
I tell my own kids to invest in learning useful skills, whether the skill is programming, plumbing, writing, or fixing cars. Learning any skill well enough to make a living from it takes a lot of time and commitment. I also teach them that credentials are not the same thing as expertise, and the more competitive the job market gets the more skills and experience will be valued over credentials, especially as we figure out how degraded a lot of credentials really are. I teach my kids that they can learn anything they are interested in, but I can’t make them interested in any specific thing. And I tell them to be skeptical of advice like “Everyone must learn to code.”