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.
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:
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:
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.