I recently encountered an interesting discussion on Twitter regarding software development being a creative field or not. There were enough passionate arguments on both the sides. Being an artist (painter) and a software professional, I do have a few thoughts on this, which are not just limited to programming.
If coding doesn't feel like painting or passionate creative writing, you have at least another level to master before calling yourself a programmer.— James Coplien (@jcoplien) October 14, 2018
Art is the process of improving the quality of an object.
The object’s value is thus increased in the process. For example, you may start with an uninteresting log of wood but, in the end you would create a beautiful vase out of that. Quality could be aesthetic or functional i.e. strength, conveying information, etc. A bit of disclaimer here: I don’t get abstract art, not a big fan of that (yet), whose theme is to not necessarily to have a purpose behind something, i.e. there could be brush strokes without necessary purpose - it would be left to the interpreter (audience) to make sense or find purpose in it. I am not talking about such art in this topic!
With software development, something is built out of nothing or mere thoughts. There is a joy (maybe due to dopamine) which one gets when a well thought, logical contraption built using imagination, hypothesis and constraints comes to life! It is very similar to creative writing even though, I am not into that field, having read stuff, I could relate to this. With software development, there are a few facets as below.
(above diagram is not all inclusive, it is a rough mind dump of what I want to say)
Craftsmanship involves designing, skills and passion to have a better outcome’ ‘implementation’, both can be equally creative and it is coupled with the analytical and skillful side of engineering. If there is any room for, and willingness to do things differently it could qualify as creative work. It’s goal is towards improving of quality of the product. This revolves around certain principles and practices which guide into making the changes in order to achieve the same. Beyond a certain point, the refinements become less of a necessity and more of a preference based on predictions and experience. This activity of improving quality is a highly creative task which increases value of the software, even though it may not be tangible at first. Effort put in the refinement and caring for the minor bits in software, shows. Take MacOS for example (haven’t tried Catalina yet!), everything looks handcrafted and made with care (including performance), while Windows could seem to be like things were put together with different goals in mind (although it does the job as well).
Doing painting especially in oil seems very similar to software development to me. One would start with a blank canvas, then by colours and shapes build a picture of what he/she sees. Oil painting remains wet for quite a while and one could paint over it, reveal paint from below layers, erase everything and start over. You could make several changes until the painting is completely dry (even after that at times). During the painting process, the artist stops and compares, introspects on the picture - makes changes until the desired outcome is achieved. Until the painting is actually done it only is in the painter’s mind, no one else gets the picture. Same is with the software, until it is built everything is intangible and everyone has their own ideas of how it might turn out to be. Many times, I think the product owner has to play this role of an artist (as example above) or a director, who has an idea of the software in their mind. This idea would be based on external(market, need etc..) and internal factors. They have to incrementally shape, tweak, push the realisation as close to the vision as possible.
Problem solving is more analytical but, also is creative, and it is equally if not more rewarding than craftsmanship. It is just like how theoretical physics and pure maths have an incredible beauty and a creative side, software development has it too. Coming up with algorithms or logic machines which do the required work for you give a great amusement and sense of satisfaction (again, dopamine). Those ‘eureka’ moments are what makes this most interesting and engaging.
Ideas and a thought process cannot be learnt however, it can be acquired. One can get inspired from other great ideas. Gathering skills building logic are a vital part of this but, ideas need to originate from one’s thinking process. In painting for example, one would struggle initially to hold the brush, mix paint properly etc. Once that is learnt, painter moves to the next level - tries to replicate paintings, imitate brush strokes, match colours. Then painters develop their own style of painting, their own palettes and brush work. After which the painter starts exploring new subjects, ideas. This is possible as the former hurdles are already crossed and there is enough mindspace and confidence to navigate one’s way. At this stage inventions (not accidental), innovations can happen.
It certainly would be difficult to run businesses with artists alone, there are limiting constraints. The hardening of ideas / notions could at times override rationality. To make it effective, creativity has to be coupled with adaptability (or as we say, pragmatism). Most time is spent in hacking, engineering and crafting a solution but, having a vision / idea in mind can make the difference. The famous cliché - magic happens when art meets engineering ;-)
Ending with a quote from the writer of Quake -
You might not think that programmers are artists, but programming is an extremely creative profession. It's logic-based creativity.” - John Romero— Programming Wisdom (@CodeWisdom) October 16, 2018