The Future of Computing: Logic or Biology (2003) [pdf]
I&#x27;m a mathematician. Math shares a lot in common with programming. So much that it&#x27;s easy to conflate the two. This caused me a lot of misery.<p>The problem is that the constraints around the development of mathematics are entirely different than software. Math is abstract, and there&#x27;s no tolerance for incorrectness. A single inconsistency and we throw out the entire thing. Math is also not stateful, it costs nothing to throw out a theorem.<p>Software is constrained in all directions: time, cost, performance, memory pressure, hardware compatibility, etc. For all that math shares with programming, practicing math shares very little with practicing programming. It was frustrating trying to design correct programs.<p>My misery ended when I started thinking about software as biological systems. Software isn&#x27;t constrained by correctness, it&#x27;s constrained by <i>fitness</i>. Software decays if it&#x27;s not maintained. It needs a metabolism: it must capture free energy from the environment and use that energy to increase its fitness (eg, making money in commercial software, or being useful to its maintainers in free software). It must reproduce, &quot;infecting&quot; new hosts. Software grows through accreted complexity and mutation, not up-front design. Software is unfit for survival outside of its ecosystem; as the ecosystem changes, it must adapt. Software has competition, predators, prey, symbiotes, and viruses.