

5 Stages of Programming Incompetence - k2xl
http://coderoom.wordpress.com/2010/03/19/5-stages-of-programmer-incompetence/

======
ShabbyDoo
"The Veteran - The first ten lines of any function, even an accessor, are all
assert statements. All the error conditions for each function are dutifully
checked and handled"

Even spent a couple hours tracing through a zillion code paths to reverse-
engineer the implicit contract for a particular method? Do any clients
explicitly check for the FooException which bubbles up the stack when Method A
accepts null for an Integer value (fun with Java) and passes that null down
into Method B which in turn, ....

I'll take overzealous assertion vs. the alternative of under-definition any
day.

------
logn
So the guru stage involves no unit tests? I have to admit that when I program
on my own I never write unit tests. But in a corporate environment it's
blasphemy. Plus on my own (solo) projects I know the app like the back of my
hand and it's a reasonable size so I can keep everything smoke tested. But on
large corporate projects it's really easy to add a showstopper you never
notice. I'd like to hear the author talk more about this (or commenters).

~~~
thedudemabry
I'm nowhere near the guru stage, but I'm definitely down with convention over
conviction. No matter what stage you're in (or even alternate paths), making
your code communicate your intent to your coworkers is much more important
than penning your magnus opus. It's okay for freshly-minted programmers to
blindly follow the patterns of the grey-hairs and for the zealous to write
heathen code, depending on who will be maintaining the project in six months.
The equilibrium of the team will balance as everyone learns through building
good product.

I agree with you on personal projects, as well. Do whatever lets you meet your
goal, whether that be learning how to hardcore TDD or getting a horribly-
written, hacky project out to your friends.

------
mdonahoe
Ah to be a newbie again...

My first BASIC games were hilarious with their global variables. The program
was a giant mess of spaghetti code. If I wanted to add a new feature, I would
make up wacky variable names to be sure I wasn't using them elsewhere.
stupidThing = 1, hairygoat = 2, etc. (I don't think the BASIC editor I used
had find&replace, or if it did, I didnt know how to use it)

Terrible code, but man was I having fun.

