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.




Anonymous Anonymous said...

Aside from your language choices, I'd agree with your categorizations.

On language choices, I think you've pegged yourself as not being a generalist; I think a true generalist uses whatever tool works best for the job -- whether that be C++, C#, Java, a custom XML dialect, or Notepad. The best of the best are more or less completely open to whatever the Right Tool for the Job is, and even know that there may be more than one Right Tool.

Lack of OS/programming language/hardware platform "religion" is one hallmark that -- in my mind -- separates the best of the best from the rest of the pack.

5:47 PM  
Anonymous aster1sk said...

I agree with the above comment.

To say a strong PHP developer could be compared to a starter C developer is ludicrous.

PHP follows very similar (however less strict) syntax compared to C - that is not grounds to deem it a n00b language.

Allow me to revamp your language choices.

Starter : HTML, Basic PHP, Basic C, Javascript

Coder : OOp PHP, C RoR, Django (Majority frameworks)

Programmer - C, Perl, Python, Ruby

Generalist - CLI such as Bash as well as all aforementioned.

I think I will write my own "Different Types of Programmers" article.

7:26 PM  
Anonymous Craig said...

I can understand putting PHP in the starter section, not because of the language its self but because it is so commonly misused by inexperienced programmers and as a entry point into programming for many.

Interesting article, I enjoy these style of articles written about programming traits and personality.

7:46 PM  
Anonymous Anonymous said...

Very interesting blog overall ! Good point ! a good programmer has a strong ability to envision the side-effect of a change in the whole system even before coding. OK except that this post is terribly poor and simplistic !!

Disregarding the arrogant side of the description of the generalist -good you are one congratulations-, it appears incredibly easy for you to make connections between different languages, one's coding skills, the scope and level of abstraction from the system associated to a job position. Why not adding the prefered OS, IDE, sitting posture and the age of the captain to make the picture more complete.

1/ An architect has often *unfortunately* little knowledge in programming. They know the technology, the development lifecycle, the project management...

2/ Where is the damn Developer in you picture ?!

3/ This post is an superficial list of stereotypes... and actually quite concerning coming from a PM or architect.

Anyway, please fix your post (or delete my comment :)

2:28 PM  
Blogger Georgi said...

Hello "Anonymous",

thank you for your feedback and thank you for your interest in this blog, both highly appreciated.

And of course I will not delete your post. I will do something much more cruel: I will answer it. Because...

Your critisicm is appreciated too. Really. You are right to question who I am to write those blasphemic words about different programmers. What skills do "enlighten me" and who, the heck, am I to write like that?

Let's boil this down a little bit because you asked for my personal abilities (regarding my programming "skills"). I learned some computer languages before I started to run for a degree in computer science (among these languages were different Assembler flavors, Pascal/ObjectPascal with Delphi, Forth, Cobol, and did I mention Basic? I hope not! :).

While being a student I had to learn some more languages (M0/M1, C, bits of C++, DDL/DML for databases, D3L, SML [a nice Lisp cloney/successor] etc.). Afterwards there were even more, and partially I am not that good using them (like JavaScript, bits of PHP, C#, Ruby, andSoOnAndSoForth). One language I never wanted to learn was Java. Well, life's a bitch and I do that caffeine-stuff for a decade or so. Finally I stopped counting at some 20 languages (to be honest: Counted by including some of their "flavors").

Always wanted to learn Brainfuck, never had the time but hey they say: "Seldom it's too early and never too late".

Does this automatically convert me to a be a good programmer? Surely not. But the experience I gained and gathered while learning and understanding multiple languages may have done so. Does this grant me a place in "Architect's" or "Generalist's" Heaven? Certainly not. Moreover facing different problems in projects, working with many people and learning from them helped me to evolve.

This all may not seem to be really meaningful regarding your comment. But being in the lucky position to help to lead (small to large) teams in IT-projects for some ten years helped a lot to keep an eye on different types of programmers as you may imagine. You know, the old learning-at-the-job-thingie and so. Seing is believing. Blah, blah, blah, Mister Freeman.

So, I think I am in a position where I have seen quite much. Not everything. This post you criticised displays some of that, to tell the story simple and using stereotypes in this blog was totally intended and perhaps you read it again and possibly you find the developer in there... .

And thank you, no, I will not change the blog entry. It represents my opinion. Perhaps it is located in an ideal world with ideal architects and generalists but that, at least, is another story.

Greetings, Georgi (who loves feedback but sometimes gets chatty with it)

8:55 PM  

Post a Comment

Links to this post:

Create a Link

<< Home