Subject: What are the levels of professionalism of star programmers?

From: Omer Zak <[email-masked]>
Date: Sat, 22 Jul 2000 15:14:19 +0300 (IDT)

In other professions, there are several stages of gaining expertise.  In
medicine, a student has a stage in his final year of his studies.  Then he
works few years until he gets certified as expert in one area of practice.
In Law, one has stage for 1-2 years, then works as a junior partner and
then becomes senior partner.

What is the situation in programming?
Are there recognized levels of expertise in programming?
How do they look like?
How can they be described in one's resume?
How do employers/clients recognize (or don't recognize) the different
levels of expertise?
Is there any relationship between the SEI CMM level of an organization and
the levels of professionalism of its lead programmers?

A first-cut thinking of the levels of professionalism of programmers:

1. Wet behind the ears.

   Computer Science graduate and/or graduate of Visual BASIC course and/or
   child prodigy.
   Engages in religious wars about tools, has a favorite language.
   All problems look to him like nails because the only tool he mastered
   is an hammer.
   His programs have both easy-to-fix bugs and hairy bugs (because of poor
   design skills).
   Didn't hear about Configuration Management.
   His coding style is spaghetti and his programs are not modular.
   He does not document his programs.
   He reads Microsoft Press literature.

2. Junior Programmer.

   Has experience in one successful small project.
   Has botched up a big project.
   Combines a scripting language (like the language of MS-DOS *.bat files)
   with a compiled language (such as C++).
   Spends a lot of time with the debugger.  His programs are not easily
   tested or debugged.
   He practices Configuration Management because his boss threatened him
   that he'll be fired the next time he loses a version.
   His programs are modular, but when fixing bugs, his bug fixes violate
   all principles of modularity.
   His documentation style is examplified by:
         y++;  /* Increment y by 1 */
   He reads O'Reilly books.

3. Senior Programmer.

   He pulled off a big project, which was mired in bugs, but at end all
   worked OK.
   He knows 4 programming languages, uses 3 text editors and develops for
   two different operating systems.
   He spends some time on design before jumping into coding.
   he provides for some testability in his programs.
   Most of his bugs are trivial.
   When modifying an existing program, he carefully considers how to
   modify it yet preserve its modular structure and keep it as
   maintainable as it was before the change.
   He documents the arguments, results and general algorithm of procedures
   in his code.
   He reads everything he can find about design patterns.

4. Master Programmer.

   He knows all important programming languages and several tools.
   He carefully selects the languages and tools for a particular project.
   He mixes and matches several languages as necessary.
   He is recognized as a principal contributor to a major GPLed project.
   He no longer needs to test his programs, because his code inspection
   skills are good, and his programs are almost bug-free as they are
   written.
   When responsible to big projects, his designs and interfaces are very
   clean and easy to work with.
   His programs are well-documented and maintainable.
   He is aware of the fadish nature of several fads in software
   engineering and refuses to participate in those which don't make sense.
   He writes a book about the next paradigm in software engineering.

                                             --- Omer
WARNING:
By sending me unsolicited commercial/political/religious E-mail message/s
(known also as "spam"), you irrevocably agree to pay me US$500.- (plus any
legal expenses incurred by my trying to collect the amount due) per
unsolicited commercial/political/religious E-mail message - for the service
of receiving it.

---

From: Ira Abramov <[email-masked]>
Date: Mon, 24 Jul 2000 18:55:59 +0300 (IDT)

> Are there recognized levels of expertise in programming?

you're right... they even have certificates in sysadministration for
Noell, Sun, Cisco, Red Hat, etc. but nothing in programming that I know
of :)

> How can they be described in one's resume?

doubtly. I have found myself in the decriptions you gave for all four
levels, does that make me average? or maybe because in some category I'm
still stuck at first stage I'm only a level-I programmer?

> How do employers/clients recognize (or don't recognize) the different

grill you at the job interview. ask Chen what they put her through in
Mercury. apperently Resume is not enough, tests are always more
meaningful, that's how people get ahead.

>    He reads Microsoft Press literature.

a. how do you compare a CompSci graduate to a VB course pihead?

b. religious wars and favorite language can still infect even level-4
programmers :-)

c. spaghetti code can carry to higher levels too. more often than not it
is the unconventional thinking of a "mad scientist" kind of hacker that
cuts through structures and tortures interpreters that produces the
ugliest yet fastest/tightest code. (if what I heard is true, ask OmerM
for samples of his code :)

d. many beginner programmers have "document! document! document!"
brainwashes at college, I heavily use remarks in shell/perl and my
Javadocs are full and detailed since the day I started programming 17
years ago. lack of documentation is usually the realm of the
self-advocates who had years of bad personal-developped practices before
they got any official education. it doesn't mean they are bad
programmers.

e. what's wrong with mickySoft press? I heard they have some good books
too.

I have more remarks on the other levels, but you get my drift.

the point is that a programmer's level of professionalism should be
measured by more accurate numbers and experiance. some of these include
your definitions ofcourse

* number of languages used well, and spreading of their types (following
the schematic that Assembly, Perl, Scheme and Python/Java are the four
far corners of the language "map", are his well-versed languages
concentrated closer to one corner or two, or spread around all four?)

* how many "types" of programming has he touched? System, GUI,
communication protocol, compiler/interpreter, etc.

* how well does he use abstraction and encapsulation in OO? how well
does he avoide redundancy and other sicknesses in PP (procedural
programming)?

* ever invented his own topical language for a specific task? wrote a
self printing program? wrote a self-changing program? wrote a
script-generating script? (those are in the perl purity test AFAIR)

* knows how to document his code well for others to maintain if he is
ever asked to, even if he doesn't do it on his own.

* knows how to design a project, seperate modules for team work, define
clean extendable APIs, has broad views of system requirements, these are
all tied to experiance I suppose.

* knows his OS, hardware and some system too, helps for optimizing code
and system resources. Design patterns and Data structures are nice in
theory but need to be optimized in practice.

(there's more I suppose, but these pop into mind at the moment)

-- 
Ira Abramov   (@-  Gnu/Linux, Free Speech, RFC 1855
whois: IA58   //\  Peace,  Love,  Music,  Slow Food
web: scso.com v_/_ Citroens, Camels, Penguins, Cats

---

From: Omer Zak <[email-masked]>
Date: Mon, 24 Jul 2000 22:11:16 +0300 (IDT)

On Mon, 24 Jul 2000, Ira Abramov, ever so insightfully critical, wrote:

> On Sat, 22 Jul 2000, Omer Zak, ever so originally thinking, wrote:
> 

Maybe because the descriptions need to be reviewed by the public and
revised and scored and assigned to their correct levels.

Then, some scoring method would be invoked to assign a level to a
programmer, based upon the number of descriptions form each level which
fit him.  Probably the lowest level in which there are descriptions which
fit him.

> meaningful, that's how people get ahead.

I doubt that tests can really test a programmer's ability to manage
complexity and to do clean design which meets messy&detalied
specifications.

> a. how do you compare a CompSci graduate to a VB course pihead?

Simple.  Both of them know to solve exercises and write toy programs.
None of them have proven their ability to keep their programs modularized,
clean and bug-free in the face of escalating complexity.

> b. religious wars and favorite language can still infect even level-4

Not by definition.  A programmer who indulges in religious wars is far
from being level 4 or even level 2.

> for samples of his code :)

OK, I'll amend what I said above and correct to:

    "His coding style is spaghetti and his programs are not modular,
     even though there is no special reason for this."

Because excellent programmers know when to break rules.  Of course,
they religiously document the gory details.  This reminds me of the
American war movie (whose name was forgotten) about the ship captain who
was obsessed with trifling matters while his ship was in grave danger.
His lieutenant consulted some experts in maritime war law and they advised
that in such circumstances, it is legal to commit mutiny - BUT ONE MUST BE
PREPARED TO JUSTIFY HIS ACTIONS IN COURT MARITAL(SP?).  The religious
documentation of law-breaking expert programmers is the equivalent of the
court marital(SP?).

> they got any official education. it doesn't mean they are bad

For toy programs, which solve simple problems, and would not need
maintenance in the future - non-documenting programmers might be OK.
But for projects, in which Complexity wins, they are disaster.

> e. what's wrong with mickySoft press? I heard they have some good books

Yes, books like "Code Complete", "Writing Solid Code", "Debugging the
Development Process".  OK, can anyone suggest a better way to characterize
the literary habits of different levels of programmers?

> concentrated closer to one corner or two, or spread around all four?)

Nice idea!  What about non-procedural languages like SQL and the
"languages" used by Lex/Yacc?

The following suggestions are good.  Anyone willing to characterize levels
of programmer's professionalism according to the following criteria?

> does he avoide redundancy and other sicknesses in PP (procedural

I suppose this falls under the general category of "how well does he
handle exponentially escalating complexity".

> script-generating script? (those are in the perl purity test AFAIR)

Narrowly-specified.  How about generalizing them:
- Participation in programming contests having various laws.
- Trimming an instruction from a very tightly optimized critical loop
  which is 7 instructions long.

> ever asked to, even if he doesn't do it on his own.

I believe this falls under the category of handling complexity.

> theory but need to be optimized in practice.

                                             --- Omer
There is no IGLU cabal.  Especially not for wet-behind-the-ears
programmers.

WARNING: