I have been reading on blogs and tweets the sentiment that "software craftsmanship is elitism". This perception is formed around comments of code, process, or techniques. I understand a craftsman's earned sense of pride in their work can sometimes be inappropriately communicated.
Wanting to be a software craftsman, I took an apprenticeship. I took less money, sometimes working for free, to be in a learning environment. From where I started, it took me years to finish my apprenticeship. It was an easy decision when I saw the masters around me performing at a level I could only admire from afar. They told me software takes years to learn and there are no shortcuts. My vocation towards software gave me the ability for sacrifice to follow the pursuit of mastery.
During my apprenticeship I found and accepted a mentor. Someone guiding me through the abyss of books, blogs, and stack overflow to make sure I was still on the path to mastery. Following someone's direction takes a willingness to listen to an expert's advice and integrate it in to your own context. After a success it is easy to go overboard and try to apply a new skill to every problem you come across. Paying attention to your mentor is heeding the council of Daedalus and avoiding the fate of Icarus flying too close to the sea or the sun. It kept me learning from my mistakes rather than letting them overwhelm me.
Then I was told craftsmen become good at software by practicing using katas, pet projects, open source development, etc. It took a lot of hours of writing code that was thrown out for me to get good enough to be writing code to put into production. My first very small piece of code went in to production about three years in to my apprenticeship. My first project with consistent production code was in year four of my apprenticeship.
A peer group and my mentor would critique my work. They could be abrasive with their feedback to help get a point across. It is their job to communicate the code of ethics of being a software craftsman. We write tests to verify our code works! We collaborate with our customers to build the right thing! They were relentless every time my discipline fell short of perfection because when it came time to being a professional I would need to perform without mistakes.
After my apprenticeship I started taking on apprentices. Outside of my normal responsibilities I was teaching apprentices to become professionals. I felt a sense of duty after what great mentoring I received. Doing it on my own time was an honor to my craft and an attempt to keep software craftsmanship an inclusive community. Plus it was an incredible opportunity to solidify my knowledge by teaching it to another.
Do sacrificing, listening, practice, critiquing, and teaching sound like elitist qualities to you? Software craftsmanship starts out as a humble endeavor moving towards mastery. I won't let 140 or 1000 characters redefine the hours and years spent working hard to become a craftsman. It gave me humility and the confidence to be a professional software developer. Sometimes I let confidence get the better of me, but I know when that happens I am not honoring the spirit of craftsmanship which I was trained.