There are many different types of programmers that perform software development. Or is it computer programming? Or is it coding? These are all labels or boxes we use to classify people and their skillsets. Much like we distinguish between testers, coders, managers, architects, designers, CLO etc only these are much more obvious. So what exactly makes a coder a coder or a programmer a programmer? We may loosely use them interchangeably to mean the same thing but from an outside perspective I like to think of them as badges or stripes. Something you earn with time, patience, wisdom and experience.
Some people just have certain qualities about them that make them good, bad, better or worse than the next person. In order to simply determine what these might be, I propose five boxes or labels.
- The tool user
- The hacker
- The programmer
- The developer
- The architect
The tool user is the least experienced of them all. He has enough knowledge to poke around tools like Visual Studio 2005 and whack together a GUI simply by dragging and dropping widgets onto a form. To somebody that doesn’t know better, because he produces results that often look compelling (brought about by the efforts of the tool and not his own doings), they think highly of him and/or his constructions. Why the term construction and not production or development? Well he doesn’t really develop anything. He constructs things with the use of ever increasingly sophisticated tools. Good management that is cluey or tech savy will see past this but unfortunately (or fortunately for the better programmers of the world) he still finds his place.
This is the worst kind of software developer. When something under the hood breaks or he/she needs to modify behaviour to do anything 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 moved beyond the notion of expecting tools to do all the work for him. He possesses basic or rudimentary development skills. No knowledge of compiled languages but understands scripting languages well enough to piece bits and pieces together. He can usually copy and paste scripts and tweak variables and functions. He doesn’t usually understand the big picture of developing anything but he can hack at something he is given with pot luck. He trolls the web an forums looking for code snippets to do what he wants and pieces them together.
Software of choice: Simple text editors, maybe text editors that provide syntax highlighting
The programmer has a good understanding of what it is to code and write software. He doesn’t rely on tools so much as his own understanding of the languages. He isn’t so phased about the tools he isues as he realises the tools aren’t going to do the job for him. This oversight however blinds him from realising the benefits they can provide to a more experienced programmer.
This unfamiliarity with tools and libraries; a result of limited exposure and experience in the wider field, over shadows him from the bigger project environments that require versioning control, many developers and larger environments. He’s just not familiar with it. Similarly, whilst a capable programmer, he doesn’t necessarily think about how others will use what he writes and as such, doesn’t really fit into the team building environment. He is a skilled ‘lone programmer’. He might have skills, but nobody 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 there is much more to developing software than the lines of code it consists of. He possesses a much better understanding of software design concepts and principles than the programmer and thinks about a problem in its entirety. Whilst he has a good understanding of this problem and is open to seeing it from most angles, he doesn’t necessarily understand the entire domain to which it applies.
With experienced programming skills he doesn’t rely on tools but uses them to increase productivity.
Languages of choice: Generally prefers managed code over unmanaged code as he realises the productivity boost that comes with it.
Software of choice: The big development IDE’s; anything that provides intelligence, syntax highlighting, code snippets, templates, formatting etc.
The architect is the crème of the crop. He’s a primed software developer with ten plus years of experience under the belt. He’s passed well beyond just the technical side of developing software and understanding good solution design. He can walk into a business domain and connect up the dots people inside the domain couldn’t. Leaning on many years of experience on what works and what doesn’t, he’s often hired out as a consultant for his valued expertise.
This much broader, yet specialised skill set puts him in high demand. When a company wants to bring in the big guns and call in a consultant. This is the guy.
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: Modelling tools, metric tools and tools for comparative purposes.
What types of programmers have you met/worked with in your walk of life?