Saturday, November 17, 2012

Cultured Software, Part II

OK, I'm done quietly crying bitter tears of joy as PHP intrudes upon my thoughts, so let me continue with less rant but just as much conjecture.

As a profession, software struggles to remain relevant even as the technology becomes intractably entwined with our culture. Software ecosystems can build up code detritus so rapidly that it entraps their bat-like programmers as if it were some great pile of guano sealing off the mouth of their cave. There continue to be gaps between understanding, resourcefulness in construction, discipline in deployment, and proper accountability in maintenance. Some subcultures appear to be actively trying to shrink those gaps, yet they persist and increase both in quantity and scale. Like any infrastructure - roads, fuel and water pipelines, bridges, etc - software exists in an environment and it degrades over time unless sufficient back-pressure (work) is exerted to keep it together.

There is a kind of programmer with an unhealthy avoidance, an unwillingness to reconsider coding practices and account for sufficient code churn, that is, refactoring. They don't value, count the costs of, communicate, or ethically set expectations for the effort required to make software. Such programmers may look at software as a one-shot effort, rather than an on-going concern. We have probably all seen the ill-conceived notion of job security that holds work together with spit and baling wire - through regular but unpredictable manual intervention.

Now, I wrote "unhealthy," when the reality may be that such a programmer may be completely on top of their game, making money hand over fist, and having a large gaggle of more than slightly confused impressionable clients. "Unhealthy" is more a reference to the long term consequence to the profession of the uncounted costs, and to the client of the spit and baling wire that lie behind what might be a beautiful artifice. Nor is it necessarily a "fault" of the programmer: he is reacting organically to the culture that allows him (or her) to survive and thrive.

Refactoring is a software analog of composting: it breaks down code to make the primitive knowledge entrained in the source available to feed regrowth. In composting, some substances require special handling to reduce and lots of stuff just doesn't break down at all.  Unless conditions are insanely stable, there is a finite amount of time to use compost before it weathers and living creatures scavenge its useful energy. Reworking a software system, for instance, often surfaces hidden assumptions, wrong-headed wild guesses, and punts; the mind of the programmer reveals structure in part by ripping the system apart slowly and digesting the implications.  

A few substances that make their way into compost piles can poison and turn the pile putrid (alive, but fetid), even if in small amounts they are relatively inert and innocuous. Software has such seeds of disruption too. One class of putrefying software artifact I like to think of as a fixed point, to abuse a term from algebraic theory.

No comments: