Please Don't Learn to Code

I think in this instance, Jeff, you’re wrong. A mayor who knew how to code would be a great improvement. Perhaps he doesn’t need to learn how to code, but ideally he would know about data, standards, algorithms, security, privacy… a lot of the job of a mayor is dealing with bureacracy; if that mayor could tell when there was a technical solution to a problem that avoided the bureaucratic one, maybe he could spend less on the bureaucracy.

Your wider point that not everyone needs to learn to code is true, with the same caveats; if you don’t know when code can solve a problem, how will you know when code can solve a problem? I’ve helped many people in the past with macros that saved them hours of repetitive work - they just didn’t know it could be done.

As others have pointed out, most people don’t use much of their school education, but it serves the important purpose of telling you what kind of thing is out there, should you need to know it. Learning history tells you something of the politics of a situation, and this is a similar arena needing context.

I understand your point, and as usual, I think you make it well, but I don’t think “learning to code” is the same thing as “become a coder / developer / whatever”.

During our early years in school, we learn civics and health, not to become lawyers and doctors, but to help us to become better, more informed, healthier members of society. Learning is a means of gaining a better understanding the world and hopefully to better interact within it.

And now that a good portion of the world is being monitored, managed, controlled, simulated, and basically run by computers, it’s probably a good idea to gather a basic understanding of how humans make computers do those things. Not for the job, or even the hobby for that matter - just for the ability to derive logical conclusions about why their world works the way it does.

Programming isn’t a highly specialized and context-specific skill like plumbing. Programming is the fundamental knowledge of what kinds of problems one can solve with computers, and how to go about solving those problems. Computers are literally the most powerful problem-solving tools humanity has ever created, and we all benefit when the knowledge of how to apply those tools is more widely distributed in our society.

Comparing programming to plumbing is like comparing it to painting or cooking or anything else that has a major physical component. Programming is a mental skill that doesn’t require any specific physical traits. Many physical disabilities would prevent someone from being able to fit pipes together or put paint on canvas or mix dry ingredients.

“Programming” is a form of writing (symbol manipulation), like poetry or prose or logic or mathematics. It’s electron manipulation (both in brain and computer), and comparing it to atom manipulation is dishonest. Everyone could benefit from increased literacy.

While I’m a big drum banger for the ‘learn to code movement’, I agree code isn’t the point. But it’s the meme that’s got momentum and it’s close enough.

Like many other commenters note, the point is to a) understand how the digital world around us works and b) to be able to make things on the web, etc. that involve more than just filling in a form. These skills will be essential for any critical, creative person in the next 100 years. And, learning a little code, even if it’s just using HTML remixing a web page (see: helps move in this direction.

I am really surprised and saddened to see this post coming from this blog. It presupposes that programming is some kind of elite activity for proper comp-sci graduates in white lab coats devising beautiful and pure code in sterile clean rooms… well, perhaps that doesn’t quite fairly represent your argument, I confess! But programming can both be a professional practise and a hobby, and I think it skirts close to snobbery to discourage somebody merely on the grounds that it isn’t their day job. Who the hell cares if their code is useful? And who even cares if it’s neat, efficient, or beautiful? You don’t have to use it and you don’t have to read it. We all started off as rank amateurs writing "10 PRINT “…”’ – and you know what, it was pretty exciting at the time. Why should I want to deny that honest pleasure to someone else?

In general, I agree with you. I’m a pretty good problem solver but I’ve never been a great coder. It hasn’t hindered me in most projects.

There were already a few comments along these lines, but I think sometimes people need to have a “Coding 101” course that introduces them to what’s possible. Sometimes, people are so ignorant of code that they don’t even know what to ask for. They end up “solving” problems with crazy, manual processes instead of simple, automated ones. (I expect that this issue will start to fade over the next 40 years as the “digital natives” get established in the workforce.)

I guess I fall into a camp of teaching more people coding concepts, but not necessarily teaching them to be coders.

The owner of the company that I work for has been working his way through some of the exercises, and initially asked me questions as he got stuck. He ended up basically saying “I appreciate that I knew enough to hire people that know how to do this well.”

He’s not doing it to learn how to program, I believe he’s doing it because he feels like he’s missing out on some of the enthusiasm (or hatred) the rest of us share when it comes to the technologies we work with.

It sounds like what you fear is an army of Dunning-Kruger compromised monkeys invading the industry, but don’t they need to get hired first? I agree with evangelizing solid hiring practices, as you’ve been doing, but I don’t see anything wrong with people trying something new, if only for the experience of doing so.

Finally, plumbing is nothing like programming, though it is a metaphor used by many code maintainers. I have understood water, hoses, valves and gravity from a very young age with no plumbing background because the concept is material and intuitive.

Most people can’t understand the concept of a doubly linked list with no programming background just by looking at an implementation of one.

I don’t disagree with your post entirely, I fully agree that more programmers should be looking more at the problem they’re trying to solve.

Is the rest really an issue?

I can see why posts like this are important; whenever there’s a risk of a bandwagon forming it is important that there are people out there who put the brakes on, if only to make sure the bandwagon is at least going in the right direction.

Of course not everyone should become a JavaScript ninja, a C hacker or a Lisp wizard. I think you nailed it in your third bullet point “Before you go rushing out to learn to code, figure out what your problem actually is.” After the first few hours of “hello world” and working out variables and functions you’ll make a program that actually does something simple but useful - you find a problem to solve and coding helps you look at it in an analytical way.

Many would call that analytical way “common sense” but it’s an oft-touted issue that common sense isn’t something that can be taught. With that in mind, coding is something that can be taught, and if it helps develop analytical skills then it’s as essential as maths and English. Just like current IT teaching varies between useful (learn to learn how to use a system) and pointless (here’s how you make a pie chart in Powerpoint - wtf?) so could coding lessons. If they skirt round problem solving and try and innately familiarise everyone with pointers and polymorphism then it’s being done wrong, but formalising a problem, approaching it step by step (TDD anyone?) and restructuring as your attempted solution grants better understanding of the original domain is what should be advocated.

What I don’t understand most of all is your conclusion. No denying that research and communication are important … but is that what drew people to programming in the first place? The beauty of “10 PRINT …” – at least in the days when BASIC was in ROM and not on CD-ROM – is that it gave kids (and adults) power over the machine and all its spells. If the point was just to see your name printed infinitely on the screen, then loading some pre-written programme from disc would serve the same purpose. The point was that by writing code yourself you could control the machine. Think about that. At some point you might have moved onto assembler, or Pascal, or C, whatever, but that thrill of conjuring up characters, graphics, and sound can be a completely valid end in itself – even if that’s not where you end up twenty years later.

You say that the real point of coding is to create solutions – but to prioritise that over coding itself is like saying that the point of painting or film-making is to improve mental health. Maybe those are side-effects, maybe they are even goals and passions, but if a painting or a film isn’t made for the joy of working in the medium, then it is a travesty. I am not saying that coding can’t be important to mankind, in what it enables, but it should also be an end in itself, an exercise of the mind.

“Please don’t advocate learning to code just for the sake of learning how to code.”

What? I should only learn to code if I have a legitimate reason to? Nonsense. Never try to disuade somebody from learning something because they want to. So much of what we know about the world today, we know because somebody was curious.

Now “because of the fat paychecks” I agree with. Both because the world doesn’t need any more half baked professional programmers, and because the paychecks are rarely that fat!

Actually I think in the future everyone will be a programmer, in the sense of someone who can instruct a computer what to do. Departments with better programming skills will beat the hell out of departments that depend on IT to solve their problems. It’s just a question of time before people are comfortable enough with programming languages.

Just like it went with cars. For many years after the invention of the automobile, driver was a profession. Now, everybody can drive.

I totally agree. This is pretty much the same blog post I wrote a few months ago (same title even) when Code Year was getting so much press. The feedback I got was the programming is going to be a blue collar job in the next 30 years.

The percentage of the population that can engineer great software is so minuscule, and that number won’t change dramatically. HyperCard couldn’t change it; Visual Basic couldn’t change it; and no amount of instructional videos and interactive code challenges can change it. We might be able to nudge the number upward by making things easier, but there is a hard limit.

At it’s core, programming and the problems we solve as programmers is hard and the general population isn’t very good at doing hard things.

A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects. -Robert A. Heinlein

I think everybody should have a very rounded skillset. Software is my profession. As such, I expect a very high level of professionalism from my coworkers and myself. I would expect very little from a hobbyist.

However, I do think a lot of people could benefit from knowing the bases of programming.

I can go and take cooking classes, photography lessons or mechanics courses.

That does not make me a cook, a photograph or mechanics. I sure as hell would now apply for any of these jobs and would expect professionals to be insulted if I tried.

However, acquiring knowledge from different field allows me to be a more well-rounded person.

Above all, it make me feel like a more autonomous person. I can cook a decent meal for friends and family, take a few decent pictures on vacation and maybe even handle a few basic car repairs.

I do agree with most of what you pointed out about problem solving. More software is not the solution itself. But that is part of the learning journey a hobbyist will figure out along the way if he/she perseveres just like we did.

I agree with the basic sentiment. There is no reason to learn to code just for the sake of learning to code.

However, if your desire is to do something that can be achieved by learning to write some basic code, I can see a lot of merit in essentially learning enough to be dangerous. See:

But having the ability to code is like a super-power when your main job isn’t being a programmer.

I don’t think we need more programmers either. But being able to program a little is like having yet another tool in your arsenal, which will make you more effective in almost any career.

Of course it’ll mean even more VBA in Excel spreadsheets, so I’m not sure if that’s a net positive or negative…

I’m kicking myself for not saving the link somehow, but I’ve read at least one article on how programming is a very good way for students to see the practical side of natural sciences (where physics and maths often fail). Pupils who have been taught programming had less problems with other related subjects later in their schooling than those who haven’t been according to a study. And the effect was ever stronger with girls which is very important considering the gender gap in natural sciences. The only catch was that programming has to be taught early enough - I think the article mentioned 6th grade - or the positive effect is almost nullified.

While this has little to do with the mayor of NYC, maybe everybody who is in school should learn to code…

Please Jeff have a look to this talk “Program or be programmed”

Programming is the new math.

I’m really not sure how not teaching something prevents people from being bad at it. People don’t go around worrying about teaching math to prevent all the inevitable bad mathematicians out there. Or not teaching spelling to prevent more people who cant spell?

The more real-world infrastructure gets replaced with software, the more relevant coding skills are to everything we do. This trend is only going to accelerate. In this way, coding is a special skill compared to others because it is so universally applicable.