Software craftsmanship is a skill, and like any other skill it takes time to learn and even greater time to master. Mastering your craft is something you should strive for. It’s not something that is easy or just comes with time. You will need to actively seek to be a master of your craft.
The best developers I know actively seek to make their craft better. They look for the next thing over the horizon. Constantly pushing toward the thing that will take them to the next level of programming. This isn’t to say they have no life, or are a ninja, rock star, or any other term that has been dreamed up to identify people who eat, sleep, and breath binary. They are simply life long learners and never let their skills rest. Once you skills atrophy it’s game over in software development.
How do we become a craftsman? Simply put, the second you start writing code you are a software craftsman. You have started a journey that will take you years to complete if you choose to master this craft. We are all craftsman at our heart and so we should definitely strive to become masters.
How do we produce code that is worthy of our craft? You should always be trying to produce incrementally better software. Pushing yourself to new heights even if your chose language doesn’t embrace certain ideals you can always learn from other communities and bring it back. For instance, there isn’t as much pressure in the PHP, or ColdFusion communities to produce high quality very testable and well tested code. However, Ruby has a very large emphasis on this. Bringing those ideals back and employing them in PHP or ColdFusion development has been a huge win for me. Bringing Sandi Metz’s rules from the Ruby world to pretty much all my code. Some of it does not apply to PHP or ColdFusion, but the vast majority of those concepts can be used for any application in any language. It may have been years before I was exposed to that had I not learned Ruby.
How do we find ways to improve our craftsmanship? The best way to improve you craft is to stretch you mind and learn something outside your comfort zone. Learn a new language every year. This sounds difficult, but you don’t need to learn the language in its highest capacity, just well enough that you can build something of moderate complexity. Learning to build something small to moderate size in Haskel for instance will stretch a Ruby programmer to learn new ways of thinking about old problems and with almost certainty help you produce better Ruby code over all.
In the end we all want to write great software, and great software tends to be software that can stand the test of time. In order to withstand the test of time it needs to be flexible and easy to change and designed in a fashion that makes developer enjoy maintaining the code. Good software craftsmanship will help us do just that.