What is Software Development?
What exactly is software development? It’s inherently intangible. At the physical level, programming is just turning keystrokes into meaningful patterns of electrons. At the intellectual level, however, software development is a universe of its own.
A while ago, a colleague proudly proclaimed “making software isn’t engineering, it’s an art!” That really got me thinking about the validity of that statement, and what it really means. There’s software engineering and computer science, but what about art?
To find an answer, I wanted a better understanding of what exactly engineering, science, and art actually are. If you look up engineering in the dictionary, you’ll see the following:
It’s really the second definition that stands out: the application of science and mathematics by which the properties of matter and the sources of energy in nature are made useful to people. Software does indeed apply different fields of science and mathematics to make something that’s useful to people.
The latter half of the second definition of engineering is the design and manufacture of complex products. Software is assuredly a complex product, made up of many different components, and it requires careful design and manufacture.
The last part of the definition of engineering is calculated manipulation or direction. Software development, at its core, is the manipulation and direction of a computer system. The developer is directing the behavior of the computer itself.
Accordingly, software development is engineering in a number of ways. That means a software engineer is in fact performing engineering, when they design and develop software.
Having established that software development is engineering, let’s consider whether it could also be science or even art. Following the same technique, let’s dissect the definition of science:
Systematized knowledge is any information which can be arranged according to an organized system. Software development requires understanding highly specific, organized information. Hence, it falls under the second definition of science. It can be studied and learned.
Furthermore, the development of software applies scientific and mathematical laws to bring about something useful in the real world. Essentially, it turns binary numbers into practical outcomes. Consequently, it also falls under the fourth definition of science.
Software development is genuinely a science, but there’s still one more question to consider. Could developing software actually be an art? Again, turning to the definition will help answer the question. Art is defined as:
The first definition appears to fit. Software development is a skill which requires experience, study, and observation to master. It is a skill which improves with practice and refinement. It is also an occupation requiring skill and knowledge, so the third definition of art applies as well as the first.
However, it’s the fourth definition that really gets to the heart of what art truly is - a creative expression of aesthetics or beauty. When I speak of software as art, many people might think of computer graphics. While that can be art, it is using software, rather than creating software. When speaking of art in software development, I’m referring to the source code that comprises the software.
The beauty found in source code is not a visual aesthetic, but a mental aesthetic, much like other written language. Most people who aren’t developers may not realize there’s such a thing as ugly or pretty code. However, ask any developer what the ugliest code they’ve every written was, and they might blush.
Remarkably, it turns out, software development is an art. It is also science, and it's engineering. It spans all three categories, and that still doesn’t fully describe it. It is vast, complex, and beautiful.
What do you think software development is?