Software Craftsmanship - What do you need to know?
Software craftsmanship is an approach to software development that emphasizes the coding skills of the software developers themselves. It is a response by software developers to the perceived ills of the mainstream software industry, including the prioritization of financial concerns over developer accountability.
In this article we will take a look at different perspectives about craftsmanship in general and some specific notions of the same in software and programming from various authors and programmers.
The Craftsmen’s Creed
In the Pragmatic Programmer, Andy Hunt and Dave Thomas discusses about craftsmanship with the likes of construction workers and civil engineers on how they treat their craft by envisioning it as a divine endeavor of building cathedrals.
The construction of software should be an engineering discipline. However, this doesn’t preclude individual craftsmanship. Think about the large cathedrals built in Europe during the Middle Ages. Each took thousands of person-years of effort, spread over many decades. Lessons learned were passed down to the next set of builders, who advanced the state of structural engineering with their accomplishments. But the carpenters, stonecutters, carvers, and glass workers were all craftspeople, interpreting the engineering requirements to produce a whole that transcended the purely mechanical side of the construction. It was their belief in their individual contributions that sustained the projects:
We who cut mere stones must always be envisioning cathedrals.
—Quarry worker’s creed
Within the overall structure of a project there is always room for individuality and craftsmanship. This is particularly true given the current state of software engineering. One hundred years from now, our engineering may seem as archaic as the techniques used by medieval cathedral builders seem to today’s civil engineers, while our craftsmanship will still be honored.
Gaining Mastery
In Software Craftsmanship, Pete McBreen puts emphasis on attaining mastery over one’s craft.
Craftsmanship is about gaining mastery. Yes, a person can learn to perform a subset of the tasks in a relatively short time, but developing complete mastery does not happen quickly.
The road to mastery is not lined up with daisies and spanned by a rainbow. Mastery hurts. In Drive, Daniel Pink discusses about the unique characteristics about Mastery like mindset, pain and asymptote.
A related idea is that one practices a craft and that as soon a person stops practicing, her mastery fades. Hence beginners are apprenticed to a craft, because people cannot afford to take time away from their craft to teach others.
In traditional crafts, apprenticeship is situated learning, where the apprentice takes over the easy, mundane tasks and then absorbs through observation and supervised practice the tacit knowledge necessary to perform the more esoteric, arcane tasks. Each apprentice trains a successor so that he can move on to more advanced tasks. In this manner, the master craftsman has to be concerned only with teaching the most advanced skills and can focus attention on productive work.
The Essential Elements of Craftsmanship
In Clean Code, Robert C Martin enlists the essential elements that makes up the craftsmanship. There are two parts to learning craftsmanship: knowledge and work.
You must gain the knowledge of principles, patterns, practices, and heuristics that a craftsman knows, and you must also grind that knowledge into your fingers, eyes, and gut by working hard and practicing.
The Craftsmanship Mindset
A true craftsman need to have a proper growth mindset not the fixed mindset, as Carol Dweckdiscusses about the two types of mindsets more prevalent among people, in her seminal book named Mindset.
In the Clean Coder, Robert C Martin takes a different approach by advising us to take the right mindset to craftsmanship.
The word craftsman brings to mind skill and quality. It evokes experience and competence. A craftsman is someone who works quickly, but without rushing, who provides reasonable estimates and meets commitments. A craftsman knows when to say no, but tries hard to say yes. A craftsman is a professional.
Craftsmanship is the mindset held by craftsmen. Craftsmanship is a meme that contains values, disciplines, techniques, attitudes, and answers. But how do craftsmen adopt this meme? How do they attain this mindset? The craftsmanship meme is handed from one person to another. It is taught by elders to the young. It is exchanged between peers. It is observed and relearned, as elders observe the young. Craftsmanship is a contagion, a kind of mental virus. You catch it by observing others and allowing the meme to take hold.
CONVINCING PEOPLE
You can’t convince people to be craftsmen. You can’t convince them to accept the craftsmanship meme. Arguments are ineffective. Data is inconsequential. Case studies mean nothing. The acceptance of a meme is not so much a rational decision as an emotional one. This is a very human thing. So how do you get people to adopt the craftsmanship meme? Remember that a meme is contagious, but only if it can be observed. So you make the meme observable. You act as a role model. You become a craftsman first, and let your craftsmanship show. Then just let the meme do the rest of the work.
The 3 dimensions
In the book, The Craftsman, Richard Sennett explores the dimensions of skill, commitment, and judgment in a particular way. It focuses on the intimate connection between hand and head. Every good craftsman conducts a dialogue between concrete practices and thinking; this dialogue evolves into sustaining habits, and these habits establish a rhythm between problem solving and problem finding.
References:
- The Clean Code by Robert C Martin
- The Clean Coder by Robert C Martin
- https://en.wikipedia.org/wiki/Software_craftsmanship
- The Pragmatic Programmer by Dave Thomas and Andy Hunt
- Software Craftsmanship by Pete McBreen
- http://manifesto.softwarecraftsmanship.org/
- The Craftsman by Richard Sennett
- Mindset by Carol S Dweck
- Drive by Daniel Pink
Image Credits
- Photo by Max Kukurudziak on Unsplash
- Photo by Satria Aditya on Unsplash