Over the last 15 years, through this column, I have been thinking out loud about what it means to consider software as a knowledge storage medium. Rather than a product in the traditional sense, software is better viewed as a container for the real product. What the customer buys and the user employs is the executable knowledge contained in the software. When that knowledge is complete, internally consistent, and properly maps onto a problem space, the software is valuable. When the knowledge is incomplete or contradictory the software can be difficult or even dangerous to use. Discovering a software bug is simply when a lack of knowledge is made manifest, its appearance signals an epiphany of ignorance—an event in time where something that is not known becomes obvious.
While we can consider software as a knowledge medium, perhaps we should also think of software as a thought medium—an extension of our cognitive processes. In fact, since software often contains things that are manifest not correct knowledge, it is really a place where we store our thinking, even if that thinking happens to be wrong.