I know that this might be a controversial topic but I have many times thought about the difference between programmer and developer. In my mind programmer is a person who writes code that is close to the hardware. For example Linux kernel programmer or device driver programmer. A developer on the other hand is a person that writes “business software” or web programs. Both of these types write code and create software but they still work in different environments.
A programmer might not have all the software tools he or she needs and that’s why he or she needs to spend some time working on creating those tools also. I am not a programmer, so I can’t be sure.
A developer like me writes software that is usually used to streamline or enable some kind of business. The main focus is the “business problem” and how to solve it, with the technologies that he or she knows. Then there are architects, that should have more broad knowledge of different kinds of technologies and how these might help to solve the problem at hand.
Many times I have seen developers reinventing the wheel. For example in one project, the developer insisted on creating a new calendar component for back-office applications because he did not like what the internet had to offer.
My humble opinion is that developers should focus on the business context and the thing that they are trying to make better or streamline. Most of the time client does not benefit from a new calendar component or new kind of state machine. And developers should consider that before starting to create something from the scratch.
I know that this is a line in the sand. Sometimes developers need to create a new calendar component or state machine but usually, they don’t. And it is part of the pride in their work that they seek to find the best solution for the client thinking about the time and money constraints.
As I said, I haven’t done any Linux kernel programming but could imagine that they might not have the plethora of tools and components that we “business software developers” do. So next time that you are creating the new “invoice handling program” and you don’t like the calendar component that you have found, maybe you should spend a little more time googling before starting to code a new calendar component. 🙂