I think most advice about learning programming is terrible.
This applies both to beginning programmers and folks further along, trying to learn their next language or pick up the hot new framework.
It seems like most programmers end up learning things despite their bad study habits, instead of being conscious about how we go about learning things.
I'm embarking on a grand learning journey to learn Python, master Node, and get good at algorithms. I will be doing this full-time for the next few months. I will be writing about this journey publicly, and along the way, I'm going to be sharing some thoughts on how I'm going about this.
I've done this before. I learned front-end development and landed my first tech job within 7 months. I also had a pretty popular blog about productivity and self-development from my high school days. I taught myself calculus, combinatorics, and marketing. Learning about learning back in my teens has made my tech career move faster than I expected. I firmly believe the ability to learn quickly is the most important meta skill that I have.
This series is for everyone. Whether you've never programmed before or you're trying to learn a new language 10 years in, there's always room for improvement. The faster we learn, the faster we can write the code we want to write.
The expected format is to sprinkle in little nuggets in my actual learning updates, and occasionally collate those into organized posts like this one.
In order to actually learn something, we need to figure out what we're actually trying to learn.
Sounds simple, right?
I said above that my grand study plan is to "learn Python, master Node, and get good at algorithms." How do I actually go about that?
There's a few different things we need to define:
1) What is our success point? (ie. App to build, course to finish)
2) What's our timeline? (ie. 6 weeks, 6 months)
3) What is the daily (or weekly) process for getting there? (ie. Work on this one hour a day, work on this all day on Saturday)
4) What tools are we using? (ie. Books, courses, etc.)
Let's answer that for each one of my goals.
1) My success point is making a Django REST application.
2) I plan to at least be making the application in 6 weeks.
3) My process is to work on going through my Python book for a timeblock of 3-4 hours a day, 6 days a week.
4) I'm using Python Crash Course, 2nd Ed.. If I don't like that, I'll pick up a Treehouse subscription.
1) My success point is finishing the Andrew Mead course on Node and building my side project, favorite.actor.
2) I plan to be 100% done with the course and have at least an MVP version of the side project built in 2 months.
3) My process is to work on the course first, then work on the project, for a timeblock of 3-4 hours a day, 6 days a week.
4) The tools are part of the goal.
1) I want to finish at least one random Leetcode algorithm question a day.
2) There is no clear end to this, but I want to do at least 5 a week.
3) My process is to spend an hour on this every day, supplementing with courses with any extra time.
4) The tools include Leetcode, Algorithms I from Princeton, The Algorithm Design Manual, and Colt Steele's algorithms course.
I have some other goals along the way (mostly projects I want to build), but this is a good overview of my plans for now.
We can only start to study efficiently if we have an actual plan in place for how we want to study. There's a lot of study hacks out there, but they don't matter unless you have a fundamental goal in place.
There's loads to break down here -- How do you decide on the timeline? How do you choose resources? What's a good success point? What's a good learning routine?
I want to go into each of these topics in detail, so I'll save them for other posts in this series. For now, the most universal answer is just to ask and read around. Ask other people how they learned things. Read posts about how people learned things. That'll help point you in the right direction to start.
I'm not sure about my writing schedule for this series, but I will be writing about my actual progress in a weekly series. When I get time in-between, I'll keep going with the actual study habits.
Thanks for reading!
This series of posts document a high-level process to use when planning a modern web application, from project organization, collaboration considerations and tooling choices during development, all the way through deployment and performance strategies.