Compared to other professions, software engineering is still in its infancy. But having almost reached a point where the code still running at the bottom of many large systems wasn’t written in living memory, there are now some early signs that this phase may finally be passing.
The day-to-day life faced by most programmers today rarely involves writing large amounts of code. Opening the editor on an entirely new project is a memorable event. Instead they spend time refactoring, tracking down bugs, and sticking disparate systems together with glue code.
“The word for all this is a ‘mature programming environment.’ Basically, when hardware performance has been pushed to its final limit, and programmers have had several centuries to code, you reach a point where there is far more significant code than can be rationalised…” — Vernor Vinge, A Deepness in the Sky.
The term “Programmer-Archeologist” was invented by science fiction author Vernor Vinge to describe the environment faced by programmers onboard Bussard ramjet powered slow ships travelling between the stars. However I think we may well have reached a point where it applies far sooner than he imagined. I think in fact, that we might be quite close to that point right now.
If you look at any modern system where there has been time to accumulate legacy code — most big banks for instance — I think we’re already there really. Layers of legacy code, encapsulating institutional knowledge. A legacy software system is years of undocumented corner cases, bug fixes, codified procedures, all wrapped inside software. If you start from scratch you’ll miss things. There is no guarantee that you’ll end up in a better situation, just a…