You may have heard of Joel Spolsky before. He is the founder of Fog Creek Software and blogs on Joel on Software. He is more well known however these days as the founder of Stack Overflow, and can often be found traveling somewhere across the globe speaking at conferences about developers. Maybe you have seen him, and if you do happen to be at a conference he is speaking at, introduce yourself.
In recent years, Joel’s talks have centered on the philosophical aspects of programming and software. At the WeAreDevelopers Conference in May 2017, he shared this thought:
“Every line of code is a decision made by a developer.
We are building the future out of those decisions.”
Before the days when software was ubiquitous, we had direct control over machines. We pushed a button or pulled a lever. That button or lever was a direct mechanical connection to turn on a light or move a plane rudder. The operator was in control.
But what about today? How much does software play the conductor on our behalf? Joel’s example was that of a modern commercial airliner, but the same can be said for our cars, elevators, ticket kiosks, even toasters. Software is making small and large decisions every day that are merely initiated by humans.
Through software we have created a layer of abstraction between user and machine. This idea of abstraction also applies to the very software we create. In the past fifty years, we went from machine code to COBOL to C to higher level languages like Python, all with the purpose of making programs simpler to write and more portable.
The Internet then accelerated the need for these programs to talk to each other. This led to protocols and API’s that let developers instantly plug all sorts of functionality into their applications with a few lines of codes. We have abstracted away millions of lines of complexity.
What this means is that every line of code is not merely executing some task. It is a decision that impacts the future for your users and the users of whoever else uses or plugs into your code. That has long-term implications and moral consequences which are hard to fathom when staring into your IDE. Consider for example the day when fully autonomous driving becomes commonplace or when robots perform surgeries.
We are living in a new era where the complexity and interdependencies make it impossible for any one person to keep track of it all. There are plenty of publicly available resources like Stack Overflow and GitHub our “second brain”. As public code gets incorporated into proprietary code used inside enterprises, it will be just as important for similar resources to become the institutional corporate memory of decisions and the reasons behind those decisions. This includes both the code as well as the context of that code.
As you consider the layers of code abstraction in your own work, how do you track complexity? What do you use to track code and its context?
What is a good way to concisely explain Bitcoin?
With Bitcoin seemingly going into the tank, might be good to learn a bit more..
We help IT leaders in enterprises solve the cultural challenges involved in digital transformation and move towards a community based culture that delivers innovation and customer value faster. Learn more about our work here.