Another comment on good software…
Good software design papers don’t try to compare software development with civil engineering because (from reading the article):
- The architect frequently fails to design something interesting that can actually be built, on the first draft
- Commercial buildings are frequently reused in ways not envisioned by the original developer/builder
- Single family dwellings frequently get the room scale off so that the house may only hold 4 people, but it has three bathrooms, making a regular cleaning nightmare
- Apartment buildings are built cheap and with little care for inter-apartment noise separation
- Builders make lots of mistakes and take many shortcuts because they know that by the time you look inside the wall, you’ll never see that they didn’t put insulation where they should have and you’re stuck with a cold wall, or that a concrete storm drain was improperly substituted for currogated plastic
- Principles for building things from wood or brick haven’t really changed in a hundred years - slightly greater precision and a few new building materials don’t change the fact that carpentry skills learned as a kid are very applicable today
- Principles for steam houses, steel structures, etc. haven’t changed in over 50 years
- Single family dwellings are frequently built all alike for a few dozen or more houses, removing all real engineering from the problem
People who do construction live in a very slow moving world.
- I learned C++ in college before STL and try/catch blocks
- Guys 7 years my senior never even got to learn C++ in college
- My tools to build my software (IDEs, compilers, debuggers, optimizers, static analyzers, etc) change in dramatic ways every two to three years
- Places my software is expected to work changes every year
- If somebody breaks into my house, I buy an off-the-shelf countermeasure, but if someone breaks into my software I purchased, I frequently just have to wait for the developer/vendor to close it
- Construction people don’t visit my house every six months and make improvements - which is good - but I’m expected to provide profitable upgrades every 6 months or less to include new features at the least
The list goes on, and is actually rather obvious in many cases. One thing that architects and software developers have in common though: If the customer writing the requirements is an idiot, or worse an idiot who is dead set that they know better than you, then you can rest assured you will never deliver a satisfactory product.
[via /.]