How to Level Up as a Developer
jasonrudolph.com
jasonrudolph.com
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.
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.
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.
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.
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.
I read it more as: don't be a better programmer, write better programs.
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.
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.
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.
You mean you have hundreds of people asking where Mankrik's wife is?
More seriously - what do you mean?
Obviously this idea doesn't eliminate all support requests, but I imagine it would reduce the deluge over time.
[1]: http://www.hilarymason.com/blog/ignitenyc-how-to-replace-you...
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.
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).
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.
In my experience, someone with really strong domain expertise in something like bioinformatics, doesn't actually have 10 years building websites on MySQL.
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.
I'm also not that knowledgeable in MMORPG terms, but I do know things like "drops" and "PVP", and I can deduce other terms.
Just saying, it doesn't really sound like you.
I used http://www.standards-schmandards.com/exhibits/rix/index.php and copy pasted the grandparent comment in - got a reading ease score of 58.
Copy pasted some answers from http://www.anyasq.com/227-i-made-bingo-card-creator - got a reading ease score of 59.
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. :-)
Have you seen this video? http://blip.tv/business-of-software/patrick-mckenzie-marketi...
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.
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.
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. :)
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.
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.
EDIT: I should add that it does not come naturally most of the time. It still requires hard (physical) work and persistence.
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.
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".
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.
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.
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.
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:
"The Magic of Time: The last one standing"
http://www.unlikelysalsero.com/2007/08/magic-of-time-last-on...
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.
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 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.
- Bill Austin
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.
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.
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!
Or he could just go back to doing whatever.
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.
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.
You are right that there are lots of such problems. But there are also many others who can solve them too.
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.
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.
Meta-troll?
If you can outsource the problem and plug in a solution, that's great, but it's not always possible.
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 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.
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.
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 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.
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.
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.
tldr: Try to use, and understand a tool before trying to write your own.