What are the growth stages of a programmer?

Answer by Frank Taylor:

White Belt:

You don't know what you don't know.

  • You know some syntax, a few keywords.
  • You can come up with a dozen variations on Hello World.
  • You don't even know how to Google your questions; it's very hard for you to even figure out how to even ask how to do the thing you want to do.
  • You don't yet know the difference between good code and bad code. Which means your code is bad.

Yellow Belt:

You know what you don't know,but you know you don't know very much

  • Syntax has improved, and you know more keywords.
  • You've successfully made a thing run, without debugging.
  • You can't write a full program from start to finish, but you can get pretty far.
  • You can kind of figure out how to Google your questions.
  • You have a rough idea what bad code looks like.

Orange Belt:

YOU KNOW CODE-FU!  You've pretty much learned everything at this point.

  • You've learned basically all of the keywords, and you totally get the syntax.
  • Your stuff runs successfully, and you can make the program do the thing you want to. 
  • You can Google any question you have.
  • You can successfully identify bad code. And it's everywhere.
  • People are idiots and terrible coders.

Purple Belt:

You're practically a master; getting to master is all about learning those nunchaku. I mean, there's a few things here or there you don't know about, but you're leveling up all the time.

  • There's a few "neat tricks" in the language. Ternary operators are spiffy, Regexes are handy. There's a bunch of stuff you can do on arrays
  • Your stuff runs successfully, and if you have time, you try to optimize it.
  • Abstraction is starting to click; it's important to be DRY and separate concerns
  • [framework] is pretty cool, you should totally check it out
  • Some of those guys in Google search results are idiots. You have to be careful where you get your information.
  • You know that you've written some bad code
  • You're writing some good code because other people tell you so
  • You wonder why people don't optimize their code more often

Brown Belt

Dude, it's not just about nunchucks. That why you learned the Sai, and the Bo, and the eskrima. You're all four ninja turtles wrapped up into one post-adolescent mutant ninja coder. You can convert red bull and pizza into ├╝ber optimized 1s and 0s.

  • You can use every neat trick in your language. Every variable is a ternary operator of some sort. Bitwise FTW. Why use a find and replace method when you can just do it in one long regex?
  • Your stuff runs; but if you've got time you do some unit testing.
  • You abstract everything everywhere all the time. Separation of concerns, man!
  • [framework] is the best and anyone who says otherwise is wrong. That's why you write plugins for it!
  • You've written a few blog posts, or answered a few questions on Stack Overflow.
  • You consistently write good code; people can count on you for writing good stuff
  • Other people compliment you on your creativity in using obscure features of your language
  • You wonder why everyone doesn't optimize their code more; don't they care about optimization?

Black Belt

You know that scene from Indiana Jones and the the Raiders of the Lost Ark, where this one bad guy is awesome with a sword, and Indy just shoots him? You're Indy; you don't care about the flashy tricks any more, it's just about doing what makes sense.  You know what you don't know, but you know you don't know very much.

  • Neat Tricks are exactly that: neat tricks. You use "hacks" sparingly, because, just like Harrison Ford, you've gotten sick and you don't have time for a long, convoluted solution.
  • [framework] has some flaws. that's why you've got [framework] or [framework].
  • You know what? None of those frameworks do the thing you need; that's why you've been working on this new framework.
  • Your code  is documented, and readable.
  • Your code passes unit tests, and that's more important than, "it runs."
  • You abstract when necessary; you have crap to do.
  • You've answered a lot of Stack Overflow questions because you've found out there's lots of ways to do the same thing.
  • There's no such thing as good code. All code could be better.
  • You wonder why you don't code as well as everyone else.

I'm not entirely sure where I rank, but I am absolutely certain that I was an Orange belt for much longer than I thought. I think it's very easy to reach Orange Belt status and think that you know how to program.

While a Brown belt knows most of the features of a language, the Black belt finally knows when to use them.

What are the growth stages of a programmer?

What are the growth stages of a programmer?