Software development is thought of as an industrial process, where interchangeable, commodity programmers are set to work and so long as they follow the process, the best software emerges. If you need more or better software, you just yell at the developers louder, bunch of free-loading, lazy, work-shy geeks that they are. Incredibly, that’s the view many people hold. Many people in management! It’s why we teach young hopefuls “Computer Science”, not “Computer Art”.
People that hold this view who are not software developers feel perfectly entitled to criticise developers for everything, treat them like slaves and give them no thanks or praise for what they produce.
Developers, on the other hand, feel that their best work is produced when they are given free reign to express their design ideas in software. Every piece is unique, much of it is flawed. Sometimes, their approach is so Bohemian that it makes the most radical anarchist painters blush.
I believe software development is first and foremost an art, but that like every artist, the better your craft skills, the more expressive you can be with your art. To me, the process that developers follow is a craft skill. This is the science in computer science. And as with every craft skill, it can either produce consistently dull and unspectacular products, or it can be used by a master artist to produce works of incredible subtlety and beauty.
One of the most pointless spectacles it is possible to witness is the software manager trying to get artless, uncaring developers to comply with a software process, in a vain attempt to get good quality out of people that don’t really give a toss about the quality of their work or the users of it. Good software comes from the guts. Good software can only be produced by people that profoundly care about quality and about usability. The best developers care about people.
In the first instance, software development is play. Where it can go wrong is when developers refuse to play nicely. For a software product to be genuinely useful to humanity, humanity must be involved. You need to have a sympathy and an empathy for the end user of any software you create. Collaboration and respect for the voice of the user is paramount.
You can see the results of developers that didn’t care about their users whenever you see an error message that says “you have committed an illegal operation” or “fatal error – your data may be lost”. These sorts of error messages separate the world into those that write the systems, who are by definition infallible, and those that use them, who must be ultimately responsible for everything that goes wrong. The truth is that most software error messages have bad software design at their root.
Of course, because the view that software is a mere industrial process holds in most of the business world, genuinely caring software developers are constrained into producing less than best output, due to cost and time constraints often arbitrarily imposed upon them by people that don’t have a clue about software development or what it takes to make something of real value. I know that when such developers meet these constraints, they either comply and a small part of their integrity dies each time they are asked to do so, or they withdraw into a cocoon, convinced that the world is evil and must be ignored at all costs. Both responses produce crappy software.
So I would challenge every software developer that cares to read this to examine the state of their own art and their own status as an artist. Have you achieved the things necessary to actualise your potential? Do you believe in the value, worth and intelligence of your users? Do you care enough to make things of lasting value and beauty? Are you working in an environment that is conducive to doing so?
How good is your art?