A couple of weekends ago, I attended an Open Spaces developer conference in Austin, TX. The conference had a specific focus on the idea of software craftsmanship. While a nice fishbowl discussion on the open night of the event touched on a lot of ideas, I feel that some people missed the point at what a craftsman is, and where the desire to be a craftsman should start.
The main issue I had with many people’s opinions was that they were all targeted at explaining to managers, c-level folks, and others about why craftsmanship was important. They also focused heavily on how to explain to those people why they should hire someone that is a craftsman over someone that would (in most cases) be cheaper. I felt this was the wrong approach because it was outward rather than inward in it’s direction. How can you explain to a manager why hiring a craftsman is important when we personally don’t know what a craftsman is or why being one is important. I heard very little discussion about what a craftsman is or why you’d want to become one.
So today, I’m going to talk a little bit about what I feel being a craftsman is and how that idea can be applied to the development/creation of software. And to do that, we have to start at the beginning and define what a craftsman is.
What is a Craftsman
If we look up craftsman in the dictionary, we see something like this
A person who practices a trade or handicraft
So by definition, a craftsman practices a trade. Our trade is that of software development. When people think of the word “craftsman” they generally think in terms of woodworking. A craftsman takes a piece of wood and turns it into something beautiful. This kind of thing generally takes lots of practice and time. Time spent messing up, cutting a piece too short, splitting a piece of wood, and so on. You have to do a lot of things wrong in order to learn how to do them correctly. Eventually you become a skilled craftsman. You learn a lot of things to not do. In generally becoming a craftsman is more about learning what not to do than it is about learning what the right way is. But the main point here is that the craftsman spends time on his craft. He works at it daily. Looking for ways to improve and build a better whatever. Over time the craft is perfected, at least as much as it can be.
A Software Craftsman
When it comes to software, there are a lot of ways to do things. You can test, you can design, you can encapsulate, inherit, override, and continuously integrate. You can spend hours refactoring, changing bits of code until they’re just so tight that on occasion you can’t understand it anymore. All new software developers start out simply by trying to make the computer do something. Sometimes it’s just about getting it to show text on a screen. Eventually they graduate to automating tasks, very functionally (do this, then do that, then to something else) and without very little thought to re-usability. Then someone shows them how to make methods of common tasks, and then eventually how to break those methods into classes (if their doing object oriented programming). But it’s a slow process, some of these things can take years to master, many times they learn how to be better from someone else.
The general idea is the same though. To become a good programmer, you can’t just do it in a nine to five fashion. You have to practice it at home, spend time working on learning new things, finding those new ways to not do something. You’re not going to learn everything by doing it at a job day in and day out. The person learning to build furniture is going to learn how not to make chair by making the chair wrong a few times and so the same goes for someone looking to build software. They will go through a lot of wrong solutions before they start understanding why the correct one is, in fact, correct. Sure, someone could tell them, but then they haven’t experienced something for themselves and they don’t understand for themselves why it’s the right way. They only know it’s the right way because someone told them so.
Driving to be Better
Really it all boils down to a personal choice. Are you going to work to be better at your trade/craft or are you going to linger and stay in that little space that you are so comfortable in. Why is software craftsmanship important to you? Why should your manager care if you don’t? Why should anyone care if you don’t? In the end being a craftsman (in anything) isn’t about anything other than being the best you can be at your craft. If you are developing software then you will strive to create better software regardless of who it’s for. In the end, you’ll do the things that make you a better craftsman because they are why they make you better. Not because someone told you to do it that way. In the end, we all want to be the best at whatever we do. That to me is the sign of a craftsman. Someone who as a constant drive to be better at whatever it is they do.
Thanks for your thoughts, I agree with you on many parts here. There are so many possibilities in software that we often have to fail multiple times before getting to the right one. The feedback loop of progress you describe is right on.
Thanks for your thoughts, I agree with you on many parts here. There are so many possibilities in software that we often have to fail multiple times before getting to the right one. The feedback loop of progress you describe is right on.