I am not a good developer by professional standards. I have a solid theoretical background, understand how things work or should be done and have no problem coding small things, but what I lack is experience in big software projects that require cooperation and implementing certain best practices before the code turns into some intangible mess. Working with other people’s code for quite a long time, I have observed that as they grow, most projects naturally drift towards utter chaos, and it requires well-thought and conscious effort to prevent this from happening. Sometimes even such efforts fail miserably.
One of my friends told me as a secret, that he’s wondering how on Earth the system he’s been working on has made it to production, sells as expected, receives positive reviews and operates reasonably well. “If only they knew” – he said to me – “how it is all fixed with duct tape and bubble gum inside, they would have never used our product, let alone paying for it.” Some time ago I’d fully empathize with his complaint, nod my head in agreement that this should never have happened, and join him in worry about the unaware users who don’t even suspect what kind of trap they have bought. Since then I’ve realized that most of the code released on this planet is screwed in this or some other way – starting with the very code that defines all of us.
Ever since I heard about DNA and software coding, I was always amazed by the fact that every living being contains the complete blueprint of how it was made. As an early teenager I thought it shouldn’t take more than few years to reverse-engineer the programming language that set up the rules for all of life on Earth, and use it to our advantage – cure cancer for instance, or reverse the ageing processes in our bodies. Even though it’s been more than few years now and we have fully sequenced the whole human genome, we are still quite far from this goal. The language of life turns out to be so tangled up, interdependent and incomprehensible, that no reasonable developer would ever want to use it. Yet somehow it works.
Our code base is full of long useless parts, dirty hacks that break the work of some other modules and temporary workarounds that are here to stay forever. As for a project that has been built up slowly for millions of years and always fixed on the go without anyone there to refactor it later, that’s hardly surprising. But what’s even worse, some of the parts that ages ago were crucial to our success are now clearly outdated. Our hardware and software (both tangled up together in the most terrible way) fail to make up for the changes in our environment – and thanks to our technical progress, in the last few hundred years these are extremely fast and ever accelerating. Moths flying right into flame, woodpeckers attacking metal chimneys, or humans overeating on sugar are just few very simple examples. What kind of bugs we’ll discover in another few hundred years is almost impossible to predict.
Nature didn’t bother making it easy to fix these bugs, even though our survival may depend on it some day. She didn’t attach any documentation along with the source code. She doesn’t use a version control system and we’re lucky if we find sometimes a little fragment of any previous release. Nature knows no coding standards, no design principles, no system tests. Her products work only because She has apparently no competition from the outside plus unlimited budget and time.
Still we are trying to find our way through this mess, replacing slowly the code – one line here, another one there – to see where it goes. Our best scientists are now like the twelve year old me that did the same thing with a copy of my teacher’s website to figure out how HTML works (apologize Mr Miciuk, you have done nothing to deserve this). Perhaps after some time we’ll get quite fluent in the DNA language. Perhaps we’ll start building our own simple projects from scratch. Perhaps someday we’ll even get to the point of refactoring, fixing, and optimizing the code base of our fellow human beings. As scary as it sounds, and even though temporary solutions are always the ones that last the longest, it’s still way too exciting for us not to try.