
How to Level Up as a Developer - fogus
http://jasonrudolph.com/blog/2011/08/09/programming-achievements-how-to-level-up-as-a-developer/
======
patio11
Grind up on apps which solve business problems in underserved markets. The
gold drops are better, the mobs easier to kill, and you'll get ganked less
than in the hostile PVP zone of Stuff For Poor Twenty-something Men. Your
support inbox may end up looking like Barrens chat; this is normal.

A note with regards to specs: you may be tempted to dump all your points into
the Programming tree. Don't. It gets nerfed every few years anyhow, and respec
costs will be murderous. Instead, spread some points into Soft Skills and
Domain Expertise. Get the ult in Domain Expertise and you'll melt your
competitors' faces regardless of their programming ability on virtually any
raid except Next Google. (P.S. Expected rewards per hour on that raid are
terrible, since _everyone wipes_. If you're good enough to do it you could AFK
your way through any number of raids, pick one of them instead.)

Many developers get deeply into debates over who has the best class. "My class
is better than your class" doesn't kill mobs, no matter how many times you
repeat it.

Improving one's grinding skill can improve gold per hour marginally, but
understanding the economic meta-game has a much, much better ROI.

~~~
pushingbits
The top comment on a post about how to become a better programmer effectively
amounts to "Don't try to be a better programmer, instead do X, Y, and Z
because that will make more money"?

I remember you saying somewhere that you're into optimizing businesses and
money is a great way to keep score, and in light of that, this comment even
makes sense, but please keep in mind that for some people becoming a better
programmer is not about maximizing ROI.

~~~
rgraham
I took two things away from what patio11 said.

One is to do things start to finish. Tests, deployment, faqs, code, marketing,
polish, etc. You learn to appreciate the people and teams around you. You also
gain useful skills.

The other is to emphasize learning the most for areas that have the largest
payoff. For most programmers this means stuff that isn't programming. This
dovetails nicely with an idea that CrossFit points out: Pullups make downhill
skiers better. That exercise has no direct functional application to downhill
skiing, but improving your big weaknesses in fitness often pays off more than
perfecting your strengths.

~~~
nostrademons
I think your last point is heavily situation-dependent. What you really want
to do is maximize the area of your Voronoi-diagram: the problem space for
which you or resources you control are the best available solution. Sometimes
the best way to do this is to eliminate a weakness, so that it's no longer a
dealbreaker for people that wish to use you as a solution. But many times, the
best way is to perfect your strengths, so that you're clearly better than the
alternatives around you. People are willing to forgive and work around many
weaknesses if you're very, very good at your strengths.

------
cletus
This isn't a plan for becoming a better developer. It's an aimless laundry
list of all possible things a developer could do (if they had limitless time
and no particular goals).

It kinda reminds me of the "shotgun marketing" employed by, well, almost all
companies, which comes down to "we don't know what people want but if we do
everything then surely something will stick, right? If not, we'll withdraw the
product and fire another random shotgun blast."

This list is the shotgun approach to becoming a better developer.

~~~
Jgrubb
I was just coming here to say the exact same thing.

 _Write a program in assembly language_

 _Write an application in a functional language_

 _Write an application in an object-oriented language_

 _Write an application in a prototype-based language_

 _Write an application in a logic programming language_

 _Write an application using the Actor model_

 _Write an application in Forth [C]_

I totally respect the author's POV, and have no doubt that he is a hilariously
better programmer than I am, but none of this would help me do the day to day
stuff that all of my clients hire me to do.

~~~
bphogan
I bet it would. Learning Ruby on the side made me a much better PHP programmer
in 2005 because Ruby taught me how to do OO programming. Learning a little
Clojure has made me a much better Ruby programmer because I started
understanding the functional side of things.

Whenever I learn a new programming paradigm, I find it often does help me look
at problems differently, and that does help me do the day to day stuff better.

Note I said new paradigm, not just a new language or framework. :)

~~~
Jgrubb
Fair enough. I wrote that as I'm sitting here trying to puzzle out my very
first project that requires me to use Windows (C# for Drupal developers
anyone?), which is taking me away from really learning JS beyond jQuery to try
and understand Node. I just can't imagine having the time to get through 10%
of this list in the next 5 years.

~~~
kragen
5 years? That list is more like a week. Unless your idea of "an application"
is pretty grandiose.

------
wallflower
I would argue that I have learned more about critical thinking and problem
analysis and iteration by taking up Salsa dancing than by coding more. Guys
and girls, you don't have to sit in front of a terminal to become a better
developer. The OP's achievement list is daunting, and I wonder if time might
be better invested in life rather than coding.

The beauty of life is that success is not transitive (e.g. being good at
coding does not make you good at graphic design). But being better at graphic
design or anything outside coding (try CrossFit, for example) may make you a
happier coder.

~~~
jkkramer
After 5+ years in the salsa scene, most of the best male social dancers I've
met work in a technical field -- software, engineering, etc. It requires
tremendous mental acuity.

EDIT: I should add that it does not come naturally most of the time. It still
requires hard (physical) work and persistence.

~~~
msluyter
Having social danced and taught dance classes in various styles for over 10
years now, I think the reason you tend to see so many dancing computer geeks
has nothing to do with "mental acuity," and everything to do with:

1\. We tend to be introverted, and are often drawn to dancing because it
provides a _highly structured_ way of interacting with the opposite sex.

and

2\. We also tend to be obsessive -- it's how we complete lists like the OP,
after all -- and thus once drawn to something, tend to have the doggedness to
practice until rather good at it. Once you're good at it, a positive feedback
loop ensues.

IMHO.

~~~
seer
As a half decent dancer myself I think the structured part is really the key
to why there are so many geeks in salsa. It starts like a way to hack the
social aspect of life with a clear tutorial of how to be more confident there.
And it really does work because most women are in fact interested in dancing
so it acts as both a conversation starter and a shared topic for discussion.
I'm not that sure that it helps for coding though. But it does help with
happiness a lot.

As a side question - with all the technical talent in the salsa scene why is
its web presence so ridiculously terrible? I actually haven't seen one site
associated with salsa that I could qualify as "adequate".

~~~
mattm
Probably because there is no money in salsa. Many teachers, for the amount of
work they do, don't earn that much money so paying for a website just isn't a
priority. My teacher probably made a decent amount of money judging by the
number of students she had but it was her life.

She would also regularly tell stories of her experiences. A lot of which
involved salsa conferences and not getting paid because the only way many of
the conferences can actually make money is by stiffing people on payment. It
was quite a shocker to learn a lot about the behind-the-scene stuff.

~~~
wallflower
> Probably because there is no money in salsa

The guy behind SalsaCrazy makes seven figures. And he (according to my
sources) is not a good social dancer.

The economics of Salsa are driven by the race to the bottom when someone
starts giving away classes for free. Most salsa dancers don't drink that much
so expecting the bar or club to earn significant revenue from dancers is not
that possible (but it depends on whether you are attracting the girls' night
out crowd or the serious dancers).

The real money is made in the wedding dance preparation market. It really
plays to the competitive landscape of showing off and SYTYCD. The recession
has hurt the market some but most upwardly mobile couples will drop $2k for a
package of twenty private lessons aimed to get them to the very important
first dance as a married couple with style, confidence, and choreographed
moves.

That is the secret of dance studios. Wedding couples are their fat cow.

To make money off a salsa conference is an impressive accomplishment.

~~~
mattm
That's the first I've heard of that site but I can see how it makes money.
It's product-crazy. I have no doubt that some people make a lot of money but
probably a lot just get by. My teacher also has mentioned how it took her many
years to get to the level where she could even begin to teach full-time.

Some teachers might have their own products but usually they are still
personally required. It's not unlike programmers selling their time. Many of
the teachers do it because they like dancing, not running a business just like
some programmers who like programming and don't like the business side.
Anyway, it's a fascinating industry to me.

------
jswinghammer
You can also decide to be less ignorant today than you were yesterday and just
let that work itself out. If that's your attitude and you stick with it you'll
do well.

I interviewed one guy recently who seemed smart and if he stopped playing
Warhammer and Starcraft 2 he might have a decent career. As it stands now he
did terrible in the interview and showed no signs of being interested in not
being ignorant. If he picked up a book or two he might be good.

~~~
bartonfink
I agree. I work with a fellow who is intelligent, but has absolutely zero
interest in learning technology on his own time. He's a decent Java guy who
came from a C++ background, but the only area he stands out in (Swing
development) isn't terribly marketable. He has no web experience, no knowledge
of non-OO programming and his CS degree is far enough in the past that he has
retained only limited knowledge of more interesting topics (e.g. compilers,
AI, math coursework) that would give him a frame of reference to rebuild from.

The sad thing is that he's going on job interviews right now, and is having
about as little luck as you might expect. He just got told by one interviewer
that he's almost at the point of no return where his experience is so stale,
it's going to be hard to transfer out to another job. From his perspective,
he's caught between a rock and a hard place - because he's stuck in a job that
he doesn't like, but that same job is keeping him from getting another. It
would be so easy for him to jump out of this trap simply by dedicating a
couple of hours a day to reading about things outside his experience. However,
based on our conversations I doubt that's going to happen. It's especially
disturbing because he's otherwise an intelligent guy, but he believes that his
job is responsible for giving him marketable skills, and this is how people
get stuck in jobs they don't like.

Don't be that guy. Tolle, lege!

~~~
pavel_lishin
If you wanted to be a white knight, you could invite him to work with you on a
project in a language or domain unfamiliar to him - it might force him to
catch up.

Or he could just go back to doing whatever.

------
MrHobbes
That is a really great list. I mean a _really, really_ great list, but, and I
may be quite wrong about this, I think that it is missing something very
important.

While a well-rounded computer-science curriculum should enable someone to
check off at least half of those bullet points, I do not think that list would
actually make someone a great developer.

I think that in order for someone to become a great developer, they should
have knowledge that enables them to solve really hard problems in efficient
ways. They must understand algorithms. I don't mean a surface level
understanding either. They must have a deep, familiar, and complete
comprehension of algorithms in general.

I'm not one to lecture on this subject, because I'm not quite there yet
myself, but I really do think that if someone has a mastery of algorithms then
the rest of the items on that list become significantly more achievable.

They would have a nice, strong general purpose set of tools that they can not
only use in their own projects but also (and perhaps more importantly) in
examining third party code and libraries as well.

~~~
troels
A lot of people seem to believe that being strong on algoritms and data
structures are important skills for a programmer. Maybe it has to do with the
problem domain, but I have a hard time accepting that. I couldn't implement
bubble sort from scratch if I tried - let alobe anything actually complicated.
I could back in school, but in the 12 years since then, I have not once needed
it. Understanding the finer details of coupling and coherence are much more
importabt skills in my book. It's not as easy to messure though.

~~~
mooneater
Without algorithms, you are limited to solving problems that can be tackled
with mere plumbing.

You are right that there are lots of such problems. But there are also many
others who can solve them too.

~~~
troels
I completely disagree. Algoritms are exactly the kind of things that don't
require any creative thinking, besides identifying when they may be
applicable. That's easily outsourced to whoever charges the least.

~~~
mooneater
Algorithms as taught in university are like single letters. We yearn to write
compelling essays and deep poetry, and you are advocate having an illiterate
person select letters one at a time and outsource the writing of them to the
lowest bidder.

From your user name I guess you are a troll. But the best part is, there many
people who really think that way. I think its the dominant view in the
industry. For example at least some (and probably most) groups in redmond.

~~~
troels
No, you have to read my response in context (E.g. as a response to _plumbing_
and _many others who can solve them_ ). I work with software that supports
business processes, manage information and facilitates interaction between
humans and machines. In that field (if it is even meaningful to speak of such
a broad category as a single field), knowing how to write the most efficient
sorting algoritm is fairly close to worthless.

I'm sure that if you work at Google, where crunching big data is key; or in a
company like Microsoft or Apple, where applications are much closer to the
hardware; then these things do matter. But I propose that a major part of
software development happens in a space where such things are irrelevant or at
least very rarely relevant.

Regarding my outsourcing remark, let me clarify a bit. What I mean to say is
that while the stuff that is close to the hardware might take skilled workers,
it does not require cultural skills. For example, I would suggest that it's a
lot easier to outsource a hardware driver than it is to outsource a workflow
engine for an order process. For the latter, you need to be close to your
users and you need to understand the business you're modeling.

Mind you, I think it's fine that we teach this stuff in universities - it's
good background knowledge to have. But as a practical skill, I question its
value. And in a job interview, I would suggest to test the skills that are
actually needed in the relevant job.

Oh, and I didn't choose my name; My parents did. It's traditional and somewhat
common name in Scandinavia. You're not the first to get that wrong though.

------
eegilbert
The juxtaposition of the top two stories, "How to Level Up as a Developer" and
"Gamification is bullshit," is pretty hilarious.

------
treetrouble
Lists like this are designed to discourage developers, not help them "level
up".

------
sunchild
Katas are such an apt analogy for any skill building. Japanese martial arts
(in the past 100 years anyway) are a mature game system. The ranking and
achievement systems might seem basic from the outside, but there is plenty of
nuance (and precedent for gamification) under the surface. I've trained in
lots of Japanese martial arts, and the lesson that was drilled into my head is
this – mastery of basic skills and sequences is a prerequisite to further
progress. For example, unlocking the "hidden achievements" in something as
simple as a front punch. I'll never forget the day I noticed that the correct
torsion of my body causes my lungs to breathe properly when I use proper form
for front punch. Even explaining that phenomenon is next to impossible – it
has to be experienced to be learned.

I like the OP's list of achievements because it represents a good selection of
basic skills. All learners should focus on basic skills. You can't practice
your kata too much!

------
plamenv
I'm pretty sure that most the programmers, who we consider to be at the top of
the professional ladder, won't be able to check off even 30% of those
"achievements".

~~~
rhizome
My impression is that people with CS degrees have done at least half of them
through coursework.

~~~
dpark
Stick the word "nontrivial" on the rest of the achievements and that number
will drop rapidly. CS students do a lot of these things, but often not with
much depth.

------
cmetcalfe
Progression is everything to me. Not just as as developer, everything in life
must progress. I found the article hit the nail on the head. You want to
progress from decent-to-good, or good-to-great. You want to move forward.

I find it easy to continue getting better at what you're good at. You have a
solid understanding of what you're working on, and it's easy to touch up areas
where you might be lacking. But to make great strides, you really need to take
on things you suck at. This is where the biggest progression leaps happen. It
might be tough to get started, but once you accomplish something you have
never touched before, that's where the true leaps in progression happen.

Being uncomfortable with what you're doing really exposes you to areas which
need growth, keeps you humble and keep your hungry.

------
axefrog
"Levelling up" as a developer doesn't rest on checking off a bunch of points
on somebody else's list (though many of those points may still be relevant to
you on your journey), but rather a combination of a constant need for self-
improvement and critical self-analysis, combined with a massive genuine
passion for the field of programming, irrespective of which areas your
interests lean toward. If you are never satisfied that you have "made it" and
you are regularly not only getting excited by new ideas and new possibilities
in this field, but also putting a lot of time into exploring your skills and
constantly trying to improve them, there is very little chance that you're not
going to massively improve as time goes on.

------
jeez
I'm surprised at how so many people are taking the list itself literally. If
you're lucky enough, you might have found something REALLY interesting to do,
which kept you motivated enough to keep learning new things as required until
you become a Master. But that doesn't mean the rest of Us don't deserve to be
good. What I'm trying to say is, if I wanted to be an awesome programmer just
for the sake of it, it still counts. I don't have to have a Grand Idea I hope
to achieve by becoming good at it. Once you start getting good at any non-
trivial task through hard work, you begin to appreciate the acquired skill and
feel good about it. This feedback is enough to keep you going.

I think you get better at getting better as you keep getting better. So as you
gain experience, you can figure out what will interest you better and change
your direction, rather than having a set path right from the start.

------
perlgeek
Also important: stop doing stupid shit. [http://jinfiesto.posterous.com/how-
to-seem-good-at-everythin...](http://jinfiesto.posterous.com/how-to-seem-good-
at-everything-stop-doing-stu)

~~~
dcotter
I totally agree. Personally, I've been using checklists. I use them to remind
myself to put good architecture in place. I use them to remind myself to check
for common bugs (calling functions or methods of null objects, forgetting to
update the database schema when I update the model, etc). I use them to remind
myself to go ahead and add the sorts of features that make a new feature more
complete (email alerts, audit trails, reporting, etc). It may be a basic step,
but it makes the development and testing go much more smoothly, and in my
opinion, most web devs would become better developers faster by boning up on
the basics than by learning more advanced subjects like algorithms and
functional programming.

------
sun123
I don't think anyone would have time to complete such a big list. Is it
worthwhile anyway?

~~~
bhousel
Most people will never run a 5 minute mile either (the author's analogy, not
mine).

I was all ready to comment about how it wasn't a very fair comparison, but
then I thought about it more and realized that I actually do agree with the
analogy. My belief (and I realize this is probably a minority opinion) is that
most people can never be great developers - it requires some combination of
hard work and just "getting it".

~~~
ThePawnBreak
"Getting it" is usually the result of hard work in most cases.

~~~
bhousel
I'm talking about something different.

There are many people for whom a lifetime of hard work will not result in a 5
minute mile, and there are many people for whom a lifetime of hard work will
not result in being a great programmer.

I _know_ this is an unpopular viewpoint, but it's what I believe. And I have
spent many years both running and programming. I am really good at both those
things, but neither Ryan Hall good at running, nor John Carmack good at
programming.

~~~
davidh
Perhaps because you do both, ya? I bet if you only programmed you could be
John Carmack good at programming and John Carmack good at running.

------
msurel
It looks like somebody has taken yet another stab at re-writing 'The Pragmatic
Programmer' :-)

i don't think you've really leveled up until you get past using phrases like
'Level Up'. You're not a 14th level Ranger with a potion of strength and +4
leather armor. You're supposed to be an engineer ( or software developer or
pick your favorite name ) helping real people solve real problems.

------
ulisesroche
I agree with the idea that the list is too focused, and probably doesn't help
as much as it says it will.

After reading "Where Good Ideas come From" by Steve Johnson, I think a better
approach is to be good at code, and decent at everything else. You don't need
to run a 5 minute mile, but you should at least be able to run a mile without
taking breaks, and be able to hold a conversation about Latin American
Literature, and be fluent in your programming language, and kick out a decent
design, and bowl a 150, and so on.

------
Jun8
Another nice quantitative measure may the number of questions you answered and
got accepted in SO in your selected area of expertise.

------
nspeed
To validate this list, pick some developers you admire. How far along are they
on this list? Are they much further than you?

~~~
hugh3
Good question. Has Donald Knuth ever written a web app? Mobile app? Embedded
app?

~~~
pnathan
He's not a developer. He's a computer scientist.

~~~
cema
Primarily a computer scientist, but also a developer, and an architect too.
Not just in his youth, but in the mature years as well (TeX).

------
voidfiles
I wrote about an idea to level up for the daily
js(<http://dailyjs.com/2011/07/25/alex-kessinger/>).

tldr: Try to use, and understand a tool before trying to write your own.

------
EGreg
Man just reading that list makes me tired...

