Last week I read two very interesting posts in Dan North’s blog:
The first one explains why software development is not a craft, but that pissed off lots of people, hence the 151 comments so far. So Dan wrote the second post explaining some controversial points of the first one. This has 11 comments so far.
On one side, I understand why some developers believe software development is a craft. I understand the motivation behind the Manifesto Software Craftsmanship:
As aspiring Software Craftsmen we are raising the bar of professional software development by practicing it and helping others learn the craft. Through this work we have come to value:
Not only working software,
but also well-crafted softwareNot only responding to change,
but also steadily adding valueNot only individuals and interactions,
but also a community of professionalsNot only customer collaboration,
but also productive partnershipsThat is, in pursuit of the items on the left we have found the items on the right to be indispensable.
On the other side, I tend to agree with Dan that “programming is not a craft”. As explained in Wikipedia:
In English, to describe something as a craft is to describe it as lying somewhere between an art (which relies on talent) and a science (which relies on knowledge).
Also according to Wikipedia:
Art is the product or process of deliberately arranging symbolic elements in a way that influences and affects one or more of the senses, emotions, and intellect.
According to the definitions above, I don’t believe programming is an art. Programming is a “product or process that deliberately arranging symbolic elements”. However, we cannot say that programming “influences and affects one or more of the senses, emotions, and intellect”.
As the final user, we expect only that the software works as required. It doesn’t matter how it is done.
Dan compared programming to plumbing:
Non-programmers don’t care about the aesthetics of software in the same way non-plumbers don’t care about the aesthetics of plumbing – they just want their information in the right place or their hot water to work.
Maybe what pissed off many people was the comparison between a knowledge intensive work (programming) with a not so knowledge intensive work (plumbing). If we re-write Dan’s comparison, but using surgery, another knowledge intensive work, instead of plumbing we would have:
Non-programmers don’t care about the aesthetics of software in the same way non-medical doctors don’t care about the aesthetics of surgery – they just want their information in the right place or their health issue fixed.
I don’t believe we can say that surgery is a craft, since non-medical doctor cannot appreciate the beauty of a well done surgery the same way as a non-programmer cannot appreciate the beauty of a well written code. They can only appreciate the end result.
But I believe that when our focus is on whether programming is or is not a craft, we are loosing sight of the real question:
… there should be a way for passionate, skilled programmers to differentiate themselves from the mainstream commodity bodies, and also to recognise one another, and demonstrate their value to potential employers. What could that be, and how could we make it work?
As a buyer of software solutions, wouldn’t you want to know your systems were being built by master craftsmen rather than day jobbers? You’re paying for this and you deserve some kind of reassurance. Let’s figure out how to provide it.
So the problem is how do we know a software developer is really good for the task at hand?, the same way that when we visit a doctor we want to know if the doctor is capable to fix our health problem the best way possible.
At the beginning of the first post, Dan mentions that programming is a young career with:
… a structured model for advancing through levels of skill and ability, be it studying for a law degree and articles (working for a legal practise) or the years of undergraduate and medical training a doctor undertakes before specialising. The latter has clearly-delineated ranks, from junior doctor, via a brutal regime of 80-hour weeks, to consutant.
Conversely there is no minimum entry requirement for programming. Some people naturally have a flair for it (two of the best programmers I know never went to college), some teach themselves out of books, others just tinker until they get something working. A programmer’s skill and ability is only as good as their personal reputation: there isn’t an accepted, transferable ranking like there is in a “proper” profession.
He also mention that:
The IT industry is relatively young – only a couple of generations old in fact. (As an experiment, go and find out how many of your coworkers have a parent who worked in IT. See?) It is also something of a gold mine. Compared to a lot of industries it is relatively well paid indoor work with no heavy lifting, and remember the thing about no minimum entry requirement?
But even with an “old industry” such as medicine it’s still difficult to figure out who are the best professionals. Even considering they went to good schools and have lots of years of experience, it’s not uncommon for a patient to search for second opinions from other doctor when he is faced with difficult situations like having to be submitted to a surgery or a painful treatment such as radiotherapy or chemotherapy.
It doesn’t matter how old is profession and how well defined is the structured model for advancing through levels of skill and ability of this profession, there always will be good and bad professionals. The best way to choose a professional – a software developer, a medical doctor, a plumber or any other professional – is getting references and checking her past work. And a bit of luck always help! 🙂