The recent free courses from Pluralsight on teaching kids to program really got me thinking about this subject.
There seems to be a big backlash in development community against the idea that everyone should learn to program.
I’m not sure exactly where it is coming from, but I suspect it has something to do with egos and fear.
Even within the development community, there seems to be a distinction between “real programmers,” and “not real programmers,” based on language or choice.
I have to admit, I have been guilty of this type of thinking myself, because a very easy way to increase our own value is to decrease the value of others.
But what I have come to find is that not only is the distinction between “real programmers” and “not real programmers” a false dichotomy, but that the distinction between a programmer at all and a layperson, is also not quite as clear, or at least it shouldn’t be.
Not everyone should be a programmer
It’s true. Just like not everyone should be an accountant, or not everyone should be a writer, but I think we can all agree, that everyone should understand basic math and be able to write.
Learning how to program and doing it professionally are two distinct things and they should not be lumped together.
It it pretty hard to imagine a working world where no one except writers could write.
Imagine wanting to send an email to your boss, but you don’t know how to write, so you have to ask the company writer to do it for you.
That is what the world would be like if we insisted that only writers needed to learn how to write.
But perhaps you think I am just being silly, I mean the need to write is so prevalent in everyday situations, but the need to program isn’t.
But I challenge you to consider if whether it is actually true that the need to write is much more prevalent than the need to program, or because everyone knows how to write, the need for writing is just recognized more.
Imagine if everyone you interacted with on a daily basis knew how to write code. Imagine that, just like everyone has a word processor on their computer that they know how to use, there was an IDE that allowed them to write simple scripts.
Think about how that changes the world.
APIs everywhere!
The first thought that comes to my mind in that world is that there would be APIs everywhere.
Every single program would have an easily accessible, scriptable API, because every user of that program would want to be able to automate it.
In time, the way we viewed the world would completely change, because just like products today are designed with the thought that users of those products can write, products of that time period would be designed with the assumption that users of those programs can program.
Suddenly everything becomes accessible, everything interfaces with everything else.
Doctors build their own simple tools based around their specific process by combining general purpose software from their equipment.
There is a Pinterest full of code snippets instead of pictures.
Every device and piece of software you interact with has an API you can use to automate it.
The point is that we can’t conceive what the world would look like if programming was as prevalent as writing, but such a world can and should exist.
Computers and technology are such a large part of everyone’s lives that it is becoming more and more valuable to be able to utilize this so common element.
It starts with kids
We have to stop thinking programming is hard and realize that it is one of the easier things we can teach kids to do.
If a person can grasp and use a complex language, such as English, that person can learn how to program.
Programming is much more simple than any spoken or written language.
But, we have to stop erecting these artificial barriers that make programming computers seem more difficult than algebra.
Not only that, but we need to start integrating programming concepts into learning these other subjects.
Is there really much difference between an algebraic variable and a variable in a programming language?
Isn’t most mathematics solved by learning an algorithm already? Why not at the same time, teach how to program that algorithm? Not only would it make the subject much more interesting, but it would build a valuable skill as well.
We spend a great deal of time educating kids with knowledge they will never use—basically filling their minds with trivia. But, how much more likely would they be to use the skills learning to program would give them?
What was hard yesterday is easy today
Calculus, geometry, probability, the structure of a living cell, electricity… What do they all have in common?
These concepts used to be advanced topics that only the most educated in society knew about or discussed, but now have become common knowledge that we teach children in school. Ok, well maybe not calculus, but it should be.
Over time, the concepts that only the brightest minds in a field could possibly understand are brought down to the masses and become common knowledge.
It is called “standing on the shoulders of giants,” and it is the only way our society advances as a whole.
Imagine if it was just as difficult for us to grasp the concepts we are taught in school as it was for the pioneers of that knowledge to obtain it… We wouldn’t ever advance as a whole.
But, fortunately, what is hard yesterday ends up being what is easy today.
The same will eventually happen with computer programming, the question is just how long do we need to wait?
It’s all about breaking down walls
I try to never say that something is hard, because the truth is that although there are some things in life that are hard, most things are easy if you have the right instruction.
It is natural for humans to want to think the knowledge or skills they have acquired is somehow special, so naturally we have a tendency to overemphasis the difficult in obtaining that knowledge or set of skills, but we’ve got to work through the fear of job security and egos and remove the veil of complexity from programming and make it simple.
The value we can bring by helping others to understand the knowledge we have is much greater than the value that using that knowledge alone provides.