I don’t know if I agree with McFarlin. It seems like McFarlin’s definition of craftsmanship is having achieved some sort of perfection in your art. I don’t think that’s the case though—none of us would ever be craftsmen. He says, “a craftsman is someone who … constructs the solution in the most elegant, organized, and maintainable way possible”. I don’t think that this is ever possible. I think that what distinguishes craftsmen from non-craftsmen is that craftsmen strive for this. Even if you are inexperienced, as long as you believe that your code can be “elegant, organized, and maintainable”, and strive for it, I think you are a craftsman.
I have discussed this with my friends, but have described this as the difference between a hacker and a software engineer. Most simply, hackers write code so it’s easy to write, whereas engineers write code so it’s easy to read.
Agreed. I think that a craftsman is someone that is always working towards that next step in ‘perfection’ in their code (or whatever the field of focus is). I’ve been told many solutions I have written are elegant, but they always feel to me like hacks that need further refinement.