Updated Jul 01, 2023

The Nature of Software Engineering

Software engineering is a captivating field of human endeavour, and it is distinctly different from other engineering disciplines as chalk is from cheese. Its uniqueness lies in its foundations rooted in human invention rather than discoveries governed by immutable natural laws. I find it sometimes fascinating and other times, disturbing because I wonder if certain aspects of software engineering will ever reach stability. After a long conversation between both sides of my brain, and in the hope of ending this quiet mind-chatter I’ve decided to share my thoughts on this with you.

Discovery vs. Invention: A Crucial Distinction

To understand the nuances of software engineering, one must first distinguish between 'discovery' and 'invention'. A discovery involves uncovering an existing but previously unknown truth or principle. Discovery is like finding a hidden treasure - it was always there, buried in the sands of the unknown, waiting to be stumbled upon, these are things grounded in the natural world that were either previously hidden or misunderstood. The laws of physics, for instance, were not invented; they were discovered. Gravity, electricity, etc.

Inventions, however, are the fruits of human creativity and ingenuity (God bless the human mind). Inventions are like pulling a rabbit out of a hat, they involve bringing into existence something novel, not existing before, using our cognitive and technical skills. For instance, the computer wasn't discovered; it was invented by combining various principles and concepts from different fields.

The Invention-Rooted Discipline: Software Engineering

Software engineering is deeply rooted in invention. From the intricacies of hardware that constitute computing devices to the intricate logic in software that runs on them, everything emerges from human invention. Even development methodologies, testing strategies, programming languages, and technology stacks are the products of human ingenuity and creativity.

However, humans, unlike natural laws, are imperfect beings. Every human creation carries the potential for flaws and inconsistencies. This human element introduces an inherent unpredictability to the field of software engineering that its more traditional counterparts often don't face.

Einstein believed that the fundamental laws of nature are simple and elegant, and this belief guided much of his work. He's famously quoted as saying, "When I am judging a theory, I ask myself whether, if I were God, I would have arranged the world in such a way." This quote reflects his belief in a universe that is not arbitrary or capricious but instead is governed by simple, elegant rules.

Humans aren’t omniscient. Man’s creation is often constrained by today’s facts and requirements that limit our ability to invent.

Imperfection and Variability: The Constant Companions

Since software engineering is grounded in human invention, it's subject to the idiosyncrasies and flaws inherent in its creators. No two pieces of software, even if intended to perform the same function, are exactly alike. Each reflects the unique thought processes, skill levels, and even the biases of its creators.

This industry is one that is constantly churning out innovations, and every innovation brings its own set of potential imperfections, necessitating an ongoing cycle of refinement and adaptation. There’s a constant emergence of new frameworks and methodologies, driven by a quest to address these imperfections. Each new idea or invention we come up with can carry its own set of problems. This is just part of the process. It means we need to keep fine-tuning these ideas, making them better and more efficient over time.

At the same time, we're always seeing new ways of doing things - new methods and new structures - popping up. These are all trying to fix the problems or flaws of the ones that came before.

The consequences of this human-led invention process are amplified by the absence of unchanging natural laws to guide the discipline. This contrasts sharply with fields like civil or mechanical engineering, where the behaviour of systems can be predicted with a high degree of certainty based on fundamental principles derived from nature.

Embracing the Complexity

The fluid nature of software engineering principles leads to an unending dance of creation, adaptation, and evolution. As newer, more efficient methodologies surface, older ones may fall by the wayside, lending an ever-changing landscape to the field. Despite the challenges this presents, it also propels the discipline forward, fostering a culture of continual learning, growth, and innovation.

While all this might seem like an attempt to tame a wild, unpredictable beast, it's this very unpredictability and constant change that lend software engineering its pulsating energy. The field is always on the frontier, pushing boundaries, and innovating while learning from and refining the past.

So here's a toast to software engineering, a realm that finds beauty in imperfection, thrives amidst variability, and where change is the only predictable constant. Indeed, it's this balance between the trials of continuous change, the potential for breakthrough innovation, and the acceptance of inherent human imperfection that makes software engineering a truly fascinating realm of discovery.