Imagine that you were a teacher in ancient Greece. Your expository traditions were firmly rooted in the practice of oral argument and knowledge transfer. And then along came this newfangled thing called “writing”. It pulled thoughts from your brain and committed them to something more permanent, and even more terrifyingly, allowed others who understood these symbols to receive those thoughts without your presence. To top it all off, it encouraged your brain to become feeble, now that it did not have to hold the entirety of human knowledge. You were resistant to this new medium. Your current ways of creating and conveying thoughts were doing just fine.
If, in the above paragraph, you substitute “writing” for “oral argument”, and “coding” for “writing”, it will sum up the current debate on whether you should learn how to code.
But the whole debate on learning to code is missing the larger point of the thought processes and mentality it takes to code. Like Dijkstra said, computer science is as much about computers as astronomy is about telescopes.
After all, why should the mayor learn how to code? Is he now going to start writing apps?
The current debate also entirely misses the question of gradation. Take mathematics for example. It is pretty important for the population at large to understand arithmetic, and possibly also some algebra. That’s why everyone learns those topics in school. But is it equally important for the entire populace to be well-versed in the intricacies of group theory and vector spaces? Probably not.
Instead of talking about coding, we should be talking about computational literacy. Being fluent in a programming language is just one aspect of that, and a pretty advanced one. There are other topics and ways of thinking that need to come first in the curriculum of computational literacy. And perhaps, some of those ideas and ways of thinking that come before coding in this ladder are sufficient for the general population.
Note that computational literacy has absolutely nothing to do with being able to fluently use computers. Just like being a good driver doesn’t mean you have a good grasp of mechanical engineering.
Jeanette Wing refers to this as computational thinking, and makes the case for it being a useful interdisciplinary mode of thought1.
To build the case for broadly teaching computational thinking, we need to look at the major transitions in modes of human thought through the history of civilization.
The earliest known mode was perhaps what we now know of as the Greek school, when knowledge was held in brains and created and transferred through an intricate and time-consuming culture rooted in oral debate and discussion. This was spoken thought.
The next big transition was to written thought. This was the first major leap in the scalability of thoughts. Their total number was not limited to the capacity of human brains. They could be transferred without the presence of the original thinker.
The next leap along the same lines was printing–which made thoughts orders of magnitude easier to reproduce and spread. This is what truly cemented the supremacy of written thought.
And now we’re seeing the beginnings of the next major mode of thought–executable thought.
Executable thought arises when written things can be automatically consumed and manipulated. This breathes life into what previously was just an inert string of symbols. The most obvious example of this is a computer compiling and executing something written in a traditional programming language. This is also the thing that most often hooks people into becoming programmers–the idea of converting pure thought into action.
But it does not have to stop there. The form of the idea does not have to be “code” in the traditional sense. Take, for example, something as innocuous as a hyperlink. If you were to think about it with the old written thought frame of mind, it would be just a citation. But if you were to think about it computationally, and with a rudimentary understanding of page rank, that one link would become the trigger for a sequence of computational actions that have implications for the authority, trustworthiness and findability of both sides.
Another example: biologists have been better able to understand a number of processes when wearing their computational, rather than the life sciences, hats2.
This idea of thought being executable already permeates most of the commercial and physical infrastructure of the world around us, and very soon, someone who cannot think this way will feel like an alien in it. To put it another way, computational thought will become a necessary prerequisite to function in a computational world.
Saket Navlakha and Ziv Bar-Joseph, Algorithms in nature: the convergence of systems biology and computational thinking; Molecular Systems Biology 7: 546￼￼￼￼￼￼￼￼￼￼ ↩