It's been exactly one year since I started studying part-time to get into software development, and I thought it would be useful to write out my curriculum. I am learning Ruby, Rails, and a healthy dose of computer science. I'm also putting this on GitHub where I will continue to update it, but below is my progress as of now.
OK, but why so many books and courses?? Isn't practice more important than reading? Yes, you should be spending more time coding than reading, but starting a project and getting into a coding routine is easy, whereas knowing what to read is not at all obvious at the beginning. Hence the larger space devoted to books and courses here. Besides the obvious reasons to undertake serious study (to learn from the masters, and to spice up my resume), I also simply enjoy knowing how things work under the hood.
- If you've never written a line of code in your life, you may want to start with the free Learn to Program. I studied some computer science in high school, so I had a bit of a head start.
- If you are a working adult, make sure your day job is conducive to part-time studying. Last year I was a first-year schoolteacher. That meant hours of grading in the evenings and on weekends, which would have made studying impossible. For this and other reasons I switched to a remote tech support job, which freed up my evenings and weekends (and early mornings, with no commute).
- Find a system for keeping organized notes, code snippets, and articles/videos saved for later. I use a simple text file (similar to this), which is more effortless than any knowledge base app that I've tried.
- It's worth dipping into the Ruby and wider programming communities. Here are my favorites:
- Last but not least, take care of yourself! Studying (especially while working) can easily be overdone. Exercise and get plenty of sleep. If you develop wrist pain from computer use, act swiftly: get an ergonomic mouse and keyboard, do daily RSI stretches, and start using a break app such as Workrave.
So without further ado, here are my recommendations from what I studied. Resources that are free of charge are marked with a star (⭐). If you need more free resources, see the links to other lists at the bottom. You may be able to find the books for free (from your local library or more dubious sources) but be sure to buy them when you can, to support the authors. 🙂
- [x] Build a blog from scratch: Here it is, and here's how I built it. I am also posting daily discoveries on Twitter, where—confession—I sometimes talk to myself.
- [x] Basics: The Well-Grounded Rubyist or ⭐The Odin Project.
- [x] Guided practice: ⭐Exercism, then ⭐CodeWars if you want more. Be sure to take notes each time you learn something new in an exercise, and write up a reflection at the end.
- [x] OOP: Practical Object-Oriented Design: An Agile Primer Using Ruby (a.k.a. POODR), then 99 Bottles of OOP. More than any other books, these are worth the price tag.
- [x] Ruby app: Apply those OOP lessons. I made a CLI (command-line interface) app that gives statistics on a reading log. Along the way I also published a Ruby gem, though in the end I abandoned it because I realized it did more harm than good. All part of the learning process…
- [x] Design patterns: Head First Design Patterns. Also ⭐Refactoring.Guru for a catalog of code smells, refactoring recipes, and design patterns.
- [ ] Bridgetown apps: I'm remaking my blog on ⭐Bridgetown (an updated Jekyll), then I'll use Bridgetown to make a couple of static web apps.
- [ ] Rails:
- [ ] Rails app: And use ⭐StimulusReflex to build a reactive frontend.
- [ ] Deployment: Deployment from Scratch and Deploying Rails Applications.
- [ ] Open source contributions: ⭐First Timers Only is a good place to start.
- [ ] Polishing up—books:
- [ ] Polishing up—screencasts and courses:
- [ ] ⭐Polishing up—podcasts:
- [x] Computers 101: Code: The Hidden Language of Computer Hardware and Software
- [x] Algorithms I: Data Structures and Algorithms in Java
- [x] Usability: Don't Make Me Think and The Design of Everyday Things
- [x] Operating Systems: Operating Systems: Three Easy Pieces
- [x] Networks: Computer Networking: A Top-Down Approach
- [ ] Computer Architecture: The Elements of Computing Systems: Building a Modern Computer from First Principles (plus the site and free accompanying course: part 1, part 2).
- [ ] Software Architecture: Designing Data-Intensive Applications
- [ ] Databases: ⭐Readings in Database Systems
- [ ] Compilers: ⭐Crafting Interpreters
- [ ] Math: Concrete Mathematics: A Foundation for Computer Science. The math review that I'm doing leading up to this is proving to be a journey in itself, to be outlined in a future post.
- [ ] Algorithms II: The Algorithm Design Manual
- [ ] ??: ⭐Structure and Interpretation of Computer Programs (and video lectures). I have often seen this recommended, but its exact subject matter (and whether reading it amounts to anything more than a badge of honor) so far eludes me. Which, I'm sure some would retort, only shows how small my mind still is at this point.