Why Everyone Should NOT Learn to Code – Part Deux

In my recent article titled “Why Everyone Should NOT Learn to Code” I heard a TON of feedback both for and against my position. I thought I would expand on the concept and discuss a few of the counter arguments I received through the blog and twitter since that article was published. Perhaps I can better explain my rationale and positions to clear a few things up. I think many of the arguments posed to me were based on some assumptions that we, as programmers, take for granted but may not exactly be the all encompassing truth.

The Original Argument… reiterated and refined

In the first part of this series I put out the idea that contrary to some popular opinions right now, not everyone should be learning to code. I guess that very statement is a bit over reaching and perhaps a bit too generalized. The point I was trying to make was that while anyone who is passionate about programming as an art or exploring computing should not be discouraged from learning to program, it is not critical or necessary that everyone learn to program to operate in our current / future world. In fact, it may be advantageous for us as a society that some people stay out of programming altogether.

“What an elitist comment man!” No, I am not trying to be an elitist. I think I am just providing a unique view of what might happen if suddenly the world was full of people that could do, even in part, of what we as programmers can do. But that was the idea anyways. So let’s address some of the arguments proposed and then I can offer a few counters of my own.

The Counter Arguments

Not everyone is going to become a computer scientist. This was one of the most popular arguments I heard on the blog and twitter. I think this argument came about due to a bit of my generalizing so my bad for that. While the argument is fundamentally true, it doesn’t really negate the fact that if a large group of people know how to do something some are going to try to make money and a career at it. If we teach large societies how to program, even just a little, some of them are going to be encouraged to jump right into the software development field and say “I know how to program, I can do that for you.” The problem is, they will think they know how to solve the problem but in reality they will be biting off way more than they can chew. They may know the syntax but because they aren’t trained enough to see the big picture or all the moving parts, they will have less than adequate solutions. Professional programmers do this as well, but on a scale much smaller than an “armed” public would be. On top of that, the quality of their work will be significantly poorer than what you might expect from a professional. It is not their fault. They learned a few lessons at codecademy and thought they had a good grasp of the concepts behind software design. A large group of people thinking they know how to do something means a large subset who will try to say they are “professional” and another large subset that they don’t a need to call a programmer. They can just tweak this or that and voila!

If people learn how to code it will make them better at their job because they will be better problem solvers. This too was another popular argument. However, it has two assumptions that I find a bit elitist in itself! It is true that programmers can be great problem solvers, but that doesn’t mean our problem solving abilities are A) the best or B) applicable to all situations and all industries. Sure I can look at most problems and come up with a solution that is logical and may work. But so can non-programmers. When it comes to problems of the heart, I would suck at problem solving. I would be the lousiest counselor you have ever met. My logic makes me see the world in black and white when we all know there are plenty of shades of gray. Logical problem solving is not the only or true way of solving all problems. If the problem itself is logical, it works. I also don’t see how software design is applicable to factory jobs which feature extensive repetition with little actual thinking. Believe me, I worked in such positions before.

Learning to code is equivalent to math, science or even literacy! While programming is a branch of computer science, which is a science and uses math, it is not quite on the same level. Bill Gates even went on CNN money and agreed with the fact that while teaching programming is important, it should not be put on the same level as math, science or literacy. Even in a world that will be completely computerized. This argument was a big one to battle and to explain. The assumption being made is that in a world of computers, knowing how to write them and design them means that you are going to be better able to use them or understand them. This is simply not true! I am a programmer, I know upwards of 9 languages fluently and I can’t tell you how the computers inside my oven work or how exactly my TV can take a signal and make it a picture. But I don’t care, I know how to operate these devices and I don’t have to think about what is inside them (welcome to the black box). Kids, and adults for that matter, use cell phone software every day without knowing anything about its design and internal workings. Half of them don’t even know that Android was built on Java. A large part simply don’t care! I know as programmers we want to believe everyone would embrace programming and that everyone should enjoy what we enjoy about programming, but the fact remains that even if you know programming you aren’t going to magically understand computers in general… or even all software in general. If programmers are doing their jobs, people shouldn’t have to know. It just works!

Everyone should just learn a little bit, even if it is just in school and they never end up being a programmer. Believe me when I say that this is not as great as it sounds. It is counter to my main point in that if you are going to teach everyone to program (despite some of the arguments I have set out above) don’t teach them a little, teach them a lot! I rather have a group of people who can write good software out there than a bunch of people who can do a little bit and dabble in systems that are far beyond their comprehension. Teaching a little bit will result in people who think “I can write a one liner here. Oh it compiles, it didn’t blow up. It must have worked then!” and then leave. Then that one liner is a ticking time bomb that brings down an entire financial market later. This is the concept of “Enough to be dangerous”. Or as the Urban Dictionary would call them “pretend-a-techs“.

In Retrospect

Looking back at my first article I can honestly say I see where many of the points might have come from and why my bold assertion may have caused many programmers to pick up the pitch forks and torches. I just want to say that I believe in teaching programming to others, but I want those people to be passionate about the craft, really want to be there to learn it, want to commit to the ideas taught and realize that if they don’t become computer scientists, please don’t play one on TV and try to do something that should be left to a professional. I know a few ideas about medicine, law and architecture but I would never jump up in an emergency and say that I could do that life saving procedure, defend you in a court of law or build that house let alone that supporting wall. I know those things should be left to those who has their heart fully in that field. I hope they can count on us programmers to deliver great quality software because that is our domain just like we count on other people to be dedicated to their professions because it is their domain.

And I will leave with this little tidbit… “So doctor you say I have cancer and need to operate? I assume you have done hundreds of these procedures before right?” The doctor replies “I have only done it once, but don’t worry, I know a bit of C++ so that means I am a great problem solver and you will be fine.”

About The Author

Martyr2 is the founder of the Coders Lexicon and author of the new ebooks "The Programmers Idea Book" and "Diagnosing the Problem" . He has been a programmer for over 18 years. He works for a hot application development company in Vancouver Canada which service some of the biggest telecoms in the world. He has won numerous awards for his mentoring in software development and contributes regularly to several communities around the web. He is an expert in numerous languages including .NET, PHP, C/C++, Java and more.

You are right in the fact that our field does have some of these non-passionate and incompetent programmers… just like any industry. This is partially because of this trend I described where we have lowered the barriers to entry. I don’t argue the fact that this is going to happen. What I am saying is that if we open it up wider it is going to accelerate the process. Right now there are kids in classrooms who won’t even write a paper without ripping half of it off of wikipedia. These are the people of the future where if you throw a compiler into their hand, they may just use it to rip off your work and call themselves a professional. I know we can’t prevent the trend, but we can reduce the rate of attrition.

AxiomAbsolute

This sounds a little bit like saying “cut off the head to stop the nose from bleeding”; how can _less_ education be the solution for an underskilled workforce? Yes, educating a broader audience on programming will likely produce a flood of underskilled people claiming to be ‘professional,’ but it’s also how we introduce newcommers to the field. I didn’t take a single programming course until my second year at University! Even a single course exposing me to programming early on would have helped shape my choices in education throughout middle and high-school, not to mention my early college career.

Educating people about coding is about much more than just teaching them how to program – it involves teaching them to appreciate the complexities of programming and teaching them to recognize good solutions. In the post, you make it sound like teaching students about syntax will make them think they’re professionals, as if every student who learns to read music and plays notes on an instrument suddenly believes they’re professional musicians. This kind of thinking only works if your audience is unable to distinguish between good and bad music, which comes back to having some kind of uniform exposure to basic education.

Thanks for the comment. Not so much cut off the head to stop the nose from bleeding, more like pinching the nose so that less blood spills out onto the floor. I do believe in educating people in the way of programming. I think we just need to do a better job of identifying those who might become good programmers and discourage those who are in it for the wrong reasons. I want kids to be exposed to programming but if their heart is not in it, quickly change the subject before we go teaching them too much. I don’t believe we should make programming mandatory, I think it should be in schools as an elective and we have to realize that not everyone needs to know programming. Just like we realize that not everyone needs to be a doctor. Our society works because everyone specializes in different things. 🙂

Joe

God damn it. I used You’re instead of your … I need to go to bed …

Tom

I started with nothing during a period of illness and three weeks later and after reading some tutorials and parts of the documentation I wrote a python script that automates a part of my voluntary engagement in a community. It might not be perfect, but it fits my needs. While nobody can became a lawyer or doctor this way, everybody with a certain need and will to learn can create small pieces of software that help himself or even other people. Do they want to become “computer scientists”? I don’t think so. As human beings we are curious and we can do stuff without the will to reach expert level or even without benefitting from it in some material way.

When I think of my leisure activities: I am not among the bests in even one. In the end you could say : It has been useless. But I enjoy all of them.

I just have to point out that you stated (and i quote): “I know a few ideas about medicine, law and architecture but I would never jump up in an emergency and say that I could do that life saving procedure, defend you in a court of law or build that house let alone that supporting wall”

Which seems to counter the argument a bit. You determined (whether on your own or through some external means or forces) that you should not jump into those situations despite knowing a little in the field. What is any different for someone who learned a little java and then went on to greener pastures?

By the way, nice jive at the end there about “I know a bit of C++ so that means I am a great problem solver and you will be fine”. It was a little non sequitur but made me giggle a little inside due to the abundant comments in part 1 stating that particular phrase in completely different contexts. 🙂

About the Lexicon

The brain child of Martyr2, Dream.In.Code Mentor and veteran programmer, the Coders Lexicon is a website dedicated to the advancement of computer programming and technology. It offers advice, coding resources and references to cover web and desktop development.