Learning to Code

A couple years ago, I left my job as a Program Manager with no clear goal for the future. Eventually, I decided to learn more about a domain I’ve been circling for my entire career, software development.

What follows is an overview of some of the resources I found most helpful in learning to code. It is not exhaustive and everyone’s journey will be different. If you’re reading this with the intention of learning to code yourself, consider my observations as just one of many as you find your own path.

Automate the Boring Stuff with Python

Book Cover

Automate the Boring Stuff with Python by Al Sweigart was my, ‘will I actually enjoy this?’ test case. Which I’m really happy to have found and I think serves that purpose really well. It also certainly doesn’t hurt that the book is free to read online and the author often gives out free codes for the video course on Reddit (although I can only vouch for the written work).

The book is very beginner friendly and walks you through setting up a development environment, the basics of syntax, and then spends the majority of the time working on actual projects that might help you in your life or work. Al does a great job of giving a broad enough set of projects that I think pretty much anyone who uses a computer would find something of interest.

CS50

Harvard’s CS50 is highly recommended across forums like r/learnprogramming, for a good reason. This course, free on YouTube, helps fill a lot of gaps that many resources that ‘teach you to be a programmer’ omit. While it doesn’t go super deep on any one area, it covers a decent breadth of topics to help build a foundation. I also liked being able to watch these lectures as a sort of ‘active cooldown’ for my brain after working on coding projects during the day.

Diversion: Advent of Code

Advent of Code

My learning journey happened to line up with the end of the year such that by the time December rolled around, I was getting enough Python experience to be dangerous. The Advent of Code gave me my first experience solving problems from scratch.

Advent of Code is a daily challenge leading up to Christmas with two coding challenges each day. There’s always a silly story to go along with it and you can use any language you like or want to learn. It’s nice to take a break from the ‘serious’ work of learning programming to just play with some puzzles.

That’s not to say the puzzles are purely trivial, I’ve learned a lot by trying (and sometimes failing) to solve these. AoC was also the first time I had to learn to actually worry about memory and performance (see the infamous ‘lanternfish’ problem)

All previous years’ puzzles remain online so you can dip in regardless of the time of year.

The Odin Project

The Odin Project Logo

Okay, this is the big one.

The Odin Project is an open source, self-paced learning cirriculum for web development. There are two paths, Ruby on Rails and Javascript. At the time I started, the Rails path was more fully fleshed out according to reviews so that’s the path I took.

Since then however, I’ve read that the JS path is just as robust and given the current web development market may be the better choice for someone just starting out. (But, you would miss out on the joy of programming in Ruby.) Fortunately for those of us who do choose the Ruby path, a good deal of JS is involved because browsers exist.

One of the great things about The Odin Project is how much it relies on the work of others, whether that’s sending you to the docs, blog posts, videos, and books. I think it’s a real value that TOP doesn’t try to reinvent the wheel in an effort to keep you in a walled-garden of tutorial hell. I’m grateful that throughout my learning process with TOP, I had to learn to ‘read the damned docs’.

Diversion: Learning Slow

A lot of the programs out there to take someone from no-knowledge to job are about getting to that end point as quickly as possible. I was fortunate enough to be able to take my time on my learning journey and it would be my suggestion to others going down the same path (assuming of course that’s an option.) I think taking time to do things which in no way related to or added to my programming knowledge have been an important part of making it all stick. (There’s plenty of evidence around the advantages of learning slowly)

For me, my time learning and loving programming brought me to other passions as well. I saw my first ballet (I’m now a subscriber to the SF Ballet) & opera (not for me) and saw all manner of live music & theatre across the city. I spent more time with friends, got back into reading for pleasure, figured out 3D printing… I could go on. The point is, I think especially for those of us for whom learning to become a programmer is enmeshed with finding a better, more enjoyable life, take the time to make sure once you’re in that better, more enjoyable job you have a life to match.

99 Bottles of Object Oriented Code

99 Bottles of OOP book cover

Sandi Metz’s amazing work is recommended multiple times throughout The Odin Project cirriculum and elsewhere. I specifically can recommend 99 Bottles of OOP. This is a quick and easy read once you’ve gotten the basics of your language of choice down (the book is available in Ruby, JS, and other flavors). For me, this is what finally made classes and objects click. The example case of 99 bottles of beer (or milk) may seem silly but is a great metaphor to explain OOP.

Sidebar: Look up Sandi on Youtube, her talks are great.

Ruby on Rails Tutorial

Ruby on Rails Tutorial book cover

The Odin Project fully covers Ruby on Rails but I found myself struggling by the time I got to the final project. Given TOPs ethos of owning your own learning, I sought out something else and landed with Ruby on Rails Tutorial by Michael Hartl.

For whatever reason, this book more closely aligned with my brain when it came to Rails and I would easily recommend it to anyone else who is either learning Rails from scratch or who needs to fill some holes in their knowledge.

Conclusion

There are tons of additional resources I’ve relied on over the years and I’m sure even more to come. But, so far these have been the ones to really stand out. I’m nowhere near the finish line and I’m not sure that I ever will be, for me that’s part of the fun of this whole endeavor.