Chapter 1. Programming Observations

Table of Contents
1.1. Some Observations On Tools
1.2. Scholastic Logic and Requirements Analysis
1.3. Design Pattern Observations
1.4. The Filter Pattern
1.5. Customization Files

1.1. Some Observations On Tools

What characteristics are necessary for a tool? In short, a tool must reliably increase our power after we learned how to use it. It must be powerful, reliable, and learnable.

Modern software tools often do not live up to these basic requirements. Sure, they promise to increase our power. But often, they are not reliable. And nearly all the time, they are not learnable - especially if they are very new. They are so new that nobody has real experience using them, let alone published his experiences with them.

To me, this situation is one of the reasons of the phenomenal success of the Linux/GNU tool set. If one hears proponents of these tools talking about them, the virtue most often praised is their reliability. But it might turn out that much more important is their learnability. Nearly all of the tools that come with the Linux/GNU tool set exist now for more than a decade, some for substantially longer. In the software world, these tools are really old. But this means that people had time to work with them, and record their experiences, which makes these tools learnable.

Another way to realize how important learnability is for a tool is to have a look at the costs involved in working with a tool. Basically, when we want to use a tool, costs are involved for acquiring it, keeping it running, and learning how to use it.

The cost of actually acquiring the tool - buying it and getting it into our environment - is where most of the money is spent for a tool in our everyday world. For software tools, it still is a big part of the overall cost - and often the major criterion on which tool is to be acquired. However, since work is so expensive today, even the expenses for "costly" tools dwarf soon against the costs caused by the people using them.

The cost of keeping the tool running are mostly related to consumption of materials (fuel, saw blades, ...) and repairs in the everyday world. For software tools, this cost is dominated by "repair" costs, like applying patches or updates, or discovering, tracking, and even fixing bugs. Clearly, reliability rears its ugly head. Worse, while the tool is being repaired, people can't work with it, which makes for big opportunity costs.

Third, the cost of learning how to use the tool. This is where most of the money is spent in today's software tools, since they are typically used for extended periods of time, and effective use depends on the knowledge of specific details of their operation. For a new tool, this cost can be taken as a given, since nobody can know how it works. For tools that have been around for some time, the probability that a given person already knows how to work with them grows. In the end, some tools are so ubiquitous that nearly everybody knows how to work with them. Of course, these tools have a big advantage from a cost point of view.

To sum it up, when faced with a decision about which software tool to use, choose the one that is most powerful while still being reliable and learnable. Keep in mind that the price tag on the tool is typically a joke compared to the hidden costs that are created when people learn and use the tool. Before deciding on a tool, give a little thought to these costs, and try to find out if there are tools around that can minimize them. Of course, tool vendors do not like to hear this, since they make money from selling tools to you, and not by participating in your success. But look, with all these proven tools around you, maybe you just don't need the newest one ...