“I’m still pondering how valuable reusable software components are. Brooks and Knuth make compelling but contrasting arguments.”
My argument against reusable libraries is that they make society more fragile: the more robust a library, the more quickly knowledge of its internals will evaporate over time. In contrast, libraries that require constant tending keep us on our toes, and our society more antifragile.
Ok, so can we just have some people be expert in its internals and occasionally hire someone to replace people who leave? That’s what everyone tries to do today. The trouble with it is:
a) As Peter Naur says, we don’t know how to losslessly train newcomers to a codebase.
b) The principal-agent problem. Experts without accountability start acting in their own interests rather than that of their customers/users. And we don’t know how to hold programmers accountable without understanding the code they write.
The end result: lots of programmers who all know nothing about most things, and are as disempowered as non-programmers about most software. An internet where everything is constantly being pwned.
Division of labor is an extremely mature state for a society. Aiming prematurely for it is counterproductive. Rather than try to imitate more mature domains, start from scratch and see what this domain ends up needing.