It took thousands of years of written language for us to consider universal language literacy important to society, and the shift largely happened as a byproduct of the industrial revolution (with pretty clear lines to the enlightenment and the printing press). Per most definitions, we’ve only been computing for about 400 years, and in the modern sense for less than a century. In terms of the information revolution, I would put us at a few hundred years after the creation of the printing press (recognizing that we’re moving a lot faster now than we were then). We are pretty close to having powerful computers in the hands of every human being on the planet, something that didn’t happen with printed text until the 20th century.
As that continues to happen, it seems natural to conclude that some sort of universal computational literacy will become important to society. Does that mean everyone will be capable of writing complex, elegant programs from scratch in a variety of programming languages? I suspect not. But at minimum, I imagine a world where we expect everyone to understand the basic building blocks of computation — boolean logic, control flow, variables, and so on — just as we expect everyone to understand how to add, subtract, multiply and divide today.
When we do this, we’ll be forced to redefine what constitutes programming. Today, we seem to define it roughly as writing functions using a written programming language. But this is clearly an over-narrow definition. What about complex excel spreadsheets? Mac OS X’s Automator? IFTTT? If those examples don’t represent programming, what are they?
Each of those examples seems different from what we consider to be programming today because they were all designed with the express purpose of allowing people to write complex programs without understanding the principles behind them. This kind of abstraction has been useful as we make the transition to a computerized society. But when everyone has a basic understanding of those principles, we won’t need the abstractions, and we’ll be able to accomplish a lot more as a result.
In the future, we will come to accept that anything that modifies the contents of a stored instruction is an act of programming. And we will make it possible for anyone who possesses a basic computational literacy to engage in that act.
Instead of abstracting limited collections of functions into self-contained and largely unmodifiable apps, we’ll build interfaces that allow any computationally literate person to build their own apps out of those functions using the basic building blocks they already understand. Thus, instead of abstracting away those building blocks as we do today, we’ll work to make them useful at any level of abstraction.
Exported from Medium on October 22, 2020.