Thursday, August 26, 2010

Four signs of an awesome coder (or person)

1) Studies the craft

When I talk to a person, and I find out that they read @codinghorror or some other technology blog, then I know "hey, this person is trying to catch up". If they have read both dragon books, then I know "this person is super cool and super awesome". I believe that core to being awesome is to be in a state where you know there is always more to learn and actively work towards knowing more than you did yesterday.

2) Codes for fun

What you do in your spare time says orders more about you than what is on your resume. If you wrote a super awesome CMS that enables you to publish your own content in a way you think is awesome, then you are awesome.

It doesn’t really matter what you write in your spare time because we all do what we do to make our lives better. I knew a guy in college (in the math department) writing his own parser generator language. Why? Because he was awesome, that’s why.

Also, you should never need to justify you work unless someone is paying you to do something else. Your work is what will make you awesome. I wrote a computer algebra system in graduate school, and many people asked me “why don’t you just use mathematica”. Any answer besides "Because I’m awesome." is wrong and disingenuous (of course, you should try to keep the ego in check)

3) Has a metric of quality

The most awesome coders have a sense of beauty in some form of metric that gives them a direction. This is the source of most (if not all) of the flame wars in the field since people have to work together yet have to do so with different (and often incompatible) metrics. Your metric may be performance, brevity, organizational, extensibility, obfuscated, or any other innumerable metrics that we judge code by.

As long as you have a metric, then you are awesome. You should grab a sword and shield and head toward reddit to do battle. Myself, I used to battle in the realm of type systems. These days, I'm going to champion NoSQL and kick some RDBMS ass.

3.5) Get shits done

Thanks to a comment in HN. Having just a metric implies being a critic. One also needs the process/fortitude to hone the craft to be an artisan. Or, as the commenter put it: "gets shit done".

4) Has an open mind

An open mind enables objectivity and the ability to change your mind. If you can change your mind and try something new, then you can advance your knowledge and learn something new rather than keep stale knowledge alive. Learning something new is always the best way to expand your skill-set and maximize your metric.

The more open you mind is, the more science you can do, and the more awesome you can be.

Advice) Toward a better future

Now, having pointed out the signs, I can give you my awesomeness advice. Read at least one to two books every year and follow at least one technology blog/aggregator. Start a new open source project that you think will be awesome, or join another project that you think is going to be awesome. Ask yourself, what is beauty? Is it fast code? Is it brevity? Is it clarity? Once you know thyself, then you can start to measure and hone your craft. When you find yourself faced with a change, think about it. Do you have more to gain or lose? How can you experiment with the change? How can you measure the effects? How can you isolate the change? How can you bound your fear? How can you reap the reward?

Dangers) Life

If you want to be awesome, then you have to learn to deal with one very difficult part of human life. Disappointment in others, your environment, the world, the government, and yourself. Becoming awesome is hard work, and many can't get there because life is non-linear and from our perspective non-deterministic. Along the way, you may realize that you can't reach the level of awesome that you dream about due to any number of reasons (not enough something, shit happens like a bus, or you changed your mind).

Let go of negativity. Learn to adapt. Being awesome is being able to get up and adapt to something else. My personal hero in life is Bruce Lee with this awesome quote to his credit.

"Empty your mind, be formless, shapeless - like water. Now you put water into a cup, it becomes the cup, you put water into a bottle, it becomes the bottle, you put it in a teapot, it becomes the teapot. Now water can flow or it can crash. Be water, my friend." - Bruce Lee
The ultimate way to be awesome as a coder is to be water, my friend. This advice probably extends to anyone, so go forth and be awesome. Or, at least try.

8 comments:

  1. Absolutely awesome! Thank you for your awesomeness and sharing how to recognize and increase one's own awesomeness.

    ReplyDelete
  2. Dejan has enjoy in your post. And he gets shits done. Yay for i18n ..

    ReplyDelete
  3. This Bruce Lee comment is what I wrote once when asked why do I keep learning so many different techs and tools, patterns and not just keep focused on one thing; - the world of software dev requires you to constantly learn and adapt to constantly changing environment, languages, techs, tools.
    Being "like water" is what makes you go with the flow and not crash into a rock of old.

    ReplyDelete
  4. Classic Dragon book:
    http://www.amazon.com/gp/product/images/0201100886/ref=dp_image_0?ie=UTF8&n=283155&s=books

    ReplyDelete