
My restrospective on developing software for a quarter of a century
When reflecting on my daily work as professional software engineer, I am reminded of the fictional character Tom Builder in the famous novel The Pillars of the Earth by Ken Follet. Being a mason in 12th century England, he travels from one construction site to another do find work. In that time, building trades and architecture in Europe was still in its infancy, and expertise was sparse. His passion is driven by his dream of building a cathedral, the opus magnum of his career.
Just as building cathedrals has been one of the most difficult tasks imaginable and practiced in medieval England, the same is true for building software today.1 And to the same extend, computer science and software development is still in its infancy. Yesterday, I drove past my school where I was gently introduced to HTML and JavaScript 25 years ago. Seven years earlier, in 1991, Tim Berners-Lee had invented the World-Wide-Web and we studied frameset attributes, before obsession for pixel-perfection was about to abuse tables for page layout. And after playing with lines and circles to draw a realtime-clock on a JavaScript canvas in Netscape, I was glad that we turned to the real stuff like relational databases and applications with Borland Delphi.
That said, Delphi has turned into a nostalgic relic of a past era. Relational databases have stood the test of time, still being the foundation of many applications we use today. WWW transformed the world in just 30 years, with HTML and JavaScript beneath it. So far to my future-telling abilities. It is vital to remember, that we are building on technology that is no older than 50 years. And while having strong mathematical roots, theoretical foundations like the Lambda calculus by Alonzo Church, the model of computer architecture formed by John von-Neumann or the mathematical model of an abstract computing machine by Alan Turing, all have been introduced by ingenious minds less than a century ago.
What does that mean for us who are trying to build great software today? Well, like the builders of ancient cathedrals, we have to challenge our knowledge to build things that could not have been envisioned before. Buildings have collapsed because the effect of wind was underestimated. Likewise, we have to discover expertise and learn from mistakes. Then as now, the only constant is change. Like building a tower too high for the originally designed foundation, changing stakeholder demands will put our software to a massive stress test. Sometimes it will break and fail epically. Therefore, a good developer learns from his mistakes. A great developer learns from the mistakes of others.
Like the craft of construction and architecture has matured over centuries, software engineering is maturing these days. Patterns emerge that have proven to be appropriate solutions for recurring problems. Other solutions, though compelling at the surface, are now identified as misleading and anti-patterns. That knowledge is accumulating and spreading, transforming software engineering from the art of a few masterminds to a craft you and I can master. Taking part in these transformation is both exciting and rewarding, an adventure similar to that of Tom Builder in the novel.
A final turn to architecture: There are a few first-class historic artifacts like the Pantheon in Rome or the Pyramids in Egypt. Today we marvel at how they were built and doubt whether our modern technology is sufficient to recreate them. Certainly, in the centuries to come, the WWW will be considered a fist-class artifact of our time. So if you are a passionate software engineer: Be creative. Strive for excellence. Build your cathedral. And don’t hesitate in the face of failure. Maybe you are building the monumental artifact of our time right now.
-
↩
as pointed out by Andy Hunt with a similar phrase in Pragmatic Thinking & Learning