Hi! As a second-career developer who didn't go through a bootcamp, I've found it helpful to keep a road map of learning resources—building my own curriculum, in a way. I hope this list helps you too!
If you notice any broken links here, please let me know by opening an issue.
The "not done" sections (currently "Fundamental tools" and below) are somewhat chaotic because I haven't yet seen what's worth keeping there.
- Preliminaries
- Basics
- Fundamental tools
- Ruby blogs, podcasts, screencasts
- Front end
- Rails codebases to study
- Advanced Ruby and Rails
- Games in Ruby
- Expanding my horizons
- Other resource lists
- If you want to keep it simple and use just one resource that can take you from zero to hireable, I suggest the free Odin Project. If you want more variety and more depth on certain topics, keep reading!
- If you're wondering why I chose Ruby and not full-stack JavaScript, I explain why on my blog. And here's a second opinion by the founder of a bootcamp that teaches Ruby.
- Make sure your day job is conducive to part-time studying if you're a working adult looking to switch careers. I used to be a teacher and spent hours grading in the evenings and on weekends, which would have made studying very difficult. So I switched to a remote customer support job to free up my schedule.
- Find a system for keeping organized notes, code snippets, and bookmarked links. I use a simple text file.
- You should spend more time coding than reading about coding. I mention this because below I list lots of books and courses but not many hands-on projects. Why? Because starting a project and getting into a coding routine is easy (if you can't think of any project ideas, try these lists: 1, 2, 3), whereas knowing what to read/study is not at all obvious at the beginning. Hence the focus on books and courses here.
- Last but not least, take care of yourself! Exercise and get plenty of sleep, and you'll better retain what you learn. If you develop wrist pain from heavy computer use, act swiftly: get an ergonomic keyboard (the one I use has a learning curve, but I love it and it was affordable), do daily wrist stretches, and try using a break app such as Workrave.
Without further ado, here is my learning road map. Resources marked with a dollar sign (💲) cost money. You may be able to find books for free (from your local library, interlibrary loan, or more dubious sources) but buy them if/when you can, to support the authors.
- Learn some HTML, CSS, and JavaScript:
- The Odin Project - Foundations path
- Or if that doesn't click with you, try resources under "Front end" below.
- Build a blog from scratch:
- Here's the first iteration of my blog, and here's how I built it. Building a blog is not only a good exercise in itself, but it might also give you extra motivation to write about what you learn.
- Basics:
- The Odin Project - Ruby
- GoRails - Ruby for Beginners if you prefer watching videos.
- Try Ruby and BigBinary Academy if you prefer an interactive approach.
- Guided practice:
- Exercism. Be sure to take notes each time you learn something new in an exercise, and at the end you could write up your reflections (here are mine).
- OOP:
- Build stuff with Ruby. Here are some ideas:
- A CLI (command-line interface) app. I made one that gives statistics on a reading log.
- A game. See the Games in Ruby section.
- A site using Bridgetown. Maybe rebuild your blog? Be sure to join the Bridgetown Discord server—the maintainers are very welcoming and helpful to newbies.
- Reference:
- Ruby API. Mentioning it up here because it's the best Ruby docs site but very little-known. Since its search uses a query param, you can add a search keyword to your browser to let you quickly search from the address bar, for example "rb partition" would take you to https://rubyapi.org/3.2/o/s?q=partition
Only books and courses are listed below, but be sure to build things as you learn. I myself started building a large-ish Rails app at first, but then I found it more helpful to build a series of small throwaway apps (1, 2, 3, 4).
- Rails basics:
- Testing:
- Polishing up:
- Style guides for Ruby, Rails, and RSpec
- Get real-world experience to put on your resume:
- Beginner Bounties
- Contribute to open source projects. I've written a short guide on how to get started.
- 💲Richard Schneeman - How to Open Source if you want to go further in open source.
- The job search:
Here are some places where you can learn with others or ask questions when you get stuck.
- Mentorship: I got mentorship about a year after starting with Rails, but you may benefit from it earlier.
- First Ruby Friend where aspiring and first-year developers are connected with a mentor.
- The Rails subreddit is another good place to find a mentor. It's not uncommon for someone to post asking if anyone is available to mentor, and these posts typically get quite a few replies from potential mentors.
- Communities:
- Subscribe to Ruby newsletters: You can learn a lot by listening in on what the Ruby community is talking about.
- SQL Teaching
- SQLBolt
- Select Star SQL
- Software Carpentry - Databases and SQL
- SQLZoo
- Next-Level Database Techniques for Developers
- 💲SQL Antipatterns, Volume 1
- Markus Winand - Use the Index, Luke!
- 💲Markus Winand - SQL Performance Explained
- Advanced Topics in SQL course from Stanford
- Postgres Playground
- Blog posts on Rails + Postgres: lots on Paweł Urbanek's blog, this one at Honeybadger, this one at Thoughtbot.
- 💲The Art of PostgreSQL
- 💲PostgreSQL Query Optimization: The Ultimate Guide to Building Efficient Queries
- Oh My Git!
- Oh Shit, Git!?!
- Git Katas
- The Git Parable
- Git Flight Rules
- Pro Git
- Thoughtbot - Rebuilding Git in Ruby
- 💲Building Git
- Computer Networks from Scratch (WIP)
- 💲Web Security for Developers: Real Threats, Practical Defense
- MDN Web Doc on HTTP
- 💲Computer Networking: A Top-Down Approach
- Jesse Storimer - Working with TCP Sockets
- Install and use Linux. My post on switching to Linux might give you some pointers.
- 💲How Linux Works
- The Linux Command Line
- The Art of Command Line
- "Linux CLI and shell scripting" list
- Julia Evans - Your Linux Toolbox
- 💲Julia Evans - Bite Size zine pack
- 💲Julia Evans - How Containers Work
- 💲Wicked Cool Shell Scripts
- Jesse Storimer - Working with Unix Processes
- Enhanced Shell Scripting with Ruby
- 💲Text Processing with Ruby
- Ruby Regexp
- Ruby one-liners cookbook
- Tools for Ruby on the command line: ru, rb, pru, rexe
- Blogs:
- Fullstack Ruby
- Code with Jason
- Saeloun Blog
- devanil.dev (Portuguese)
- "Let's build" screencasts: All of these use Rails 7.
- Topical screencasts:
- Podcasts:
- Ruby for All
- Fullstack Ruby
- Remote Ruby
- Rooftop Ruby
- Code and the Coding Coders who Code it
- The Rubber Duck Dev Show
- The Rails Changelog
- Ruby on Rails Podcast, especially starting at episode 372 went they went independent, brought on co-hosts, and hired an editor.
- The Tightly Coupled Book Club
- The Bike Shed
- IndieRails
- Running in Production – Rails
- Framework Friends about Rails and Laravel
- Code with Jason
- Maintainable (not Ruby-specific)
- DevDiscuss (not Ruby-specific)
- MDN - CSS
- cssreference.io
- The Odin Project - Intermediate HTML and CSS
- The Odin Project - Advanced HTML and CSS
- Stephanie Eckles - Modern CSS Solutions
- Stephanie Eckles - SmolCSS
- CSS Naked Day
- 💲Julia Evans - Hell Yes! CSS!
- Responsible Web Applications
- web.dev - Learn Accessibility (among their other coursesdev/learn/)
- MDN - JavaScript tutorials
- The Odin Project - JavaScript
- JavaScript for impatient programmers
- What the heck is the event loop anyway?
- The Modern JavaScript Tutorial
- JavaScript30 for practice
- Rob Eisenberg - "Hello Web Components"
- Dave Rupert - HTML with Superpowers: The Guidebook or 💲the course version
- Web components section in the Modern JavaScript Tutorial
- Web Components Today
- Lit docs
- Build some UIs with Shoelace, a web component UI library.
- Read the Shoelace source code
- 💲Fullstack Web Components: Complete Guide to Building UI Libraries with Web Components
- Build a UI following Jared White - How Ruby and Web Components Can Work Together
- Experiment using Turbo to drive front-end behavior: "Turbo 7.2.0 (currently in beta) allows you to define your own Stream actions which can be any JS code you want. By combining a custom Stream action or two with web components, you can essentially drive reactive frontend behavior from the backend stupidly easily. Loooove it! 😍 […] For a turnkey example, you could check out https://github.com/hopsoft/turbo_ready " —Jared White on The Spicy Web Discord
- 💲Don't Make Me Think
- 💲The Design of Everyday Things
- George Moller - UI tips
- Victor Ponamariov - 50 UI Tips
- Victor Ponamariov - How to design almost any UI element
- 💲Victor Ponamariov - 100 UI/UX Tips & Tricks (or on the landing page)
- 💲Victor Ponamariov - Re:Form
- 💲Master UI Design
- 💲Refactoring UI
- Community and news:
- Basics:
- Read the docs
- A Brief Introduction to Hotwire
- Evil Martians talk and blog post
- Alexandre Ruban - Turbo Rails Tutorial
- David Colby - Turbo Rails 101
- Hotwire Handbook, Part 1, Part 2, Part 3
- 30 days of Hotwire tips which turned into the book 💲Hotwire Cookbook
- Andrea Fomera - Learn Hotwire by Building a Forum
- David Colby - Hotwired ATS: Modern, full-stack Rails development
- Hotwire Cases
- Screencasts and blogs:
- Mix & Go screencasts on Hotwire
- SupeRails screencasts on Hotwire
- Rapid Ruby screencasts on Hotwire
- SupeRails blog which includes even more Hotwire tips.
- David Colby's blog
- Examples and snippets:
- Hotwire examples from Thoughtbot
- Better Stimulus
- Stimulus-Use
- Stimulus Components for inspiration
- Hotwire extensions:
- Multi-platform:
- Other similar libraries:
- HTMX: read the book Hypermedia Systems and/or watch Carson Gross — Return To Hypermedia: Solving Javascript Fatigue Using Fundamental Web Architecture
I've chosen the codebases below based on a these criteria:
- Is active, with recent commits.
- Does not use a JS framework on the front end, though I made exceptions.
- Is well-known or it solves a problem that's interesting to me.
If you want to explore more widely, here are other places to find open-source Ruby projects:
- OpenSourceRails
- Ruby projects on CodeTriage, though not all of them are Rails apps
- Real World Rails (and how to search through it)
- Awesome Ruby and Rails Open Source Apps
Small codebases: Less than 50k lines of Ruby code.
- github.com/SpinaCMS/Spina (5k lines): CMS (Content Management System).
- github.com/codetriage/codetriage (6k lines): Issue tracker for open-source projects.
- github.com/joemasilotti/railsdevs.com (12k lines): The reverse job board for Ruby on Rails developers.
- github.com/RailsEventStore/ecommerce (12k lines): Example app showing DDD (Domain-Driven Design), CQRS, and Event Sourcing.
- github.com/lobsters/lobsters (13k lines): Hacker News clone.
- github.com/thoughtbot/upcase (14k lines): Learning platform for developers.
- github.com/houndci/hound (14k lines): Automated code review for GitHub PRs.
- github.com/feedbin/feedbin (25k lines): RSS reader.
- github.com/rubygems/rubygems.org (26k lines): Where Ruby gems are hosted.
- github.com/AlchemyCMS/alchemy_cms (36k lines): CMS (Content Management System).
- github.com/SumOfUs/Champaign (39k lines): Digital campaigning platform. A Rails app generator.
Larger codebases: More than 50k lines of Ruby code.
- github.com/solidusio/solidus (72k lines): E-commerce platform.
- github.com/mastodon/mastodon (75k lines): Like Twitter but self-hosted and federated.
- github.com/openfoodfoundation/openfoodnetwork (102k lines): An online marketplace for local food.
- github.com/forem/forem (103k lines): Powers the blogging site dev.to. Uses Preact on the front end.
- github.com/alphagov/whitehall (117k lines): Publishes government content on gov.uk.
- github.com/decidim/decidim (288k lines): The participatory democracy framework.
- github.com/discourse/discourse (322k lines): Discussion forum platform. Has an Ember.js front end.
- github.com/instructure/canvas-lms (745k lines): A popular LMS (learning management system).
- gitlab.com/gitlab-org/gitlab (1.8 million lines): Like GitHub but with CI/CD and DevOps features built in. Has great docs on architecture.
- Better Rails views:
- Advanced Rails:
- 💲Noah Gibbs - Rebuilding Rails
- Rails Guides
- Ruby Science on design patterns in Rails
- Rails API docs
- Active Record:
- Advanced Ruby:
- Victor Shepelev (zverok) - The Ruby Reference (Ruby 2.7) plus Ruby Changes (for Ruby 3+). Ruby Evolution is also great.
- RuboCop performance rules
- RuboCop security rules
- 💲Metaprogramming Ruby
- 💲Joel Drapper - upcoming book on metaprogramming
- Jesse Storimer - Working with Ruby Threads
- 💲Ruby Under a Microscope
- Background jobs:
- Authentication:
- Rails deployment/DevOps:
- 💲Josef Strzibny - Deployment from Scratch
- 💲Deploying Rails Applications
- 💲Efficient Rails DevOps
- Cameron Dutro - RailsConf talk "Kuby: Active Deployment for Rails Apps"
- Guides to deploying Rails on AWS: 1, 2, 3
A.K.A. where the heck do I put my business logic / how can I keep my models from getting huge?
- DDD (Domain-Driven Design):
- Other approaches:
- (upcoming) 💲Peter Solnica - Data Oriented Web Development with Ruby
- 💲Ryan Bigg - Maintainable Rails
- Try contexts, inspired by Phoenix
- Learn about the repository pattern: article, talk
- Browse the relevant gems:
- dry-transaction
- Interactor
- Sequent - CQRS and event sourcing
- Rails Event Store - for an event-driven architecture
- Ventable - a variation of the Observer design pattern
- Wisper - the Publish-Subscribe design pattern
- Packwerk - to enforce boundaries and modularize Rails applications
- gems related to Packwerk
- Review criticisms of the Active Record pattern:
- Review criticisms of service objects:
The minimalist route is to build a text-based game in Ruby, or to contribute to a project like Magic: The Gathering: The Ruby Project, where you can implement Magic cards in Ruby.
If you want to make a graphical game, there are a few tools to choose from. The one with the most active community is 💲DragonRuby Game Toolkit. You may qualify for a free license (see "Free Unrestricted License" on the homepage), and the creators regularly give it away for free at game jams and other special occasions.
DragonRuby resources:
- Discord server
- Docs
- Brett Chalupa - Building Games with DragonRuby
- Brett Chalupa - DragonRuby Zines
- Let's make Tetris with DragonRuby Game Toolkit, Part 1 and Part 2
- DragonRuby Recipes
- Scale template
Other Ruby game libraries: Ruby 2D, Gosu, MiniGL, Taylor.
- How computers work:
- 💲Code: The Hidden Language of Computer Hardware and Software
- NandGame
- From Nand to Tetris course (Part 1, Part 2), optionally with the textbook 💲The Elements of Computing Systems: Building a Modern Computer from First Principles
- 💲Computer Systems: A Programmer's Perspective
- 💲Operating Systems: Three Easy Pieces
- Compilers:
- Coding challenges:
- CodeWars
- Advent of Code
- Project Euler
- Code katas: Gilded Rose, awesome-katas, another list
- Design patterns:
- Software architecture:
- Monitoring:
- Misc.
- Learn other app frameworks: Jobs in Ruby are mostly in Rails, but it's still valuable to broaden my horizons and learn different approaches.
- Roda in its batteries-included form via Bridgetown
- Hanami which will also be easier than ever to get started with once it hits 2.1. Example apps:
- Lucky, a web framework for Crystal… which is not Ruby but it's close 😉 Here are a few resources:
- Crystal for Rubyists
- Crystal Koans
- You can even use Crystal alongside a Ruby app, for background jobs: github.com/crimson-knight/fruit_juice