Imagining a Science of Programming

The computer industry is awash in complexity. Windows struggles with it. iOS hides it. Linux revels in it. Users suffer from it. Developers curse it even as we create more of it.

Why? Why is software engineering so different from every other engineering discipline?

The usual explanation is that each of the many layers of the software stack is made by human beings, and therefore subject to a cascade of human frailties.

Which is true, but still not an explanation. Every piece of stone, steel, and cement in a skyscraper was also formed by human hands, or machines we made. Yet somehow we have evolved engineering processes that allow us to bound the risk of failure at each level, ensuring a reliable end product.

Why has that never happened with software?

Perhaps this is what civil engineering was like before Galileo and Newton. We had a great deal of engineering lore, but no science, no physics or chemistry to tell us the precise nature of the forces and failure modes that caused our pain.

Our professors at MIT admitted up front that Computer Science was not a science, and had very little to do with computers. It is a branch of mathematics focused on types and evaluation, with a number of useful results for programming.

The mathematics of computation and the discipline of software engineering have brought innumerable wonders to this world. I am dictating this very article into a pocket supercomputer using radio waves beamed to data centers somewhere else on the planet that translates my speech into text in real time using gigabytes of machine learning.

But what if it was possible to obtain more direct access to those wonders, without all the pain and complexity?

What if there was a genuine science of programming, that could bring the same rigor to software engineering we enjoy in mechanical engineering?

And what if that science identified and simplified the concepts enough that we could teach grade schoolers to create real programs as easily as they build Legos or play Minecraft? So that programming became a ubiquitous vehicle for playful self-expression, rather than the esoteric privilege of a few?

What if?

  One thought on “Imagining a Science of Programming

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: