I read an interesting post this evening by Michael DeHaan, titled The Archaeology of Software. In it, he makes the case that there is a great deal of value in endeavoring to understand why things exist as they do in, specifically, the field of software development. He says (I’m paraphrasing) that’s way more productive than dismissing something out of hand as being subpar, dumb, brain dead, or whatever – and a learning opportunity is missed. He makes a lot of insightful points, and I highly recommend you spend a few minutes reading it.
I know he was making a larger point about how some people behave towards others’ solutions and ways we might strive to rise above pettiness and vitriol to be more constructive, but he touches on so many facets of engineering. What struck me as I read his post was how much engineering wisdom there was implicit in his words. I don’t know Michael, and can’t say how deliberate his wording was, but he at least casually touched on the essence of engineering a lot in the post. He spent a great deal of time enumerating a long list of heuristics he has developed over time (see my last post). These heuristics are very obviously hard earned from experience, and are all very consistent with the essence of engineering.
The essence of engineering is the use of heuristics to produce an optimal solution to a poorly understood problem with limited resources. The intent, if not the words, is all over his post. He speaks to it directly when suggesting that “Every piece of software tells us something about the people and time that created it.” and “Everything is a product of compromise and constraints.”
In engineering (and elsewhere), we often use the term “state-of-the-art”. Generally, I think people take it to mean something akin to “cutting edge technology”; but, you might also know that state-of-the-art describes an individual’s state of development at a particular point in time. Think of it as a timestamped snapshot of all the heuristics, knowledge, and skills that a particular individual possessed at that moment, and thus had at their disposal, to create the optimal solution to the poorly understood problem they were solving, within the constraints they had placed on them.
The same individual would likely produce a different solution to the exact same problem and constraints later in life, having a different state-of-the-art. More or different information about the problem would probably cause the same engineer to change their solution in some way. Likewise, a different set of constraints would likely lead to a different solution, as well.
Knowing all this, one big pitfall we have to avoid is judging a solution born of a different, older state-of-the-art against a newer, updated state-of-the-art. New information has since come to light. New heuristics developed. Old heuristics evolved. New experiences change ones perspective. Goals change. Whatever the situation, it is critical to remember that every solution that exists was, by definition, the best solution at that time with those associated constraints and that engineer’s state-of-the-art. To retroactively judge the solution unacceptable by whatever new criteria you inject is intellectually dishonest and deliberately ignores this basic truth about state-of-the-art and the human condition.
On a more personally intimate note, his post hit home for me in another way. He states ‘Everytime we log on to twitter and say “X sucks and the guy who wrote X is a monkey!”, we lose sight of the fact, and we’ve lost the opportunity to learn. We’ve let some mythical idea that software is perfect keep us, ourselves, from being better. We’ve also made others less likely to share their own creations.‘ (emphasis mine) I can confirm this is a real phenomena. I’m not particularly thin skinned or overly sensitive, but I am very reluctant to put myself or my work out there if I have concerns about undue ridicule or harshness. I pride myself in being intelligent and creative, but there’s a whole lot I don’t know. It’s hard for me to expose myself to criticism even when I can recognize it as being logically fallacious, misguided, or otherwise uninformed. I value learning as a core virtue. I love learning. I love helping others learn. Nothing destroys that faster than negativity or impugning another’s skills and motives. I think that’s human nature.
“So let’s stop with the ‘X Sucks!!!’, and instead learn from everything.”