This is a light-hearted attempt to classify developers. Enjoy…
1. Newbie developer
- 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 developer
- 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 developer
- 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. Senior Developer
- 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.
37 thoughts on “Levels of Developer Expertise”
Nice work. Had me smiling the whole way through. I’m just a newbie. Wanting to become a master.
Glad you liked it! :)
I pray oh! Thanks :)
I think I’m between Amateur and intermediate cos I do stuff in both.
Hope you step up soon. :-)
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.
Exactly; the more mistakes you’ve made the better you become.
Na u probably b no one commenter hia oh. Thanks for reading!
I try my best. It’s the least I can do if I’m too lazy to start a blog. Barakallah feeh!
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.
Nice article AbdulFattah…. :)
Can we communicate… my email is firstname.lastname@example.org
Thanks a lot Wajahat!
Sure; lets get in touch.
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.
Thanks Chille B.
Learning never ends in this path – I think it applies to all other fields too.
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).
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.
Glad that you like it!
Aside what is dat u don’t like about the blog? I’ll appreciate the feedback.
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. :)
:) Programming is much more easier than it was then I guess.
Programming for the 8-bit CPU sounds pretty cool.
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)
Aah… we have a Java developer in the house.
I actually started diving into Java – after FORTRAN, a little C/C++ and that was the motivation for this.
All the same thanks for the insight.
Interesting post here bro. May Allaah help us to reach the heights.
Ameen, jazaakumullaahu khayran.
If what you have said has truth in it, then I really need to reconsider myself!
lol, why do you say so?
Seriously nice, shows it takes a lot of patience and steadfastness to achieve these stages
Yes you are right bro :)
Seems i need to cram all these
You don’t need to cram it akhee :)
Nice article…and please, remove the humble part.
Oga; what humble part? :)