One question that each developer should ask himself is: “Am I a carpenter or a cabinet builder?”.

It might seem a silly question, but there is a difference. It isn’t the case that one is better than the other. This question isn’t about quality of work. When asking this, we also don’t worry about any compensation that one might get. So let me illustrate what I see as the difference.

A carpenter is someone that has a lot of skill in working with wood. A carpenter can work in a shop or at a construction side and will use any tool available to do the job, has a fundamental understanding of how wood can be used to achieve a goal.

A cabinet maker, in this case, is great at building cabinets. Can make any type of cabinet, if it is a cabinet. So don’t ask a cabinet maker to build stairs, or to build a doorframe.

So, this fictive cabinet maker, can do the same thing our fictive carpenter can do, building cabinets. The difference comes when a stair needs to be built. Then the cabinet maker won’t be able to help, and the carpenter will.

So, translating this to the world of software development, we can see a cabinet, a stair or a door frame as different programming language. And unfortunately, all these roles are called ‘software developer’, while they are clearly not.

In my opinion a software developer can work with a broad set of programming languages. And will be able to solve any computer task, so basically, it’s a generalist.

And we have programming language specialists, like java developer or python developer. Immensely useful, as these know the in depths of a programming language.

So, with this knowledge, ask yourself again the question:

“Am I a carpenter or a cabinet builder?”