“Teach kids to code.” I hate the way people use the term “code.” It suggests that learning a programming language is all there is to programming. Programming is about problem-solving. When you solve a programming problem, you arrive at a solution, which in technical parlance is known as an algorithm. Then you express your solution, i.e., the algorithm, in the programming language of your choice. This is the coding phase. When people understand what programming is really all about, it’s apparent that not everybody can learn to “code.” Not every kid can learn to program. There are three things everyone needs to understand:
- Programming is a discipline, no different from mathematics, music or chess, for example.
- This discipline is highly dependent on one’s aptitude or natural ability.
- Programming is hard.
Programming is not a literacy in the same sense as reading, writing and arithmetic. Or learning a foreign language.
Can every kid learn mathematics, music and chess? Absolutely.
Can every kid learn mathematics, music and chess well enough to be competent or proficient? I don’t believe so. The history of education shows us that most of these kids become struggling mathematicians, or poor musicians, or lousy chess players. From the practical standpoint, the “skills” they acquire have little impact on their lives.
What can you do with poor mathematical, musical or chess skills? Can you solve a typical differential equation? Can you compose a concerto or give a piano recital? Can you make progress on the chess tournament circuit?
Similarly with programming. If you’re a weak programmer with little hope of improving, what kind of software are you going to write? Who’s going to hire you?
Can you write a banking application, or implement a weather forecasting model, or program a self-driving car?
What kind of programs are you going to write?
Programming is hard. I’ve been at it for over 20 years, having worked in the financial industry and for IBM and in the PC graphics card industry (ATI Technologies), and I still find it hard. This is an engineering discipline, and like all disciplines, it requires determination, perseverance and hard work. If you aren’t sufficiently motivated, you will fail.
Programming is not like reading, writing and arithmetic, which are fairly mechanical skills. Programming requires logic, reason and creativity. Not everyone has enough of these things. Have you ever wondered why so many people hate math?
Programming is not like playing with Lego bricks. A kid may do well with Lego and still not have the aptitude to become a mechanical engineer or a rocket scientist.
Programming is not a “universal” skill. Most people will never have a need to program a computer. But most people need to read and write, to calculate their grocery bill, to talk to other people in English or French or Mandarin. We need to have a proper perspective on this whole matter.