Facilitating the Spread of Knowledge and Innovation in Professional Software Development

Write for InfoQ


Choose your language

InfoQ Homepage News Becoming Software Craftsmen

Becoming Software Craftsmen

Leia em Português

This item in japanese

The software craftsmanship movement talks about practicing as a way to to develop programming skills to become software craftsmen. Technical practices are considered to be important, it takes time to learn them and become better programmers.

The manifesto for software craftsmanship states:

As aspiring Software Craftsmen we are raising the bar of professional software development by practicing it and helping others learn the craft. Through this work we have come to value:

Not only working software, but also well-crafted software

Not only responding to change, but also steadily adding value

Not only individuals and interactions, but also a community of professionals

Not only customer collaboration, but also productive partnerships

That is, in pursuit of the items on the left we have found the items on the right to be indispensable.

In the blog post the codesmith Chris ODell shares his definition of a craftsperson:

in my mind a craftsperson is someone who not only creates something from nothing from materials of their choice, but usually puts a part of themselves into what they make. A good craftsperson takes the time and effort to make something of quality which is worthwhile to have and which will still function way after the crafted item has been made. Good craftsmanship is synonymous with quality products.

Using an analogy with metalsmiths and blacksmiths Chris coined the term codesmiths which for him “implies a certain level of craftsmanship and implies a progression from apprentice to master”. In his follow up blog post anyone can be a codesmith he explained how codesmiths can develop themselves to become codesmith masters:

The barrier to being a codesmith should be low. This is why I think that anyone who writes code in any shape or form should feel free about calling themselves a codesmith. The ideals of craftmanship should be followed, with a healthy dose of pragmatism, but learning the skills to become a good coder takes time and experience.

Earlier this year InfoQ published news about the importance of technical practices in agile in which several people who are involved in the craftsmanship movement emphasized technical practices:

Matt Badgley: “We need to renew the emphasis on agile engineering good practices and embrace the ideas of craftsmanship — without this, agility does not happen.”

Robert Martin: “if you don't use [the 13 practices of XP], you'd better use some that are as good or better. And the practices you use will define your culture and be an expression of your values.”

Ruud Wijnands: “the companies that I have seen that were successful in their agile adoption all valued and implemented technical practices. The companies less successful did not.”

How can programmers develop their skills to become software craftsmen? John Sonmez wrote the blog post why I don’t do code katas in which he stated that programmers cannot improve their skills by doing the same exercise repeatedly. To learn something, the bar must be raised continuously:

Repeatedly writing the code to solve the same programming problem over and over again is exactly the same thing, except unless you are introducing new challenges by adding constraints and twists, you are only benefiting from the exercise the first, and perhaps, the second time, you undertake the activity.

(…) if you want to get better at something, repeating practice alone is not enough. You must practice with increased difficulty and challenge.

According to John the a good way to develop skills is by doing. Programmers have to program to become software craftsmen:

I get lots of emails asking me about the best way to learn programming or how someone can improve their skills. Recently, I’ve gotten a lot of emails asking about how to learn Android development. Do you know what I tell all these inquisitive minds?

Make Android apps.

But, umm, what book can I read?

No book, just come up with an idea and try to create it. Figure out what you need to do along the way. When you get stuck, go look for the answer or seek help.

Steve Ropa wrote about building software craftsmen. Universities teach the theory of software development. To become craftsmen programmers need to gain “real-world experience and practical applications of knowledge” said Steve. Apprenticeship programs can provide this:

My suggestion is to turn the clock back a few hundred years, and turn your team room into a workshop. Let’s populate that workshop with Craftsmen. We may not have all of the Craftsmen we need to begin with, so we need to build and grow them. This can be done by applying an apprenticeship program and using the craftsmen’s model for further career development.

In his blog post Steve provides five main areas for software development apprentices to become craftsmen:

  1. Crafting Code – The art of using one or more programming languages to create clear, well-factored code.  (…)
  2. Applied Principles – (…) An apprentice needs to understand principles like SOLID, and know how to apply them.
  3. Technologies and Tools – While programmers need to be able to practice activities like Refactoring by hand, they also need to know how to use certain tools, as well as which tool to choose for a particular task.
  4. Work Habits – (…) we need to be able to build muscle memory around the activities that make good programmers great, such as TDD, Continuous Integration, etc.
  5. Soft Skills – (…) Software apprentices will learn how to work in a team, how to communicate with others, and other soft skills that tend to be forgotten in the traditional learning environment.

Rate this Article