Friday, October 5, 2012

What is software craftsmanship?

In a conversation with Patrick Welsh today, and his take on it was that a craftsman is someone who:

  • Writes small methods.
  • Uses excellent names.
  • Keeps modules small.
  • Test drives code.
The context of this is that it is possible to do all of these things in Javascript.  Claiming that JS is fundamentally different from Java (or any other modern language) is a poor excuse for not being a craftsman.

I tend to agree with him, and disagree with John Marx's statement that you can be a software craftsman without doing the above things.  I think that John's point was that technique != mindset.  My disagreement is that at the current time, using these techniques is the way to be a craftsman.  As techniques and tools evolve, the definition of craftsmanship will evolve.

What do you think?


Unknown said...

A craftsman will do these, but if someone does them, they are not always a craftsman. I mean just doing them blindly is not enough, otherwise I could have a static analysis tool plus git commit history, and give you a scale of the craftsmanship of a person which will be obviously ridiculous.

Doug Bradbury said...

Very Good question. I'd say that a software craftsman is defined b his or her principles and values. You've named 4 quite good ones. The Manifesto lays out some values.

Our discipline remains a young one so I think our techniques and principles continue to grow.

Good luck on your journey.

Greater Than The Sum Of Its Parts: Leading High-Performance Teams

A good leader doesn't tell the team what to do.  They model the behavior that they want from the team, and learn how to encourage peop...