For novel ideas about building embedded systems (both hardware and firmware), join the 27,000+ engineers who subscribe to The Embedded Muse, a free biweekly newsletter. The Muse has no hype and no vendor PR. It takes just a few seconds (just enter your email, which is shared with absolutely no one) to subscribe.
By Jack Ganssle
How many Americans could name a single living engineer (Bill Gates excepted, assuming he is or was one of our brethren)? When I told friends that Dean Kamen was giving the ESC's keynote, most returned a blank stare. Steve Wozniak was once a well-known developer, but he's faded into obscurity despite San Jose's Woz Way.
Last week, however, the New York Times did profile (http://www.nytimes.com/2006/05/02/science/02prof.html) an engineer, one who is well-known in at least some circles. Henry Petroski is both an engineer and probably the most prolific and well-known author of books about engineering. He covers our field with passion and eloquence.
Petroski's publications are too numerous to list here. Some of my favorites include To Engineer is Human: The Role of Failure in Successful Design, Engineers of Dreams: Great Bridge Builders and The Spanning of America, and The Evolution of Useful Things. His 350 page story about the invention and perfection of the lowly pencil (The Pencil: A History of Design and Circumstance) was, to me at least, a breathtaking look at the nature of technology in general, and this writing instrument in particular. Be warned that some Amazon.com reviewers complain that the tome is a slow read. Be further warned that if folks see your nose in this book you'll get no end of razzing about your reading selections. I've just ordered his latest work (Success Through Failure: The Paradox of Design) which came out a few weeks ago.
Petroski is fascinated both with engineering itself, and with the role of failure in improving products. He brings these two together in describing the difference between science and engineering (which most people just don't understand): science's role is to explain the "given world," while engineers create the "built world."
The nature of failure fills his works, which unfortunately so far ignores software. To quote from the New York Times article: "In designing and building, engineers calculate how components of their design must perform, and how much stress they can endure before they will give way." If one accepts this not unreasonable view the phrase software engineer seems incorrect. though I chose to embrace it. Engineers solve problems, along the way building the world, using bricks and mortar as well as ones and zeroes.
A single bit error in a program can doom a system, yet there's no way to calculate where the stresses exist. The failure of some software-based systems can be utterly catastrophic. Petroski says: "Systems that require error-free performance are doomed to failure." Not a happy thought for any complex application.
He further states: "Devices can be made foolproof, but not damn-fool-proof." Yet the world is packed full of the damn-fools who use our products - our customers, who mostly aren't all that foolish, but who use the equipment without adequate training, or who apply inputs we never expected to see in a real-world environment. What we engineers might call a damn-fool input is really just unexpected stimulus that breaks our damn-fool code.
There's a lot we can learn from the failures of others in any engineering discipline. I highly recommend his books for all engineers - even software engineers.