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.
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.
In some ways, I see patio11 as the Sarah Palin of HN (in PR tactics, not brains).
Formula: show up, comment on everything to improve your personal brand, bend every conversation to your personal narrative, speak very authoritatively with flowery down-to-earth gosh darn folksy language, and stay sufficiently out of the way so you can't be harshly judged (half term gov = "microisv").
My opinion about this is proof in itself it works. I just get annoyed realizing other people have programmed my brain without my express consent.
I'm totally OK with that. FWIW, my comment is about being a better engineer: I simply don't think that programming skill uniquely makes one a better engineer when divorced from user needs or commercial considerations.
I think Patio is right to a certain degree. You can be the rock star of rock star programmers, but if you can't explain to me what you're doing, what it does in general (or for me) and why I or anyone else should use it, you're toast. This will depend on job to job and where you want to go, career wise, but I've found, in my current gig, having soft skills does pay off.
At its genesis, coding is problem solving. We are trying to solve someone's problem(s) using a computer. All the coding skills in the world won't help us come up with solutions to people's problems if we lack the ability to listen to the end user, translate their needs into code, and then explain to them why they need this and how it solves their problem. Also, I've found that developing your non coding skills also gives you different perspectives into problem solving.
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.
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.
There are different ideas of what makes a "better programmer." To paint with a very broad brush, there's a divide between "A good programmer is somebody who makes good programs" and "A good programmer is somebody who knows how to do a lot of different programming tasks well and knows all the right techniques."
If having more experience with different kinds of code is your idea of being a better programmer, then the OP is sufficient and more power to you.
Other people feel that a programmer's purpose is to create useful things, and the programmer who creates more useful things is better. In this light, Patrick's comment is relevant, because a little bit more domain knowledge will usually improve your program more than prior experience implementing a B-tree database.
> 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 read it more as: don't be a better programmer, write better programs.
> 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"?
You missed the part where he discussed learning what to program.
While folks who leave that decision to PHBs may have good skills, I think that knowing what to program is an important part of being a good-to-great programmer.
> 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"?
You missed the part where he discussed learning what to program.
While folks who leave that decision to PHBs may have good skills, I think that knowing what to program is an important part of being a good-to-great programmer.
> Improving one's grinding skill can improve gold per hour marginally, but understanding the economic meta-game has a much, much better ROI.
Excellent advice. But, you're assuming the OP wants to play "business" game instead of "programming" game, which is not necessarily true, and is not implied in the post.
That support will be a long, long slog of answering the same set of questions asked largely by people who are both less than expert at using computers and perhaps not their at their most eloquent or polite when urgently trying to complete a task.
The best advice I've read for this is to treat support emails as bug submissions. Questions about your company mean you don't have sufficient documentation, help, user interface, etc etc, and work should be put into shoring up those areas.
Obviously this idea doesn't eliminate all support requests, but I imagine it would reduce the deluge over time.
This could actually be an interesting machine learning problem. Train a system to classify incoming customer emails, and automatically respond with the email template that matches the class of question, and watch your support team get more and more free time.
How does what you recommend make you a better programmer? Coming from a business background, I'd say I already have relevant domain expertise and decent soft skills. I don't really see how spending yet more time on those strengths will do much to improve my very mediocre coding abilities.
Excellent comment. Far to many developers concentrate on becoming a better programmer to the complete exclusion of becoming a better software developer. Software development is all about how well you can deliver business value and the ability to program, although an important skill, is not the most important. It is simply one of many, many skills that are needed.
Like the comment above, my advice is learn how to deliver software instead of just program. Learn how to interact with customers and become an expert in your business' domain. In addition, learn how to solve real problems without using technology or programming.
Being a great programmer will get you in the door for an interview, but it is all the other soft skills that will get you the job (and the money that you want).
Yeah but if you've been building websites using MySQL for ten years and can't tell me what InnoDB is then all the domain knowledge in the world won't help you in an interview with me. My standards aren't really that high but I expect some depth.
Has it ever actually happened that a developer had 10 years experience building websites on MySQL, very strong domain expertise in some non-programming field, and no knowledge of InnoDB?
I don't know, but I'm sure it has. If your primary interface to MySQL is a GUI tool where you just click the "create table" button, type in a name and accept the other defaults, you could be using MyISAM tables without knowing anything about table types.
Don't forget, that 10 years of experience could just be 1 year repeated 10 times. A cardinal number of years doesn't always equate to increasing breadth of knowledge.
Of course it doesn't, but if 10 years of experience results in domain expertise somewhere else, but some cherry-picked detail about storage engines is missed then there is probably a good reason for it.
In my experience, someone with really strong domain expertise in something like bioinformatics, doesn't actually have 10 years building websites on MySQL.
Yes. It has happened many times. I talk to people who rate themselves highly in all things MySQL and can barely write a join and can't really explain anything about how it works.
That's not what I asked, though. It's easy to believe someone says they know MySQL but doesn't. It's the combination of all of them that I'm skeptical about.
1. Has built websites for 10 years
2. Websites have all been on MySQL
3. Is a verifiable domain expert in a field that is useful to you but isn't programming.
No I have had 1 and 2 though. I haven't really met anyone who tried to convince me they knew anything other than programming and databases to be honest. I'm also not sure how that would come up.
A raid in this sense is a start-up venture or any development job I guess. And the advice is to not try and develop the next Google because most attempts are unsuccessful. And that if you're capable of developing the next Google you should just spend your time doing something else because you wouldn't have to work very hard.
Are you kidding? It's the most perfect response I can imagine. It follows the OP's metaphor even more rigorously than the OP does, it's useful and it's exactly right on every point. If that's outsourced, I would like to get me some of that cheap labor.
Close enough for government work, I think. I never knew that patio11 played World of Worldcraft?
Edit: Oops, just read the response above me, learn something new every day. And no serious critiques of my methodology please, it was just for humor's sake. :-)
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.
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.
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. :)
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.
Exactly. It would be quite some job that would pay your salary and knowingly allow you to learn multiple non-business task required languages for 'personal development'.
patio11's comment was a LOT more on target, and much more in the spirit of grinding / levelling-up.
The key, perhaps in both World of Warcraft and in real life, is directed questing, where a reasonably well-defined set of tasks or quests are pursued along a quest-line towards a known goal.
In my case, the quests will be Mac App store releases, but for others it might be marketing materials, start-up exits, or web-site designs.
A more directed approach would be good, but it's not that bad. Breadth of useful knowledge is actually a good thing, if maybe not the best thing. Breadth of topics within a single conversation (which is basically what advertising is) just makes you sound like you have a disorder.
Not really related to the discussion at hand, but your last sentence resonated with me. I hate talking to people when the conversation meanders around to every errant thought they ever had and you never come to a coherent conclusion. I get the impression that they don't truly understand what they are talking about and/or never had an idea that they thought was bad. I love brevity.
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.
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.
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.
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".
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.
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.
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.
I think you have nailed it. Structured is key. You have a pretty good idea of what is coming. There is a protocol to asking a woman to dance (confidence but a protocol nonetheless). I think this means that I need to seek out more unstructured social environments (but part of me thinks that even the extroverts, they aren't leaving their circle-the-wagons huddle of friend in a big open party).
Also, I think geeks think they can crack the code of dancing, find the secret but then grow through experience to realize it is really dancing not pre-programmed moves (though every lead has a set of proven moves).
Maybe I need to stop thinking about this so much and just enjoy it.
Being myself a software developer and a (half) serious salsa dancer, I find that intriguing.
I have also noticed there are quite some technical people in the salsa scene, but I thought most did it out of the need of meeting people, after spending all day at work.
Salsa dancing requires some coordination, thinking a few steps ahead etc, but tremendous mental acuity? I think you might get a bit far here :-)
But hey, I would also second taking up salsa classes but mostly because it's tons of funs and a very healthy hobby that makes you meet tons of people. All good!
I argue that Salsa challenges your mental acuity because there are not many things more thrilling and challenging than dancing with a beautiful salsera while trying to remember some moves, track potential collisions with other dancers (always protect the follower), keep track of the beat, smile, do not think, and (for extra credit) keep count of the measures for breaks usually happen on multiples of eight measures (8/16/24) -and- if you can anticipate the breaks -that is what makes women believe you can dance.
Yes, mentally challenging but lot more fun than writing unit tests under the fluorescent day sun. And I know a lot of engineers and programmers who dance, too.
If you are even thinking of getting started with Salsa or have taken a few classes but have gotten discouraged, here is my favorite article:
I really like to see my childhood friends' reactions when they see me dance, after having witnessed my robot dance of high school years. I was not really genetically programmed to dance that's for sure, but I got quite good with some good practice. Just to say for all nerds out here that have 2 left feet and think they can't for their life learn to dance: practice trumps everything, even in dancing. You need to overcome the initial pain of feeling ridiculous though.
Regarding salsa challenging mental acuity, salsa is challenging on a physical and you might say on an intellectual level, but for me it's really not what matters.
As you say, just way more fun than being under the fluorescent day sun.
I was into the Seattle salsa scene and definitely saw a lot of engineers get "really good" at salsa. However, you can almost always tell who's a developer and who isn't, based on how they dance. They dance like they're just trying to solve another problem, just a set of steps to follow, feedback, etc.
They often forget that they are dancing to music with a woman (forgive the stereotype). They forget to smile, to enjoy, to make eye contact with her, or to care about the music they are dancing to. They just keep running through vuelta after vuelta...it's cool to see how they master it, but it still doesn't look like dancing.
Then again, who am I to judge dancing? I learned the basics in Bogota, Colombia and that's how they dance there (music and connection valued above moves) Maybe the engineered dancing truly is dancing, but it sure looks lifeless to me.
I know some of these people. And they aren't just engineers. The worst is when they try leading the woman through a complicated pattern that requires strong leads - and risk hurting them and the people around them.
I do think it is unfair to broadly stereotype - some of the best dancers I know have full time engineering jobs (one even competed in the World Championship of Salsa), and even if they are "routine machines" - they are trying - getting out of their comfort zone - most macho men are too macho to even put their masculinity on the line by trying to learn how to partner dance.
Remember, the best part of the dance floor is no one cares who you are, what you do - only that you can hear the music and lead a dance to it - to connect through the music and to each other. I don't always achieve that but that is my goal.
And so again it boils down to difference in concept definition: Is a 'best' dancer one who is into the music and connection or the one who's mastered the moves? Treat question as rhetorical.
"When you take dancing lessons, you learn steps and you learn steps and you learn steps. It can go on for a long time. And then one day, you just learn to dance, and it is so different."
Each item on the OP's achievement list is valuable. It may seem daunting, but you don't need to do the WHOLE list to level up. One step at a time...find something on the list to do, and do it, if you want to get better.
Having achieved about 90% of his list, and having worked with many, many other developers, I can say that I've been in the 99th percentile wherever I've worked, and typically have been the top developer who everyone else came to for help.
And almost every other top developer I've known has had similarly broad experiences, so I don't think it's a coincidence. One friend is a notable exception; he refuses to learn any language but C++ and Flash. His experiences go in other directions; the list certainly is not comprehensive.
BUT, I also have a life away from the screen. I play a very fast competitive sport (badminton) that gets me exercise and keeps my reflexes sharp. I wouldn't say that it gives me practice in critical thinking, but the exercise and movement keeps my brain healthy.
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.
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.
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.
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.
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.
"Maybe it has to do with the problem domain, but I have a hard time accepting that."
Your profile says that you are a web application hacker. I think that explains why you may not feel that data structures or algorithms are important. I was the same way myself (started my programming life by building Perl cgi scripts, made a nice little cms, definitely didn't use any fancy stuff to do that).
You should take it from me though. You will suddenly develop a deep and profound appreciation for understanding algorithms when you have a problem that requires having to comb through over a hundred thousand records, perform some type of operation on them, and sort by the results of that operation - all within a fairly narrow time period.
I think that it actually is a question of problem domains. If you never encounter this type of problem, then not knowing about things like big o notation and the various sorting algorithms will never impact you. However, when you do, that knowledge quickly pays for the time invested in learning it.
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.
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.
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.
Couldn't agree more. Most of the crap I've seen in the various codebases I've worked on has nothing to do with poorly implemented or understood algorithms, and everything to do with bad designs and ill-conceived architecture. Lack of abstraction, unnecessary coupling, etc. But those skills are not only harder to measure but harder to teach -- you often don't see the problems with a particular design until you've seen it fail in production.
Disagree. It may be more common to see bad designs and architecture because language libraries already have good implementations of key algorithms. Strong, mature frameworks similarly go very far in making system design and architecture easy because someone else has already done the hard work. Therefore, both algorithms and design principles are important skills for a well-rounded programmer. Do you see why?
I'd say you need both. Coherence is important for the usability and maintainability of codebase as a whole, while algorithms often run key components of a system (eg A* pathfinding in a video game). Data structures are fundamental and if you don't know them your code is probably buggy.
I think you have a good point here. The list has too many items framed as "write an application..." The building blocks section should include some harder problems like optimization, planning, or code analysis.
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!
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".
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.
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.
"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.
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.
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.
Seriously, there are many developers who have lives, kids, sick relatives, etc. who are able to accomplish the equivalent of this list and more. It will take a very long time to get through this list, but you should always view your skills as a long-term investment. The best in any field realize that increased skill comes with pain and sacrifice. If you were to perform every action on the OP's lists you would be a better programmer. It's up to you to decide just how much better you'll be and if that gain is worth the cost. No one else can answer that for you.
I don't think his point is that you need to complete every single one, just like you don't need to get every single achievement in TF2 to be considered a master. His point is that you can make things more incremental and if your goal is to steadily become more and more cognizant of everything software then you can complete these badges one at a time.
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".
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.
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.
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.
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.