Agile Zone is brought to you in partnership with:

Ted Neward is the Principal at Neward & Associates, a developer services company. He consults, mentors, writes and speaks worldwide on a variety of subjects, including Java, .NET, XML services, programming languages, and virtual machine/execution engine environments. He resides in the Pacific Northwest. Ted is a DZone MVB and is not an employee of DZone and has posted 50 posts at DZone. You can read more from them at their website. View Full User Profile

On the Dark Side of "Craftsmanship"

01.25.2013
| 21829 views |
  • submit to reddit
I don't know Heather Arthur from Eve. Never met her, never read an article by her, seen a video she's in or shot, or seen her code. Matter of fact, I don't even know that she is a "she"--I'm just guessing from the name.

But apparently she got quite an ugly reaction from a few folks when she open-sourced some code:

So I went to see what people were saying about this project. I searched Twitter and several tweets came up. One of them, I guess the original one, was basically like “hey, this is cool”, but then the rest went like this:
"I cannot even make this stuff up." --@steveklabnik
"Ever wanted to make sed or grep worse?" --@zeeg
"@steveklabnik or just point to the actual code file. eyes bleeding!" --@coreyhaines
At this point, all I know is that by creating this project I’ve done something very wrong. It seemed liked I’d done something fundamentally wrong, so stupid that it flabbergasts someone. So wrong that it doesn’t even need to be explained. And my code is so bad it makes people’s eyes bleed. So of course I start sobbing.

Now, to be fair, Corey later apologized. But I'm still going to criticize the response. Not because Heather's a "she" and we should be more supportive of women in IT. Not because somebody took something they found interesting and put it up on github for anyone to take a look at and use if they found it useful. Not even because it's good code when they said it was bad code or vice versa. (To be honest, I haven't even looked at the code--that's how immaterial it is to my point.)

I'm criticizing because this is what "software craftsmanship" gets us: an imposed segregation of those who "get it" from those who "don't" based on somebody's arbitrary criteria of what we should or shouldn't be doing. And if somebody doesn't use the "right" tools or code it in the "right" way, then bam! You clearly aren't a "craftsman" (or "craftswoman"?) and you clearly don't care about your craft and you clearly aren't worth the time or energy necessary to support and nourish and grow and....

Frankly, I've not been a fan of this movement since its inception. Dave Thomas (Ruby Dave) was on a software panel with me at a No Fluff Just Stuff show about five years ago when we got on to this subject, and Dave said, point blank, "About half of the programmers in the world should just go take up farming." He paused, and in the moment that followed, I said, "Wow, Dave, way to insult half the room." He immediately pointed out that the people in the room were part of the first half, since they were at a conference, but it just sort of underscored to me how high-handed and high-minded that kind of talk and position can be.

Not all of us writing code have to be artists. Frankly, in the world of painting, there are those who will spend hours and days and months, tiny brushes in hand, jars of pigment just one lumens different from one another, laboring over the finest details, creating just one piece... and then there are those who paint houses with paint-sprayers, out of cans of mass-produced "Cream Beige" found at your local Lowes. And you know what? We need both of them.

I will now coin a term that I consider to be the opposite of "software craftsman": the "software laborer". In my younger days, believing myself to be one of those "craftsmen", a developer who knew C++ in and out, who understood memory management and pointers, who could create elegant and useful solutions in templates and classes and inheritance, I turned up my nose at those "laborers" who cranked out one crappy app after another in (what else?) Visual Basic. My app was tight, lean, and well-tuned; their apps were sloppy, bloated, and ugly. My app was a paragon of reused code; their apps were cut-and-paste cobbled-together duct-tape wonders. My app was a shining beacon on a hill for all the world to admire; their apps were mindless drones, slogging through the mud.... Yeah, OK, so you get the idea.

But the funny thing was, those "laborers" were going home at 5 every day. Me, I was staying sometimes until 9pm, wallowing in the wonderment of my code. And, I have to wonder, how much of that was actually not the wonderment of my code, but the wonderment of "me" over the wonderment of "code".

Speaking of, by the way, there appear to be the makings of another such false segregation, in the areas of "functional programming". In defense of Elliott Rusty Harold's blog the other day (which I criticized, and still stand behind, for the reasons I cited there), there are a lot of programmers that are falling into the trap of thinking that "all the cool kids are using functional programming, so if I want to be a cool kid, I have to use functional programming too, even though I'm not sure what I'm doing....". Not all the cool kids are using FP. Some aren't even using OOP. Some are just happily humming along using good ol' fashioned C. And producing some really quality stuff doing so.

See, I have to wonder just how much of the software "craftsmanship" being touted isn't really a narcissistic "Look at me, world! Look at how much better I am because I care about what I do! Look upon my works, ye mighty, and despair!" kind of mentality. Too much of software "craftsmanship" seems to be about the "me" part of "my code". And when I think about why that is, I come to an interesting assertion: That if we take the name away from the code, and just look at the code, we can't really tell what's "elegant" code, what's "hack" code, and what was "elegant hack because there were all these other surrounding constraints outside the code". Without the context, we can't tell.

A few years after my high point as a C++ "craftsman", I was asked to do a short, one-week programming gig/assignment, and the more I looked at it, the more it screamed "VB" at me. And I discovered that what would've taken me probably a month to do in C++ was easily accomplished in a few days in VB. I remember looking at the code, and feeling this sickening, sinking sense of despair at how stupid I must've looked, crowing. VB isn't a bad language--and neither is C++. Or Java. Or C#. Or Groovy, or Scala, or Python, or, heck, just about any language you choose to name. (Except Perl. I refuse to cave on that point. Mostly for comedic effect.)

But more importantly, somebody who comes in at 9, does what they're told, leaves at 5, and never gives a rat's ass about programming except for what they need to know to get their job done, I have respect for them. Yes, some people will want to hold themselves up as "painters", and others will just show up at your house at 8 in the morning with drop cloths. Both have their place in the world. Neither should be denigrated for their choices about how they live their lives or manage their careers. (Yes, there's a question of professional ethics--I want the house painters to make sure they do a good job, too, but quality can come just as easily from the nozzle of a spray painter as it does from the tip of a paintbrush.)

I end this with one of my favorite parables from Japanese lore:

Several centuries ago, a tea master worked in the service of Lord Yamanouchi. No-one else performed the way of the tea to such perfection. The timing and the grace of his every move, from the unfurling of mat, to the setting out of the cups, and the sifting of the green leaves, was beauty itself. His master was so pleased with his servant, that he bestowed upon him the rank and robes of a Samurai warrior.

When Lord Yamanouchi travelled, he always took his tea master with him, so that others could appreciate the perfection of his art. On one occasion, he went on business to the great city of Edo, which we now know as Tokyo.

When evening fell, the tea master and his friends set out to explore the pleasure district, known as the floating world. As they turned the corner of a wooden pavement, they found themselves face to face with two Samurai warriors.

The tea master bowed, and politely step into the gutter to let the fearsome ones pass. But although one warrior went by, the other remained rooted to the spot. He stroked a long black whisker that decorated his face, gnarled by the sun, and scarred by the sword. His eyes pierced through the tea maker’s heart like an arrow.

He did not quite know what to make of the fellow who dressed like a fellow Samurai, yet who would willingly step aside into a gutter. What kind of warrior was this? He looked him up and down. Where were broad shoulders and the thick neck of a man of force and muscle? Instinct told him that this was no soldier. He was an impostor who by ignorance or impudence had donned the uniform of a Samurai. He snarled: “Tell me, oh strange one, where are you from and what is your rank?”

The tea master bowed once more. “It is my honour to serve Lord Yamanouchi and I am his master of the way of the tea.”

“A tea-sprout who dares to wear the robes of Samurai?” exclaimed the rough warrior.

The tea master’s lip trembled. He pressed his hands together and said: “My lord has honoured me with the rank of a Samurai and he requires me to wear these robes. “

The warrior stamped the ground like a raging a bull and exclaimed: “He who wears the robes of a Samurai must fight like a Samurai. I challenge you to a duel. If you die with dignity, you will bring honour to your ancestors. And if you die like a dog, at least you will be no longer insult the rank of the Samurai !”

By now, the hairs on the tea master’s neck were standing on end like the feet of a helpless centipede that has been turned upside down. He imagined he could feel that edge of the Samurai blade against his skin. He thought that his last second on earth had come.

But the corner of the street was no place for a duel with honour. Death is a serious matter, and everything has to be arranged just so. The Samurai’s friend spoke to the tea master’s friends, and gave them the time and the place for the mortal contest.

When the fierce warriors had departed, the tea master’s friends fanned his face and treated his faint nerves with smelling salts. They steadied him as they took him into a nearby place of rest and refreshment. There they assured him that there was no need to fear for his life. Each one of them would give freely of money from his own purse, and they would collect a handsome enough sum to buy the warrior off and make him forget his desire to fight a duel. And if by chance the warrior was not satisfied with the bribe, then surely Lord Yamanouchi would give generously to save his much prized master of the way of the tea.

But these generous words brought no cheer to the tea master. He thought of his family, and his ancestors, and of Lord Yamanouchi himself, and he knew that he must not bring them any reason to be ashamed of him.

“No,” he said with a firmness that surprised his friends. “I have one day and one night to learn how to die with honour, and I will do so.”

And so speaking, he got up and returned alone to the court of Lord Yamanouchi. There he found his equal in rank, the master of fencing, he was skilled as no other in the art of fighting with a sword.

“Master,” he said, when he had explained his tale, “Teach me to die like a Samurai.”

But the master of fencing was a wise man, and he had a great respect for the master of the Tea ceremony. And so he said: “I will teach you all you require, but first, I ask that you perform the way of the Tea for me one last time.”

The tea master could not refuse this request. As he performed the ceremony, all trace of fear seemed to leave his face. He was serenely concentrated on the simple but beautiful cups and pots, and the delicate aroma of the leaves. There was no room in his mind for anxiety. His thoughts were focused on the ritual.

When the ceremony was complete, the fencing master slapped his thigh and exclaimed with pleasure : “There you have it. No need to learn anything of the way of death. Your state of mind when you perform the tea ceremony is all that is required. When you see your challenger tomorrow, imagine that you are about to serve tea for him. Salute him courteously, express regret that you could not meet him sooner, take of your coat and fold it as you did just now. Wrap your head in a silken scarf and and do it with the same serenity as you dress for the tea ritual. Draw your sword, and hold it high above your head. Then close your eyes and ready yourself for combat. “

And that is exactly what the tea master did when, the following morning, at the crack of dawn he met his opponent. The Samurai warrior had been expecting a quivering wreck and he was amazed by the tea master’s presence of mind as he prepared himself for combat. The Samurai’s eyes were opened and he saw a different man altogether. He thought he must have fallen victim to some kind of trick or deception ,and now it was he who feared for his life. The warrior bowed, asked to be excused for his rude behaviour, and left the place of combat with as much speed and dignity as he could muster.


(excerpted from http://storynory.com/2011/03/27/the-samurai-and-the-tea-master/)

My name is Ted Neward. And I bow with respect to the "software laborers" of the world, who churn out quality code without concern for "craftsmanship", because their lives are more than just their code.

Published at DZone with permission of Ted Neward, author and DZone MVB. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)

Comments

Jesper Nordenberg replied on Fri, 2013/01/25 - 10:02am

I don't have a problem that someone produces bloated, redundant, buggy code as long as I don't have to maintain it, then I really care because then I become responsible for the end result (many times this has caused me to totally rewrite the module in question). I strongly believe that if you produce dog food and label it as gourmet food, you should be forced to eat it too.

Dan Holmes replied on Fri, 2013/01/25 - 2:51pm

I disagree with the definition of "craftsman" used here. I believe it's a straw-man, and therefore the conclusions reached based on that definition are invalid.

A craftsman isn't necessarily defined by the number of hours worked or the particular language used. Being a craftsman means caring about the quality of your code - that it can be easily read, maintained, refactored, etc. Some programmers consider themselves done when "it works", even if the code has copy-paste redundancy, will be hard for someone else to read, doesn't have unit tests, etc. Those programmers are not craftsmen. And because those folks don't care much about testability, "design", etc, they usually don't even recognize that it's missing. To the degree that I can control it (which is often not much), I don't want those folks on my team, because guess who ends up dealing with all the problems that they create (and poorly crafted code DOES cause problems - bank on it)? It's usually me or one of the other craftsmen on the team who have to clean up the mess.

A software craftsman is someone who wants to do the job well. They want to spend a little extra energy writing code that will last. That's it. Doesn't matter if you work 5 hours a day or 10 hours a day. Doesn't matter if you're writing Java or Javascript... For example, your painting metaphor misses the point: even the house-painter with a sprayer can be a craftsman or not. Is he being careful to not spray paint where he shouldn't? Is he cutting corners by only putting on a single coat, or buying cheap paint that won't last more than a year? Did he buy the cheapest sprayer possible, and it's causing clumps in the paint? I'm pretty sure that when any of us hire a house painter to spray our walls, we want a CRAFTSMAN! Why would we accept anything less in our software...

P.S. I will concede that I would expect a software craftsman to spend some time outside the job thinking about his craft. Or at least carving out some time during the workday to devote to self-improvement, learning something new, etc. You can't stay a craftsman by doing the same thing every day without ever trying to evolve.

Stephen Morrow replied on Fri, 2013/01/25 - 2:57pm

I'm glad you wrote this article, because it's an important topic. I agree with Dan Holmes in that software craftsmanship doesn't create the segregation you describe; jerks do. It's not good to act like a jerk, and your post makes that point very well. To my understanding, software craftsmanship is far less about "me," and far more about "you." I care about the craft because of the impact that care will have on others. 

That care is as much about people as it is about code, and it means treating others with dignity and respect.

Lund Wolfe replied on Sat, 2013/01/26 - 2:07am

We use the term craftsman in software for artist because it is a mysterious ability that goes beyond engineering knowledge and teachable concepts.  We also use it to show our rank in a trade as in apprentice, journeyman, master where we basically consider craftsman to be the top in software construction.  As a point of pride it may be nothing but a source of trouble, as in the example above of being arrogant and petty, instead of appreciating the effort and useful contribution (even if not up to our professional code standards).

Craftsmanship is overkill for many projects or jobs (of course it never hurts to be prepared for a potential challenge).  The vast majority of programmers are adequate/sufficient for the needs of their job.  It does matter on complex projects that could easily fail.

The need for and function of the code is far more important than the quality (and should be appreciated), and the quality is in the product, not the perceived beauty of the source code.

If it becomes obvious that the application/module quality is not good enough, then a craftsman will be needed to refactor it into something that is more beautiful (makes simple/logical sense and can be maintained, extended).

raoul ghosh replied on Sun, 2013/01/27 - 6:18am

Loved the last two lines of the article... it almost seemed to blend into the parable. Let us not get so obsessed with our code that we forget about life. I am a software laborer and am not ashamed of it.

Dan Holmes replied on Mon, 2013/01/28 - 11:30am

Totally false dichotomy. I consider myself a craftsman, and it does not at all infringe on my ability to enjoy life. I have a large family, many hobbies, etc. Being a craftsman has made me successful at my career and enabled me to enjoy many things I couldn't have otherwise.

I agree with the earlier comment - you guys aren't arguing against craftsmanship, you're arguing against jerks. Fair enough. I suspect the author is, in fact, a software craftsman. I suspect Raoul Ghosh is also a craftsman, given that he's reading and posting about his profession on the weekend. (I think Raoul must care about his "craft" more than he's letting on.)

I think you guys don't like the term more than anything else.


Patrick Cornelissen replied on Wed, 2013/01/30 - 9:14am

I agree that probably many software developers lack social skills when it comes to "sub standard code", but I don't get it why you pick on the software craftsmanship movement. The movement is about getting better in what you do, not work until you fall asleep at work.

It's a pity what happened to Heather Arthur, but the fact that some people use their skill level (regardless whether they are really skilled or not) to feel superior to other devs is just human nature. That is what people do (not what they should do, of course). You can see that in every aspect of human life. An easy example is sports where the teams and their fans are almost at war with each other, but I am pretty sure that you can find many more examples.

Another argument you provided is the focus on "your code/work". I don't get this one either... Part of being good in software development is being a good team-player, because you can't finish most projects by yourself. So a big part of the literature and the fact that the craftsmanship movement is at heart close to the agile movement shows me that the social aspects are important as well.

The only thing that I agree on in your article is that Heather was treated wrong. The rest seems to be just a rant about a movement you didn't liked before either, but took the chance to rant over it because one of it's advocates was involved.

I'm not sure what I should think about your "software laborer"  term. Of course there are plenty of 9 to 5 devs that just get shit done. The problem that the software craftsmanship movement tries to encourage people to learn their craft and not just crank you code that may or may not work and may or may not be maintainable. I have seen so many codebases over the years, made from people which you might call software laborers and they were horrible, although they worked, as long as you did not try to enhance them or fix a bug in them. They were a mess.

If they had taken a little more time and effort to create maintainable code, their and my life would have been easier. And your argument about working hours looks like oversimplified, because with a cleaner codebase you tend not to have to work on weekends before the release, because you have to fix your code. So a developer who tries to do qualitatively good work that is readable by other people will end up with more stable working hours in the long run. 


Anyway, I hope your blog post does not damage the term software craftsmanship, because in the end you brought no real evidence that what happened had something to do with software craftsmanship itself.

Robert Casey replied on Fri, 2013/02/01 - 11:58am

 +1 Patrick.

I think a critical part of being a true craftsman is having the patience to elevate others to be craftsmen.  You achieve this level of effortless excellence by doing.  You also will have achieved this by learning from your skilled peers.

Some construct their code because 'best practice' told them so.  They're following the textbook or fad.  It is the wise developer that discovers 'why' that best practice came about and incorporates into their own practice in an appropriate manner.

Those that have not learned good coding skills could be seen as incapable or lazy, but more often than not, it simply takes a guiding hand from someone who's been there to show them a way to do their work just a little better.

Craftsmanship is a lifelong pursuit.  None of us are born with it, and it does not come to us overnight.  It stems from a desire to learn the craft and having a supportive learning environment of peers.  Segregation of others out of arrogance brings you no currency in this practice.

Ron Peacetree replied on Wed, 2013/02/06 - 3:29pm

This assertion is False:

[I come to an interesting assertion: That if we take the name away from the code, and just look at the code, we can't really tell what's "elegant" code, what's "hack" code, and what was "elegant hack because there were all these other surrounding constraints outside the code". Without the context, we can't tell.]

It is easy to tell the difference between elegant code and hack code.

Elegant code is well structured, easily maintained, and uses appropriate algorithms, data structures, and language / library features.

Hack code is either the opposite in some way(s) or lacks at least some of the above positive features.   The greater the lack or the more egregious the violation of the above principles, the more the code deserves the term "hack".

Authorship, except as a matter of credit or blame, has nothing to do with it.

Junio Mousull replied on Sat, 2013/04/20 - 10:04am

This article was adapted from Joshua Brown's new book, Backstage Wall Street-An Insider's Guide to Knowing Who to Trust, Who to Run From, and How to Maximize Your Investments.

Junio Mousull replied on Sat, 2013/04/27 - 2:54pm in response to: Jesper Nordenberg

dhea , melatonina, lipo 6 unlimited, you can follow the development in java for example in the following sites

Junio Mousull replied on Mon, 2013/05/20 - 5:35pm

There have been many chapters in Colin Quinn's career since he first appeared on suplementos importados and oxyelite pro

Bessie Jackson replied on Sun, 2013/05/26 - 12:14am

 thanks @Ted Neward,Nice point!Just as someone said It is easy to tell the difference between elegant code and hack code.keep it up .

Henkz Sall replied on Thu, 2013/05/30 - 1:26pm

One hundred and two weeks ago acompanhantes sp and acompanhantes são paulo

Jonarghan Blairson replied on Wed, 2013/06/05 - 10:37am in response to: Jesper Nordenberg

Yes. Sometimes I had to stay late just because a sloppy coder left a bugridden mess. So, No, I think you should build good code that works, not just "kind-of" works".

Junio Mousull replied on Thu, 2013/06/06 - 9:38am

so stupid that it flabbergasts someone. So wrong that it doesn’t even need to be explained. And my code is so bad it makes people’s eyes bleed. So of course I start sobbing acompanhantes de sp

Rozanna Simus replied on Thu, 2013/06/06 - 10:15am in response to: Junio Mousull

There were also some serious non-technical challenges; people skills and organization/political in nature?

Henkz Sall replied on Fri, 2013/06/14 - 7:47pm

Thank you for the information you give to the readers of your articles Herbalife

Henkz Sall replied on Wed, 2013/06/19 - 8:31pm

One book that I think is a must for anyone involved in the web is Content Strategy for the web by Kristina Halvorson - easy to digest, practical, informative and above all else, amusing.
Read bbom

Henkz Sall replied on Fri, 2013/06/21 - 2:47pm

The only thing that I agree on in your article is that Heather was treated wrong. The rest seems to be just a rant about a movement you didn't liked before either, but took the chance to rant over it because one of it's advocates was involved. My page: portas de aço

Henkz Sall replied on Fri, 2013/06/21 - 2:53pm in response to: Jesper Nordenberg

But those feelings do not support nor establish the historical reality or ontological fact of Santa, nor convince me to cadastrar na bbom

Wellington Rezende replied on Sun, 2013/06/30 - 9:46am

I was very impressed with the greatness of this site and the quality of the content, you can really notice that here the authors write with great quality and the subject property, we need more places like this on the internet. I take and leave the invitation to visit my blogs Como Divulgar blog  and Minecraft online servidor 

Sandi Moss replied on Sun, 2013/07/14 - 5:25pm

 This was a very cool article. I really do appreciate reading this information so much. I cant wait to read more. Chat Rooms  Experts

Henkz Sall replied on Mon, 2013/07/15 - 7:23pm

The main problem is the documentation, or lack thereof. Pull down the “Specflow guide” PDF and you’ll find a clear work in progress, incomplete and missing sections, editing notes etc? ___________________
 My page net

Alan Bass replied on Sat, 2013/07/20 - 11:16pm

Autosurf

Henkz Sall replied on Tue, 2013/07/30 - 5:05pm

les efforts que vous avez mis dans la rédaction de ce site. J’espère que le même message de chaveiros personalizados

Henkz Sall replied on Sat, 2013/08/03 - 9:53pm

I also benefit from learning the assessments, but learn that alot of people ought to stay on essay to try and add worth in the direction of the authentic weblog release.
Thanks acompanhantes em sp

Carolina Alves replied on Thu, 2013/08/29 - 12:23pm

That would be actually an interesting research topic, how digital has changed the way people read and write.

http://www.garotasdeprogramasaopaulo.net.br

Henkz Sall replied on Tue, 2013/09/03 - 8:13pm

But although one warrior went by, the other remained rooted to the spot Helicoptero de Controle Remoto

Vera Loiola replied on Thu, 2013/09/05 - 6:16pm

I agree that probably many software developers lack social skills when it comes to "sub standard code", but I don't get it why you pick on the software craftsmanship movement. The movement is about getting better in what you do, not work until you fall asleep at work.

http://www.sexyclass.net



Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.