Friday, October 13, 2006

Different types of programmers

Being a while in "the IT business" I saw nearly every kind of programmer you can imagine. Well, time to sum up! And pondering a little bit about that whole thing, there are kind of four types I clearly recall: The Starter, The Coder, The Programmer and The Generalist. Oddly enough, these types are not only bind to their educational background or experience, I saw developers with an academic degree and some years of experience who still were Coders or even Starters. And i saw Generalists who were career changers with just some real experience.

So, lets start to sum up.

The Starter

The Starter, as his name suggests, is more or less starting to develop programs. At the beginning often he has a kind of success hacking some code and producing quick results. If a solution works, it is a good solution for him, regardless if that solution is working fine or just la-la. This also means that he is not really interested in code-reuse, maintainability or performance at first sight. He knows that there is more 'round there in the world of programming and he knows that he is not quite there yet.

Typical programming languages: PHP, VBA, Access or similar systems.

The Coder

In contrast to The Starter, the coder diggs deeper into the concepts of programming. He is a kind of matured Coder, knows what a pointer is and (merely) understands recursion or some concepts of functional programming. Often he speaks more than one programming language but he certainly is addicted to "his favourite one" which he then defends at all means. The coder writes programs which, more or less, do what they are intended to do and therefore tends to think he is a good programmer (which naturally leads to problems because often he simply isn't).

Typical programming languages: Scripting languages, C/C++, Java or C#

The Programmer

Being an IT-specialist who understands not only the concept of one part of a program, the Programmer also understands the environment his code runs in. He not only knows that changing a part of a system does not only affect this single part, but a whole lot more like refering code, other parts of the system or complete environments. Actually, he seems to "see" the dependencies a change may affect on the overall system before he starts coding.
Furthermore, he is looking for more elegant and sophisticated solutions and thinks a lot about reusable, performant ways to solve the problems he is faced with. Typically, a programmer is a "lazy code writer", he re-thinks the problems and tries to put them into as less lines of code as possible. This leads to problem,s because he then often develops complex solutions for simple problems.

Typical programming languages: Object oriented or functional programming languages, sometimes meta-languages (like XML, UML etc.)

The Generalist

He not only sees the problem to be solved, rather he nearly has a solution to it at an instance taking dependencies in account others did not even think of. At least he was a good programmer and knows what he is talking about. Normally he speaks more than one programming language fluently and he understands the concepts behind them. Often he is used as an architect, but he likes to code some snippets on his own, too. The systems he is working on are an open book for him.

Typical programming languages: You name it... .

Of course there are more Starters than Coders, more Coders than Programmers and only a view good Generalists available in this world. But for medium sized projects my advice would be to stick with one Generalist and one or two programmers at least. This will be extremely helpful creating a product that is well-designed and maintainable.