Computer Science, Miscellaneous, Musings

Levels of Developer Expertise


This is a light-hearted attempt to classify developers. Enjoy…

 1. Newbie

  • Knows the syntax of one language and thinks he’s a master.
  • He might also think the language is the best one in the whole wide world.
  • Full of passion and excitement about programming.
  • Writes code that ‘seems’ to work – it compiles after all – doesn’t necessarily know why it works though.
  • Uses bad variable names.
  • Programs are likely to be be a single file.
  • Doesn’t know anything about testing.
  • Likely languages: PHP or Java.
  • Likely Reads: Learn Java in 21 days or something similar.

 2. Amateur

  • Learns another programming paradigm/language.
  • Uses better variable names – must have been hurt by evil names.
  • Has developed one or two relatively decent working systems.
  • Writes spaghetti code.
  • Re-invents the wheel.
  • Probably has a huge ego.
  • Only knows how to use IDEs.
  • Tests? They are just a waste of time and delay the release of his ‘one-of-a-kind’ software.
  • Still dives into code without proper planning.
  • Likely Reads: Advanced Java.

 3. Intermediate

  • Becomes language agnostic.
  • Knows multiple languages, tools and paradigms – their strengths, flaws and best uses.
  • Has worked on bigger projects – understands the importance of design and flexible code.
  • A bit of spaghetti code here and there but he tries to avoid this.
  • Understands algorithms and data structures.
  • Can use text editors.
  • Uses version control.
  • Designs code before starting and tries to avoid code duplication.
  • Probably has his own blog or contributes to open source projects.
  • Likely Reads: Pragmatic Programmer.

 4. Advanced Intermediate

  • Codes defensively – using asserts, unit tests and checks.
  • Really cares about his code; refactors aggressively until it is clean.
  • Toying with building his own language or at least understands how languages work.
  • Can ‘smell’ bad code.
  • Interested in reuse and sees patterns in software engineering.
  • Understands design patterns.
  • Knows about methodologies like Agile, Scrum, Kanban.
  • Likely Reads : The Mythical man-month, Clean Code, Code Complete, the Java language specifications.

I don’t know much about master programmers – am not one yet though I pray I do get there.

I am curious about what you think, let me know in the comments.

About these ads
Standard

35 thoughts on “Levels of Developer Expertise

  1. Pretty nice classification and I couldn’t agree more.Experienced programmers see the big picture, they understand how that piece of cog fits into the machine they are building. They try as much as possible to be flexible in their architecture(God help you, management switches from client-server to standalone) :).

    They perfectly understand the fine details of Software Design, favour composition over inheritance, DRY, loose coupling etcetera. They are veterans, they’ve lived through lots of failed projects and became better for it.

  2. Shakirllah Bojesomo says:

    it takes devotion to make such a thorough research about a subject of this kind and i can’t deny my perspiration while reading through.

  3. Nice post! Really enjoyed it.. The funny thing though is that I had read most of those books by the time I was an ‘amateur’. It was different experience for me as I couldlnt really understand most of what I was reading. But in retrospect, the awkwardness paid off.

    I am not a master programmer yet but I doubt if there’s a ceiling to the rank which a programmer could attain. For example a master programmer in 1990 might not have any relevance today. So there’s always a need for self re-invention.

    • Not necessarily. A programmer’s ability shouldn’t be judged heavily and or solely on his/her mastery of a language but rather on underlying programming/software design principles. Most of the “Master/Uber” programmers now started out with all those first generation languages. You heard of Uncle Bob (Robert C. Martin)? He’s been a professional since 1970 and well you can guess what languages or tech he started out with.

      It’s the same problem plaguing tech jobs hiring process in Nigeria. You hire a non-tech guy to oversee a hiring process. He’ll be more into the number of years of experience(which works for management related position but fails for tech) but instead, he should have been looking for mastery of programming fundamentals, ability to break down a problem and provide a pseudocode etcetera.

      • I agree with you. Uncle Bob n co have stayed relevant and I guess it is probably cos they kept on learning n adapting.

        Moreover I think u need ~10 years to become a master/pro.

      • Well, I’m not a master so I don’t know about the timeline for being one. But I think it’s realistic. The main thing is to keep on learning and adapting. Some concepts remain as good as they were 30 years ago, some just blow away as quickly as the wind(especially tech).

  4. AJCity says:

    I’ve never really been a fan of your Blog (probably cause of the way you post it on FB) but I gotta see am really impressed with this. I actually expected I’d fall into the newbie/amateur section…. luckily I’m intermediate and I’ve started with Advanced Intermediate. Guess I still got a long journey ahead of me before I can be one of the best.

    Nice Post. Keep it up.

  5. Allan says:

    Nice little list….. And reading the comments actually brought back memories of when I wrote my first 8×8->16bit multiplication routine on an 8bit cpu. Good times back then, when programmers had to learn the intricacies of how a computer really functions. :)

  6. For Amateur – I think Java should be taken out of that. Java doesn’t seem to be the mostly likely programming languages for newbies in my area of course.. :D . Most newbies I have observed seem to rush to PHP. Java tends to tame one a bit (OOP from the get go). Based on several Job interviews I have noticed, most Newbies program OOP like well structured Procedural code.If the dudes happen to know PHP chances are they never fully understand OOP concepts.

    Oh by the way.. stop bashing Java.. go talk to .NET C# programmers and u are sure in for a good laugh..#nooffence to C# dudes..(just my observation)

  7. Pingback: The Language Series : Java « CodeKraft

  8. Pingback: For Devs only | CodeKraft

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s