I saw a great share (by @jurgenappelo) a little while ago in my Twitter stream (I am so glad that I got a new twitter account, I can actually keep track of my stream now). It was a post by Krishna Kumar on his blog Though Clusters regarding his views on the problem with the software craftsmanship concept. Now, I am a big believer in the idea that software development is a craft and that you can hone your skills and become increasingly good at it year after year (i.e. become a master craftsman in time). While I could see where Kumar was coming from with his post and while it certainly might appeal to the vanity of the younger developers out there (myself included I guess), I am forced to disagree on several important points.
Firstly, it is certainly possible for a young developer to create great tools, products etc. and do something more experienced developers did not. But this has nothing to do with craftsmanship, it is all about having a great idea and having enough drive (and yes even talent) to make your idea a reality. This is entrepreneurial spirit, it’s capitalism, and while your new idea may appeal to the masses, it does not stop the code behind your idea from being a total mess. Craftsmanship does not even come into the picture.
What about all the new technologies and tools that are available to the young developer? Thing is, all these technologies are also available to the older developers. This industry does not reward resting on your laurels. If an experienced developer, stops learning and improving, he is pretty much guaranteed to become outdated in short order. But, no developer who aspires to be a craftsman would ever allow himself to stagnate and therefore they are just as well equipped with all the latest tools and trends as the youngsters The difference is, they have years more experience learning to be a craftsman in their profession and so their ability to apply these new technologies and skills is that much greater.
The interesting thing about our industry is that truly new and innovative ideas don’t really come along all that often. Most of the time the ‘flavor of the months’ technology is not a breakthrough, but is instead just an updated execution of an older concept using all the latest widgets and buzzwords. If you’ve been around long enough (I don’t mean just existing I mean proactively in the thick of things learning your craft) you start to see the parallels and patterns and so your ability to use and abuse these ‘new’ technologies is almost infinitely greater than someone who is seeing the concept for the first time.
What about simply writing clean, nice code and doing it quickly and well. While I would love to say that anyone can do it no matter how ‘old’ they are, I would be lying if I did. Any developer who has ever looked at code they themselves wrote 1, 2 or 3 years ago will tell you that this is one skill that you can hone and improve until the day you, errr – become a manager (don’t bite my head off, i am only kidding :)). The point is, having a skill that you can continue to improve for as long as you’re able is the very definition of craftsmanship.
What about soft skills, I mean, being a developer is not all about technology and writing the next Facebook or Twitter. Some of us need to work in teams, communicate with customers and managers, be able to give and take feedback, be able to mentor and be mentored etc. Sure some people have these skills naturally but they are the exception, the rest of us learn this over time and hopefully get better at it (although many never do). And here once again an aspiring craftsman will have an advantage over the freshly minted youngster. This is not only true in our profession, but in any field, soft skills take years to develop.
And so I come to my final point. One of the great things about our industry is the possibility that as a relative junior you have it in you to create something truly remarkable and will appeal to many people. It is also one of the great problems that our industry faces because things that appeal to the masses inevitably become products and teams of more experienced craftsmen (and women :)) come in to work on these products. At which point they start fighting a loosing battle against the software that in many cases is spaghetti code. Badly designed, badly put together without any regard for the patterns and practices that some have been trying for years to instill into the zeitgeist of our industry. It is both the beauty and the curse of software that something which is constructed and designed so badly, can bring so much value.
My great-grandma always used to say that you don’t carry knowledge around in a backpack, meaning that more knowledge is never a burden. It might get outdated, but it will never be useless, the lessons you learn are always applicable you just need to see how to apply them. Becoming a master craftsman developer is all about learning how to apply everything you know to your current problem, the more you know the more angles you see, which lets you come up with more elegant, cleaner, faster, better solutions. It is possible for people without the same experience to come up with the same solution, sometimes it will be by accident, other times they will simply be exceptionally talented people. These however will be rare cases and will certainly not be the rule. This is why I try to learn something new every day, try to increase the depth and breadth of my skills, not just in software but in general, it all helps. I would encourage all young developers to foster the same attitude, not because you want to join some mythical elite but simply because you want to be as good as you possibly can be at what you do. And I guarantee that no developer who aspires to be a craftsman would ever lord their skills over those more junior (or less skilled). You don’t differentiate yourself based on years in the industry, you differentiate yourself on your attitude, your passion, your knowledge, your insight and your expertise – experience just tempers all these and makes them more potent. But if you never had these (or tried to develop them) in the first place, no amount of experience will help you find them. That’s what the concept of software craftsmanship is all about.
And just as a quick addendum to the above, I am a 27 year old software developer, so don’t think that what you read above is a dinosaurs view of the world (even in software 27 is not that old :)).