The name of this blog - the ART of software development - should indicate what inclination the author - me - has. However, the choice of the domain and ultimately the blog name was a matter of taste and a quick-decision-now-approach.
Ergo, the question whether software development is a form of art or a discipline in engineering remains unanswered, despite a great domain name.
I have learned to live with an indecisiveness when it comes to this topic, paired with the attitude of "why does it even matter", as many of my day-to-day tasks are not affected by the (in-)correct answer.
Recently, however, I realized that my attitude towards this topic has changed and that it DOES matter.
Now you might ask yourself: WHY does it matter?
Here is a little story about why: I am a consultant. As a consultant I have to justify basically every single line of code I write. I have to be able to quantify why the code I write
a. is of business value to the client,
b. are in (some) relation to my billable hours,
c. have been justified/approved by my team
d. are planned and can be reproduced.
If I were to ask, say Van Gough, to paint a picture within the above framework, he would have probably bitten off my ears.
The life of a software developer is lead by (rather undefined) standards, clients, compensation and motivation. Furthermore, as developers, we have to be able to mentor and teach our peers unfamiliar concepts and new techniques. Teaching an art can be rather difficult if the final product was lead by the preference and taste of the author. We should rather focus on a set of commonalities that can be passed on to a new developer. "Mentor and teach your replacement" - is something I firmly believe in. There is no value in having a specialist, a hero, to save the day. The value lies in a distribution of knowledge and collaboration to to enhance the capabilities of the team.
Let's back up for a minute and find some common definitions for Art and Engineering.
The definition of Engineering as Wikipedia defines it:
Engineering is the application of scientific, economic, social, and practical knowledge in order to invent, design, build, maintain, research, and improve structures, machines, devices, systems, materials, and processes.
So based on these words the case is quite clear. Software development is engineering. We apply practical knowledge to invent, build, maintain, research, improve structures, machines, devices systems and processes. Our software applications.
But wait, there is more!
The definition of Art as Wikipedia defines it:
Art is a diverse range of human activities and the products of those activities, usually involving imaginative or technical skill. In their most general form, these activities include the production of works of art, the criticism of art, the study of the history of art, and the aesthetic dissemination of art. [..] Architecture is often included as one of the visual arts; however, like the decorative arts, it involves the creation of objects where the practical considerations of use are essential
So again, we could say Software development is a product of an activity involving imaginative AND technical skills where the practical considerations of use are essential.
Is software development part of the decorative/visual arts?
In terms of art and by drawing the parallel to Architecture we could assume that a software developer has enough freedom to choose from a variety of foundations, building blocks. Developers influence the "Gestalt" of the final product and no two systems will look the same. Software development can be considered a unique form of art with intricate nuances that follow simple concepts we find in engineering.
I have no intention of finding an answer right here right now. Instead I would like to collect the information I can find online, gather Expert reviews on this topic and find collective answer by the end of the journey of this blog.
What do you think? Is Software Development a form or art or Engineering?