I was reading “Agile has failed: a peek at the future of programming.”, and one sentence stood out to me from the rest, and led me to write this brief post with my thoughts on this matter.
I’m sure you’re wondering what the sentence was, so before we go further, here you go:
Coding is a form of art and a passion that allows developers to create anything.
I assume we all agree on the passion bit (and if you don’t, read this book), but what about the art?
Last weekend I attended Codemotion Milan 2016 and during its closing keynote on the topic of BDD as Biased Driven Development, @mariofusco encouraged developers to think of themselves as engineers rather than craftsmen (or even rock-stars), arguing that in engineering functionality is the key.
Building on this, I’d like to share few thoughts on engineering, craftsmanship and art.
EngineeringThe easiest starting point is - of course - Wikipedia
Engineering is the application of mathematics and scientific, economic, social, and practical knowledge in order to invent, innovate, design, build, maintain, research, and improve structures, machines, tools, systems, components, materials, processes, solutions and organizations.
As software engineers, we clearly want to apply both theoretical and practical knowledge in order to design, build and maintain our software. On this note, I cannot disagree with Mario, but still something is missing, and it feels - to me - like engineering itself is not enough, despite the fact that it must definitely be there as the foundation of our profession.
CraftsmanshipIn my opinion, craftsmanship has more to do with engineering than with art. Craftsmanship is engineering made human, is adding heart to the quest of functionality. I don’t think that developers who aim to become craftsmen are less engineers than others. On the contrary, I believe that when you add real passion to practical knowledge, the result can only - and massively - improve. Being a craftsman has nothing to do with being an egocentric rock-star: it’s aiming to do the best we can despite knowing there might be a better solution that we can’t - yet - see, being humble and open to feedback, and being honest with ourselves and our team. On this topic, I strongly recommend reading @sandromancuso’s book.
ArtWhen I think of art, I think of beauty. At WebSummit 2016 I captured this thought:
I like thinking of art in coding as something different from the means to achieve a goal: it’s always in the background, nothing in programming can be achieved with it alone, but art can be found hidden in many different corners. Art doesn’t appear spontaneously, someone put it there. A well crafted function, an elegant piece of software, a well designed system, can all be expression of art itself, whether the artist was conscious or not: art can be functional.
So, whether you feel you’re a developer, an engineer, or a craftsman, I guess the important thing here is to do the best you can: if it works flawlessly, it’s as good as you envisioned it, and can be admired by your peers, then be proud of it, of your very humble little piece of art.