The act of programming is sometimes closer to philosophy than it is to engineering or mathematics, and as more of our world moves away from the physical realm and into the virtual, the modern software developer is becoming the literal creator of entirely new universes.
Recently, as I started pondering on what it exactly is that makes some software better or worse than other software, I realized that the large majority of the measures of software’s usefulness, like fitness for purpose, ease of use, and accessibility, have nothing to do with the particular platform or programming language the software uses to run. What does that mean? It means that the user doesn’t care about how the software works, they only care about how it works for them.
This is an important realisation. It means that all the time I spent agonising about what programming language, database, or operating system to use was entirely wasted, because the only contribution to the software’s quality those choices make is how quickly I can get the software out of the door, and how quickly I can add new features, because I may be more familiar with some technologies than others.
But this small epiphany of mine has larger consequences. It led me down a rabbit hole of thoughts that culminated in me asking the question: “What do I actually do when I sit down and write software?”.
Modern developers just put the tip on the iceberg
When I write software, like any professional web developer today, I do it on top of an application framework – a bunch of code written by a developer before me that helps stop me from “reinventing the wheel” by providing ready-made solutions to common problems (like database access). Some frameworks are small, providing only the bare-minimum you need to get by. But the most popular (and useful) frameworks give the developer a whole suite of tools and access to many more tools easily, along with rigid rules for how your source code should be layed out and wired together, to help you write tidier programs.
These massive frameworks, (like Ruby on Rails and ASP.NET MVC), attempt to abstract away all the trivial tasks in software development, leaving the developer to concentrate on writing the “business logic” of the application, which is essentially all the users care about. Twitter’s business logic is all about sending tweets, WhatsApp’s is all about instant messaging, etc.
These frameworks have become so popular that if you were to look at the entire source code of two applications that use the same framework and software stack, the “business logic”, the code that is truly unique in comparison to all other software projects, would be tiny in comparison to the rest of the logic in the program. A huge chunk of the program would be the database, on top of that the framework, then wired into the framework would be all of the libraries to do common tasks that aren’t actually common enough to be included in the framework, then there’d be the application server, and finally, a tiny sliver on top, the unique business logic.
But, taking things a step further, lots of the business logic can be considered exactly the same too! Consider a main chunk of Twitter’s business logic: User login, authentication, and account management. How many other programs do the same thing? Almost every one you use!
So what does this mean for the software developers? And what will happen when even the business logic is abstracted away into re-usable chunks of code? What do developers actually work on daily, what do they get paid for if everything they do has been done before?
The answer was given by Aristotle thousands of years ago.
Aristotle proposes the whole notion of Hypokeimenon, the underlying substance of all objects. To understand what it means, think about your house. Then, consider if it was knocked down, all the rubble taken away, and then rebuilt with exactly the same kind of materials in exactly the same way, then weathered to look exactly the same age. If this newer house looked, smelled, and felt the same as the older one, and gave you a place to live exactly as the old one did, what actually is it we refer to when we say “your house”? It’s not the construction or materials, because this undoubtedly isn’t the “same” house. Is it the function of the house? Is it the emotion attached to it? Is it the space inside the house? Aristotle called this substance the hypokeimenon.
And this underlying substance is what makes Twitter different to Facebook, Wikipedia different to Google, and Microsoft Windows different to Linux. Even though lots of the code might be the same between the programs, it’s the underlying thing that makes them different to eachother, and more, or less useful.
So don’t become preoccupied with the platform or framework you choose when you start your next software project, because it’s the Hypokeimenon that makes the difference, and it’s the Hypokeimenon that you need to master to be a great programmer.