20 comments

[ 4.2 ms ] story [ 66.9 ms ] thread
More like, four signs of a marginally passable coder.

To be awesome by any standard you at least have to have attributes that surpass those of the author of the standard.

ok, what signs do you look for?
He kind of gets close to it in the "metric of quality" section, but I think he forgot the most important one, excuse me if it's cliché: gets shit done. Too many people love that "starting a new project" feeling, and too few are awesome enough to actually execute and complete a project (because they give up when it gets hard - not awesome).
thanks for pointing that out, I added a 3.5 section.
It was surprising to me when I worked at stupidBigCo how many programmers just churn out crap and never actually test it. They just kinda hope it works. Then when it doesn't, they kinda guess at what's wrong and churn out some more crap.

Management sees them as hard working drones, and don't see any issue.

Maybe I just worked with some incredibly bad programmers...

The identification of an awesome coder is more an art than a science. One cannot rate the awesomeness of a coder, or make rules that identify a subset of the awesome coders, or do so for such of the complement. Identification can only be made by observing a subject until the inducement of an experiential intrusion upon the axiomatic framework upon which the observer's worldview is based. There are probabilistic signs that can be used for recognition, but they only work because the world has a finite population, and so you're only talking about the probability that they're the particular awesome coder upon which the rule was based. That being said, you may be in the presence of an awesome coder if..

They know some languages, and they don't know others, and you know some languages they don't know, and they know those languages better than you. And when they pull out their laptop to show you what they wrote with the language they don't know, it's a Thinkpad, and don't mind that green stuff dangling from the PCMCIA slot, it's just a really really crappy graphics card they built that runs on an FPGA that they use to run demos on a television back home.

Then they ask you if you want to try writing your own little graphics demo, and you try typing, and they're like, "Oh, sorry, I don't use qwerty," and they reach over you and set the layout back to qwerty, but then they need to change it again because you use dvorak and they had it set to the right-handed dvorak layout, because how else would you drink coffee while coding? But they quit coffee years ago because the highs and lows were bad, and now they do judo in their spare time.

Then you look at their code and find that they've defined some weird types for weird things. They've got their own custom string type, but wait, it just wraps the default string type, and it's there to stop XSS attacks in the type system. And then you look at the APIs that the different subsystems of their programs use and you find that all of their APIs are literally impossible to use incorrectly. Or when that can't happen, they're designed to be impossible to use naively.

As you get to know them better, you discover they didn't have access to a computer until college, and before then all they had was some hand-me-down HP calculator where you enter numbers backwards because they reprogrammed it to use p-adic arithmetic, which they had heard about during some invitation-only summer math camp out on the plains. And before that, as a three-year-old child they invented numerous variants of 52-card bucket sort, radix sort, insertion sort, selection sort, and bubble sort, because inventing sorting algorithms for a deck of cards and then executing them by hand was a fun way to pass the time.

One day, you wonder out loud how to solve some particular problem efficiently, and they tell you some slick solution using the chinese remainder theorem, but when you ask them a question about RSA later on, they don't really know what you're talking about because all the number theory they know they learned from music. But then when you start explaining the math behind it to them, you find that they implicitly know Lagrange's theorem (the group theory one) and don't know why.

When you ask them if they've read any interesting books lately, they're like, "Yeah!" Then they ask you what you've read, and you answer "Well, recently I've read Coders at Work, Godel Escher Bach, and Code Complete, 2nd Edition." And then they tell you all about this new series they've discovered about a wizard named Harry Dresden who wears a duster and drives around Chicago fighting bad guys.

So you ask them if they've read SICP, and they're like, "No." Then you ask what technical books they've read lately, and lately they've read Transactional Information Systems, Cryptography Engineering, a recent version of the HTML 5 specification, A Guide to HP Handheld Calculators and Computers, Fifth Edition, and Physically Based Rendering, Second Edition.

When you ask them if they know any awesome coders (other than...

I agree to an extent; I see fundamental attributes common to people who do anything awesome.

One could map (and make the general case) the signs of being an awesome human being: passion for learning, enjoys honing a craft not just for a paycheck, has a sense of beauty, open mindedness.

The art of determining awesomeness or potential awesomeness is to figure out what questions to ask someone that will reveal the nature of their character.

People can be as awesome as they want, but they have to sell it.

lolwut? who youre describing is just a really brilliant person, not an "awesome coder"
On interviews, I like to ask a couple questions from Programming Pearls. I know it's old, but I love that book.

For estimation, "how many gallons a day flow out of the Mississippi River?" Most people say "I don't know" and won't even try to answer. But when you see someone come up with an estimate and rationalize it, that's a good sign. I don't know what I'd do now if someone actually went to Wolfram Alpha, Wikipedia, etc. and looked it up.

I like to see coders answer things like: you're building a 40' fence with 5' fence sections. How many fence posts are there? It seems trivial, but I'm amazed how many people get it wrong at first ("8. No, wait, 9. Yeah, 9.") and really amazed by how many never realize that 8 is wrong.

This current generation of youth has diluted the meaning of the word awesome so that even eating a snickers bar is awesome. He wrote awesome 23 times in that article alone, never mind the other articles he's written. Perhaps "awesome" is correct even as you redefine it.
I just added the Coding Horror-blog to my feeds. My code will magically get more awesome any minute now.
This guy is awesomely good at stroking my ego. Upvoted.
I know it's a nitpick, but there are three dragon books. Yes, the red and purple books are only different editions, but with 20 years and an extra author between them I tend to consider them different books.

I'm suspicious of anyone who claims to be an awesome coder. That's an honour that others bestow on you. Instead, strive to be a better coder than you are now.

You are right to be suspicious of anyone making claims of awesomeness. Most of my signs were metrics that I use to evaluate coders, improve myself on, and encourage others in my organization to do. (Also, blatant abuse of the word awesome is common to my character)
Four signs of a mediocre blog post:

1) The title contains the number of points the blog post is going to make.

2) Each paragraph is separated by big text, bold text, or an irrelevant cat picture.

3) The actual text, excluding the big bold text, reads like it's the last 200 words of a fifth grader's first 500-word essay.

4) Each point is so generic as to be applicable to any person or situation.

Considering of course, you should try to keep the ego in check, I would say "too late".
I think there are two types of awesome coders.

The first type is extrovert and thinks of himself as an awesome coder. These people are known in the circle and are very few.

The second type is introvert and will not admit their awesomeness. As such, you generally don't know about this type until you've worked with them for a while.