Monday, January 21, 2013

Becoming teh awesome

One of the things that defines a good hacker is their drive to improve.  This often stymies young hackers as they desperately want to push forward and improve their skills but don't know how.  There are infinitely many wrong ways about it.  One path that seems to have met with some success is emulating "good" programmers by attempting to emulate their public attributes [0].

There are three different buckets that these attributes fall into.  First, there are things that will directly influence your coding skill through programming.   Then there are things that will help make you a better hacker but aren't necessarily "programming."  Finally, there are some things that famous programmers do that don't actually contribute to skill.  In rough order of importance:

First, never stop coding.  I mean it.  Make an effort to code every day.  There are a ton of different ways to accomplish this:

There's also something to be said for both reading code and teaching others how to code.  Reading code exposes you to other coding styles and formats for getting things done [1.5].

Teaching and blog writing forces you to be honest with yourself.  It's much easier to fake it if you never interact with others on an intellectual level.  Some of the most rewarding work I've done is with my co-founder, where we both were able to teach each other as we programmed [2]. 


Less direct (but no less important) are indirect methods.

Software engineering is about a lot more than just writing spiffy code.  Sure, you can "learn" about it by reading yet another book but there's nothing like getting actual experience.  There are tons of great communities that would love to have you on board (and you don't need to be an expert!).

Reading blogs expands your coding world view (and hey, you're reading one right now!).  Blogs (and their comment sections) can be excellent places to find new and innovative ideas, so long as you take them with a grain of salt.  It's easy to start reading blogs instead of moving up to the more important things on this list, which brings us to things famous developers do that don't really help at all:

One thing to remember when looking up to coding idols is that they are way smarter than you are.  It may seem cool, even edgy, that they argue about the languages they use.  Arrogantly arguing about languages and style won't make you Douglas Crockford, just Doug Crock-full-of-*ignored*.

Don't use libraries instead of languages.  This is a good shortcut for those rapidly putting together prototypes but will hinder your development as a developer.  It may seem like everyone's doing it but there is incredibly real value to learning the language, not the library.

Finally, don't claim that "Real X use Y" While I'm guilty of this myself (Heck, look at this entire post), there are exceptions to the rule.  Saying "real developers use Ruby" or "You'll never be a good developer until you learn lisp" only makes you look like an idiot.  You may be correct but it's better to not come off as a bigot.

BONUS: Write Read books.  You may not be up to the challenge of writing a book but reading one is much easier.  The "holy three" are Code Complete 2 (very close to the metal), The Pragmatic Programmer (Good advice for any coder) and The Clean Coder (How to write code that will work and be understood).

[0] C.S. Lewis said it best: "People have a habit of becoming who they are pretending to be."
[1] Amaan wants to remind you that he had the idea first.
[1.5] For the sake of your sanity, DON'T learn JavaScript by viewing the source of random webpages.
[2] I'm usually not in favor of pair programming except for teaching scenarios  as they allow both the student and the teacher to get the "meat" quicker.

No comments:

Post a Comment