I can tell you two things that are mentioned in the book, although not explicitly labeled as "components" of being a Software Craftsman. Sandro mentions them in Appendix A, in the section "Software Craftsman versus Software Developers".
The first is Attitude - to be a craftsman, you need to have a certain attitude towards your work and the level of attention to detail and care you put into it.
The second is Action - obviously, you have to walk the walk, not just talk the talk.
I think the third one for me would be Achievements/Accomplishments - if you never accomplish anything or make anything that's useful to someone besides yourself, then what's the point? I don't make beautiful software just for the sake of it. I want to make beautiful software because it helps make the world better for others who use that software. That's what it's all about for me.
Edit: Actually, that might not be entirely true. To be honest, I have some selfish reasons for wanting to write good code. I know what it's like to work with crappy code. I know what the consequences are of letting code just rot and fester. It's not pretty and it sucks the joy out of development work. So, I have resolved to not put other developers through the kind of hell I have to go through on a regular basis, cleaning up other people's crappy code. If by doing so I can influence a few people and help them see that there's a better way of doing things, then I hope someday to be able to land in a code base where I have a comprehensive set of unit tests to refer to so I can understand the design, good clean code and relevant documentation, and software that works and is a joy to maintain and extend. Until then, I will fight the good fight against nasty code and bad designs.
As an example of attitude and action, consider this code from a unit test class:
What would you do if you came across this code? Would you think "Ugh. What a mess!" or would you just buckle down and try to understand what it does? Or would you simply just scan it, run it, and move on?
I normally would not walk past this "broken window" (something discussed in "The Pragmatic Programmer, " another book about craftsmanship) -- BTW, this is some code that I wrote yesterday to test another rancher's solution to a programming problem, hence the name check_davids_implementation.
If this were actual code for work, I would be compelled to refactor it to something like this:
That's the kind of attention to detail you'd expect from someone who is really serious about their craft. Sure, it seems almost obsessive, but anything less would just be the work of a POSD (Plain Old Software Developer).
Melodie Rice wrote:
What are the top three components of being a Software Craftsman?
I'm not sure I can list "three components". For me, being a craftsman is a lifestyle. It's not only about code. It's about always striving to do things in a better way. It's the eternal journey to mastery.
Being a craftsman is not about how good you currently are on something or the amount of technical knowledge you have in a certain area. It's about your attitude towards your career. It's about caring about what you do. It's about helping other people to get better. Learning and Sharing. Being a positive influence wherever you go.
This will take every ounce of my mental strength! All for a tiny ad:
professionally read, modify and write PDF files from Java