As an industry, we have a lot of names and titles we use for programmers, and most of them speak something important about the field. It is a topic of passionate debate, and most people have an opinion. I find that most of those titles say something specific and meaningful about this profession. Lets see what these terms tell us about what we do.
Software Developer, Coder, Programmer
Developer is absolutely the most neutral title there is. Anyone who contributes meaningfully to a software project could be called a developer. Coder is slightly more specific, down to earth and approachable. We write code. Ok, that is a pretty basic truth. Programmers create programs. Code that is not in delivered programs is totally worthless, so programmer seems the most concrete of these to me as well as having the most history and contextual significance.
This is a richer term. It focuses on generating creative, inventive new ideas and solutions. It draws a picture of a digital MacGyver, building cloud computing engines with bamboo and a flashlight battery. It implies taking advantage of the fact that our own thinking is generally the biggest constraint in our work.
The computer field definitely falls in the hard sciences category, with strong mathematical models and constraints. The most useful part of this builds on the hacker, though, with a structured approach to testing new ideas through experimentation and validation.
A engineer draws from the sciences with inventiveness to design new things. This term carries with it the weight of responsibility for the quality, durability, and cost impacts of design decisions. It implies the knowledge of the limitations of materials, physics, and more. A civil engineer may worry about weight load a bridge can handle. A software engineer may worry about computational or transaction load an application can handle.
A craftsman has to craft and deliver their product personally. They take their piece of work from concept to reality personally. There is no hand off to a manufacturing process or other labor. They are directly on the hook, responsible for all aspects of the quality of the end product.
All of these titles exist for a reason. Each reflects a meaningful facet of what we do. That is why they are still all used, and why they are debated. None of them are invalid. However, that does not mean they are all equally valid. We at the Rocky Mountain Programmers Guild use the metaphor of software craftsmanship. It is not perfect, but we find that it give us the best fit across a number of dimensions. We find:
It fits the dominant activity of most programmers, which is the actual crafting and refining (debugging) of code.
It implies a work ethic that values both quality and delivery that is demonstrably crucial to sustainable software development.
It fits as a career path for programmers, providing a meaningful definition of professional advancement and achievement.
It fits as a training metaphor for meaningful, concrete, and efficient advancement of a programmer's skills.
The metaphor can provide a software shop to create a effective, healthy culture that always improves and actually scales.
It can help shops alleviate the challenge of the low supply, high cost, high demand market for programming talent in a way that gives helps the shop and gives back to the industry.
We will be exploring more of these points in future posts.
Joe Gee is a master craftsman at the Rocky Mountain Programmers Guild where he mentors programmers and teams to grow their mastery, performance, and delivery. Learn how he can help you or your team at www.rmprogrammers.com.