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“.
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.”
Thanks for reading!