We are led to believe by the technical literature, school, the media - that Software Development is "Engineering". So called "certified engineers" (IEEE
and so forth) take offense to this, but both sides are somewhat correct. That is, Software development is more akin to plumbing
than it is to true engineering. How can you engineer something with tools that can sometimes change daily? with tools that themselves are written by individuals, groups of individuals, groups of groups, that may or not be accurate? At least with electrical or mechanical engineering there are some constants (like Gravity, Ohms Law, Laws of Thermodynamics, "big laws"). In Software, the best we get is "the software development lifecycle", and theories that more specifically concern managing the people and process that develops the software, rather than the tools and specifications of the actual software.
Note: Not For Lack Of Trying. See The Mythical Man Month and others.
Yet our perception is that with enough thought, late nights and caffineated beverages (see naive perceptions about software development
we can approach the degree of precision defined by physical engineering. This is an arrogant posture, and great failures like Windows Stability
will echo this for ages to come. Yet as a corollary, we have Linux
In development, based on some of the premises above, how can we ever get to a point of being able to analyze something from an unknown position? Our best efforts are Trial and Error
, a combination of knowledge of the code and environment, and guesstimates as what to disable to identify problems. In fact the only usefull software method I have yet found for identifing deep bugs
is a process akin to the famous Quick Sort
method. At least this way you tend to find the bug in less than X^N time.
Of course, this dosen't help much with Link Errors.