The Limits of Software
Background
Before I launch into my latest review, I'd just like to say thanks to Hemos and Slashdot on the occasion of my twentieth review posted here. It's been 25 months since the first one (August, '98), and I've really appreciated the opportunity they've given me. Nice excuse to do something I should do anyway! :-)
The Scenario"But it is not the practitioners alone who are so moved. A thousand years in the making, the religion of technology has become the common enchantment, not only of the designers of technology but also those caught up in, and undone by, their godly designs. The expectation of ultimate salvation through technology, whatever the immediate human and social costs, has become the unspoken orthodoxy, reinforced by a market-induced enthusiasm for novelty and sanctioned by a millenarian yearning for new beginnings. This popular faith, subliminally indulged and intensified by corporate, government, and media pitchmen, inspires an awed deference to the practitioners and their promises of deliverance while diverting attention from more urgent concerns. Thus, unrestrained technological development is allowed to proceed apace, without serious scrutiny or oversight -- without reason. Pleas for some rationality, for reflection about pace and purpose, for sober assessment of costs and benefits -- for evidence even of economic value, much less larger social gains -- are dismissed as irrational. From within the faith, any and all criticism appears irrelevant, and irreverent." (TLOS, xxiii)
-- David F. Noble, The Religion of Technology, as quoted in The Limits of Software
I had the privilege of spending a few weeks with a good friend of mine in Eastern Europe back in July. Of course, to go anywhere on a budget in Europe requires a lot of train travel. Alas, there are no bullet trains in Slovenia, which gave me plenty of time to take in some reading when I wasn't chatting with my fellow passengers ...
The Limits of Software is a unique book in many ways, not the least of which is that it reads more like a collection of life stories than a lecturing textbook. Most computer books simply give you data, or even information, in a straightforward manner, hopefully punctuated by some interesting anecdotes. Britcher, instead, has packaged with words slices of time which illustrate various points about where computer programming has been, and where software development is going (note the terminology change). I certainly won't try to describe them all, but theme which runs through the book is illustrated in the opening quotation: software is not our savior. There is no "one great system" that will be able to handle things. The FAA's botched air traffic control system is used as one illustration in the book, but the point is made about all software: we cannot and must not worship it.
There's one point that I find simultaneously funny and sad: It's in the chapter on testing, and the inherent futility of such an activity on complex programs. Britcher discusses the Y2K bug, and mentions the survivalist movement.
"Just as regular folks built bomb shelters in the 1950s and 1960s to add life time to a planet white with nuclear snow, regular folks are now storing large caches of food, water, toilet paper, clothing, and, of course, the American twinship: sacred literature and ammo. One man who agreed to be interviewed for the piece was quoted: 'When you first hear about it, most people are in total denial. They can't believe that Bill Gates won't come up with a magic bullet.' (That the general population believes that Bill Gates has the answers to our programming problems is more frightening than the rollover of the millennium.)" (TLOS, 59)I quote this not as a shot at Bill (although, this being Slashdot, I'm sure some will take it that way), but to point out the inherent risks in the statement, which illustrate Britcher's point. Software is dangerous, because it does so much yet is so fragile. We (even we programmers at times) view it as a holy grail. We cannot understand how our mechanical saviors could possibly fail us. Yet, software failures are rampant, in every facet of our society (see the Risks Digest if you need examples). Software cannot solve our problems. Our problems are inherent within ourselves. As we continue to rely more and more on machines to live for us, we must remember that they, like their creators, are fallible. What's Bad? / What's Good?
When I finished TLOS, my first reaction was to think of the old saw about the life of a fighter pilot: "hours and hours of sheer boredom, punctuated by moments of sheer terror." Britchner's stories seemed to drone on at points. The FAA story was left to the end. Why did he have to go on and on about all this random stuff?
In retrospect, though, I think I have a better grasp of what Britcher was trying to convey. This is not a disaster movie told in the guise of software engineering; this is a story about one man's journey through software, and the conclusions he's come to. Read this as an technological autobiography, and I think you'll appreciate the points being made. As I said earlier, it's different, but rewarding in the end.
So What's In It For Me?A reminder that the Tower of Babel still lives in the hearts and minds of men.
You can purchase this book at Fatbrain.
Table of Contents- Foreware by Robert L. Glass
- Prologue
- Part I
- Early Systems
- Theories of Programming
- The Human Element
- Designing
- Code: The Stuff of Programs
- Testing Computer Systems
- The Impossible Profession
- Life on the Project
- Part II
- Supervision Through Language
- How Technology Changes Methods
- Size and Intellectual Gravity
- The Marketing of Science
- Errors
- The One Great System
- The Government of Programming
- The System to End All
- The End-All of Programming
- Afterward
- Reading List
"hours and hours of sheer boredom, punctuated by moments of sheer terror."
:)
funny, that's pretty much my life.
how about: "hours and hours of coding, punctuated by moments of delirium."
or: "hours and hours of sheer boredom, puctuated by lunch."
Rami
--
rJames.org - illustration
I bet there was some ancient Sumerian who gave long lectures on "The Limits of Literacy" warning that we shouldn't worship reading and writing--those skills can't make our lives better. Imagine his face if we were to show him a modern, industrialized nation.
It's a poor workman who blames his tools. If there is a way for an air-traffic to be controlled by a system, and your air-traffic control system doesn't do it, the reason is not inherent in the "limits of software"--there's some problem with your design/implementation. Software is a universal machine simulator--pure algorithms implemented as 1's and 0's. If that idea isn't worthy of awe I don't know what is.
--
Linux MAPI Server!
http://www.openone.com/software/MailOne/
Linux MAPI Server!
http://www.openone.com/software/MailOne/
(Exchange Migration HOWTO coming soon)
my local small town book store has a web site where I can enter the ISBN for any (in print or at least avaiable) book and they will put it in their next order. I pick it up there, but since it is in town it isn't a big deal (and I don't worry about it arriving in the rain). I pay sales tax, but avoid shipping. I support a small town book store that gives me a place to look over books for those that are worth reading.
Now if I just had time to read...
Unfortunately it's a valid point - no piece of software ships with all of its bugs fixed, or even discovered (note that when working for software companies these two things are not synonymous). A decent testing department given a reasonable amount of time can spot many of the more obvious bugs, but for every obvious bug there will be a dozen sneaky ones which ship.
You can guarantee that it'll be the end users that'll find these bugs, and that they'll complain to whoever sold/provided them with the software. Remember, end users can be relied upon to use the software in the most convoluted, even stupid, ways, and when they're doing something in a manner the programmer didn't anticipate chances are they'll find bugs.
This is why I think that for any large software project an open database allowing customers to report bugs is essential. As long as the programmers work on clearing these lists then problems get ironed out over time, and making sure patches are freely available reduces the number of flaws in a program and makes everyone happy.
Another problem that introduces a lot of errors today is the increasing use of third-party components and applications within software projects. These introduce another point of failure, and one in which the programmers have less control over what goes on, and less knowledge about possible solutions. Even if you have the source for the component, it's still much more likely that using it will introduce problems, either in the interface between your app and the component, or in the component itself.
The solution? I don't really think there is one that can guarantee perfect reliability. The best you can do is ensure that the number of problems is kept to a minimum, and that problems that are found are quickly dealt with.
I know people who go to the opposite extreme -- they see the problems with tecnological developments (auto pollution, atomic weapons, and the like) and take the attitude that technology is evil, or that it often is used that way.
Both the worship of techology, and the hatred of technology seems to me to miss the point. Technology is simply a tool. It can be used to create good things, and bad. It can result in good side-effects, and bad.
Speaking specifically of software development, there are times when people outside the field look with awe on the process of creating code. That ignorance of the process may contribute to those extreme ways of thinking about technology. Once you know how something works, it gets de-mystified in your mind and becomes just another tool or skill. Programming, I tell people, is like playing the piano -- it's a skill that can be learned, not magic.
Similarly, technology is a tool, not magic, not a panacea, not the solution to human problems by itself.
________________
________________
Private Essayist
only by the ability of the human mind to manage complexity. I'm tempted to fit Gödel's incompletness of formal systems in there somewhere but that seems to imply an UNlimited condition rather than limited. If 'software' is something inbetween mathematics and hardware, we see that the ability to count toward infinity is limited only by the physical realization of the computer (register size, etc).
As for fragile software, just try to 'diskcopy' a Linux boot disk in NT4-BugFix5, hehehe.
try { do() || do_not(); } catch (JediException err) { yoda(err); }
I find it ironic that the opinion that technology can't solve our problems comes right after a story about Dean Kamen, who thinks technology can solve our problems.
My personal feeling is that it can solve a lot of our problems permanently (hunger, disease, etc) however it won't spontaneously happen, it does require people and their priorities to change too. If a large enough portion of this planet decided tommorow that clean burning engines, safe drinking water and better agriculture were the areas they wanted to focus research on instead of the latest electronics gadget, then eventually we would solve those problems. In a certain way, technology is the answer, but only if society puts effort/money into moving technology ina certain direction.
I beg to differ; it will more likely be much hotter with all those lightbulbs.
Software is fragile -- but that is a problem only if you don't recognize this fact and are unprepared to deal with it.
Yes, the world depends more and more on software. Yes, there is no such thing as a bug-free piece of code. But failures need not be catastrophic. It is perfectly possible to build robust systems, ones which assume that something will crash and are able to deal with it.
It's all really risk management. Software can fail -- but so can mechanical parts. So far, at least, the biggest problems (like Chernobyl) were caused by human error, not a software glitch.
Robust systems can be build out of fragile components.
Kaa
Kaa
Kaa's Law: In any sufficiently large group of people most are idiots.
"Formal methods" sounds really great at first, as does "better quality". But each phrase contains so much hidden meaning that using them identifies you as someone who hasn't really thought about the issues at all. "Formal methods" falls down because using them assumes that we can specify accurately and precisely what the system should do. And you have to do that specification up front. Such exacting up front specification poses more of a problem than iterative development by service packs and patches. "Better quality" has no specific meaning. The American Society for Quality says: "Quality is a jubjective term for which each person has his or her own definition." This allows each of us, programmers, managers, salesmen or customers to "know" what quality is, and use the phrase informally. Then, when the rubber has to meet the road, you can't actually write code that represents "quality" because it doesn't exist except as a figment of some executive director's imagination.
The fact is that we are already highly reliant on technology in general. Over here in the UK the last few days have just taught us an object lesson in that, when a few people decided to blockade fuel supplies.
Anyone remember "Connections" by James Burke? The first programme opened with a description of a nationwide power cut in the US in the 60s, and the way in which people just assumed that power and civilisation would be restored RSN. Then he went on to discuss survival options if it had not been restored. 1: get out of the city. 2: find a farm, take and hold it by force. 3: learn to plough. Face it: if the electricity grid goes down and stays down then 90+% of the population of an industrial nation is toast.
The same thing is now happening to software: its becomging ubiquitous to the extent that things don't work without it. Fortunately we have the opportunity to ensure that systemic failures that bring down civilisation are not possible. The question is, will we have the wisdom to take advantage of this?
Paul.
You are lost in a twisty maze of little standards, all different.
Right now I'm in the computer lab, on a Dell OptiPlex GX110 with 256MB of RAM (funny, Windows 2000 regcode stickers on each computer's right side, and they have NT4 installed. One step forward, two steps back). And, for some lame reason, the Real Player "Start Center" is in the taskbar. I closed that damn icon on about 3 stations; it's just 3MB of memory being taken up. I kinda hate this; I'm in a college where people are learning the very programming language I've come to hate: Java. I sincerely think that Java is a lazy excuse for the programmers to clip off minutes from their coding schedule just so they don't have to wait through compiling code. I say, program in C++, the compile process is my most favorite! It is the defining moment which determines whether you have made progress or not.
As for the rest of my opinion on software engineers, see my quote, and think of this quote from TRON: "Oh that'll be great. Programs will start to think and the people will stop!"
"Ancillary does not mean you get to rule the world." --U.S. Circuit Judge Harry Edwards, speaking to the FCC's lawyer
First, thanks for the review.
That said, humans are fallible. What can we expect but that the artifacts they create will also be fallible? There are assuredly limits on software - limits on computability - but the limits I see here are more limits on human ability to describe solutions to problems that become larger and larger as the simpler ones are mastered.
As for technology as religion, it's not religion to me, it's a source of comfortable living.
Now, if only I could stop my VCR from blinking "12:00....12:00...."
668: Neighbour of the Beast
Vacuum tubes .. light bulbs ... who cares?
Readng this review brought to mind an anecdote shared by an old professor of mine in a class discussing the need for completeness testing and mathematical proof of algorithms.
The incident related was to do with the testing of a new auto-pilot/terrain following system being installed on the Tornado fighter-bomber (the British air-to-ground attack aircraft). All was going well with the test flight until the aircraft dipped into a valley. Shortly after entering the valley the aircraft inverted and performed the classic 'lawn dart' manouver.
There was of course an insuing investigation and analysis of the auto-pilot software during which it was found that this exact behaviour would occur if the altimeter returned a negative value.
How could this happen? The valley was below sea level.
--
The gift of death metal does not smile on the good looking.
The corollary of this fact is that any person who advocates "rolling technology back" or "going back to the land" is advocating genocide -- and should be regarded on that level of (im)morality.
I don't think it's possible to work out all of the bugs in a piece of software, simply because there are too many unseen variables. But I also don't think it's fair to cast software development in a different light merely because it is subject to the same "rules" that govern any complex system. As a means of comparison, consider how long it takes to implement a new commercial aircraft design. Consider how many defense-related projects are, or have been over budget, poorly designed, or scrapped altogether. It was, after all, a hardware "bug" that caused the explosion of the Challenger shuttle. Hell, I'd argue that it's even a hardware "bug" responsible for the Firestone debacle.
Is it fair to hold software development to a different standard? No matter which complex system you're dealing with, it always involves getting from point A to point B, and it's not always going to be an easy ride.
It's easy to say that we should avoid any risk of failure. But what does that really mean? The real question we should ask ourselves comes down to risk versus reward. Does the potential benefit outweigh the potential risk? Even where the costs of a total failure are high, that doesn't mean we must avoid it.
Take our telephone infrastructure for instance. It's provided society with tremendous and undeniable benefits. Yet the possibility of a total failure is not an impossibility, and certainly wasn't earlier. Would we really have been better off avoiding it because we could never absolutely insure against catastrophe? I'd argue that the costs of avoiding it, of being overly risk averse, far outweigh the benefits that each and every generation has had. Worst case scenario: the telephone networks in the US fail for a couple days. That'd cause some chaos certainly and it might cost the US billions. But I'd argue that having not used it, or having forced excessively costly redundancy [back when before we had digital technology and the like], would have cost the US most of the benefits of the 20th century (i.e., trillions of dollars).
This is not to say that where affordable precautions become available they should be shunned. That factors into a risk/reward equation. Now certanly there is plenty of room for debate about what is an acceptable level of "risk", but the point is to show that even where apparently extremely costly worst case scenarios exist doesn't necessarily mean avenues of progress should be avoided. Nor do I mean to say that everyone has taken a rational approach to risk/reward; certainly there are some instances where it's been totally out of whack. In the vast majority of cases though, it's been my experience that the people that run these systems are nothing if not risk averse. Because they fear failure more than they probably should, the systems generally are acceptably safe.
- Java does not "always compile on the user (sic) side." It is much more common for Java applets and servlets to be running as middleware on servers these days, for portability and standardization.
- If you're talking about the scripts that are embedded in HTML code, that is javascript, a Netscape invention, and has nothing to do with Java(tm) the Sun programming language. Embedded HTML scripts, of course, are always executed client-side, just like VBScript, ActiveX controls, and DHTML.
- You are so woefully misinformed on this topic that people are mistaking you for a troll. Why don't you go look up the difference between Java and Javascript sometime, instead of just making stuff up that you overheard somebody talking about once?
- If run-time performance is the only thing you care about, perhaps you should take a class in Assembly language. Assembly programs have runtimes on the order of magnitude of 20-100X faster than compiled C code.
I don't usually even bother to respond to people who flame whole languages without even knowing the basics of said languages.The days of Java applets being downloaded and executed in a JVM in the client's browser are long gone. Microsoft killed them by "extending" the Java Virtual Machine that comes with Internet Explorer (which is bundled with Windows blah blah blah), breaking most "cross-platform" Java code in the process.
However, your posts are written as if you think you're some sort of programming expert, which you obviously are not, if you can't even tell Java from Javascript.
Free music from Jack Merlot.
Unfortunately, there will always be a disconnect between specs and code. Programming languages have cruft and artifacts that will always force code != specs.
..., An Experiment in Software Prototyping Productivity" about a programming language experiment. The Naval Surface Warfare Center had programmers implement a "geometric region server" (a component of the Navy's AEGIS system) in their language of choice. Program length and development time for each project are compared for the different languages. The surprise "winner" was an extemely concise program written (by the paper's author, of course) in the functional programming lanaguage Haskell. The other languages have so much cruft that eventually makes the code look nothing like the "human readable" spec.
;-)
Here's an interesting paper called "Haskell vs. Ada vs. C++ vs. Awk vs.
Compare!
LANGUAGE, LINES OF CODE, LINES OF DOC, DEV TIME (HOURS)
Haskell #1, 85, 465, 10
Haskell #2, 156, 112, 8
My favorite quote from the paper:
"In conducting the independent design review at Intermetrics, there was a significant sense of disbelief. We quote from (CHJ93): "It is significant that Mr. Domanski, Mr. Banowetz, and Dr. Brosgol were all surprised and suspicious when we told them that the Haskell prototype P1 is a complete tested executable program. We provided them with a copy of P1 without explaining that it was a program, and based on preconceptions from their past experience, they had studied P1 under the assumption that it was a mixture of requirements specifications and top level design. They were convinced it was incomplete because it did not address issues such as data structure design and execution order."
cpeterso
LANGUAGE, LINES OF CODE, LINES OF DOC, DEV TIME (HOURS)
Haskell #1, 85, 465, 10
Haskell #2, 156, 112, 8
Ada, 787, 714, 23
Ada9X, 800, 200, 28
C++, 1105, 130
Awk, 250, 150
Lisp, 274, 12, 3
cpeterso
Sorry, but you have no idea what you're talking about.
Our present urban population densities cannot be maintained without out present technologies. That's not the same thing as our present level of population. Many of our rural areas have become depopulated over the last decades. Wes Jackson estimates that, according to the best archeological evidence, his area of Kansas supported more population in pre-Columbian times that live there today.
You are presenting your assertion as fact, and laying a classic ad hominem on anyone who might disagree with your "fact."
If today's technologies are unsustainable (and there's good evidence that they are), isn't it "genocidal" to advocate marching forward blindly until the crash happens? Better, I think, to look for "soft landing" scenarios -- which do involve "back to the land" and "rolling back technology."
There are several disproofs by example for your thesis, but I will simply name one -- the Amish. The Amish way supports a higher population density than the "English" techno-agri-business way, with less environmental impact at the same time. Keep in mind that the Amish do innovate technologically -- the key is that they most emphatically do not worship technology, but subordinate their technological choices to their religious and cultural priorities. If only the rest of us were so wise as to keep technology our servant rather than our master.
Civilizations existed quite happily for millenia without the "progess" we think new technologies will bring us
...and were then crushed when progressive civilizations decided to move into their territories.
The purpose of progress is not a more pleasurable life (as many have discovered, and enshrined in religions and philosophies that ought to be considered forms of insanity, perfect eternal happiness is simply a matter of learning to ignore your sensory input), but survival. The societies which progress and become stronger crush those which grow more slowly.
Putting the brakes on and deciding that you've progressed far enough is societal suicide.
--------
As for your lag problems, who knows. I have a P-II 350 with an ancient Voodoo2 card that runs Unreal just fine. I'll grant you that the Microsoft Java Virtual Machine is damned slow to start, though.
Free music from Jack Merlot.
the same Department of Defense that got rated a D+ in their security audit last week? And we're supposed to look to them for an example?
heh.
Free music from Jack Merlot.
I don't disagree with this. One can do great damage to fertile land. But that doesn't mean the inverse is true, that we can take any land and make it sufficiently arrable.
I sincerely doubt that. Based on your previously blatent miscontruing of the facts, I doubt your premises.
I don't live in Kansas, I live outside Philly. But I know enough about agriculture and history to know most of the Indians lacked based agricultural skills.
Sounds awefully bubbly to me. Though I'm not terribly familiar with the Australian Aboriganess, I suspect they were more hunter-gatherer than they were agricultural, especially given the conditions. So what does it really mean to say on the "same" land. They, most likely, took an entirely different approach to the land. Exploiting and eating things that no Westerner would dream of. Furthermore, I doubt they confined their activities to a single acre...and even if they did, it's not as self-confined as, say, farming can be. You kill a wild animal on your land, and that has an impact on the surrounding area. Though there may be been clusters/tribes/city-states of these Aboriginees, their overall lack of density would allow for certain practices that couldn't be practiced today.
We're also talking about a people whose population was curbed by the constant threat of infant mortality, starvation, sickness, etc. Yes, in their limited sizes I would agree that they didn't "rape" the land. Because they didn't farm any land, they couldn't easily damage any land. However, without farming they simply could never has sustained a large population. The analogy is a poor one.
I think some agricultural problems today definetly need to be addressed, but it is foolish to assert that the primitive cultures produced more food per acre [or rather that they could have sustained our populations]. You certainly have not made a convincing argument for it. You can't demonstrate that the vastly inhospitable lands in this world can suddenly be turned around into an idealistic Amish community. And you certainly can't demonstrate that ALL [or even most] land can do this.
Mammoths were hunted to extinction by my stone-age ancestors. American Indians used to drive whole herds of buffalo off cliffs merely to save the bother of isolating and killing the one they needed. They also wiped out a lot of the native american megafauna when they first arrived. The moa (large flightless New Zealand bird) was hunted to extinction in around 160 years after the first humans arrived. Tell me your ethnic origin, and I'll find a list of the species your stone-age ancestors drove to extinction.
Oh, and that beautiful speech by Chief Seattle which starts "How can you buy or sell the sky? The land? The idea is strange to us..." was never said by him. It was actually written by a film scriptwriter named Ted Perry for a 1972 documentary. Type their names into Google for more info.
To be sure, many stone age peoples have lived in "harmony" (i.e. rough equilbrium) for many thousands of years. But this is not due to any special wisdom on their part, merely the fact that the ones who didn't went extinct so we don't see them. And my 19th century ancestors who destroyed the dodo and introduced rats and rabbits to Austrailia are no better. We in the 20th century can claim exactly one point of superiority over any of them, which is that we have finally figured out what we are doing. Those who would have us forget that and go back to the stone age have seriously missed the point.
Paul.
You are lost in a twisty maze of little standards, all different.