In my time as a developer, and now managing a team of developers, I have come to realize that there are two kinds of programmers: the Journeyman and the Craftsman. These terms aren’t mine – I’ve seen them used other places – but they describe the developers I’ve worked with pretty well.
The Journeyman
...knows one programming language.
...knows one operating system.
...can’t be bothered to learn something on their own.
...doesn’t know anything about the operating system or hardware their applications run on: “Someone else takes care of that”.
...never masters his tools. “I know my way around my IDE, that’s good enough”
...doesn’t refactor: “It’s ugly, but it works. Leave it alone!”
...only learns about the part of the system they are working on. No need to learn the rest of the system: “That’s not my job”.
...doesn’t want to take on an unfamiliar technology: “I haven’t had any training on x”.
The Craftsman
...knows a handful of programming languages, and is always on the lookout for the next one he should learn. He knows that learning any new language will stretch his mind and make him a better programmer in the language he uses day to day.
...devotes time to learning about new technologies, and helps to make others aware of them.
...understands the platform and operating system his applications run on, because he knows that’s the only way to diagnose many problems.
...masters his tools. He can perform magic in his chosen editor, and is always looking for ways to make himself more efficient.
...rarely passes up an opportunity to broaden his knowledge of the system he is working on.
...is always willing to take on something he’s unfamiliar with. He can pick up most things pretty easily, and enjoys the challenge of learning something new.
One craftsman is worth three or four journeymen. Easily.
It’s the journeymen whose jobs often end up moving overseas (and rightfully so, they add little, if any, value).
The longer I manage development projects, the more I value the craftsmen I have around me.


That seems a little harsh on the journeymen. Another way of putting it is
journeyman specialist craftsman jack of all trades
I consider myself in the latter category, but these days there is just too much stuff to be skilled in it all.
That DBA who doesn’t really understand TCP/IP has saved my ass more times than I can count.
I think you miss his point. A (good) jack of all trades is just another kind of craftman. What Larry is really talking (imho) is the mind set and attitude difference between journeyman and craftsman. I have managed development projects for many years, I also do individual contributor work from time to time for various reasons. One of the benefits is that I get reminded of what it is like to be a developer and truly understand the issues. I find that after my stints as a developer that as a manager I have much less patience with the journeyman and even higher regard for the craftsman. Given the craftsmen can be worth far more than journeymen, I think it is more like 5x to 10x, and the pay for the same experience level is less than 2x. I actively look to replace the journeymen. You get the same differential on the quality side too. A project full of journeymen can never seem to get out of the bug fix phase at the end of the project. A project with enought craftsmen seems to always converge with a minimum of fuss.
@steve You nailed it, that’s exactly what I was saying. As for how much more a craftsman is worth, my original draft said “One craftsman is worth 10 journeymen” but I revised it because it seemed perhaps too dramatic. I think you’re probably right though, 5x or 10x is probably closer.
Do you think that more programmers are Journeymen or Craftsmen ?
@us Definitely more programmers are Journeymen. Most large corporations encourage that – they don’t want free thinkers, they want people who follow instructions. I see this in interviews all the time, programmers who have only done programming in a specific area, like Java Servlets or J2EE components. They’ve not developed a UI, haven’t done web services, don’t know what AJAX is, etc. It’s kind of sad, as they’re not terribly useful as a programmer, except to large corporations who want to pigeonhole people.
A master craftsman (sometimes called only master or grandmaster) was a member of a guild. In the European guild system, only master craftsmen were allowed to be members of the guild.
I agree with the message of this post, but the language is incorrect. Journeyman is a craftsman; it describes a place on the path to mastering a craft.
I generally refer to what you’re calling Journeyman as a “Career Programmer”, or more often simply “mediocre.”
See Pete McBreen’s book on the subject.