|
|
CTO ArticlesPublished in IT World
Software is like...Software is pretty abstract stuff. I regularly find myself struggling to find suitable analogies to explain the slings and arrows of outrageous fortune that beset practitioners of the software arts. In my formative years, I was exposed to two main analogies for software. One from a logic perspective, the other from a linguistic perspective. In the intervening years, I have come to distrust both of these analogies in favor of a third analogy which we will get to later. First up, the two standard models from my youth. Then the more third model I tend to use - somewhat ruefully - today. "Computing", I was told, "is just math really." In this view, software is an extension of a part of mathematics known as "logic". Programming languages are really just handy notations (syntactic sugar) for mathematical expressions. Computer programs can and should be specified formally using mathematical concepts including invariants, limits and so on. Moreover, programs can and should be formally shown to be correct using standard theorem proving techniques from the mathematical sciences. The second model that was pitched to me early on was the idea that computing was more closely related to linguistics than to mathematics. My own alma mater (Trinity College Dublin) offered courses that combined computing and linguistics. The pure Computer Science brigade (of which I was a member in the Eighties) was affiliated to the Arts Faculty rather than the Engineering/Math Faculties. In this view, computing is all about expressing ideas. Finding modes of expression - le mot juste - that bridges the gap between what humans can understand and what machines can understand. "Programs", we were told "should be written for humans to understand and only incidentally for computers to understand." Of these two "camps" (if that is not too strong a dyadism) I lean to the latter more than the former but neither truly works as an analogy in my opinion. The logic analogy suffers from some significant problems. There are theoretical problems to what can actually be proven about computer programs[1] and frankly, the world just doesn't seem to work this way. From time to time one hears about formally proven programs used in Defense or Aerospace but general applicability seems to be lacking. The last word on this goes to Professor Donald Knuth. My favorite quote from Knuth in fact: "Beware of bugs in the above code; I have only proved it correct, not tried it"[2]. The linguistic analogy is not without its problems either. Linguistic jousting between humans works incredibly well because humans possess that most magical of attributes: common sense. Let us leave the last word on this one also to Professor Knuth: "Any inaccuracies in this index may be explained by the fact that it has been sorted with the help of a computer."[3] Now we turn to my own favorite analogy for software. It is brutally short by design. Ready? Software is like concrete. There you have it. Nothing more needs to be said. I will let the analogy do the rest.
[1] http://en.wikipedia.org/wiki/Halting_problem |