This is one of many good posts about how DRY isn’t a Kantian imperative.
“Well of course it isn’t. Nothing in craft is universal. If it were, then it would be untechnical.”
Sure. But (a) it’s not easy to tell when something is craft vs. knowledge and (b) the art/craft of computer programming in particular feels variously more sciencey and more dirty/crafty. Most of us programmers usually treat the down-to-the-metal stack as if it were both formally and physically verified. Of course neither is usually true (e.g. most of us don’t use CompCert), so in fact we deal with plenty of unknown matter even when writing code that calls no other code at the same abstraction level — let alone when we directly call someone else’s code. But it’s nice, and not unreasonable, to think of even higher-level computer languages — and sometimes especially higher-level computer languages that more transparently implement the lambda calculus (sure, Haskell — more on lambda calculus and hylomorphism in another post, I hope) — as the closest tekhne comes to episteme.
But the matter to our code-form becomes hilariously intractable — as frustrating as the whole physical universe is to Plotinus or Yoda — when we work with code written by other people, or with code written by ourselves at some other time. When you’ve painted yourself into a corner by too much of the wrong abstraction, or by coupling system-parts too tightly (whether by too much or too little abstraction!), you realize that the thing you’re taking as given — the (qua given) hyle to your inchoate morphe — sucks and is wrong.
Now this (self-or-other) social material intractability isn’t a feature of program-as-material as such. Pay attention to the phenomenology. When you encounter such nonsense, you don’t feel philosophically rejecting of anything but The One. You do feel a kind of negation — not the Siddarthan negation of the evil suffering finite world — but a raging negation of the crappiness of some jerk (possibly yourself) whose idiotic blindness is now screwing you over.
Matter is intractable because someone hates you. I hate that idiot programmer (probably me but that doesn’t matter along any dimension) now too. *commence tearing out all the wires and 100% refactoring in a rage*
(The utilitarian rationality of such rage depends, of course, on the incidence of Chesterton’s fence. I guess that’s an empirical question. It would be nice, if in no way evidently possible (both because of hopelessly vague terms and also because how can you know when a program is ‘done’), to count ‘out of the times a developer thought code block b was crap but did not remove it because of Chesterton’s fence, how many times did b turn out to be crap’ or ‘out of the times a developer did tear out code block b, how many times did it turn out that the fence was there for good reason’.)
Obviously rage is only one of many feelings you get (psychomodalities of programming? sure let’s mix Latin and Greek roots) when writing code.
In future posts I’ll cover (1) other feelings felt while programming (as I catalogue and reflect more — feel free to list and describe such feelings in comments) and (2) the ‘rage at the incompetent garbage-creator’ described in this post in a longer history-of-ideas context.
My first thought is to go back to Homer’s menis, read through the ‘Hippocratic rejection of moksha‘ lens (we developers are, uh, physicians of..bad codebases? physicians are, uh, refactorers of..code-rotting bodies?). For another time...