It's been my sole focus to answer this question for the last two years. I've noticed there are three strategies that successful students consistently use better than anyone else regardless of what resources they use.
- Focus on habits, not goals
- Learning alone is painful
- Build things
1. Focus on habits, not goals
It seems counter-intuitive that you shouldn't focus on goals, but hear me out — it's all about leverage. Anyone who works with me knows that I dweebishly reference the R'as Al Ghul scene in Batman Begins pretty much 3-4 times a day:
R'as tells Bruce:
"Rub your chest, your arms will take care of themselves."
If you focus on building the habit of programming for 20-30 hours a week, you will reach your goal of being a web developer. If you focus on the goal of being a web developer in X months, you get nothing from that but stress and insecurity about how far along you are. Focus on the habit, not the goal. Rub your chest, your arms will take care of themselves.
So here's what you should do right now: put 15 minutes a day on your calendar to spend time programming. Don't do more than 15, just focus on doing 15 minutes a day. If you can do it successfully with no excuses for a week, try bumping it up to 20 minutes a day. Don't try to overextend yourself by doing an hour a day right off the bat, this is going to be a 10,000 hour marathon so we're focusing on developing the habit right now. The number of minutes you put in isn't as important as you showing up each day.
2. Learning alone is painful
When I was learning web development, the two biggest social components to my learning were having a mentor and belonging to a community.
Having a mentor: I worked at a small startup called merge.fm while in college. I learned more in the summer I spent working with one of their cofounders than I did in the entire previous year at my university. There's just something about working alongside an expert who knows more than you that really accelerates your learning, you're able to pick up on how they think and unveil what you don't know you don't know. There's a reason why mentorship used to be the de facto standard of learning a new trade, it's very effective.
Belonging to a community: For me, the two communities I belonged to were the Illini Entrepreneurship Network (a student organisation at my university) and HackerNews (a large hacker/startup oriented online community).
In short, I learned how to talk shop. That turns out to be important when you're working with other developers, but it's also the thing that makes you feel like a developer.
3. Build things
In the first year of learning web development, I built:
- A Digg Clone (from a Sitepoint book on Rails, I believe it's out of date now though)
- An E-Commerce App (from Agile Web Development with Rails 4)
- A GeekSquad-esque App (personal project)
- A Realtime, Online Classroom (personal project)
- A Foreign Language Flashcard App (class project)
I think building real projects is important for many reasons, but the most important one to me is because it's fun. That's something that is tragically lost in classical education, but I think it's important enough to be on this list. Look for resources that show you how to build things; http://ruby.railstutorial.org/ is a good one.
4. Be a cockroach
I secretly added a 4th item for those of you who've stuck around to read this far down the page.
Paul Graham once told the founders of Airbnb:
"You guys won't die, you're like cockroaches."
You'll probably want to quit learning how to code at some point. Like anything worthwhile, it's difficult and will make you feel stupid at times. This is why #1 on this list is so important — stop worrying so much about whether you're making progress or how much longer it will be until you feel like you've "made it." All you have to do is focus on showing up, for 10-30 hours a week. Be as mindless as a cockroach about everything else, and don't "die."
About the author: Roshan Choxi, Cofounder and CEO of Bloc, "The World's Largest Online Bootcamp"
This answer has been lightly edited for grammar and clarity.
If you have tips, advice, or preferred coding resources, tell us about them in the comments. How did you start out?