Programming is not a craft

TL;DR

Software Craftsmanship risks putting the software at the centre rather than the benefit the software is supposed to deliver, mostly because we are romantics with big egos. Programming is about automating work like crunching data, processing and presenting information, or controlling and automating machines.

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. (Although it’s fair to say they appreciate decent boiler controls.)

Motivation for software craftsmanship

It would be great if programming were a proper profession, but it isn’t. A profession has 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.

To illustrate how low the bar can be, the mission statement of Visual Basic (whether explicit or not) was to democratize programming. Anyone who could drag and drop controls around and understand a modicum of technical stuff could throw together a solution to a problem with relatively little effort. Wizards and other utilities enable power users to create sophisticated spreadsheets in Excel with no practical programming knowledge. Language guru Erik Meijer has spent the last few years talking about democratizing the cloud, i.e. making it as easy to string together online services and utility computing as VB made it to string together other applications. In other words, there are people actively working to lower the already low barrier to entry for programmers. (These are Microsoft-specific examples, but then Microsoft has done more than most to dumb down programming, or make it accessible to the masses, depending on your point of view.)

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? This means entire economies have grown up looking at IT as a numbers game: if you throw enough bodies at a problem you should be able to make it go away, and if you can get bodies for cheap enough (yet still relatively well paid compared to the alternatives) then you can throw a lot of bodies at a problem.

I spoke to someone once who told me he was currently engaged in a public sector project to provide online tax credits for builders. As a builder you would have an account online where you would log in and buy tax credits that were offset against your end-of-year tax bill. In other words, it was a site that had user accounts and a (third party) card payment facility, and not much else. This project had 400 programmers working for three years. That’s more than a person-millennium of effort. For a web app! That I’m paying some consortium for out of my tax money. But that’s a rant for another day.

So from a purely demographics perspective we can see that the vast majority of people in the IT industry are there because a) it’s a well paid alternative to other white collar office work or even manual labour, and b) there is no incentive to make it anything other than a commodity numbers game.

Then there are the others. The minority of people who genuinely love programming and choose to excel at it. They understand software development is a skill, in fact a whole portfolio of skills: understanding and modelling a problem domain, understanding programming languages, libraries, paradigms and idioms, choosing which to apply in a given situation, learning and understanding algorithms, mastering the “path to production” (build, deployment, release), monitoring and availability, process automation, Lean theories of supply, production and product development, utility and cloud computing, concurrency and parallelism, I could go on. Those people want a way to differentiate themselves. The oft-quoted figures of tenfold increase in productivity of expert versus novice programmers are wrong by orders of magnitude in my experience. A really great programmer (and I’ve been lucky enough to work with a handful over the years) 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.

How are they supposed to differentiate themselves? And how can they help others in the industry who have a real love and appreciation for the software they write? We need some sort of apprenticeship model, and a way to identify masters, both to apprentices and other masters. That sounds like the sort of model that craftsmen use. And it also appeals to the average alpha geek’s romantic streak, possibly incorporating a system of secret signs and handshakes.

The thing is, at one level software can be described by the utility it provides. It doesn’t matter how ugly it is under the hood as long as it delivers the goods. A programmer can show beautiful software to another programmer, but that’s where the appreciation stops for software per se.

Seeing the negative space

My wife is an artist, and one of the things she studies is negative space. This is the space between the obvious shapes or objects in a picture, as opposed to the objects themselves. An understanding of negative space is critical to being able to faithfully render a composition. As the model sits sideways on, notice the curved triangle bounded by the upper and lower arm and the side of the body. See how the space between the front of the face and the window frame in the background is nearly rectangular and quite narrow, and see how the outline of the nose creates a dent in the left-hand side of the rectangle. Look at the chin, actually the space below the chin, to observe the angle between the bottom of the jawline and the front of the neck. And through the window, notice the colour of the sky in the space between the winter tree branches. It’s different from the grey-white cloud above the trees. All of these shapes and colours – the space between the obvious stuff, the negative space – these are the shapes that determine how faithfully you represent the image on a canvas. But mostly you don’t notice them – especially in a good painting.

So what does this have to do with software? Well it seems to me the most succesful programmers I’ve encountered don’t craft software; they write software in order to move information around, in order to get something done. Information is the real deal – the software just defines the space that it moves around in. For those programmers, success is about getting information from point A where it’s currently languishing to point B where it’s going to actually be useful, as quickly and effectively as they can. Success in a UI is about rendering or capturing exactly the information that will be useful – no less and certainly no more – in a succinct, obvious way. The software is incidental, a detail, hidden away in the wings, and it is ultimately entirely disposable.

Why programming is not a craft

With a craft, the product has intrinsic beauty in its own right. A cathedral is really a big hut for people to meet in and worship. Make it from stone by all means, so it lasts longer than a wooden hut, but why all the fancy decorative stuff? Of course it is there to engender a sense of majesty and wonder, and cause us to engage the part of ourselves that appreciates beauty and magnificence, so we enter the cathedral reverently and humbled, ready to worship. What makes it a craft is the work above and beyond its basic utility to give it intrinsic, aesthetic beauty.

If I use the same stone to build a traffic bridge over a railway line, I care about its utility and structural effectiveness. If it’s a good, simple bridge I won’t even notice it’s there! We don’t notice most of the engineering that goes into the roads we travel on or the railways we use until something goes wrong! (There’s a really cool word for this phenomenon – when you only become fully aware of something when it fails – but I can’t recall it right now.)

There is a difference between the mindset of a master stonemason sculpting the expression on the face of a gargoyle and someone using the commodity blocks that make up a multi-storey car park. In the latter case the last thing I want is someone’s “personality” causing some of the blocks to be different sizes and no longer interchangeable, never mind the added expense of having someone manually hew the stone rather than using machine tools. In the former the stonemason’s attitude is indulgent. He is putting his signature (and his ego, and his reputation) into this magnificent representation of Hell’s best. If you just wanted an oil-pouring spout you could get one from a DIY store.

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.

The easiest qualification in the world

So here’s my concern with the idea of Software Craftsmanship. It’s at risk of letting programmers’ egos run riot. And when that happens… well, the last time they went really nuts we got Web Services, before that J2EE. They convinced the British government that they wanted an uber-database to store Everything Ever About Everyone. You see where I’m going?

When I looked at the Software Craftsmanship Manifesto, something inside me died. (Something else inside me burst out laughing and told the other thing to stop taking itself so seriously, so we’re all better now.) Apart from being, well, bland, it is just so self-evidently an oxymoron. If its message is that we need to think of ourselves as software craftsmen and that this is somehow special, then what a spectacularly easy bandwagon it is to jump on.

Do I need to demonstrate any kind of skill? No. Any specific credentials? No. Any kind of experience working in the field? Nope (and as the Pragmatic Programmers are happy to remind you, ten years experience is very different from one year repeated ten times). In fact, all I have to do to associate myself with Software Craftsmanship movement is to fill in my name on the website. Woohoo! I’m now associated with the Manifesto of Software Craftsmanship! Is no-one else seeing the irony here?

The (original) travelling salesmen problem

Back in the day – while the West was busy being Medieval – Japanese warlords used to hire bands of mercenaries called Samurai to, well basically beat up other bands of Samurai. Your life expectancy as a Samurai warrior was usually pretty low, and dropped dramatically if you came off your horse. In such times the martial art of jiu jitsu was born. The premise with jiu jitsu is that you have come off your horse in battle: you are unarmed, outnumbered and your opponents have both a height and weapons advantage over you. You’re pretty much stuffed unless you can pull some cool moves out of the bag.

As Samurai moved around, hiring themselves out to different warlords, they would want to join the local martial arts school to continue their training. Now you can imagine, if you learn jiu jitsu in one dojo up to a certain standard (we’ll call it a black belt) and then turn up at another school, it’s pretty tricky to get any kind of calibration without involving some life-threatening fighting with the new kid. And without calibrating, you can’t know whether someone is any good.

Ever resourceful, the jiu jitsu schools developed a sort of dance, called the nage-ne-kata, comprising five groups of three techniques. For each technique you both execute the technique and have it done to you, to demonstrate not only your fighting skills but your falling and rolling abilities. All senior students would learn the nage-ne-kata, and if they went to a new school, the sensei would ask them to demonstrate it for them. It is still taught today in some ju jitsu schools.

You can tell a lot about someone’s jiu jitsu from their nage-ne-kata: how they stand, how they hold their stance, how they move, how graceful they are, how well they understand balance, how well they respect their uki (the partner), how well they roll and fall (and how quickly they get up!), whether they favour one side over the other, their spatial awareness. Just from one little dance.

Let’s be craftsmen then

So, back to the plot, I’m reassured by the kinds of people I see involved in the Sofware Craftsmanship movement, the likes of Kevlin Henney, Bob Martin, Corey Haines, Glenn Vanderburg. These are pragmatic, sensible, down-to-earth and above all genuinely humble people. My concern is that the glamour is overtaking the intent, as evidenced by the sheer number of people wishing to align themselves with the Software Craftsmanship movement.

I would love to see someone rewrite the Software Craftsmanship Manifesto in terms of getting results and delighting customers. I don’t want “steadily adding value,” I want “amazing their customers every day!” Software craftsmen should be egoless, humble, with a focus on the outcome rather than the code or the process. I’d like a call to arms to stop navel-gazing and treat programming as the skilled trade that it is.

No-one wants your steenking software – they want the capabilities it gives them, and they want those yesterday. (I’ll specifically exclude the User Experience folks. Theirs is genuinely a world of aesthetics and human understanding. They, to use a bricklaying term, do the face work – the fancy stuff people actually see.)

Maybe there should be a Software Craftsmanship Council, that confers membership in a collegiate yet transparent way, in just the kind of elitist model that desperately upsets the folks who have systematically dumbed down the education system in the UK (but that’s another rant for another day). You only get to join if those already there believe you will be a credit to the notion of Software Craftsmanship, just like Ph.D. viva boards do today.

A truly skilled programming team can deliver amazing business results in insanely short amounts of time. Let’s go after some of that! I want your experience. I want your knowledge. I want you to show me “the simplicity the other side of complexity,” to quote Oliver Wendell Holmes. 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.

Calling programming a trade takes nothing away from the desire for professionalism, experience and expertise. 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. What I don’t want, however, is a prima donna plumber who insists on talking about the elegance, beauty or art of plumbing, or who insists that I appreciate the aesthetic beauty of his joinery, or will “only work with other rock star plumbers, who only practise copper-driven plumbing.” The best software should be understated and unobtrusive (as, maybe, should be the best programmers). I don’t want to hear the clanking of information as it rattles from one poorly-implemented system to another, through ill-conceived interfaces.

So what now?

While I was formulating this article I made a few comments on Twitter about it and I received some interesting responses. One person suggested a programmer is a craftsman not unlike a silversmith. I would argue that the value of silver or gold jewellery is intrinsic to the jewellery. I don’t use the item for anything other than for others to admire its beauty (and by association my significant-yet-understated wealth and taste).

If we’re going to use gold or silverwork as an analogy it would be in something like a speaker cable, where the properties of gold contacts improve the quality of the sound. In this case, however, I want the gold connector to be identical to a cheaper one. If the cable manufacturer wants to demonstrate their aesthetic abilities, I’ll be a lot happier if they do it by making the cable look fancy than by messing around with the shape of the connector!

If you’ve read this far, then thank you. Now here’s what I want you to do. I do think there should be a Software Craftsmanship Manifesto, but not the thing that’s currently out there. I think it should be a call-to-arms, feisty, opinionated, brash and everything that a good manifesto should be (I’m channelling Kevlin Henney here). I also think 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.

247 comments

  1. Ok ok, I’ll comment here!

    I agree with most of the words you use and all of the sentiment.
    Especially on side with focusing on delivery of useful stuff rather than the how good it looks or how many conferences we went to to say how well it was built.

    Its like arguing the benefits of a gold plated toilet plunger – fab to look at, doesn’t shift poo worth a damn!

    I suspect the authors of the SCM tried to keep in the writing style of the the agile manifesto (don’t know why the would, but perhaps they did).

    This issue of whether we are a profession has been around for a long time – flummoxing esteemed bodies by the BCS (who decided we were, but aside from occasional discounts, not much else is kicking about). I tend to favour that we aren’t. And thats cool too.I don’t care either way.

    What I care about is people learning better ways and then using that learning to build software that does something useful for the people who need it and value for the people who pay for it.

    What this SCM doesn’t cover are things like ‘craftsmen’ sitting on a lucrative job for longer than it needs (alas, anything can be perpetually ‘improved’ especially if its paying £xxxx/day!). Why don’t we have a manifesto on that also?

    A Software Craftsmanship Council – on that one, I agree to disagree. As an ideal, no argument, but its more than likely going to degrade into the very elitist, yet vaccuous that many Phds become. Sure you are the expert in something, but do you have the ability to turn it into something genuinely useful. The reason for this? Purely the effect of commercialisation. Once a financial reward/edge comes from this conferment, its game over.

    I found much more here to agree with than not, on second reading it didn’t seem that lengthy (or at least it flowed faster). Well done for getting it done.

  2. […] with big egos. Programming is about automating work like crunching data, processing and… [full post] Dan North DanNorth.net uncategorized 0 0 0 0 1 […]

  3. […] This post was mentioned on Twitter by Martin Fowler, Rob Bowley, Joseph Wilk, David Harvey, Stefan Moser and others. Stefan Moser said: "…but then Microsoft has done more than most to dumb down programming…" http://bit.ly/hqQr4x […]

  4. First, you’re confusing craft with art. Totally different things.

    Second, do I sense Love in this rant? I don’t think so.

    1. Hi Zvolkov. I’m using craft in its popular sense as the activity of creating something with its own intrinsic artistic merit (see the definitions at The Free Online Dictionary which suggests looking at synonyms for “art”, or the examples (stonemason, jeweller) offered by Dictionary.com). Totally not different things, apparently.

      1. With all due respect you’re cherry picking your definition of craft for the purpose of your argument.

      2. I mean, there are many definitions of a craft which do no mention art. The one’s that do are not doing so in the manner which you are here.

      3. I’m not convinced the Free Online Dictionary is any good. The Oxford English Dictionary, which *is* good, specifically notes that the use of “craft” and “art” as synonyms is an outdated one, on its way to being archaic.

        Whatever the multiple definitions in any dictionary, though, I’m pretty sure the writers of the manifesto in question intended “craft” to be interpreted as “a branch of skilled work”, and “craftsmanship” as “skilled workmanship”.

      4. Jace Bennett · ·

        Art and craft are NOT totally different things, but they do have a key difference, and it cuts to the heart of your thesis.

        Art exists for art’s sake. Crafts are practiced for the sake of profit.

        The artist is in love with his medium, himself, and believes the aesthetic to transcend the cost of producing it. The form matters.

        The craftsman is also in love with his medium, but believes that form and function must be balanced to maximize the profit from delivered value.

        I’m thinking of a fine German automobile. The spartan, utilitarian value of such a thing is as a conveyance, no better than a Plymouth, if judged only by it’s primary defining value proposition (that thing which makes it a car).

        But I find a great deal more value if I look just slightly further. For one, the steering and acceleration are more responsive. This is both fun (perceived value) and contributes to the overall safety of the driving experience (essential value). As do myriad of other decisions that were made by designers with a good sense of my values making hard decisions to arrive at a balance of form AND function.

        We’re not talking about software gratia software. We’re talking about considering aspects of our work that the customer may not consider, that he pays us to consider, that will ultimately increase actual value delivered, maintenance cost, maintenance frequency, etc. In a word, craftsmanship.

      5. It’s odd that the OED offers no requirement of artistic merit anywhere in its definition. Perhaps you need to use a better dictionary.

        “Craft” is a far more flexible term than you give it credit for and could easily be applied to programming…at least according to the OED. Regardless, a semantic argument isn’t much of an argument. Although, I do agree that merely signing an on online manifesto offers no real value other than to cheapen the concept.

  5. It is OK programming is not a craft.
    It is preferrable to create a profession as it is for medical doctors, lawyers etc…
    Since it could address the issues you mention about most of the people just doing this work because well paid (which is also a motivator for doctors and lawyers etc… but it is just more competitive to be recognized as a practitioner).
    The challenge I see is : Is creating and managing this activity as a profession antagonist to the spirit of innovation itself?
    As long as evaluations for “approved practitionner” are made in a fair and transparent way, it should be OK.
    But then we would have the problem of purpose again: Why would you need to differentiate yourself if you are really better? Can not the industry naturally learn to find you?
    The reasons doctors, lawyers and engineers were organized in professions was to PROTECT the citizens from the incompetent and therefore harmful ones.
    With IT, it is less about individual exercising a profession but more about companies selling goods. So it IS NATURALLY more tricky.

    I like your ideas. Was just reflecting also in this post as well.

    Julien.

  6. caloggins · ·

    I think my short response is: carpenters are craftsmen.

    Most people really don’t care how a dresser is assembled (dovetailed drawers). They don’t care about the details of how a house is built. But they do care that it is done well. This mostly shows some time after the ‘newness’ has worn off. Shoddy craftsmanship results in stuff breaking shortly after one starts using something.

    Most carpenters will tell you that the devil is in the details. This is especially true with our trade. However, as with any trade, we have deadlines. A house has to be finished in time for the family to move in. A program has to be done in time to be used. Both must meet certain standards.

    I think the stuff we build is more useful (dresser) than ornamental (earrings). How we build it is important. When the next guy comes along to put on an addition his job, along with the cost of his labor, will be much easier for the owner if we went through the trouble to use a level and a square.

    The trouble with identifying master craftsmen is one has to know what good work looks like. The current measure for that (in my experience) is certifications and college degrees. It’s rare anyone actually looks beyond the papers and abbreviations. I just don’t believe that a large portion of the employers out there will ever want anything more than a day laborer or apprentice.

    A manifesto would be cool. But, in the end it won’t help this journeyman-en-route-to-master to get a job. I’ll still be stuck with the day laborers. I’ll still be working to master my craft. I don’t need a council to do that.

    1. Carpentry is an interesting one. I deliberately didn’t use it because it spans both camps – sometimes it’s a trade, sometimes it’s a craft. Many wooden structures are both functional and designed to be aesthetically appealing (think of a well-crafted bookcase or beautifully-finished dresser). Sometimes it’s purely decorative (like oak-panelled walls).

      With a lot of carpentry, the consumer can look at the finished artifact and appreciate its aesthetics: it is a “piece” in itself. Not so with software, which is more like the structural or joinery aspects of carpentry.

      If I can solve a problem without resorting to writing bespoke software I’ll usually opt for that solution. If I can solve a problem without woodwork, I may take the woodwork solution anyway because the actual resulting wooden construction pleases me: it has intrinsic artistic merit.

      1. thinkingbox · ·

        Hi Dan, my take on your blog post, with references to carpentry, by the way: http://thinkingbox.wordpress.com/2011/01/12/craftsmanship-is-not-art-and-we-care-like-craftsmen-do/

  7. This is a great thought provoking piece, thank you for writing it.

    I wondered what made you look at the software craftsmanship community as the prima donna programmers though? What are the software craftsmanship community doing that appears to be naval gazing?

    If you look at some of the talk outlines from this years SCNA: http://scna.softwarecraftsmanship.org/schedule I feel there is plenty there that resonates with what you have written here.

    1. Hi Steve.

      I agree with you about the kinds of folks speaking at events like SCNA. As I said, the people leading the Software Craftsmanship movement already embody what I’m talking about: they see software as a means to an end and want to become excellent at their trade. I’m just warning against the software-is-beautiful-in-itself navel-gazing that I see going on (and that I’ve been guilty of myself), which detracts from the purpose of programming.

      If your mental model is programming-as-trade then you take a much more pragmatic (and arguably effective) approach to it than programming-as-capturing-the-essence-of-beauty.

      1. Dan,

        If your mental model is “programming-as-a-trade”, implying you care only about the end-result that is delivered for your efforts, then (to use the plumber analogy once again) you’re much more likely to simply put some sticky tape over the hole in the leaky pipe than you are to replace the piece of pipe. It’s quick, easy and cheap for the customer – perfect trinity of factors, eh? Of course, we don’t care that the customer’s pipe will spring another leak within minutes of you leaving the building, that just guarantees more work, right? ;)

        Of course, I’m being sarcastic, and I do agree that navel-gazing and caring only about the beauty of the software itself does not solve the underlying problems of the customer, HOWEVER, one simply *cannot* produce software that not only meets the customer’s needs and wants, but also does so elegantly and with the minimum of fuss. That kind of software that it a joy for the end-user to user (as opposed to most “enterprise”-type software that the customer positively has to wrestle with in order to achieve even the simplest tasks) has to be “crafted”. That is, the programmer of that software HAS to care about the code itself and the way that code is put together.

        For me, this is the true meaning of “software craftsmanship”, and it *is* right there in the manifesto – you just have ensure you read the qualifying text at the bottom:

        “Not only working software, but also well-crafted software”
        truly makes sense when it’s qualified by:
        “That is, in pursuit of the items on the left we have found the items on the right to be indispensable.”

        It IS working software that meets the customer’s needs that is the real goal, but in order to do that effectively (i.e replace the piece of leaky pipe) one *must* care about the craft (otherwise, we’d simply put sticking plasters over everything).

  8. I think Dan North is full of himself (why else would he name his website after himself instead of a higher purpose).

    The analogy of a software craftsman is not like a jewler who’s work is on the outside, it’s that of a watchmaker. The internal workings don’t have to be pretty, and 99.99% of the users of a fine watch (back in the day of fine watches) wouldn’t have the foggiest of what kept his ticking on time, but yet the craftsman still cared not only about the timekeeping but the aethestics of it. Why? partly for it’s own sake but because he knew that a finely polished, and well designed mechanism would keep good time for many years, and be easily maintained by even lesser skilled workers.

    1. Hi Matt.

      I’m not suggesting programmers can’t be craftsmen, and in fact I applaud the idea of software craftsmanship. I’m just arguing that programming itself isn’t a craft, for exactly the reasons you describe. It’s just a skilled trade. No-one other than programmers delights in beautiful code. Non-artists appreciate art. Non-jewellers appreciate jewellery. Non-programmers don’t see what all the fuss is about with software.

      Unfortunately bad craftsmanship in software isn’t as obvious to non-software people as bad craftsmanship in watchmaking is to non-watchmakers. It’s easy to tell if your watch isn’t working, much harder to spot if you’re taking delivery of a crappy application. Especially since the bar is already so low.

      1. Branko Dimitrijevic · ·

        “Unfortunately bad craftsmanship in software isn’t as obvious to non-software people as bad craftsmanship in watchmaking is to non-watchmakers.”

        Well, crashes and sluggishness are VERY obvious to end users.

        If the code is not beautiful on the inside, it is impossible to “polish” the product on the outside and (sometimes more importantly) it is impossible to evolve it and keep it relevant in the market for long time.

        Sometimes, without code being beautiful, you are unable even to ship the product. Reason: non-trivial products are stretched over time or over number of people or both. So it becomes crucial to be able to understand someone else’s code, or even your own but written months or years before.

        Beautiful code IS relevant and therefore programing IS a “craft” or “art” or whatever word you wish to use…

      2. “No-one other than programmers delights in beautiful code. Non-artists appreciate art. Non-jewellers appreciate jewellery. Non-programmers don’t see what all the fuss is about with software.”

        Totally disagree. I think many end users that get to use great software _love_ it and appreciate it. They aren’t exposed to or even understand the technical details behind it, same as those who appreciate art and jewelry may be clueless as the process that produces them. I fear you’re allowing the fact that end users aren’t consuming the code in human readable format to cloud the point.

      3. Non-jewellers care very to the composition of the metal, non-artists couldn’t give a rat’s rear-end about the composition of paint… truly great artists/jewellers care very much and so do programmers.

        “beautiful” code isn’t for the users, that’s what UI and requirement tests are for.

        One could just get stuff and build a house as much as anyone can pick up C and start coding. The difference here is the entry cost, building supplies just cost more [and only recently, since 30 years ago computers were harder to get by].

        Non-watchmakers would know that their watches are broken, they wouldn’t know why or how to fix them. Same difference between software users and software writers.

        Programming is writing, albeit not in English, and writing is an art. That is, unless you’re willing to disregard the last few thousand years of storytelling :D

      4. Comparing software to a chest-drawer, a car or a house is dangerous for the very fact that no car is delivered iteratively. You don’t upgrade your oak-chest to a chestnut-chest and you certainly don’t move your house from one environment (country) yo another, once delivered.

        Beautifull code has several benefits:

        * It caresses the programmers’ ego. You are right: that is a stupid reason. The only invalid one.
        * It makes portability possible: between programmers, between teams. Users might not care about the underlying beauty of the code. They do care about the fact that thy now never can hire anyone else but the team that built the first piece. that is, if they are still around, that team.
        * It allows for architectural portability: extending, scaling etc: all possible only when the underlying architecture is good. Users won’t care about the fact that some “architecture” is “done properly”, but they do care about virii, crashes, sluggyness, being able to run Photoshop on VistaFooBar and so on.
        * It allows continuous development. So often a piece of software needs to be “rewritten from ground up” (I am looking at you too, Microsoft Windows) simply because the first piece was never architectured and written to really grow. End users don’t care about encapsulation, layers, stacks and such. They care about having a new and improved version every so often. A version, which, at the very least allows them to use the software in their ever changing environment and workflow.

      5. skilled trade and craft are the same thing. Period. Whether or not an extreme emphasis on the particular aesthetics of making and the thing made is a good thing, I won’t debate. But you really just seem to be pinning your argument on a fairly uninteresting bit of wordplay. Plumbers are craftsmen, draughtsmen are craftsmen, chefs and programmers and engineers and sawyers and bowyers and blacksmiths and locksmiths and so on are craftsmen. Some better than others, no doubt, and motivated by different things, but they work in a trade where their knowledge and skill separate them from the unskilled, and their styles and interests and relative skill separate them from one another.

        Also, that post really was too long. I’m all for verbosity, but editing is the better part of valor when it comes to writing.

  9. Raoul Duke · ·

    Ja, ja, programming should be engineering. But we, in general, suck way too much at it to ever call ourselves engineers. Thus we have to start off saying we’re one level of scientific rigor down from that, namely craftspeople. :-)

    1. Russ Beinder · ·

      Software, like so many things needs engineers and trades people. They are not the same. An engineer puts science to practical use. A trades person is simply a skilled worker.

      A number of places hand out professional engineering designations like CEng or P.Eng (including British Columbia, where I type from now), but I do not remember the last time I saw a requirement for one (other than personal vanity). Unlike lawyers, there is no common legal requirement for someone practicing software engineering to be certified to practice.

      When it comes to whether or not there is software craftsmanship; of course there is. We know it when we see it, on the inside or out. Not long ago I did the electrical wiring in a room in my house. I followed the electrical code and had it inspected, but I am not a professional electrician. I was interested to note that in addition to all the very specific rules in the code, it also called for the work to be “craftsmen-like”. Now, I am a bit anal and I certainly did not want my house to burn down or to fail the inspection, so I did a careful job. I know how to use the basic tools of the trade (wire strippers and cutters, etc.), but I did need some practice on some things; so I practiced. When the inspector came she said I passed and she was impressed with my craftsmen-like work.

      I assume that if I my work was a mess or I did not exhibit the necessary skills of the trade she would have asked for a do-over (or suggest I hire a pro). Why would she care that I was craftsmen-like? Because, if I was not, she could not know what hidden and unpredictable things would cause problems later. The same goes for software. It is not about beautiful source that no one will ever see, it is about avoiding the hidden and unpredictable things that will cause problems. I dare say the chance for such things in software are many orders of magnitude greater than in wiring my room. The only reason people seem to care so little about it in software is that there is a perception that no one gets hurt if you screw the software up, unlike the fire that burns my house down when I screw up the wiring.

  10. But we already *do* have a way of assessing craftsmanship, separating the doers-for-the-money from the lovers-of-the-craft, the power programmers from those just doing time.

    It’s called “Open Source Software Development.”

    The key is that “Open Source Software Development” is far more about the openness of the *development* than merely of the source. You can tell how committed an OSS developer is by their commit records. You can tell how dedicated they are by their commit reviews. You can tell how flexible and collaborative they are by their reactions to their commit reviews. You can tell how reliable they are by their length of contribution.

    And you can tell the “doing it right” folks from those “just doing time,” because the latter don’t even bother contributing to OSS. The easiest assessment in the world: they’ve already self-selected out of your entire evaluation process.

    1. Raoul Duke · ·

      er yeah. right. sure thing.

      …and those people who, you know, have actual lives.

      1. I sense some misinformation about how OSS actually works.

        “Actual lives” is pretty inflamatory! All the OSS developers I know have “actual lives,” ornamented with all sorts of time-consuming activities, like playing in rock bands, learning ham radio, being sound designers on Broadway plays, dating, raising kids, attending church, and pretty much every other “actual life” activity I know of.

        Perhaps you really meant “actual jobs”? Again, a misunderstanding. You should look over, for example, into the Subversion community, where there’s currently a sort of spite war going on over which company employes *more* Subversion core committers!

    2. I’m not sure if loving what you do is the only criteria for being a craftsman. Let’s not forget, Lil Wayne LOVES to play guitar :)

      1. Rodrigo Juarez · ·

        XDD

    3. Hi Jack. With respect, the love of something alone doesn’t make you a craftsman. Like any skill it takes years of dedicated, intentional practice, coupled with some intrinsic talent or aptitude.

      You would have to agree there is a lot of shockingly poor quality OSS out there written by well-intentioned but inexperienced people (and some amazingly good stuff too). In fact, it’s through OSS that a lot of journeyman programmers learn their chops. But that means there is a whole lot of open source software still out there that was written by people getting the hang of programming.

      1. Absolutely agree with everything you say here — including the implicit point, that we can actually assess this bad OSS, and impute bad practice to its authors, much more easily and effectively and widely than ever we can any proprietary or in-house work.

        I’d also point out that I think you’re including single-developer OSS work. That’s my bad: I really meant “communitarian OSS,” and my statement didn’t make that clear. For purposes of evaluation, single-developer projects are only a small bit of help, because so much of the dynamic (good or ill) is still not public, but confined to that single head. On a community-driven project, the dynamics happen in public: mail lists, wikis, and so on, and so are visible and useful to present purposes. And as well, the end products are available to you, as are the evaluations of users, which helps you understand the value of individual contributors.

        You may never have used Drupal or Subversion or FireFox or JBoss, but it’s not at all hard to get a general read on how well they’re respected among their users, and how much, well, and widely any given developer has contributed.

    4. Jim Cooper · ·

      Your assumption is that all good programmers do open source work. This is plainly false.

      Looking at examples of people’s code is a valid way of assessing some of their skills, but expecting everyone to contribute to OSS projects, and expecting people assessing them to be able to go and find all their contributions is a tad optimistic.

  11. It is if you do it in wicker ;)

  12. steve jakubowski · ·

    This is the first time I’ve seen multiple (ok, 2) paragraphs in a tl;dr.

    What little of this post I made it through didn’t support that “summary.”

    [tl;dr] If you can in fact code better than you write, well…

  13. I drafted a response on my website (http://www.rickbradley.com/prostitution/), reproducing it here as a comment:

    I suggest picking up a copy of Christopher Alexander’s The Nature of Order and reading it. The yardstick being used, hazily, here to evaluate whether software is a craft, art, profession or something altogether other should benefit from his insights there.

    More importantly, since the Agile Manifesto was drafted there has been a front of bravado put forward by proponents of some New Way™ as they declare themselves bold, daring to step away from the commoditized masses, and driven to do That Which Requires Real Strength and Resolve, (issuing a “call-to-arms,” being “feisty, opinionated, brash”, etc., yadda yadda, …).

    Can we, as humans, as people with experience, love, pride, awareness of wholeness and life, inspired by the value of creating something beautiful, of refining our work and ourselves, of striving to be better and to make the world around us better …

    … can we truly think of no higher purpose than to prostrate ourselves to some nameless “customer”? Is the only value in what we do, in who we are, distilled from whether we “deliver business value”, “demonstrate value to potential employers”, give “capabilities” to people who “want them yesterday”?

    This is a call to prostitution masquerading as manifesto.

    Striving for mastery of art, perfection of craft, betterment of self and the world around us is worth pursuing in and of itself.

    There are those of us who build software who recognize this and pursue the craft of software because of this. Software is both art and craft, regardless of whether some manifesto jives with one’s tawdry beliefs about business.

    Many of us are fortunate enough that the necessities of life, the house, the food, the clothes, the tools can be paid for in the currency of business by honing a craft that we love.

    Don’t let that obscure the fact that “the customer” is the least cause of growth in craft, the last reason we are compelled to the art, and the first hindrance to be left on the wayside when we gain the opportunity.

    1. Hi Rick. I appreciate what you’re saying, but the bottom line is that if people could get all the benefits they need out of software without the actual development effort, they would happily take that option. I’m including myself, as a programmer. I’d much rather use WordPress’s infrastructure and software than “craft” my own website because I want to get to the outcome of having stuff on my site.

      I used to run my own Linux servers that I would tinker on and write scripts, and spent many years maintaining and customising mail servers. These days I use Google hosted domains and I get my weekends back. Without that inconvenient customer – which could just as well be yourself – there wouldn’t be any need for programming.

      I agree that the goal of bettering the world around us – and hopefully ourselves in the process – is an intrinsically worthy ideal. I just don’t think the highly-skilled trade of writing bespoke software is the medium to do it. In most cases the best software is the code you didn’t have to write because it’s already been done.

      1. Branko Dimitrijevic · ·

        “I just don’t think the highly-skilled trade of writing bespoke software is the medium to do it. In most cases the best software is the code you didn’t have to write because it’s already been done.”

        Yes, and for that piece of code to be reusable, it had to be well tested, well optimized, well documented and maintainable – in other words “beautiful”, written by an “artist” or “craftsman”…

  14. I have to admit I had to re-read the post as I got the wrong impression on the first reading. I thought you meant ‘trade’, not ‘craft’. Meaning that any muppet with google and a few tutorials could throw together the software we use day-to-day. I think the VB reference threw me.

    And so I mostly agree with you. Stamping our distinctive mark on things and the probably eternal quest for the ‘perfect’ code/style/app is not a worthy goal for it’s own sake. But some of the ‘craft’ is tied up in maintainability (best practices, readability, etc) and optimisation which are both usually important to at least try and do.

    I would make the distinction that paid, public-facing programming is not a craft in itself. But any crafting skills you gain in personal projects and from the experience of others has the chance to make you better at your job. Assuming it doesn’t slow you down enough to be unproductive.

    As an analogy, selling things in a shop is not a craft. But there are skills that people pick up over time that do make them a better seller, both individually and as part of the team and that they would clearly stand out from someone just grinding it out for the pay. As long as they don’t slap a ‘expertly sold by Joey’ sticker on the items or spend days stacking boxes into the optimal storage shape they really can bring positive elements of a craft to the job even though it doesn’t require it and probably won’t acknowledge it.

    As an aside, I believe that the ornateness of cathedrals was supposed to make them a place that God would see fit to visit, not for the people at all. On a recent visit to Barcelona I visited the cathedral there and the architect had detail even on the roof where nobody would know about it because supposedly God would see and appreciate it.

    1. Hi Dan. I love your aside about the ornateness of cathedrals – it makes perfect sense. And I agree that programmers can be craftsmen. I’m just trying to steer us away from getting too wrapped up in the software itself and losing sight of the reason we were writing it!

      1. Is there any evidence that folk who call themselves “software craftsmen” have a greater tendency to dissatisfy customers?

  15. I understand and agree with your concern about delivery and good results for customer.

    However, i understand that people involved on Craftsmanship movement desire the same thing. If the aim is deliver good business results, it’s expected that it could work well for a long time, it’s easy to be improved and other aspects.

    Your concern about “the glamour is overtaking the intent” is not fault of the manifesto. It’s fault of bad or naive developers.

    I hope more developers want to follow the manifesto. And also work to deliver good results.
    IMHO, it’s what we need: Craftsmanship and results.

  16. I would agree with this on the whole, I’d love to remove superficiality from my profession. Oh would I ever. However, I believe part of your argument is based on the flawed assumption that code beauty when compared to efficient work and delivering a better UI are mutually exclusive. Code must be read (and further maintained), and when that code is well *crafted*, it tends to be more easily manipulated, read, and maintained.

    For an example, take writing (which is in part what programming is) as a similar example. It’s true that any jumble of words can get a point across, but a well crafted slogan (for instance) allows for a stronger message… and is another example of something you’d probably never notice. However, you noticing isn’t the point, you interpreting the message is the point. But the craft that goes into it may make it more memorable, more quotable, easier to print on smaller media, or any number of other intangible or nearly intangable qualities.

  17. I hate to just blogspam you so I will show my entire post here. However I did want to blog about it as this is a conversation that I get into a few times a year.

    http://mynerditorium.blogspot.com/2011/01/programming-is-craft.html

    “craft -noun 1. an art, trade, or occupation requiring special skill, esp. manual skill: the craft of a mason.” (dictionary.com)

    “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). In this sense, the English word craft is roughly equivalent to the ancient Greek term techne.” (wikipedia.com)

    In my opinion, on a whole, software development is a combination of craft and primitive engineering (which is slowly emerging as a true engineering discipline). The term craft usually means how something was made, not what was made or the perceived value of the end result by the layman. One of the commenters on the original post mentioned carpentry as a craft that may not always be defined by the value placed on the end product by the layman. In this vein, I will also mention that witchcraft is considered a craft.

    One of the hallmarks of craft is that that it is filled with heuristics and folklore. Much of the work of today’s software developer is squarely within this realm. More often than not, there is no clear-cut way to solve a problem. We craft a solution based off of our experiences and the folklore we encounter. It is worth noting that I consider blogs, google searches, MSDN, visits at a coworker’s desk, irc, and stackoverflow.com to be sources of folklore.

    I must say that I do agree with much of the post, but I think the terminology that is presented is incorrect. I think it would have been wiser to say that software development is most often not an art, and ego has no place in it.

    I also have to concede that in hindsight, I believe that the software craftsmanship manifesto was a bad idea. I recently learned there was a period of time when it was being debated if there should be clause in it to forbid using anything (tools, languages, etc…) that was not OSS. In my opinion the manifesto only serves to force a definition on something that needs no additional definition.

  18. Here in British Columbia, Canada (and other provinces), software engineering is a profession. To call yourself a software engineer and offer services to the public, you require a license. And it is not easy to get a license: http://www.apeg.bc.ca/reg/pengappdocsrequired.html Adn, If you scroll down a bit, you will see additional requirements for the software engineering discipline.

    The way to differentiate yourself is to become a licensed professional in my opinion. All the best!

    1. That. Is. Awesome! So you have to complete modules in Organic Chemistry, Thermodynamics or Fluid Mechanics to get a license to practise as a software engineer?

      That’s it, I’m getting all my software from British Columbia now. You guys are serious.

      1. caloggins · ·

        Because having knowledge of organic chemistry would help you write better software how?

  19. Wow awesome article, I love when people evaluate anything this much then are nice enough to share their thoughts on it. Kudos

    I do feel motivated enough, however, to throw in my two cents. First off, how can you differentiate between good and bad programmers, then in the next sentence talk about “negative space” in art like it is a real thing. The only thing worse than the requirements for a programmer is the analysis of expensive wallpaper.

    Second, you are correct about the requirements of say a lawyer or doctor to enter the field. I feel however after they are in they are just as much in the rat race as all of us. Programmers get paid to build good software and corporate lawyers get paid to minimize losses and potential losses. Though I have no personal experience I bet there are a lot of bad doctors and lawyers that get churned out of those schools because, like it or not, education is a business first. It is the job of the company to sort out the good and the bad.

    If a company wants to pay 400 programmers for a web app, and 399 of those like to sit with their thumb in a dark place then what is wrong with that.

  20. Justice~! · ·

    Ha, I’m in BC too. Let’s not pretend that everyone working in the field in BC is a “software engineer”. ;) Quite a minority actually…

  21. Well there are SOME of us who have parents who worked in the industry…

    My mother started as computer operator and then programmed using punch cards before going to VMS.

    More than than my grandfather was one of the first people in the industry way way back.

    I did love the article, but I have to say that there are both professional programmers (still uncommon but more are evolving and groups like SANS are helping here with coding practices for security etc) as well as craftsmen (and those who are clueless).

  22. I hope I am not covering points made by other commentators, but there is a very important side for the ‘beauty’ in software – maintainability and efficiency of operator use.

    True, a ‘software building’ doesnt *need* detailed comments on the logic, and even suggested test scenarios in the code, to just work, but how it cuts down the ongoing maintenance load.

    Everyone knows that maintenance is always 80% of the cost of a software project over its lifetime – so why make badly set out, poorly presented and explained code dramatically increase this cost ? I have been praised for concise, plain english comments, and neat and logical layout so many times by the poor sods who have to alter my code, but consider how many hours of billable time I saved the client over the years, by taking a little extra trouble.

    Likwise, what does it cost a company in human frustration, confusion and error when the user interface is incomprehensible, confusing and inefficient ?

    I have come across so many expensive problems and mistakes caused by employees “working around” an unpleasant and difficult to use software system. I personally have made money by exploiting the confusion of poor operators using bad software.

    All programmers should be made to use their software for a couple of weeks after it goes into production.

    Now, with the dearth of programmers who cant express themselves in English, we are bulding man years of code that will incur double or triple the maintenance work that a ‘crafted’ system would need.

    Ugly software is expensive software in so many ways.

    1. Very well said!
      If only clients could see those savings you mention…

  23. David Adsit · ·

    Dan, thanks for adding your thoughts to the discussion. You ask about a manifesto for software craftsmen. I think that Pete McBreen wrote a pretty detailed manifesto in his book “Software Craftsmanship: The New Imperative.” Seeing the SCM inspired me to read that recently and I am glad I did. I love the idea of craftsmanship. My father is a small building contractor, so I grew up on construction sites seeing the care he put into ensuring that a building was constructed properly so that it would provide lasting value for his customers. I believe that providing lasting value for our customers should be our highest priority. We, as developers tend to forget the ‘lasting’ part of that equation. We focus far too often on delivering v1 to the detriment of v2 (otherwise, why so many attempts at a grand rewrite?). To paraphrase Alistair Cockburn, we are trying to survive in a swamp; we have to provide for the immediate need of delivering business value while preparing for the future. To me, this is craftsmanship: we think not only of today, but also the future. This doesn’t mean a return the to Big Design Up Front. This means, putting care and thought into each statement, function, class, and test that we write so that as we meet today’s functional requirements, we leave the code clean and clear enough that it can be extended later.
    When it comes to differentiating myself from a commodity developer, I think my primary impetus there is to get paid more because I am worth more. It sounds egotistical and selfish and it probably is, but I think it is also the honest reason behind the need differentiate. When we read that some developers are an order of magnitude more effective than their peers, I wonder why the salary range doesn’t reflect that. I have also wondered many times why some developers even get paid at all considering how little value they add and how much damage they do. I haven’t got the faintest idea what the solution to that is. I certainly don’t believe that it lies in certifications and degrees. A council of master developers that evaluates potential master developers appeals to me, but I don’t know how that would work in practice. Even if such a council existed, would we see businesses be willing to pay a craftsman $200k / year, when they can get commodity developers for $65k / year?
    Do date, the only solution I have come up with that I find acceptable is to reduce the gap in skills. Since I am unable/unwilling to unlearn or stop studying, I make it a priority to push/prod/inspire every member of my team to improve and grow as professionals. I suppose there is a selfish component to that as well, but if I am going to be in the same pay band as someone, I want them to have a similar level of skill. I also want people on my team to challenge me to improve.
    I guess craftsmanship has to be a personal attitude, not something you get from adding your name to a website.

  24. I appreciate your point of view as well as your clarity and thoughtfulness in presenting it. Perhaps software engineering is not a craft — perhaps none of engineering is. Your article inspires me to question the importance of that characterization at all. Perhaps only to the risk of one’s own ego. The comparison to a plumber could be responsible for the pejorative interpretations. Although I see the relationship when stacked against some of the code with which I’ve interacted (total septic waste!), it’s hard to think of some true architectural works of genius in plumbing. I got the sense that this is the crux of your article though. The true value of a software system is in the powerful architecture it provides to easily create and tweak features that delivery reliable function.

    That was a lot of adjectives in just a few sentences!

  25. Lemonhead · ·

    What a long-winded, blowhard article.

  26. Peter Venkman · ·

    Let’s write a totally unneeded and probably wrong analysis about… cars, making cars.

    Toyota (randomly chosen) makes cars. What Toyota does to make cars is mostly “engineering”. That is their process. The final product, the car, fulfills certain objectives, which could be summarized in: “an acceptable quality for the right price”. Engineering aids in achieving those objectives. The process is pretty irrelevant other than to make them achieve the objectives.

    Bugatti makes cars too. What Bugatti does to make cars is mostly “craftsmanship”. That is their process. The final product, the car, fulfills certain objectives, which could be summarized in: “making a very distinctive vehicle”. They certainly not care about price and they probably have even some difficulty in calling it a car. The process does have some relevance, but it’s still seen as a means to achieve the objectives.

    Filandri Moreno makes cars too. Well, he made one car. What Mr. Moreno does to make his car is a “hobby”. That is his process. The car he made fulfills certain objectives, sure, but I could bet good money that to him the process was at least as much of an objective (if not more) as the final product.

    “Unknown Tuner” makes cars too, mostly. He would at least. What he does is also a “hobby”, but he prefers just modifying his car, adding some details while leaving the “hard/basic stuff” to the industry. His objectives are varied. He may like the process itself or he may like the final product, or both, or use the product as a means to something else (showing it around or whatever).

    Oh, also, some guys modify cars professionaly. They have tuning shops, so it’s not a “hobby” for them. It’s more of a “job”. And they probably like it a lot, but I don’t think they would call it anything else than that, a job, and I don’t think they focus much on the process.

    —-

    In my -not so long- programming career, I (think I) have applied some engineering and some craftsmanship. I haven’t achieved nothing resembling art (at least yet). And yes, I’ve had a programming hobby.

    Only when treated as a hobby I reckon I’ve put much focus in the process as an objective in itself. That’s my main problem with the “software craftsmanship” movement (maybe not with the ideas themselves): they’re focusing too much in the process itself.

    —-

    The problem is, imvho, we’re still trying to force Programming into an existing category. We (as a group) still feel a need to make it fit into an existing approach. Maybe, just maybe, it would be better to really analize what works and how it works when making software and define it as it’s own peculiar activity, instead of all this “let’s now apply the idea of engineering to software and see if it works” (yesterday) or “let’s now apply the ideas of craftsmanship to software and see if it works” (today) or who knows what tomorrow.

    —-
    disclaimer: I’m just nobody, I don’t have a big blog or great achievements in software development, so I might be very very wrong in what I just said. It’s ok, I’m aware of it :)

    1. Hey Peter, hope you read this. Keep doing what you’re doing. I hope to hire a whole buch of people like you someday. You get it.

  27. I love this bit:

    “I want an expert programmer enabling my business. What I don’t want, however, is a prima donna plumber who insists on talking about the elegance, beauty or art of plumbing, or who insists that I appreciate the aesthetic beauty of his joinery, or will “only work with other rock star plumbers, who only practise copper-driven plumbing.”

    Brilliant. Totally brilliant

  28. As you rightfully mentioned, engineering and medicine are “proper” professions but we have to remember they have had many years to be refined and properly structured. Programming is still quite young so it will take a couple more decades to “get there”.
    Software craftsmanship is very important both to the programmer and non initiated because beautifully written (and indented!) code, with nice syntax highlighting and comments as well as a lovely system architecture depicted with either uml diagrams or screenshots enables one to “visualise” the final product and be in awe of its beauty and simplicity.
    An analogy would be building plans and architectural drawings which don’t look as good as the final edifice to the non technical person unless they can “visualise” it. Which is why an artist impression of the final product is created to facilitate “visualisation”.
    The same applies to chemistry formulae and molecular representation with “models”.

    Frankly code does not really need to be shown to the untrained eye or mind because it’s inconsequential to them just as engineering structural calculations of a bridge do not need to be shown to the city mayor.

    However craftsmanship in relation to software is important among programmers because it also helps in assessing the overall soundness of the system design.

    Programming is a burgeoning profession/craft that will eventually be at par with other already respected/established ones.

  29. I came to somewhat the same conclusion. I just published my blog a day earlier ;-). http://blogs.lessthandot.com/index.php/ITProfessionals/ProfessionalDevelopment/craftsmanship . Craftsmanship is not decided by you but by your peers and the users.

    1. That’s a lovely post! Thanks for sharing it. The Pillars of the Earth was dramatised on UK TV a while ago, and I think they captured the character of Tom Builder exactly as you describe.

      1. The book was better, if you want to borrow it…

  30. A long, meandering, misinformed post from someone who doesn’t even seem to understand the problem, let alone be able to analyse it.

    The are so many problems in the post, I’ll just take one at random and point out it’s flaws. To take the last paragraph In the “let’s be craftsmen” section. Who cares what title you put on it. Who cares what the training is. You dont care if you have a plumber who went to Harvard vs one who was apprenticed. As long as they get the job done to a high standard in a reasonable amount of time, then it doesn’t matter.

    Your critique if the plumbers personality and methods is also looking at the wrong thing. Who cares if they’re a primmadonna, and want to use XXX development style and care about code elegance. As the customer that isn’t really your concern. Your concern is a good final product, on time, at a reasonable price. The same way that you don’t care if the plumber does his work crouching or sitting, you don’t care ifyour programmer use agile or scrum.

    You only get a voice in these matters if you are managing the team or have a say in how it us run. And in that case, you would be a programmer. Which you are clearly not.

  31. Hi!

    I think you wrote a nice ellaborated article but as some people already pointed out I also think you’re making some incorrect points. I absolutely agree with Zvolkov which says artist != craftsman. Art it is just a subset of craftsmanship (therefore may be a synonym in some cases). Would you say that shoemakers, watchmaker or traditional pastissiers are not craftsmen? Yes, they are, but they are not artists. They are craftsmen that don’t put any of their own ‘personality’ in the final result. So personally I think it’s clear there is quite a difference.

    At your blog post you’re focusing just at the final result, as you were arguing with Matt. Damn, I really appreciate a well crafted shoe that doesn’t let the water come in in the rainy winter. In fact I probably appreciate it more than a nice piece of art :) But think that using your arguments a graphics designer would definitely be a craftsmen but a programmer wouldn’t. Going back to my first paragraph, that’s because a graphics designer is much closer to an artist.

    Said this if we look at the Internet we can find thousands of popular services/software/apps that are making a diffrence and that people love. Do they care about their internals? You’re right, absolutely not. Have been these services developed by software craftsmen? I guess most haven’t, but probably some of them have and there is great people behind those services which love their professions and consider themselves craftsmen.

    Please note that I share many thoughts from your article, and I get your main point about the dangers of programmers egos, but I think it could be formulated in a different way.

  32. I like the article, But it kind of saddens me because I like the beauty of efficient algorithms!

    One thing I’ve noticed is programming has different levels in respect to college required. Ill use web development for example, with a undergrad degree you can do application development, web development, etc. With a Masters Degree you can do all that and kind of dig deeper into lower level languages easier like assembly languages. Probably have better skills to recompile MySQL. With a PHD you can really push into the niche jobs like quantitative development where you program advanced statistical models for brokerage firms. I really dont understand why people think college degrees are not very important in programming. I just left a job because my skills where g oing to waste and my boss just over all hated me because I understood algorithms, data structures and efficiency better than he did (because of college). I think in respect to web development the last generation didnt need a college degree because the field was so young. However today I think it is necessary for new hires if you dont have atleast 5 years of real programming experience.

    You mentioned we should have some way to know the difference between masters and every day copy and paste programmers. I have found these questions help me in web development to see who really know what they are talking about:

    1) What is the difference between pass by value and pass by reference
    2) What does it mean to normalize a database?
    3) What is polymorphism?
    4) What is the difference between a function and a method?
    5) What is the difference between managed and unmanaged code?
    6) Explain the benefits of using a store procedure/routine?
    7) What is AJAX and what are the benefits to using it?
    8) What does it mean for something to be thread safe?

    I hope these questions help others because as sad as it may seem I have talked to web developers with 3-7 years of experience and they miss over half of these questions.

    Also wanted to point out if you have people who really enjoy what they do and look at it as something they want to perfect you will get better results than someone who just puts something together to please the business side.

    For example at my last job a guy focused on just pleasing his boss (a non-technical guy) so he would just do enough to get the ok with him. Well after half a year of working on a CMS system its being scrapped and the project out sourced. Than later after working on a FTP site for 3 months that was scrapped too. Why was all this stuff scrapped? Because things where too buggy, algorithms would crash web browsers, servers would lockup during queries, store procedures were not being used so updating queries took rebuilds to fix, user interfaces were not fast in getting people to what they needed. All of the problems these two sites had were due to not having training in things like asymptotic complexity, data structures, memory and processing consumption and many other things I learned in Computer Science courses in college.

    1. Thanks Heaven! I’m not a copy and paste programmer. I can answer all of your 8 questions!

      :)

    2. Jim Cooper · ·

      Hmmm. When I’ve interviewed programmers, the closest I’ve come to asking any of your questions is number 3.

      They are very technology specific, and not really programming skills questions.

      And do you really still use stored procedures? :-)

    3. João Jesus · ·

      Hi! Just wanted to leave my 2 cents because your comment kinda touched me on a sensitive spot :)
      I don’t have a degree, although I work as a programmer for 4 years now.
      I can honestly say I can answer your 8 questions. Wich I think are very good and pertinent.
      I don’t think it’s a matter of degree (or maybe even knowledge) but a matter of attitude. I love my work and mostly the challenge. And I stride to know more and perfect myself. That’s my notion of the meaning of the word carreer. Sure, maybe with a degree I could know more and be better. I can’t disagree with that.
      Still, I mostly see people who have degrees but can’t do the kind of work I do. And that only saddens me because, although it may be generally true, there’s a general notion they are better just for that.
      Hence, right now, I very solidarity with the matters here by being discussed. :)

      Cheers!!

      1. Very true Joao, passion and drive will always overcome education or certifications. I wish I had guys like you on my team at work. Im sure your a great lead based on you response and I think those questions can be answered without a degree or certifications

  33. Stephen Mc Namara · ·

    In my experience the best, most skilled programmers work to deliver & deploy (not just develop) software that will ‘delight customers’. But with an expectation (or at least the hope) that it will be useful then they understand that it will be extended, maintained and improved _by others_.

    The care, skill and craftsmanship that goes into the software (that the external customer doesn’t much care about) is paramount to the next poor sod that has to come along and build upon what we did.

    So perhaps ‘fellow developer as customer’ can provide the less egoic motivation for skilfully crafting the work we do.

    As for plumbing that’s easy. Lefty loose-y, righty tight-y. Shazam!, you are now a qualified plumber in the state of BC.

    1. Brendan · ·

      *province* of BC. We don’t have states in Canada.

  34. Hmm….. I have been a freelancer for 12 years now. I do not do Open Source (most OS projects seem boring to me ). If I want to learn a new language or develop my knowledge in something the client doesn’t need I go to somewhere like Project Euler and pick a problem. And yes, I enjoy coding, but I do not code in y spare time. I want to balance my life so I try to ensure I spend as much as I can of my spare time dealing with people not machines. I looked at the photos of the guys on Red Coder and they looked autistic. THis is not for me.

    I have seen some crappy open source code in my time, from PHP through C to Java.

    I would hope that the fact I have survived as an independent through two recessions would speak to my craftsmanship.

    Well crafted code to me does what it is supposed to do (even if the client leaves what it is supposed to do largely up to the developer), handles exceptions and deviant user input properly, is efficient well commented and easy to maintain. Oh, did I mention tests? No tests is bad code. The quality of the tests usually tells you something about the develoer who write them

    I have found that the code I write normally dies after a few months, a year at most. I try to write well crafted code for my own satisfaction as much as making sure it does not comeback to bite me. I recall one client saying they wanted speed not quality and I think this attitude is the root of much badly crafted code

  35. ChrisMelikian · ·

    There are (as ever) two sides to the story.

    One, we are building applications for businesses in order for them to make money. As time progresses, our work is commoditised, and we chase the higher ground. Our work is utilitarian, only there to add value to businesses.

    On the other hand, to make sense of what we do and because we have to use every fibre of our brains to do so, we perceive our work as an art form or profession to make sense of it. For anyone to say a piece of code is beautiful, you have to be a programmer or delusional. What programmer wouldn’t really want to make something real, that lasts more than 6 months and can actually be seen, held and admired? As we don’t have all that, we try and use our intellect to make it smaller, faster, easier to maintain and beautiful by simplifying. That gives us the kudos we need to stay sane.

    I suppose what I’m trying to get at is that we’re not much more than builders, high value builders true, but builders nonetheless. An art/craft form we are not.

    That all said, I’d love to be able to be able to prove to a customer that I’m worth more than another programmer. It’s a hard job recruiting a programmer. It’s about factoring in knowledge, skill, resourcefulness, attitude, commitment and innovation.

    No appointment or qualification will cover that. Could stick to narrower categories but then we’d get stuck in the same problems as someone earlier mentioned about PhD’s. Our industry changes every 6 months so radically a well qualified person 5 years ago is almost worthless today unless they’ve kept up with the trends.

    I don’t think there is any solution. It’s each to himself putting forward the best case to stand out amongst the crowd.

  36. “So from a purely demographics perspective we can see that the vast majority of people in the IT industry are there because a) it’s a well paid alternative to other white collar office work or even manual labour, and b) there is no incentive to make it anything other than a commodity numbers game.” Very true. Most people in software discipline are only there because it’s better paid than any other comparable job. These are the people who have spoiled the spirit of the profession.

  37. Great article! It was highly overdue to take such a close look at SC.

    Although I perfectly well understand the motivation behind the SCM – at least I guess ;-) I also feel it misses the mark. There simply is too little in it for the customer.

    So what´s the fundamental problem? Doesn´t software do what it´s supposed? No. Is it too slow? Doesn´t it scale? Not secure enough? No. All this might not be easy to accomplish, many technical skills are needed – but all in all software delivers on functional as well as non functional requirements.

    Rather the problem lies with non stated requirements, I´d say. Non stated requirements are those the customer simply thinks they are fulfilled anyway. I´m thinking specifically of:

    -evolvability: software will be easy to adapt to new requirements in the future
    -correctness: functionality is working flawlessly: no errors, no crashes, no data loss
    -production efficiency: software developers are not wasting time; their “software production machinery” is well oiled and working on top speed
    -improvement: software developers have up to date knowledge; they improve their thinking and practicing constantly; they learn from failure; they reflect on the outcome of their actions

    This is what customers assume – but it´s not really close to reality. So if we need a manifesto for software development, then these values should be at its heart, I´d say. They are customer focused, they are about delivering value, the benefits are tangible.

    As a customer I simply assume software is “well crafted” – but what does it mean? The SCM does not tell. Of course software developers ought to “steadily add value” – but what kind of value?

    As a customer I don´t care if software developers are working alone in a hut or in a team. Just add value every single day. So as a customer I don´t care for a “community of professionals”. If developers need one, well, then create one. But don´t bother me with that as a customer.

    Yeah, a “productive partnership” is great, so what I, as a customer, ask of you software developers is: deliver value according to my requirements every single day. And that includes the non stated requirements.

    A new manifesto thus should not state the obvious, but should focus our industry on what´s missing. If we constantly deliver not only on the stated requirements but also on evolvability, correctness, production efficiency and improvement: then customers will be happy which will make us happy.

    And if in order to deliver production efficiency a community of professionals is needed… then by all means create one. But clearly distinguish between goal and tool. The statements in a manifesto always should be about a goal relevant to the customer, not tools and means.

    Ups, I guess I got carried away a little ;-)

    1. Yes, there is so much ‘assumed’ in the customer/programmer experience. management who ‘assume’, are not managing.

      Building on the “Just add value every single day” comment, perhaps the nub of the matter is how we define value ?

      In simplistic terms, perhaps an employees ability to say – calculate a mortgage refund is worth $500 a week in time saved by employees, so management authorise 2 months savings $4000 to the project. Programmers do $4000 of work, and it goes into production. Happy business manager.

      But due to insufficent testing, peer code review and ongoing auditing, over the next 2 years you give away $50,000 due to an unforeseen errors. It costs $15,000 to investigate, remedy and correct. It creates bad customer relations, bad press publicity and bad relations between management and developers.

      All in all, very negative Net value to the company.

      Mangement who are disinterested and disconnected from software developers standards, methodology, thoroughness and processes might as well be disinterested in their manufacturing staff’s training, safety and quality of production. Its going to cost them just as much.

  38. Jonathan Shields · ·

    I totally agree with much of what you say. The end goal is to give the user what they want in the time they want it. It is best practice to do this in a way that involves writing as little code as possible for the that code to be easy to maintain.
    In the real world of actually doing work meetings deadlines and still having time to go home and see the wife and kids sometimes has to take precedence over crafting a pristine solution using the latest programming philosophies. In any job, sometimes you have to settle for “gets the job done” instead of outstanding.

    People who get the job done tend to stay in a job. Your customers don’t care whether something is written in Python, VB6 or COBOL as long as it works. However, it is usually the right thing to do to use a current programming language!

  39. I think Dan neatly illustrates why it’s a personal journey. This fine post is about what “software craftsmanship” means to Dan North and why Dan North believes programming is not a “craft”. All I can do is acknowledge that belief and respect that that’s the way he feels about it. There’s nothing more to be said.

  40. I agree with your article. The symptoms are plain to see: projects frequently overruning and going over budget, continual shifting of technologies and working practices (e.g. waterfal -> agile, structured -> OOP), contuinual testing of candidates during interview, inconsistent testing, bad quality control in software. In of these problems indicate to me a profession (if that what we should call it) that is still struggling to establish itself as such.

    IMHO, the problem starts in the Universities because they are teaching the subject of IT, not the professional of I.T, as doctors and lawyers would.

    The problem is further compounded by companies offering highly paid jobs without insisting on a minimum professional standard such as a relevant degree and membership of professional bodies.

    Until these two things change, the IT industry is never really going to shape up to other, more established professions.

    1. Hi Mat. That is a really insightful observation: [universities] …are teaching the subject of IT, not the profession of IT, as doctors and lawyers would.

      I wonder what teaching the profession of IT in universities would look like?

      1. Well, for example, I assume doctors are taught the correct way to use a stethoscope a basic tool of their trade. Would you ever expect to meet a doctor that could not use one and get through their training?

        Consider, when was the last time you ever saw an IT course that had programming and design that formerly taught a student how to type? IMO the keyboard is a basic tool of my trade as a developer.

        Many developers argue that copy typing and programming are not the same, but they’re missing the point. Developing software isn’t just about bashing in a program and making it work. If done properly there is a lot of documentation that should be generated like use cases, requirements, specs and test plans.

        IMHO, to be a software developer, good typing skills are essential yet are not manadatory. You don’t have to be whizz audio typist, but RSA 1 & Pitmans 1 is an easy course for anyone to do at night school (or as a module in a larger IT) and shows a mimimum proficiency of 30wpm. I’ve never needed to go further than that.

        But, having made that point, maybe you can now appreciate a little more why there are such problems as developers that struggle to comment their code or hide behind automation.

        That’s just one example of how universities and colleges are failing to prepare their students to be IT professionals.

      2. Marty Nelson · ·

        You would do stuff like spend a couple of months on successive changes to a code base and not be allowed to refactor, then do the same thing with refactoring.

      3. I don’t know about doctors and lawyers , but what Marty Nelson said above reminded me of a very interesting aspect:

        Currently, at universities, computer scientists learn how to create a program from scratch. But they do not learn how to work on existing code, or maintain it. That is like teaching a mechanic how to build a car, but not how to repair it.

      4. Jim Cooper · ·

        It always strikes me as odd what people say about their university courses, but maybe I was just lucky.

        When I did my course (some 20-odd years ago), I was perhaps fortunate to have academics who had also spent quite a lot of time in industry. They went to quite some pains to explain why they were teaching what might have appeared to be quite theoretical concepts, and how they would be useful to us later. By and large, they turned out to be right.

        The only lecturer who had only been an academic was our numerical methods lecturer. It may just be coincidence that that is also the stuff I’ve found least useful since I’ve left uni :-)

        We also did get to work on large (at the time we thought they were, anyway!) code bases, like Minix, and I had a programming job in the summer holidays as well, so I very early on got to understand the consequences of shoddy workmanship.

        Did I have such an unusual education?

      5. Keith Ray · ·

        In “Every Patient Tells a Story” by Dr. Susan Sanders, M.D., she writes about some of the successes and failures in teaching how to do an exam and make a diagnosis. (Subtitle: “Medical Mysteries and the Art of Diagnosis”)

        Eventually someone does a study that shows that a particular exam technique, or test, is useless or very useful, but many activities done by medical profession are not backed-up by science.

        Ironically, she’s technical advisor to “House M.D.”: House usually orders lots of tests and usually avoids personally examining the patient, and she advocates a more hands on approach.

  41. Software craftmanship comes at different levels.

    At first we become masons, who learn how to work with stone, how to build a solid and lasting wall, how to use all the tools and resources.

    Then we become architects as our experience with all the kind of elements we build grow into an insight how best to combine these elements into building a whole house.

    Then we become city planners as we start to consider the lifetime of what we are building, and strife to make it grow with extensions, break down and rebuild outdated parts, and restructure our products in anticipation of the ever-changing needs of the people.

    The level of skill can vary from utterly dumb to visonary mastery. I do not think any other profession covers such a huge range of skill. Not even close. I doubt that it makes sense to invent a system of apprenticeship and mastery without first breaking down software development into the ‘masonry’, architect’ and ‘planner’ craftmanships. Of course, a good ‘mason’ may become an ‘architect’, but that requires quite a lot of additional skills, and many ‘masons’ simply don’t have them, and no ambition to learn. Similarly, ‘architects’ might choose to move on to become ‘city planners’, but again, there are more and different skills to master that they may not have.

    If you start out in a craft as an apprentice, your goal is to eventually become a master in that craft. In software development however, people do not usually start out to become an ‘architect’, or beyond. The question is whether they should.

  42. Danny Martin · ·

    Hi Dan, and thanks for a great and thought provoking article.

    I myself am self taught (over twenty years ago now) and anything I did learn at school, with a piece of paper to prove it, is so outdated that it is actually a hinderance rather than a help… There are scarce jobs out there today for SIMON programmers on the ‘BBC B’, and 68K Assembly programmers are not as sought after as once they were.

    I do a lot of work these days in the cloud, and ‘up there’ there is a lot more scope for the craft, although admittedly most of this is on the front end. There is one thing that drives web devs to write more elegant and structured code, and it’s called ‘View Source…’. I’ve worked on a few projects where I’ve known exactly how much of a craftsman my predecessor was, and they weren’t going to be building cathedrals anytime soon.

    None of this answers the original question of course – so here’s an analogy for you. Rather than Plumbers and Stonemasons, what if you compare developers to chemists? My intricate knowledge of Chemistry could be written on one side of a bit of litmus paper, but with this limited understanding I can see some real world parallels: Neither create the final, forward facing end product, rather we both produce the ‘foundations’ or core components of those products. Both mix components (usually produced by others) in different ways to produce something new (or just slightly better) that, at the end of the day, the final consumer couldn’t care less about, and will never see in isolation. Nobody cares what a stroke of genius it was to add just a pinch of ‘Okey Cokey 2000’ as it contains just the right amount of ‘Brand X’, just as no-one cares how long it took to carefully optimise that particular search algorithm.

    Perhaps then, rather than looking at programming as a trade or a craft, we should be thinking of it as a science. Not an exact science, but one that is roughly covered by a set of general rules or laws. Rather than tradesmen or craftsmen we should be looking at dabblers and scientists, with the occasional genius cropping up once in a while…

    Just my two penneth, and thanks again for a really interesting piece.

  43. Well Dan, I think you hit a nerve or two here – there are some harsh words flying about. Some personal too. I hope its folk you know and its tongue-in-cheek.

    The core of the SC movement is about loving what you do, caring about it. Self improvement is a given when you love and care about what you do. Anything else is fluff.

    No one writes Manifestos for Snowboarders – you don’t need to. Those who love it, do it and learn new ways to do it better. Those who don’t, sit in the bar and get pissed.

    Whether it is a craft an art is irrelevant. If you are paid to do it, you are a professional and that is it! It makes no assumptions are good you are. Generally a profession is regulated by the market, if you float the buyer’s boat, you get more work or get paid more. If not, you don’t.

    One of Dan’s key points here is customer’s delight – generally through the thing you built. You could hack the heck out of it and still delight the customer. Another point is focusing on delivery rather than simply the elegance of production. Some elegant Y2K code was written and delivered past 01/01/00!

    If the SC movement is to survive and thrive, it needs to get beyond mere ego boosting and pride-in-your-work thing to something that we can all see value in. Developers and people who hire us.

    I really liked the learning about OSS. It is the equivalent of Standup Comedy, you do it because you love software and useful software at that. Enough to show your competency to the world. Those who stick at it are what I call prime time programmers – with great collaboration skills, well developed sense of self organisation and the desire to be useful.

    Thanks Dan for getting this discussion going, I might not have bothered otherwise.

    1. Hi Mike. Thanks for stopping by. The way you describe software craftsmanship is everything I hope it will become: doing something you care about to delight the people you do it for, and choosing to become as good at it as you can.

  44. I believe programming is an art and there is definitely the difference between the “doin’ for the money” programmers and the true artists. Unfortunately, we also live in a society where our clients really couldn’t care less for art. They want an elegant solution tomorrow for $10 per hour. Their definition of an elegant solution, however, is “does it work?”.

    I think the true test of whether you are an artist or a “doin’ it for the money” programmer is to answer the following question. If you were a billionaire, would you still write code? If the answer is “No”, then most likely you are in it for the money. If the answer is “Yes, but now I can afford to code what I want to code and learn new things”, then you are an artist.

    My rant is, in a society where the client/employer only wants faster and cheaper and cost of living is skyrocketing, it makes it harder to be an artist. For a software craftsmen guild to actually work, software consumers need to change their attitude. They need to, out of the gate, respect that good things come to those who wait and you truly get what you pay for. Also, to respect that software development takes time. We all have spent 40 programming hours on a module for someone, only to have that person make a “small change” at the end or decide “they didn’t need it anyway”.

    We, as software developers, are the “Rodney Dangerfield’s” of the professional world. “We don’t get no respect”. Until then, these radical changes will fall on deaf ears. Perhaps this is a process, and programmers NEED to organize, but like it was mentioned, programming has a small barrier to entry, so when the artists go on strike, the employers just hire scabs for pennies on the dollar.

    Anyway, just a few of my thoughts.

  45. Jason Gorman :

    Is there any evidence that folk who call themselves “software craftsmen” have a greater tendency to dissatisfy customers?

    Hi Jason.

    Interesting question! In terms of objective data I certainly haven’t been gathering any. Subjectively, I’m talking about the difference between programmers who are on your side, trying to use software to get a result for you versus programmers who vanish into the beauty and intricacies of the “craft.” I’m concerned that people on both sides of that equation might consider themselves software craftsmen.

    To be clear, I absolutely think programmers should have a craftsmanship mentality, in the same way a master plumber or master builder will have spent many years learning, practising and developing their skills so that when they come to help me, they have both the ingenuity and experience to solve my particularly unique and awkward plumbing problem (I’m still talking about my house here ;).

    I just don’t want a plumber who believes they are in business because plumbing itself is beautiful, rather than accepting that people simply want hot water. I’m not saying programmers shouldn’t be craftsmen, I’m saying programming isn’t a craft.

    1. Dan North :
      I just don’t want a plumber who believes they are in business because plumbing itself is beautiful, rather than accepting that people simply want hot water. I’m not saying programmers shouldn’t be craftsmen, I’m saying programming isn’t a craft.

      This is a false dichotomy.

      Customers should not care what motivates the developer. Most, that I have known, don’t. They want their product on time, budget, and, if they’re savvy enough, developed to a standard such that another developer has a decent chance of being able to further extend/modify/maintain the product.

      Please, let us not dictate what people should or should not believe in the performing of their job. The result is the issue. Let’s leave the individual developer’s desire to self-actualize out of it, unless it comes at the cost of the customer’s product, shall we?

      1. Perhaps a more reliable notion: customers don’t want to work with plumbers who brag to the customers about how beautiful is their work; nor those who justify schedule and cost overruns in the name of beauty; nor yet those who insist that the delivered product be different from what the customer wants, because it’s more beautiful.

  46. Very interesting article. The analogy of the Samurai could not be closer to the truth. I have many years experience in martial arts (specifically Judo which, as you no doubt know was derived from jiu jitsu) and less experience in programming. As an interesting story I stay in a smallish town where there is not much opportunity for someone with a degree in computer science (like myself) but the reasons for me staying here is not the focus point of the story. I moved here a couple of years ago from a reasonable large city (after completing my studies) and left behind the Judo Dojo I have grown up in. I joined a martial arts dojo in this small town and on the first night I was to fight against the highly ranked students. Now because it was a different martial art to Judo I was in for a tough couple of fights. New guy, no one knows me, I haven’t told any of them of my 16+ Judo experience, but it was a good test to see what I was capable of. The fights went as well as could be expected from “clean” fights. I made new friends got a great reputation and they got a great addition to the Dojo in terms of experience.

    Now, I’ve had a couple of “programming” jobs in this small town, but every time I had to correct employers and employees on misconceptions of “programming” and basically rebuild my reputation as a programmer every time (interviews were especially tricky).

    What I’m trying to say is that I agree. Some sort of “entity” needs to exist in which programmers can be recognized and have a reputation\rank, some form of indication of what their 10 years experience really means. I love programming, aesthetics is not my main concern but quality apps is what I want to give to the people who needs it. But I believe, the programming art\trade\craft\science what ever you wish to call it is still in its infancy and firstly requires a ‘whole lot of love’ before any major ‘professionalism’ will be recognized by non-programmer types.

    Just my 2 cents…

  47. mehgerbil · ·

    Find a problem.
    Evaluate it.
    Fix it.
    Do a good job.
    Get paid.

    Why it has to be anymore complex than that is beyond me.

    1. Can’t help but to notice your fifth point…. if you love what you do and have a great passion for it then money should not be a focus point… it should be seen as a nice perk…

  48. mehgerbil :Find a problem.Evaluate it.Fix it.Do a good job.Get paid.
    Why it has to be anymore complex than that is beyond me.

    Would you be so blase about spending tens or hundreds of thousands of pounds on a house? Or would you expect the people that designed, built and surveyed the house to be properly qualified and experienced. Good quality software is really, really expensive and yet businesses seem to think otherwise. Perhaps the biggest failure of the IT industry is it’s inability to get this message across.

  49. Some fools like you just happy triggered type nonsense and post it to the Web.

    Looks like you don’t know the meaning of the word craft which has been used time immemorial to indicate what people do to put bread on their table.

    So what is a craft? I will define it by “Wikipedia” from historical sense standard:
    A craft is a branch of profession that requires some particular kind of skilled work.

    Craft means profession, means some group of people will depend to make their living on it, craft means skilled, means you must know what you are doing, programing has all these and more.

    Okay it is easier for you to type all these personal perspective about programmers, but you are wrong. You have forgotten that a programmer wrote the code that you used to put this entire claim together, why don’t you use a quill or feather and ink. You are like somebody that is dying and taken a drug prescription from a doctor and used the drugs and later says making medicine is not a craft after his well again.

    What are you some primitive animal? But you put “.Net” to your name. Hardware and software complete engineering cycle. May be you wanted to become a C++ programmer, but your slopy brain was not developed from kid to handle thinking like a programmer, so you become something else and your passion turned into hatred. It happens. Or you just want to collect programmers email address and use it for your selfish gain.

    If you want to wait till eternity to see the day software will become beautiful, you don’t need to wait its already happening, go and buy game, buy Hallo, Assassin Creed, even cheap ones like World of Goo.

    Is there any discipline you want to talk about that software has not change the way the profession work, take architecture for example, they used pencil in the past and take more time to finish project, now with CAD software, they can do better, diagnostic software in medicine, nuclear installation monitoring software, entertainment etc.

    So if you achieve being able to standardise programing into a craft what improvement can you gain from software engineering than what we have achieved so far.

    What you don’t know in reality is that all craftsmen work tends to fall back on something:
    Engineer create hardware which fall back on software
    Programmer create software which fall back on user
    Doctors create drugs which fall back on user
    Lawyer create defence which falls back on user

    So you see moron in any profession, it all ends with user!

    1. “Some fools like you just happy triggered type nonsense and post it to the Web.”

      I think this comment may have fallen into it’s own trap ;)

      1. You don’t get it.

        The article says “It would be great if programming were a proper profession, but it isn’t…”, and more.

        Doctor won’t be happy if you write article like this in their journal or in the hospital, like wise lawyers if you talk like this in the court. Calling programming a non-profession on the Web is a slap to all programmers anywhere in the world, especially those that helped to create the Internet that the writer is now using to abuse us.

        They call doctors physician still nobody will abuse them in their environment, if programming is the main problem here, please note they are also called software engineer.
        Is engineering not a profession?

        Was there a hidden motif to this article? What does the writer wants to achieve by starting this blog?

  50. Danny Martin · ·

    Sorry for posting again, but I’ve been talking to some of the guys about this, and I was reminded of a truism that adds a bit to the debate… What is the main purpose of ‘source code’? It’s not to communicate with the machine the software will run on, if that was its purpose it would just be 1’s and 0’s – it is to convey the functionality of the software to a human reader, whether that is the original developer, his / her successor, the open source community or whoever else may get to see it.

    Given that argument I can see every point in making that code elegant and readable – ‘Crafting’ it if you like… Makes sense to me.

1 2 3 4
%d bloggers like this: