Steve Jobs once said “Everybody in this country should learn to program a computer, because it teaches you how to think”.
Kids in school today are taught a wide variety of things, from core mathematics to Biology to Spanish to English, there are absolutely dozens of subject areas that each generation of the future’s minds are being taught and then tested on each year. But when you actually think about it, through this are we teaching them the right skills? What do kids actively learn from this? Now (DISCLAIMER) please don’t get me wrong, I’m not saying “Hey, let’s change up the national curriculum, because I have an opinion on something”, very far from it even. I believe what we currently teach is great, but I simply believe that Computer Science and Information Technology subjects are being ignored and are lagging behind, and I believe we need to start kids on these sort of courses earlier. For me this all comes down to one question, are we teaching kids the right skills? Not knowledge in the form of facts and recallable information, but skills. Actual applicable abilities and capacities that people know how to use.
If you go out today, and ask a child “what is the powerhouse of a cell?”, I bet they could answer. “Mitochondria” they quickly fire back at you. You think great, this child knows their Biology, and could potentially make a great Biologist one day. But however, give them a problem domain relating to Biology and then ask them to solve this problem and I bet this test is more challenging for them, they might take more time, they might have to give multiple attempts or they may even give up completely.
This is because the ability to solve problems is significantly different and varied from the ability to recall knowledge. After all, the human memory supposedly has an infinite capacity to store knowledge for potential later use, it even has Psychologist George Miller’s 7 (plus or minus 2) concept for storing short term information for quick-fire recollection. However, using knowledge to solve problems is a much more complicated neurological process, involving a multitude of electrochemical signals formed within neurons that move along axons to jump from one neuron to another across synapses through neurotransmitter chemicals being released. Sounds much more complicated, right?
When you think about it, in school, how often were/are you challenged to solve a problem. But first, when I say solve a problem I mean the following:
- You are given a problem domain, that is essentially, something to solve.
- You have an initial state, that is where you currently are.
- You have a goal state, that is where you want to be/a desired outcome.
- The means to get from the initial state to the goal state are unknown, and you are required to reach this goal state through forming a bunch of intermediate states, or instructions. With each intermediate state taking you one step closer to the goal state and one step further away from the initial state.
So to me, problem solving can simply be defined as the arrow in the middle of the following statement:
Initial State -> Goal State
(With the arrow being potentially a lot of frustration, pain and Stack Overflow, although with a significant amount of learning)
So back to the point, problem solving can be difficult, and effectively, programming can be seen as problem solving.
At the start of any programming project, small or large, you are given a problem domain, or something to solve. For example, “write a program that outputs the Fibonacci sequence” or “write a program that outputs the names of every string in an array but without any vowels in it”. Essentially, you are required to think about how to approach each problem, and then using a variety of programming concepts such as flow control, variables, input and output, structures, objects, strings, arrays, mathematics, functions (etc) to create/construct a solution to the problem. That is, you use core programming concepts to reach a desired outcome.
Now we’ve made the link between programming and problem solving, let’s talk about the real question I’m answering; why kids should learn to code.
When kids learn to code, they are learning to solve problems. They’re actively being given initial states and goal states, and they are being made to think up ways to create the intermediate states in between, to eventually reach the desired outcome. I do not believe one gets exposure to this sort of practical, theoretical and significantly challenging thinking from any other subject, maybe mathematics or physics, but with this you are implementing other people’s solutions to problems, instead of creating your own. So surely challenging the younger generation to become better at thinking in this way will result in more problems in the future being solved, right? I believe that instead of teaching kids a whole bunch of information that in a job they are required to simply recall and apply to scenarios, how about we teach them how to create their own solutions to scenarios, and we teach them how to think rather than how to recall information.
Ultimately, I believe that Computer Science, and any educational subject that gives exposure to programming and coding teaches an immense range of skills that no other subject at school even remotely touches upon; practically solving problems and creating solutions to problems. In essence, programming makes you think, and boy does it make you think hard. So through pushing the benefits of learning to code, let’s make kids think in a way that is practical, theoretical, productive, active, engaging, stimulating, creative and also, pretty damn fun.