Questions? Feedback? powered by Olark live chat software

You Have To Get Good Before You Get Better

Discuss this post on Hacker News here.

I talk to a lot of people these days who ask me how to get started learning to code. I try my best to give advice: read books, try Code Academy, do a lot of Googling, check out Stack Overflow. Usually I try to check in with these people a few weeks after we talk. It’s interesting to see who starts to get good and who gives up.

What separates the people that get good at coding from the people who give up? In my experience, the people who are successful get good before they get better. 

“Get a little better every day” is a common aphorism about success. But I think results oriented thinking, and premature optimization of the process of getting good, kills motivation and reduces the likelihood that you will actually achieve your goal. Now let’s dig deeper into why I think this is true.

There are three things to bear in mind when you look at the process of acquiring skill: how you think your rate of progress will look at the beginning, how your rate of progress actually is day-to-day and how you think your rate of progress is day-to-day. Let’s look at some charts to get a better picture of what I’m talking about.

Linear

This chart graphs roughly how you expect the learning process to go before you start trying to get good at something. It’s just a linear curve. The thinking is that for every unit of time spent, I’ll acquire roughly the same amount of skill. This turns out not to be the case (in my experience). Here’s how I think you actually tend to acquire skill:

Plateau

I think the actual process of attaining skill is a series of slopes and plateaus. It’s kind of like working out. You make a lot of progress in the beginning, and then you plateau for a while. Then you start doing more complex workouts that require more strength and different muscles and you start to improve again. Skill works the same way.

I don’t think any of this is particularly flabbergasting. But here’s the key part of this whole thing. There’s a difference between how you’re actually doing day-to-day, and how you think you’re doing day-to-day. When you’re learning something new like learning to code, some days you think you’re the next Zuckerberg, crushing documentation and cans of red bull with wild abandon. The next day you feel like you have a better chance of being the first sub-150 pound player in the NFL than being a good coder. Here’s a chart of how it feels to learn to code: 

Emotion

In my experience how you “feel” about your progress is more real than how you’re actually doing. And that’s where “getting a little bit better every day” leads people astray. If your goal is to get a little bit better every day, you’re constantly monitoring your progress. But your barometer for progress is so screwed up that it becomes extremely discouraging very quickly. This is the point where most people give up.

I think people successfully learn how to code when they treat their progress as an inevitability so long as they put in the work. They don’t track how well they’re doing, and they don’t think about it day to day. They concentrate on learning. On building a base of knowledge. 

Then after a few months, once they’re “good” they start trying to get better. They try to optimize. They try to get better every day.

And they can do this because they’ve built a base of knowledge and experience that makes them more confident. They don’t get quite the same swings of emotion, and even if they do they’re better prepared to take them in stride.

Getting good at coding isn’t about building the next killer social app within 30 days of firing up TextMate. Becoming a millionaire from coding may be a rational long term goal. But the people who stick with coding, treat it as a learning process. They’re not rushing. They’re unconcerned with anything except putting in the hours. 

Because ultimately they know that learning to code isn’t about launching the idea they currently have in their heads. Very likely that idea sucks, and even if it doesn’t their execution of it is going to suck. What it is about is the product you come up with in 2 years, in 5 years. If you know how to code, you can build businesses for the rest of your life where the only cost is your time.  

Are you learning to code? Slow down. Take your time. Enjoy yourself. Learn.

You’ll get there eventually. 

If you liked this article you should probably follow me on Twitter at @danshipper. Or check out my startup Airtime for Email. We help you market your products in your email signature.

Discuss this post on Hacker News here

15 May 2012, 10:26pm | 35 comments

  • Florian

    I think that the coding learning curve feels more like the emacs learning curve http://bc.tech.coop/blog/060302.html

  • Dan Shipper

    @Florian love it

  • Sadie Cook
  • BenjaminDWalker

    “I think people successfully learn how to code when they treat their progress as an inevitability so long as they put in the work.”This is an amazing point. Thank you very much for the good points Dan and I appreciate the effort that went into this post! Cheers,Ben

  • ecomware

    Awesome. You’ve laid it out very clearly, and I think you’re probably right. And now that I see this cycle for what it is, I can admit I only care about how I feel about my progress anyway. From now on, I can save myself a lot of “wasted” effort and quit most things before I begin.

  • ecomware

    Awesome. You’ve laid it out very clearly, and I think you’re probably right. And now that I see this cycle for what it is, I can admit I only care about how I feel about my progress anyway. From now on, I can save myself a lot of “wasted” effort and quit most things before I begin.

  • Marcos Ortiz
  • lonetwin
  • Adam

    I think for new learners it can be hard to gauge how good you really are at something. I certainly know when I learned to code (still learning every day though!) that I had no idea how complex things could get.Seems as if you’re treating the skill as a metric and I find that hard to get my head around. Great article never-the-less. :)

  • AspectEleven

    Excellent! I’m not one to normally comment on blogs, but this is very good, something I have realized, but struggle with still. Hearing it from someone else helps a lot. Then it isn’t just me talking to myself :P Thanks for the post!

  • Rodtusse

    You’ve got a big point there and no wonder why people quit so easily when they notice they’re not getting as good as as they preferred ! Becoming a good coder is the result of lot of dedication and hard-work.

  • Ngaire

    Great analogy, often that people don’t spare the time to learn a bit more each day, but this article puts it into perspective. We shouldn’t be content with coding on the same level each day, instead trying to improve/further our coding skills as you say with time and enjoyment.

  • weisjohn

    Really inspiring, great post.

  • Mads Poulsen

    Super inspiring post! Love it!

  • Mads Poulsen

    Super inspiring post! Love it!

  • Mads Poulsen

    Super inspiring post! Love it!

  • Angie

    Gaaaaah. Thank you. I really needed to hear this. The programming plateaus certainly can be frustrating.

  • Josh T

    I directly relate these graphs to my work as a sales rep. Whether it be weight lifting, playing the guitar or selling, we all go thru this and need to be reminded of the “big picture”. Immediate gratification is so easily attained nowadays that it can be easy to waiver/falter, but that is part of the learning “curve” ;)JT

  • Marco Berrocal

    I literally almost cried by how inspired it is.Naturally, we tend to think “I am not getting any better”. Another thing that kills is the learning curve before you hit the confidence level of knowing you can do it. I think this kills me in particular. I try to seek answers, try to seek for time, try to seek for signs that I am improving.It’s hard as hell, but you are right, you have to keep trying.

  • Slavi Marinov

    A fantastic essay – and very true!”If your goal is to get a little bit better every day, you’re constantly monitoring your progress. But your barometer for progress is so screwed up that it becomes extremely discouraging very quickly. This is the point where most people give up.”This second sentence is my favorite in the entire post.When I started coding 15 years ago, all I cared about was having fun, learning and building something great. All you need is a fun project, emotional ignorance to the peaks and valleys in your perception, and a lot of practice. This is very different from the current academic approach to teaching people how to code. The projects are usually boring and dull, you start by learning theoretical constructs and what not – instead of experiencing the joy of hacking.Btw your post reminded me of a few books:- The Talent Code- Talent is Overrated- OutliersAll fantastic books in the field of deliberate practice. Once you learn and internalize the process of deliberate practice, you become free of the emotional burden that comes with learning new stuff. Like most things, awareness of the pain alleviates it substantially. Your post does a great job at creating awareness.Keep it up,Slavi

  • murph

    Great post, thank you for this. As someone just starting out learning code, reading it felt like someone patting me on the back and saying “Stop worrying….you’re doing fine. Just keep going”.Teaching yourself code can feel very lonely at times. Its difficult not having someone next to you to tell you if you’re doing things well or badly. Posts like this are very helpful to us beginners!

  • web designing

    Awesome blog about learning coding. I always try to be good programmer by learning every day something new.

  • Dan Shipper

    Thanks, really glad you liked it!

  • Jay

    Awesome article!!

  • theperfectnose

    Very inspiring, particularly your emphasis on putting in the time without expecting immediate (and exponential) gains. This way of thinking could be applied to virtually any skill intensive field.

  • davefontenot

    As someone who came into college with absolutely zero programming experience and is now a Computer Science Engineer who regularly attends and competes in hackathons, I can’t even begin to enunciate how much this rings true in my own journey to become a developer.

  • Josh T

    Good Day, I will be out of the office until August 20th. If this is an emergency, my cell is 608.770.5674. You may also contact my co-worker, Jon Barry Duncan via email Barry.Duncan@Citrix.com or phone 480.467.2756 Joshua Thompson

  • http://NoHostingTrouble.com Kasper

    I was recommended this blog post. And thanks dude. This blogpost rock!

  • Pingback: You Have To Get Good Before You Get Better – dan shipper » Fahad Sheikh

  • Pingback: 我也有五月病 - Sideways

  • Pingback: 做到更好之前,你需要做得好 | 品匠网

  • Pingback: 做到更好之前,你需要做得好 | 毡巴的博客

  • Pingback: 做到更好之前,你需要做得好 | Echo's Blog

  • Pingback: 做到更好之前,你需要做得好 - 东海敢死队

  • Pingback: 做到更好之前,你需要做得好 | 朝露

 
x

Never miss a new post