Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?

Jeff Atwood has it wrong. He's a writer and programmer that I deeply admire. But his last post, Please Don't Learn to Code, is simply wrong. At least as "wrong" as someone's opinion can be. That is, it rests on a deep equivocation and a deeper underestimation about human thought.

Jeff writes, 'The whole "everyone should learn programming" meme has gotten so out of control ... The "everyone should learn to code" movement isn't just wrong because it falsely equates coding with essential life skills like reading, writing, and math. I wish. It is wrong in so many other ways.' He goes on to enumerate the ways that it is wrong to believe everyone should be able to program.

Now, Jeff is certainly right that not everyone will get jobs as programmers and not every should aspire to this end. In truth, as a pure profession, programming is really only for people who enjoy being skewered between the horns of obsession to detail and ever-changing success criteria. That's beside the point. The question isn't: "Should everyone renounce their careers, put up a poster of Knuth (are there Knuth posters for sale by the way?) and sprout a neckbeard?" The question is: "Should everyone learn to program?" Jeff only gives lip service to this important difference. He equivocates on the point to reinforce a knee-jerk reaction to the recent faddishness of learning to code.

He mixes up points like "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?" (the professional benefits of programming) with points like "Being able to get around on the Internet is becoming a basic life skill, and we should be worried about fixing that first and most of all, before we start jumping all the way into code" (the personal benefits of learning to program). By wandering back and forth between these poles of personal and professional he avoids having to take the argument that learning to program may be tremendously important personally even if you cannot be directly employed to do it.

Jeff equivocates because he has missed the point about why we learn. We learn new things because our perception of the world is shaped by our mental catalogues of what is possible and what it useful. We constantly filtering out perceptual noise on the criterion that it doesn't help us achieve some goal or end. Just think of when you learn a new word. You suddenly hear it everywhere. Not because everyone else just learned it too, but because you had been filtering it out. It didn't help you get around because you didn't know how to use it.

If you don't know how to program, you filter out all parts of the world that involve programming. You miss the loops and divide-and-conquers of everyday life. You cannot recognize programming problems without the understanding that outlines these problems against the noise of useless or random information. Sure, when I see a loved one slavishly reordering a list of contacts by hand, I recognize a programming problem. It's second nature to understand the reason that the form didn't submit or that page couldn't load. Yes, I can "see the code" behind my phone and know that poor memory management, not the mercurial favor of the Gods caused that app to crash hard. But this is only because I understand programming. I am only able to function in this digital wasteland of convenience -- and not be dragged along sipping a slurpy -- because my search space for problem solving and perception has been expanded by my learning to code.

Now, Jeff mentions that we should have some base level of digital literacy. But I am hard-pressed to figure out how I would explain REST in a vacuum (how I explained REST to my wife notwithstanding) or describe what's causing that Android phone to throw a "null pointer exception". I don't know how to teach someone to recognize that a problem is caused by or can be solved by programming without teaching them programming. Maybe that makes me a bad teacher but I find that the abstract notion of, say, an if-then statement is far more sophisticated than, "Hey try this 'if' and a bunch of curly brackets and parentheses in your console".

Jeff writes, "But I can also recognize plumbing problems when I see them without any particular training in the area." This isn't right. He may not have had formal training (the professional/personal equivocation again) but he has been trained by an unruly digestive movement, a low water tank and the horrible things 18-22 year-olds do to and around toilets. My dad showed me how to fix a broken chain in the tank. Before I learned that, toilets had three states: working, cloggged and broken. After learning to fix the chain, I added a new state to which my toilet-perception could resolve: loose or broken chain. Again, the ability to take in, cut up and categorize the world is a product of the things learned.

Jeff makes some good points in his list of reasons why people shouldn't learn to program. Unfortunately, none of them are relevant:

  • More code is not necessarily desirable: Jeff goes on to refute this in the next bullet point. This is a strawman. No one wants to write lines of characters. Everyone wants to solve problems and the desire to create code for code sake is a problem in the profession as well as outside of it.
  • See above.
  • It puts the method before the problem: this is cognitively wrong. You can't figure out your problem without the understanding of what possible problems there might be. Learning these possibilities is learning to code.
  • Most programmers aren't good enough to do their jobs: So we shouldn't have new ones? That's like saying the solution to schools failing because of teachers underperforming is to stop training teachers. As if we can eradicate bad teachers/programmers by simply eradicating them all.
  • You might not get rich and famous: We didn't start programming because we loved money. We are smart enough to become bankers or silk merchants. We became programmers because we are obsessed with learning and changing and making machines learn and change.

In summary, learning to program is not the same thing as training for a programming career. Learning new skills opens up new perceptual avenues and cognitive spaces. I'm learning to sew right now, not because the world needs another tailor but because I want to be able to recognize quality in clothing and create pieces that I can't find. Novice coders feel the same way about their digital goods and should be encouraged to continue. Learn to program.

@thedrewbisset
Copy link

thedrewbisset commented May 15, 2012

But I think what's wrong with Atwood's perspective is the idea that the "learn to code" movements aimed at laypeople are attempting to turn them into a crack Java coder - they're not.

@rymai
Copy link

rymai commented May 15, 2012

I totally agree with @schell here:

Why does Atwood care what people do with their free time? It seems there are a lot of assumptions being made about the motivations of these aspiring programmers.

In my opinion programming can be a hobby like anything else, I don't see what's the point discussing this!

@esmooov
Copy link
Author

esmooov commented May 15, 2012

@cperkins These are interesting points but I would like to submit you to a similar quiz.

  1. Did I say that Mr. Atwood said learning new things is bad?
  2. Did I bring up computer literacy or did I address concepts imparted exclusively by programming literacy?
  3. Do I believe that problem solving is a superset of programming, viz. that all problems need computer programming to solve?

I am not disagreeing that math and reading are more essentially, especially because they are preconditions to learning computer programming.

I am arguing that programming can give you a broader analytic toolset to work from when perceiving and synthesizing the world and that, in itself, is a virtue of learning programming. This is not different than learning most things, actually. Programming just has the added utility of being able to service and ever-more digital world.

Your last challenge is another good one. It's true, that really is the challenge of refuting Mr. Atwood. So, I'll offer two responses: the dodge and the less satisfying, realer answer.

The dodge: This isn't really what the article ends up attacking. It attacks code year culture and the evangelism about coding and the expectation of a coder's salary. It doesn't actually wind up arguing why Bloomberg would be hurt, more than helped, by learning to code.

The less-satisfying, realer answer: He employs programmers to work in his mayors office. It would help him manage project expectations, know what is possible to ask of his digital team, know how to better cater to the east coast tech scene that is bringing his city lots of money. Sure, he could have advisors that do this but, in the example, he is a crack Java coder. He knows data structures inside and out, he has the institutional knowledge of the long hours of focused terminal activity, what the human costs and psychological pressures of coding are. Also, he could say in detail, I'm going to want my constituents to have complete transparency of my administrations agenda. To this end, I require easy to plug-into APIs for download x,y,z. Perhaps it is a stretch. If so, see my dodge. Ha!

@RLuckom
Copy link

RLuckom commented May 15, 2012

I'm someone who is learning to code, and I can see both sides of this argument. I think Jeff is wrong in many ways, but I think his error is one of perspective rather than logic. I've actually written about an instance in which the process of learning to code showed me something about the world that I wouldn't have been likely to grasp otherwise (http://raphaelluckom.com/?p=24).

I work as a writer, not a coder. And I've often had a similar idea to Jeff's--I've wanted to say 'not everyone should spend much time worrying about spelling and grammar past the amount they need to be understood.' As a writer, I can say that a lot of grammatical rules in English are arbitrary, contested, and unimportant. What's correct depends on who you ask and when. For most jobs, It Just Doesn't Matter (tm) whether you can write a five-paragraph essay that would pass even a high-school freshman class.

But where I stop short of saying 'don't learn to write' is when I realize what writing has given me--the way it has affected my view of the world. I love that language evolves and changes, that people find so many new ways to understand and make themselves understood. I love that I can understand both 'bff' from a text message sent in 2012, and the way Sherlock Holmes would describe Watson as 'my intimate companion' or some such in a Conan Doyle story. Those are remarkable linguistic constructs that tell me a fantastic amount about the people and societies that produce them. Would I think less of someone who didn't appreciate things like that? No way. There are far too many interesting subjects in the world for everyone to be familiar with my pet obsession. But would I discourage someone from learning that on the grounds that they don't need it? Of course not. And that's where I see Atwood's point--he's taking a subject that is in some ways his pet subject and saying, "look, this works for me and a lot of other people, but if you aren't inclined to it yourself, it's not a wall you should be too concerned with banging your head against*." He's not arguing that learning to program is bad, but that it's overhyped and shouldn't be forced on people who don't take to it. I couldn't comment on the overhyped part, but I agree that it shouldn't be forced on people who don't incline toward it.

*To prove an earlier point, I think it was William Zinsser, who, in his classic On Writing Well, wrote, "I think a preposition is a fine thing to end a sentence with."

@Draiken
Copy link

Draiken commented May 15, 2012

I don't understand why people get so upset by the truth. Truth is 99.9% of the people that "learn" to code by this campaigns end up learning just the top of the iceberg. They don't have the other stuff that is necessary to fully understand programming. Let's say 50% of those comming from this "courses" start to looking for jobs in the IT area. What good does that make? We'll have even more bad programmers and even lower salaries for the real programmers. It might not be the reality in USA but outside, even the good programmers suffer because of that. Maybe in the US all the good programmers get the salaries and recognition they deserve, but not everywhere.

This is why you don't see online courses to "learn to be a doctor with glowing badges!". People know they don't have the base skill sets needed to be a doctor, that's why they go to med school before they do that. When you say you can learn to be a programmer online, you're lowering the profession's standards and saying "anyone" can learn how to program. It's a lie people tend to believe more often than they should.

100% agree with Jeff. People should learn the basic of the internet and how it works, not how to program.

@cperkins
Copy link

cperkins commented May 15, 2012

@esmoov:

"I am arguing that programming can give you a broader analytic toolset
 to work from when perceiving and synthesizing the world and that, 
 in itself, is a virtue of learning programming."

I cannot tell from your last post whether you are backing up your position or backing away from it. A failure, perhaps, of my reading comprehension. But we've arrived at one of the legs of this table. In your quote above, are you saying that programming gives you a broader toolset ...like many other activities such as knitting, dancing, sculpture, and plumbing? Because if that is your position, then you should concede the point to Mr. Atwood. If programming is just one of many activities that will broaden the mind and make you see the world in a different light and think about things in a new way, then the whole Learn To Code evangelism has got to stop.

Or, are you saying that programming is fundamentally special, or important . If so, I would say that extraordinary claims require extraordinary evidence and the latter is absent. And before replying with evidence think about this: there have been some truly extraordinary thinkers in human history (like Isaac Newton or Plato) if you listed out the top 20 I doubt there is a programmer in the lot.

Like you and probably everyone who commented here I love programming and consider it to be my life's work and achievement. But I am under no illusions that programming is something that someone who is not inclined to it must learn. Nor do I think that programming has the monopoly on problem solving, or analysis. In fact I strongly doubt that if one was trying to learn problem solving that coding would even be a good way to go about it.

@esmooov
Copy link
Author

esmooov commented May 15, 2012

@cperkins I think you nailed the crucial point to be made of all this. I am indeed saying "saying that programming gives you a broader toolset ...like many other activities". But I don't think that I'm backing away from my point. I was just trying to make a broad point about perception and understanding that I think Jeff's piece missed. I wasn't trying to attack him though for failing to exalt programming. I could rewrite my piece all over about why you should learn to do anything. However, the one bit of "special value" I would give to programming is that it is not easy to learn enough programming by just being in the world. I mentioned elsewhere that you don't run into lambdas walking down the street or have to fix a leaky subprocesses or even hem your ratty old controllers. That makes it harder for us to broaden our perceptual/analytic horizons into programming without taking some time to explicitly learn it.

I don't really want to "concede the point" though because I maintain he has missed the why of learning to program and his argument had some holes in it. But I still think it was an important piece. And it got us talking about a lot of, in my opinion, interesting issues around pedagogy and language. Cheers!

@thedrewbisset
Copy link

thedrewbisset commented May 15, 2012

@Draiken:

What truth are you referring to? The truth that it's false to think "anyone" can learn how to program? How is that a truth? Have you done extensive empirical research on the matter? Are you some sort of cog-sci that has scientific backings for these claims? I think it's so hilarious when people try to further their opinions by slapping stupid labels like "truth" on it - couldn't make your points less worthy of being taken seriously.

Those disputing Atwood's view are doing so in support of the idea that there's more to teaching someone how to code than trying to jump start them into becoming programmers professionally.

Moreover, comparing this to learning to become a doctor is silly. Codecademy teaches a lot of good fundamentals, but last I checked, they don't try to teach you how to unit test, how to design complex systems, use version control or a score of other skills that ultimately contribute to one being a capable programmer professionally.

Conversely, as someone who doesn't hold a profession in the medical industry, just because I'm not a doctor doesn't mean there are no benefits to my having a better understanding of how the human body works.

I'm sorry but people preaching the idea that those democratizing this knowledge to the layperson are doing something wrong and should stop wasting people's time and offering false hopes need to get over themselves.

@Draiken
Copy link

Draiken commented May 15, 2012

@drewdev no... the truth is, if you read what I typed, that 99% of the people that learn programming without proper backings don't really learn how to program.

Why is it silly to compare it to a doctor's work?
Is software programming not essential nowadays? You can argue it doesn't save lives (even tho it probably does), but it's as complex as being a doctor.

I never said you shouldn't have better understanding of how programming works. But that is NOT learning how to program.

You learn how to prevent diseases, some simple treatments, but you're not learning how to be a doctor.

@thedrewbisset
Copy link

thedrewbisset commented May 15, 2012

@Draiken this is so funny to me because I did read what you typed and nowhere do I see any factual support for these sensationalized statements you're purporting as "truth". 99% of people who learn without proper backings don't really learn?! Where's the evidence for that? And more importantly, what constitutes a "proper backing"? Are you saying that unless you spend four years at a university then you're not a real developer? Last I checked Wozniak dropped out of college and Crockford graduated with a degree in Radio and Television. So these aren't "real" programmers?

And if a university program is not the only requisite for giving one a "proper backing" then what is? And more importantly, why is something like Codecademy not one of those things? Have you even evaluated the program they offer? In fact, have you even visited their site? Here's what I see them saying about what their program provides:
"Codecademy is the easiest way to learn how to code"
"Learning with Codecademy will put you on the path to building great websites, games, and apps."

Last I checked, opening up an internet browser and working through guided lessons covering some core concepts for what's involved in making our digital world tick is infinitely easier than enrolling in a university program or scouring the internet for articles and books on how to learn the fundamentals from square one - the right way, no less.

And in the second statement it sounds like they're saying that learning with them puts you on the "path", not that you just wake up one day with a bunch of badges for lessons you've completed and magically you're writing elegant software.

I guess what really fires me up about this attitude that people like Atwood and yourself are propagating is that before innovators like Codecademy started disrupting this space those that did want to code and lacked the means for a "proper backing" likely turned to places like W3Schools or copied and pasted a bunch of JavaScript they found wrought with global variables, eval calls, and no semi-colons. Is that what we want, more mindless developers posting stupid questions on StackOverflow and breaking the internet with crap code?

@Draiken
Copy link

Draiken commented May 16, 2012

@thedrewbisset
Copy link

thedrewbisset commented May 16, 2012

@Draiken - how quickly the language changes from "truth" to "opinion". I'm sorry you feel I'm "raging" at you. I thought this was a healthy discussion and at the end of the day I totally respect your opinions and those of Jeff Atwood. I just don't like it when people present their opinions as some sort of glorified truth. When people do make such assertions, I think it's fair to push back on them and I'm glad I've pushed back on you because it's clear you're judging this book by its cover based on the ones you've read in the past.

Codecademy covers a lot more than than what you appear to think and it's simply not a month-long endeavor - their program started at the beginning of the year and they're still adding new lessons each week. I don't think their site or sites like LearnCodeTheHardWay are really making these inflated claims that people are saying they are.about how becoming a good developer is as simple as pressing a magic button. What I think you and I can both agree on is the fact that great programmers emerge from hard work and dedication. The thing that's funny is that I think people like Zed Shaw and Zach Sims would be the first to agree with this - if you read their perspectives on bringing coding to laypeople I think you'll be hard pressed to find them trying to mislead anyone into thinking the learning process is simple, easy or quick.

What they are saying is that anyone can do it if they are motivated and willing to put in the time and I think Jeff Atwood is totally in the wrong to try to distort that idea for those beginners out there that truly want to learn.

@kybernetyk
Copy link

kybernetyk commented May 16, 2012

Atwood is a Visual Basic nerd. What do you expect from him?

@isomorphisms
Copy link

isomorphisms commented May 16, 2012

Great line: "In truth, as a pure profession, programming is really only for people who enjoy being skewered between the horns of obsession to detail and ever-changing success criteria."

@isomorphisms
Copy link

isomorphisms commented May 16, 2012

The question shouldn't be: "Do or don't code", but how much. Teaching secondary students bound to study English Lit in college, a month of text processing code, could help them write their thesis or find that reference they need. There is some efficient intersection for everyone between the time / opportunity costs of learning to operate a computer better and the PV[benefits] of that degree of knowledge.

@slikts
Copy link

slikts commented May 16, 2012

Atwood has jumped the shark. Advocating against learning is beyond the pale in a world where so many problems are caused by a lack of learning habits. It's even worse if the topic in question is increasingly important and accessible.

@Draiken
Copy link

Draiken commented May 16, 2012

@drewdev
I'm sorry I said you were raging at me, I just felt that way after reading that answer before.

Hey I don't think it's a glorified truth. He just pissed off a lot of people because a lot of people fit into what he criticized, that's why there are more than 3 articles against him created in the last 24 hours :o

But if people want to lie to themselves and think they will actually learn to code from a few javascript lessons, it's their problem, right? Well, no! It affects me and the whole environment of programming. It's my opinion that learning simple javascript programs is not learning to program, but the fact that it is the tip of the iceberg it's still that, a fact. Truth.

People hate being telled the truth. Truth hurts, and at the end of the day, the world is not a glowing star made of little stars. No, not everyone is a star, or as I read somewhere, the special snowflake.

I'd love to have a Codeacademy to play around when I was 13 and I wanted to learn how to program. But for the tool, not for the propaganda. I might have been too cocky after doing such courses and simply say "who needs a college? I can already program on my own!". That's the thing I hate about this initiatives. They inspire this feeling of "everything is easy" and it is not!

I bought a C++ for beginners and couldn't really understand much, but after getting into college I read it again and suddenly I was years ahead. I understood and I loved it. But that only happened after years of playing around with programming.

Saying that me and Atwood are just writing off glorified truths is a big fat lie. He wrote an opinion based on facts, and facts are truths. The same way I write this with my life experience backing me. It's not a glorified truth, it's an inconvenient truth that people took it personally. So personally they had to buy a domain and try to mock a very good article.

@hobson
Copy link

hobson commented Mar 12, 2022

You hit the nail on the head. "Learning to Code" is important both professionally and personally to most people. I don't know anyone with a high school education who doesn't appreciate knowing how to "program" the alarm app on their smart phone, knowing which button to click on popups and notifications in a browser, or "program" the clock on their oven or microwave, or perhaps their thermostats. And most people can benefit from the Intuition Pump of being able to manipulate algorithms in their mind, to be able to conceptualize if/then decision trees and imagine how they might be automated in a machine. Learning to code isn't an if/else decision, it's a lifelong prioritization of thinking intelligently and clearly vs reactively and emotionally. Program or be programmed. You can see where "being programmed" leads a society and what power being able to program gives to the kinds of people who write blog posts like this... in markdown or other machine-interpretable code.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment