There are many different types of programmers who do software development. Or is it computer programming? Or is it coding? These are all labels or boxes that we use to classify people and their skill sets. Just like we distinguish between testers, coders, managers, architects, designers, CLOs, etc, only these are much more obvious. So what exactly makes a coder a coder or a programmer a programmer? We can use them loosely interchangeably to mean the same thing, but from an outside perspective, I like to think of them as badges or chevrons. Something that is gained with time, patience, wisdom and experience.
Some people just have certain qualities that make them good, bad, better, or worse than the next person. To determine just what they may be, I propose five boxes or labels.
- The user of the tool
- The hacker
- The programmer
- the developer
- The architect
The user of the tool is the least experienced of all. You have enough knowledge to poke around in tools like Visual Studio 2005 and put together a GUI by simply dragging and dropping widgets onto a form. For someone who doesn’t know better, because he produces results that often seem convincing (produced by the efforts of the tool and not his own actions), they have a high opinion of him and/or his builds. Why the term construction and not production or development? Well, it doesn’t actually develop anything. Build things using increasingly sophisticated tools. Good management that is smart or tech-savvy will see past this, but unfortunately (or fortunately for the world’s best programmers) it still finds its place. This is the worst kind of software developer. When something under the hood breaks or you need to modify your behavior to do something substantial, forget it.
Languages of choice: Would it really matter? it’s all gibberish
Software of choice: Any and all RAD tools that provide rapid development of clicky interfaces
The hacker has outgrown the notion of expecting tools to do all the work for him. Possesses basic or rudimentary developmental skills. Has no knowledge of compiled languages, but understands scripting languages well enough to put bits and pieces together. You can usually copy and paste scripts and modify variables and functions. You usually don’t understand the big picture of developing anything, but you can hack something given to you hopefully. He scours the web and forums for code snippets to do what he wants and puts them together.
Software of choice: Simple text editors, perhaps text editors that provide syntax highlighting
The programmer has a good understanding of what it is to code and write software. You don’t trust the tools as much as your own understanding of languages. He is not so concerned about the tools he issues as he realizes that the tools are not going to do the job for him. However, this oversight blinds you from realizing the benefits they can provide to a more experienced programmer. This lack of familiarity with tools and libraries; as a result of limited exposure and experience in a broader field, it dwarfs you from larger project environments that require version control, many developers, and larger environments. You’re just not familiar with it. Similarly, although he is a capable programmer, he does not necessarily think about how others will use what he writes and as such does not really fit into the team building environment. He is a skilled ‘solo programmer’. He may have skills, but no one can work with him because he doesn’t think above or below the line of code he writes.
Languages of choice: C++, Java, C#, Visual Basic
The developer is an experienced programmer who understands that there is much more to software development than the lines of code that make it up. Has a much better understanding of software design concepts and principles than the programmer and thinks through a problem in its entirety. While you have a good understanding of this problem and are open to looking at it from most angles, you don’t necessarily understand the entire domain it applies to. With experienced programming skills, you are not dependent on tools, but use them to increase productivity.
Languages of choice: In general, you prefer managed code to unmanaged code, realizing the productivity gains that come with it.
Software of choice: The great development IDEs; anything that provides intelligence, syntax highlighting, code snippets, templates, formatting, etc.
The architect is the cream of the crop. He is a skilled software developer with over ten years of experience. He has gone far beyond the technical side of software development and an understanding of good solution design. You can enter a business domain and connect the dots that people within the domain couldn’t. Drawing on many years of experience in what works and what doesn’t, he is often hired as a consultant for his valuable expertise.
This much broader but specialized skill set puts you in high demand. When a company wants to bring in the big guns and call in a consultant. This is the boy.
Languages of choice: Programming was something left to his youth, his consulting services require him to write very few lines of code.
Software of choice: Modeling tools, metric tools, and tools for comparison purposes.
What types of programmers have you met/worked with in your life path?