The ‘art’ of good programming
Is good code a work of art? Or is the Manifesto for Software Craftsmanship overdoing it a bit? And what does it mean to be a ‘good’ programmer?
Imagine you’ve hired a plumber to replace some old pipes in your basement. Before, during and after the guy takes care of his job, he does not stop talking about the aesthetic beauty of his plumbing craftsmanship.
“Look at the angle of that pipe there. See how beautifully it’s aligned with the wall? A work of art if you ask me.”
It’s no different with programmers. There’s nothing worse than a diva developer that sees his or her own code as high art. This analogy is borrowed from a much-praised article by the “Agile troublemaker” and founder of the BDD approach, Dan North, who vehemently criticises the Manifesto for Software Craftsmanship and argues that “programming is not a craft”.
Manifesto for software craftsmanship
The manifesto authors Kevlin Henney, Bob Martin, Corey Haines and Glenn Vanderburg nailed the following theses to the door of software craftsmanship.
- Not only working software, but also well-crafted software
- Not only responding to change, but also steadily adding value
- Not only individuals and interactions, but also a community of professionals
- Not only customer collaboration, but also productive partnerships
North’s problem is that the ego of software developers often gets in the way of good software projects. Further inflating this ego with a proud concept of “well-crafted software” is counter-productive, North would argue. Webservices and J2EE are recent examples of projects where a lofty interpretation of software artistry is partially to blame for the project’s failure.
You might already know this kind of problem from smaller IT projects. A certain developer insists on using a specific technology for aesthetic (not pragmatic) reasons. And it all goes downhill from there.
According to North, code is good because it works efficiently, and not because it is aesthetically appealing. It shouldn’t matter what code looks like, but how reliably and efficiently it bring a piece of information from point A to point B. Often it boils down to the ability to appreciate and implement simple processes.
“A truly skilled programming team can deliver amazing business results in insanely short amounts of time. [.] It takes a real expert – a real craftsman – to see the elegant simplicity buried away inside the mess we call enterprise software, for instance, and tease it out.” – Dan North
But sadly, even the good programmers will often forget the central function of good software – and an over-emphasis of the Manifesto for Software Craftsmanship is often to blame.
“Software practitioners – especially, ironically, the good ones – often lose sight of this. They fall in love with the software itself and start thinking of themselves as craftsmen of software.” – Dan North
How talented are developers really?
There’s one question that underlies this entire debate: Is software engineering an art form? The issue centres around a struggle between enthusiastic professionals that are passionate about their work, and programmers that can’t see beyond their next paycheck.
It’s said that performance and efficiency are dwindling in the software industry, but there’s no general consensus or recognised methods that can define what makes a good developer. “A really great programmer […] can out-perform a doing-it-for-the-money programmer by orders of literally hundreds, delivering in hours or days what would take an average developer weeks or months,” argues Dan North.
“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.” – Dan North
North also claims that the concept of “beautiful architecture” doesn’t help us distinguish the good from the bad. Any developer can call him or herself a software craftsman, talk shop and wax lyrical about the ‘beauty’ of software architecture. North tells us he would “love to see someone rewrite the Software Craftsmanship Manifesto in terms of getting results and delighting customers.”
Homeowners don’t care what their water pipes look like – so long as they don’t leak. The same goes for software. Neither client nor user cares how it works, and least of all if it looks ‘beautiful’ on the inside.
“In the same way I want an expert electrician wiring up my house rather than a cowboy, I want an expert programmer enabling my business,” North tells us. “What I don’t want, however, is a prima donna plumber who insists on talking about the elegance, beauty or art of plumbing.”