I was about halfway through The Odin Project when I read this excellent post by Peter Hurford. It got me thinking about the number of hours I have invested in learning web development, and how I could get more time in.
I had been working through the Odin Project for about 6 months at this point. I wasn’t tracking my time, but my rough estimate was that I was spending on average an hour a day on programming. My time spent was probably more than that, but I didn’t think about it too much. An hour a day seemed like a reasonable amount of time to spend studying something. After all, I have a full time job, family responsibilities, a house to take care of, etc.
I started the Odin project at the beginning of July. If my rough hour per day estimate was true, by December I had put in 1 hour per day for 180 days. Peter estimates it took him 700 hours to learn enough web development to get a job. After six months, at 180 hours I was barely a third of the way there. At that rate, it would be another year before I finished!
Now there’s a lot of wiggle room here. It’s likely that I spent more than an hour a day. I don’t know because I didn’t track. And different people have different learning speeds, so 700 hours for Peter might not be enough time for me or someone else.
The point is, it got me thinking about how I could maximize my learning time and be job-ready sooner.
One big problem is that programming is hard! You can’t just memorize syntax and be good to go. Sometimes a single line of code can be extremely challenging to figure out.
I have been waking up early in the morning every day before work and getting in at least an hour. At this point in the day I can tackle challenging concepts and knotty problems and do ok. But then I drive to work, work for 8 hours, drive back home, fix dinner and take care of whatever needs to be done around the house, and by the time I sit back down my brain is mostly fried.
So the challenge is how to structure my learning time. I can meet different challenges at different times in the day. In order to maximize my learning time, I needed to have different things ready to do at the level my brain is ready for. Maybe an example will best explain what I mean.
In the morning when I’m fresh, I start work on whatever project I’m on. I try to make this my coding time.
At some point I stop studying, get ready for work and then drive. I have a pretty long commute, so I have made it a point to fill my tablet up with podcasts beforehand. Listening to podcasts on my commute gives me another hour of study time each work day. The challenge here is finding podcasts that are actually conducive to learning, but I have found a few so far:
- Learning Rails
- MIT CS 600 – this is video lectures, not podcasts, but it explains simple concepts well enough that I can grasp them without doing the coding exercises.
Then when I get home, I am tired. I might still try to take on the more challenging stuff. Maybe during the day I’ve figured out how to get something working. Maybe I’m still fresh enough to tackle the challenging problem I was working on in the morning. Or maybe not.
If I’m feeling tired and dumb at this point, I read. Usually this is reading ahead in the Odin Project or whatever tutorials. Sometimes it’s just reading tutorials and not doing the code examples. Or maybe I can just type in the code to build muscle memory.
Another tool is Anki. This is a flashcard program that syncs across all devices. While I’m studying, I fill out flashcards, and whenever I have 5 minutes of downtime I can pull out my phone or tablet and run through a deck of flashcards.
Finally comes videos. These are good for when I’m at home doing housework. There’s really no shortage of these and usually with a quick google search I find something that I’m interested in.
Structuring my day in this way has made it easier for me to get in 3 hours of learning time a day. That’s about 90 hours a month. At this rate, it would take someone 8 months to reach Peter’s 700 hours.