When software becomes useful

Posted on May, 26 2018

I guess we all use software of some kind as a function in our modern life.

Lately I've paused to ask what the term 'software' even implies; soft as in what? ware as in to be a manufactured article?

From the perspective of a software engineer I have no idea what to make of the term.

At best software is modular, and tasks are executed through a clear interface. For example, I use the software drivers packaged in my operating system to interact with my keyboard. This software interfaces with other software, and serves as a modular component to a greater system. Without software being written to be modal, nothing in the software world would be remotely efficient.

The functionality of software as tools with low-depth interfaces, especially interfaces that compose to execute a greater domain of tasks, is sought after by any user which designs a workflow to solve a problem or to execute a task. You, for instance, must have some understanding on what needs to be done (at least, in the best case...) with what will fit in the problem you are going to solve. A 'detailed enough' description of what will happen is in mind when ever anyone interacts with software. 'Detailed enough' in the sense of leaving room for broader steps to decompose into smaller problems.

For instance, if I turn on my computer to go write an essay, it's not really the case that I'm hashing out every detail of what I will need my word processor to do, I just open it and start writing.

So the first description of what I'll need to do is "Launch a word processor, and allow user to edit, save, and open a persistent record readable in the English language."

This then, decomposes into whatever sub-problems need to be solved before we can even get to implementing that description, and some of these are:

  • Address, store, and modify a persistent and available chunk of memory

  • Display English writing to the user

  • Allow the user to input the English language

And with these listed problems, each problem can be broken down into a further sub-problems until you reach fundamental problems of physical implementation and problems of physical constraints.

To me, software is most useful when the depth of the interface to each software component attempts to achieve is minimized. This opens up for a consistent algebra of defined solutions to identifiable problems.