Jeff Atwood wrote a provocative blog post entitled Please Don’t Learn to Code that I wasn’t going to respond to because it looked a lot like trolling to me. What I think, though, is that Jeff is conflating the suggestion that people learn to program with the suggestion that everyone should be a software developer. In the end, though, the post is just a mess.
I’m not for falsely equating programming with essential life skills like reading, writing, and math, or with the things Jeff suggests people spend time on instead — learning how things work at a “basic level” or becoming better communicators. That said, I would encourage people to learn to program for a number of reasons.
The first is that much of the world is run by computers. Learning to program involves learning how computers work at a more basic level. Even just knowing how the Web works at a technical level is helpful, if only to know if something is broken on a site you’re using or on your local computer.
In some ways, the relevant analogy is to auto repair. Knowing how your car works and how to fix some things doesn’t make you a mechanic, but it does make it less likely that you’ll be stuck on the side of the road with no recourse other than roadside service, and also helps to ensure that you won’t be exploited when you have to deal with a mechanic.
There are many people out there who work with software developers who are not themselves software developers. Understanding how to program makes it easier to communicate with them.
The second thing is that learning a little programming can make you better at your job if your work involves using a computer at all. Here’s my favorite programming story of all time. I used to work with a software developer who started her career at a chicken processing plant in Arkansas. She started not as a programmer but as an administrative assistant. Back then, they didn’t do word processing, they typed on typewriters.
Even though she had no formal training as a programmer, she figured out that the electric typewriters they used were programmable, and learned how to program them to complete various forms rather than typing them in by hand. Her boss noticed her good work and had her learn how to program another computer they had in the office. Eventually, he encouraged her to quit and go back to school to become a professional software developer.
Had she not been a smart and curious person who figured out that programming would make her job easier, she may still be working in that chicken plant. Today programming is now a more fundamental tool of automation than it has ever been. How many people could eliminate redundant work if they knew how to write scripts to collect data for them and schedule them to run nightly? How many people struggle with terrible Web applications that could be improved with user-created style sheets or Greasemonkey scripts? Programming empowers you to remove annoyances from your daily life.
The third reason is that learning to program teaches you a different method of problem solving than most people are familiar with. Learning to program teaches you how to break down problems into familiar components and then meld those components together to create a solution. Programming is not the only way to learn those skills, but it’s a good way to learn them, and that skill is widely applicable to every day life.
I wouldn’t make the argument that we make programming courses mandatory in school, or that everyone should learn to program, but I would encourage anyone who has the slightest interest in programming to pursue that interest.
May 15, 2012 at 6:00 pm
Hear, hear! I read Jeff’s post earlier today and found myself disappointed and disagreeing even though I couldn’t really articulate why. You have done so splendidly. Thanks!
May 15, 2012 at 8:40 pm
Sadly, I have to say I’m on Jeff’s side overall. The above sounds too much to me like “Everyone should learn The Classics Of Western Literature, because they’re the distilled essence of humanity. If your job involves dealing with people, as almost everyone’s does, then The Classics will give you the background to appreciate the motivations and drives which make up all human interactions. (Insert success story here)”.
And if one wants to understand how to deal with software developers (quite an art in itself), that time is far better spent learning some sort of social psychology rather than learning to program.
I think Jeff’s deflating some of the hype around programming as a jobs solution and also intellectual solution to what ails you. I have a saying, you can’t lie to the compiler and be buddies with the CPU.
May 16, 2012 at 8:24 am
“Her boss noticed her good work and had her learn…”
Today, HE would have been fired for that.
May 16, 2012 at 10:39 am
Like I said, I don’t think everyone should learn to program. I just don’t think anyone who wants to should be discouraged from learning about it. Learning how to program isn’t going to hurt anybody.
And while there may be a lot of hype around learning to program, I don’t see us minting massive numbers of programmers. The marketing may be getting better (or maybe not) but the conversion rate is still pretty low.
May 16, 2012 at 7:10 pm
Jeannette Wing, a professor at CMU and formerly head of the Computer and Information Science and Engineering Directorate at the National Science Foundation calls it “computational thinking” and recommends it as a key life skill: http://www.cs.cmu.edu/afs/cs/usr/wing/www/publications/Wing06.pdf
The National Research Council has had two workshops on the topic. Reports are here: “Scope and Nature of Computational Thinking” http://www.nap.edu/catalog.php?record_id=12840
“Pedagogical Aspects of Computational Thinking” http://www.nap.edu/catalog.php?record_id=13170
(I don’t have a strong opinion about this particular topic one way or the other; just noting that the discussion is happening elsewhere, too.)
May 17, 2012 at 3:54 pm
Jeff Atwood comes up with some really dumb reasons to oppose more people trying to learn something new.
Whether it’s programming or any other difficult field, it is a good thing when people want to learn it. Even if they never get past the basics, increased technical literacy is a good thing.
Atwood asks, “Have you researched the problem, and its possible solutions, deeply? Does coding solve that problem? Are you sure?”
I ask, how are these people going to know whether coding can solve their problems if they never learn how to program?
As someone who has made a living teaching complete beginners Java, I’m glad this learn-to-code movement is springing up. Programming is a lucrative and valuable skill and some people will discover they have an aptitude for it — and that they love doing it.
And even for those who aren’t suited for it, they’ll learn some problem solving skills that are useful in other endeavors.
May 17, 2012 at 11:27 pm
Rogers, I think a substantial part of the reaction to Atwood is the grand Net tradition of slamming a strawman. I don’t see him as saying people shouldn’t learn to code as if it’s intrinsically bad. Rather, it’s likely to be a waste of time. When you ask
“how are these people going to know whether coding can solve their problems if they never learn how to program?”
Well, how are these people going to know whether running off into the woods and having a drum circle and dancing naked under the stars can solve their problems unless they take part in a Nature Ceremony?
If you want to go camping, great – but as a solution to one’s problems, it’s pretty useless. The sort of stuff one learns in beginning coding is also pretty useless in the real world. And at worst, it actually is dangerous, since it gives one overconfidence and arrogance in what one can control.
What’s going on here is stroking egos of coders, and I say that as a long time programmer.
May 18, 2012 at 12:00 pm
Learning the fundamentals of a programming language is hardly useless.
There are casual programmers who solve problems with scripting, macro writing, shell programming, and simple software.
There are managers and marketers of programmers who get more out of their coders.
Years ago, I was business partners with someone who learned to code so that he could market software better. He’s still doing that 15 years later and I think it was one of the keys to his success.
As for drum circles and dancing naked, how do you know that’s useless to solve problems? I think that would depend on what the problem was.
May 18, 2012 at 3:57 pm
The examples you give are programming-related. Being a casual programmer is already assuming the conclusion. Neither managers nor marketers need to learn the specifics of coding for their jobs – do you think it makes for better programmers to learn to write a business plan or a press release? (note, you probably can do these, I’m asking, would you say “Programmers, take a course in business planning / press release writing – there are programmers who get more out of managers and marketers that way”).
Note, the question is not the trivial is it better to know X than not to know X? That’s almost always true in a simple way. It’s more at “Is it likely that X will ever be useful to you, and if it ever seems that it will be, can you learn it then?”. Car repair arguably ranks higher than coding in average utility, but there’s no learn-to-be-a-mechanic hype.
The example of Nature Ceremony is that a formulation – how will you know if something solves your problems until you try it – can be used to justify almost anything, and hence viewed with particular skepticism (“How do you know blogging won’t make you rich and famous if you never start one?”).
May 19, 2012 at 9:59 pm
“do you think it makes for better programmers to learn to write a business plan or a press release?”
When I was a full-time programmer in my early 20s, I was in dire need of skills related to the work that did not directly involve coding. Anything I could have learned about what my project manager and marketing reps were doing would have helped me considerably.
When I was a full-time newspaper journalist, I could have used skills related to the editing and publishing of the paper.
I missed out on a lot by defining my responsibilities as narrowly as I did. I think I was afraid that if I learned those things I’d be dragged against my will into management.
Is learning to be a mechanic not hyped? A lot of my male peers growing up became gearheads who took cars apart and put them back together for fun and talked about tinkering with them incessantly.
Lots of skills are hyped for beginners. Programming is hardly exceptional in that regard. Look at cooking channels on TV.
There is no bad I can see in people being encouraged to try programming, any more than there’d be a downside to people being encouraged to cook.
May 20, 2012 at 8:40 am
Atwood’s post starts off with the plug for Codeacademy and codeyear. There’s no corresponding similar push for a Caracademy and caryear, or a Cookacademy and cookyear (I’m reminded of the old cheesy ads in magazines about learning to be a technician). There’s a context here that shouldn’t be abstracted away to the trivial “people being encouraged to try …”. It’s tied into a certain hucksterism, as he shows with examples. You’re completely correct that coding is not the only activity in history where this has even been done (I’m thinking of other old ads “Can you draw? If so, buy our drawing course …”) But that argues it’s wrong to do it here too, for similar reasons as previous examples.
Looking only at such “encouragement” as if it existed completely apart from the politics and profits around it ignores the hype and diversion which is being criticized. That’s the bad.