Ruby and computer science: a self-learning curriculum
Hi! I'm a former teacher working my way into software development. I'm learning Ruby, Rails, and a healthy dose of computer science. If you have a favorite resource that's missing below, let me know by opening an issue!
Overview
- Objections
✅ - Preliminaries
✅ - Frontend basics
✅ - Ruby
✅ - Rails (~10% finished)
- Other essentials
- Ruby 'casts
- Meanwhile, computer science (~30% finished)
- Other programming/CS resource lists
Objections
Why Ruby?? Isn't JavaScript the obvious choice for web development? JavaScript is definitely more popular, but Ruby is a good choice for self-taught developers like me because (a) it's enjoyable to write, and (b) it's optimized for speed of development. Not convinced? Here's a piece that I wrote which goes into more detail and answers common objections to Ruby. Or if you want a second opinion, read this or watch this.
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 (if you can't think of any project ideas, just "build your own X"), whereas knowing what to read is not at all obvious at the beginning. Hence the larger space devoted to books and courses here. Also, by learning from more experienced developers, you'll actually save time because you can avoid lots of mistakes and dead ends without having to learn those lessons the hard way.
Preliminaries
- If you've never written a line of code in your life, you may want to start with the free tutorials at BigBinary Academy and/or Learn to Program (or buy the updated book version). 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. I used to be a teacher and spent hours 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 schedule.
- Find a system for keeping organized notes, code snippets, and articles/videos saved for later. I use a simple text file, which is more effortless than any knowledge base app that I've tried.
- 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 heavy computer use, act swiftly: get an ergonomic keyboard (the one I use is effective and affordable), 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 cost money are marked with
Frontend basics
- Subscribe to programming newsletters for inspiration. My favorites:
- Treehouse's
💲 Frontend Web Development track, or The Odin Project's Foundations + HTML and CSS + JavaScript - Build a blog from scratch: I have rebuilt it by now, but here is that first iteration, and here's how I built it. I am also posting some of my learnings on Twitter, where—confession—I sometimes talk to myself.
Ruby
- Community:
- Basics: There a few good options here.
- The Ruby Programming course on The Odin Project
- Ruby Is For Fun
💲 The Well-Grounded Rubyist (worth re-reading later, as it covers some advanced Ruby)
- 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 (here is mine).
- OOP:
💲 Practical Object-Oriented Design: An Agile Primer Using Ruby (a.k.a. POODR), then💲 99 Bottles of OOP. More than any other Ruby books, these are worth the price tag. - Build a 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…
- Design patterns:
💲 Head First Design Patterns. Also Refactoring.Guru for a catalog of code smells, refactoring recipes, and design patterns. - Build a site with Bridgetown: I remade my blog with Bridgetown (an updated Jekyll), and built a Ruby component for a reading list. Be sure to join their Discord server—the maintainers are very welcoming and helpful to newbies.
Rails
Only courses are listed below, but be sure to build stuff as you learn. Here's how I started building my first Rails app right from the beginning. Another invaluable form of practice is to start contributing to open source.
- Community:
- Slack
- StimulusReflex on Discord: you don't need to wait until you start using StimulusReflex to join, because these folks are very helpful to beginners struggling with Rails frontend issues in general.
- Join a Ruby meetup.
- Basics:
- GoRails - Rails for Beginners is amazing for getting started quickly.
-
💲 Ruby on Rails Tutorial will teach you Rails testing, good Git habits, and how to build an authentication (user login) system from scratch. - Rails Guides
- For a review of everything so far: Full Stack Ruby on Rails at The Odin Project or (if you prefer videos) App Academy Open.
- Testing: Minitest is familiar at this point. Now it's time to learn RSpec and Rails-specific testing techniques.
- Intermediate:
- Thoughtbot - Ruby Science (design patterns)
- Upcase, especially Advanced ActiveRecord Querying
- Rails Authentication from Scratch
-
💲 Agile Web Development with Rails 7 -
💲 The Rails 6 Way
- Architecture:
- Code-alongs:
- Rails Code Along
- Web-Crunch - Let's Build
- CJ Avilla - clearbnb
- CJ Avilla - Stock App
- SupeRails Code Along
-
💲 Ruby on Rails 6: Learn 25+ gems and build a Startup MVP- By the way, you can get any Udemy course for less than $20 if you use a discount code, which you can get either by signing up for their email updates, or by leaving a course in your cart for a few days.
- Rails internals:
- Codebases to study: These are Rails projects that I've seen mentioned more than once as good examples to learn from. For lots more open-source Rails projects, see OpenSourceRails and Awesome Ruby and Rails Open Source Apps.
- Hotwire:
- StimulusReflex:
- Advanced Ruby:
- Performance:
- Deployment:
Other essentials
- Open source:
- Contribute to open source projects. I've written a short guide on how to get started with this.
-
💲 How to Open Source
- Git: Introduction to Git and GitHub (and here's another good one by the same name), then Pro Git. Lots more resources are listed here.
- Linux: The Linux Command Line
- HTTP: MDN Web Doc on HTTP. See also "Networks" under the computer science section.
- Security:
💲 Web Security for Developers: Real Threats, Practical Defense - Learn another Ruby app framework: Probably Roda given its increasing connection with Bridgetown, but I should also learn how Hanami works. Jobs in Ruby are mostly in Rails, but it's still valuable to broaden my horizons and learn different approaches.
- Intro to professional experience:
- Join Year One.
- Get involved in Product Hunt.
- Do a few contract jobs on Upwork or Freelancer.
- The arcane arts of getting hired:
Ruby blogs and 'casts
- Blogs:
- Screencasts: Checking one of these off means "I've watched all the episodes that interest me from the past three years or so, and I'm keeping an eye out for new episodes that would help me, or old unwatched episodes when they become relevant to me."
- Podcasts:
Meanwhile, computer science
- How computers work:
-
💲 Code: The Hidden Language of Computer Hardware and Software - for hands-on learning: From Nand to Tetris course (Part 1, Part 2) along with the textbook
💲 The Elements of Computing Systems: Building a Modern Computer from First Principles - going deeper:
💲 Computer Systems: A Programmer's Perspective
-
- Algorithms:
-
💲 Data Structures and Algorithms in Java - for reinforcement: Algorithms course by Sedgewick & Wayne (Part 1, Part 2) along with the textbook
💲 Algorithms - going deeper:
💲 The Algorithm Design Manual (Skiena) - and deeper again:
💲 Algorithm Design (Kleinberg & Tardos) - for practice: Project Euler
-
- Usability and UI:
- Operating systems:
💲 Operating Systems: Three Easy Pieces - Networks:
-
💲 Computer Networking: A Top-Down Approach - for reinforcement: read it again!
- for a fun review: How DNS Works
-
- Software architecture:
💲 Designing Data-Intensive Applications - Databases:
- 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, which I will outline separately in the future. - ??: Structure and Interpretation of Computer Programs (and video lectures). I'm still not sure what exactly this book is about (even after reading the first few pages) but it is an often-recommended introductory text on "programming". So, maybe someday I will learn this "programming", after I've learned the less intimidating stuff (all of the above).