In my first post, I stated that this blog will center around the idea of software craftsmanship. This term may not be one that you’re familiar with. It’s difficult to define, with people often relying on describing the characteristics of a software craftsman instead. For a quick reference, you can check out the Wikipedia article, or the Software Craftsmanship Manifesto, as quoted here:
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 ot be indispensable.
I see software craftsmanship as an echo of the agile movement. The people behind the agile movement rebelled against traditional structured software processes. They said, “But we build software for human beings!” And they started working closely with the people for whom they wrote software. This is a positive thing. But it isn’t enough.
A software developer can plateau in his or her career after reaching a certain point. This type of developer feels he knows enough and always draws upon the same well of techniques. In contrast, a software craftsman — whether an apprentice, a journeyman, or a master — knows that there is always room for improvement. He always seeks to grow, to improve, to be better than he was yesterday. This focus on self-improvement and professional development makes him an indispensible team member, leader, and teacher.
Personally, I strive to improve my work every day. I don’t mind refactoring code if I realize it has any distinct smell to it. I’ll even throw out work that is subpar. I study elegant code and try to figure out just what it is that makes it so. I know that I’m not the best at my craft and am not afraid to ask for help when I need it. I also read constantly, so that I may have more knowledge to draw upon. I can’t turn myself into a master over night, but with many small steps, I know I will make it there eventually.
If you’re a software professional, you should seek to move from the ranks of software engineers or software developers, and join the software craftsmen. It will make you a better developer. If you don’t already, you will learn to take pride in what you do. What you’re building is beautiful, and could be something only you can do.
Where can I start?
If you’re interested in knowing more, you can find some introductory material at the following links:
- Software Craftsmanship: More than just a manifesto, by Ade Oshineye
- The Ultimate Code Kata, by Jeff Atwood
For a more in-depth look, check out the following books:
- The Pragmatic Programmer, by Andrew Hunt and Dave Thomas
- Software Craftsmanship: The New Imperative, by Pete McBreen
- Clean Code, by Robert C. Martin
Do you believe software craftsmanship is something that everyone should strive for? What are some good examples you have seen of software craftsmanship? What are you going to do today to improve your software craftsmanship? Share your thoughts in the comments!
Disclosure of Material Connection: Some of the links in the post above are “affiliate links.” This means if you click on the link and purchase the item, I will receive an affiliate commission. Regardless, I only recommend products or services I use personally and believe will add value to my readers. I am disclosing this in accordance with the Federal Trade Commission’s 16 CFR, Part 255: “Guides Concerning the Use of Endorsements and Testimonials in Advertising.”