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
- Advanced Ruby and Rails
- Front end
- Expanding my horizons
- Games in Ruby
- Ruby blogs, podcasts, screencasts
- Rails codebases to study
- 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!
- Why did I chose Ruby? At first I went for full-stack JavaScript, but the JS ecosystem was confusing to me as a beginner. So I tried some others, and found Ruby to be the most enjoyable.
- 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.
- 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, whereas knowing what to read/study is not obvious at first. Hence the focus on books and courses here.
- 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 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 GoRails - HTML for Beginners
- If neither of those clicks with you, try resources under "Front end" below.
- The Odin Project - Foundations path or GoRails - HTML for Beginners
- 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 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 (object-oriented programming):
- 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.
- More ideas: Coding Challenges, Build your own X, Projectbook, Project-based learning
- 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:
- Contribute to open source projects. I've written a short guide on how to get started.
- Apply to The Agency of Learning.
- The job search:
Here are some places where you can learn with others or ask questions when you get stuck.
- Communities:
- Newsletters:
- 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.
- r/rails is worth trying too (examples: 1, 2).
- GoRails - SQL for Beginners
- SQL Teaching
- SQLBolt
- Select Star SQL
- SQL Murder Mystery
- 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
- Scaling PostgreSQL newsletter
- Postgres Playground
- Yeah, Postgres can do that
- π²High Performance PostgreSQL for Rails
- 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
- thoughtbot - Rebuilding Git in Ruby
- Pro Git
- π²Building Git
- Computer Networks from Scratch (WIP, and possibly abandoned because Ch. 5 has been "coming soon" for a year now)
- π²Web Security for Developers: Real Threats, Practical Defense and the accompanying site Hacksplaining
- MDN Web Doc on HTTP
- π²Computer Networking: A Top-Down Approach
- Jesse Storimer - Working with TCP Sockets
- Build a web server from scratch. Here are Ruby resources:
- Install and use Linux. My post on switching to Linux might give you some pointers.
- π²Unix: A History and a Memoir
- π²How Linux Works
- The Linux Command Line
- The Art of Command Line
- π²Efficient Linux at the 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
- Reference:
- 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
- Scripting:
- 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
- Concurrency:
- 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 via an example Roda app using Hotwire
- Hanami. Learn it with Hanami Mastery and example apps:
- Reference:
- Architecture:
- Performance:
- Background jobs:
- Deployment:
- Misc.:
- HTML:
- CSS:
- π²The Spicy Web - CSS Nouveau
- MDN - CSS
- cssreference.io
- CSS Selectors: A Visual Guide & Reference
- The Odin Project - Intermediate HTML and CSS
- The Odin Project - Advanced HTML and CSS
- CUBE CSS
- Every Layout
- Magic of CSS
- Under-Engineered Patterns
- Stephanie Eckles - Modern CSS Solutions
- Stephanie Eckles - SmolCSS
- CSS Naked Day
- π²Julia Evans - Hell Yes! CSS!
- Modern Font Stacks
- Type Is Design: Fix Your UI with Better Typography and CSS
- CSS games:
- JavaScript:
- Functional JavaScript:
- Web components:
- Rob Eisenberg - "Hello Web Components"
- Dave Rupert - HTML with Superpowers: The Guidebook or π²the course version
- MDN - Web Components
- The Modern JavaScript Tutorial - Web Components
- Web Components Today
- Build a UI following Jared White - How Ruby and Web Components Can Work Together
- SSR web components in Ruby with the upcoming Heartml (see this Spicy Web article for context)
- 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
- Growth.Design
- Roast My Landing Page blog
- 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
- π²User Interface Design: A Software Engineering Perspective
- Responsible Web Applications
- web.dev - Learn Accessibility (among their other courses)
- In Rails: Accessibility is a Requirement, Accessible by Default
- Community and news:
- Basics:
- What is the difference between Turbo and Stimulus, and what exactly is Hotwire?
- Hotwire.io (better than the official docs site)
- Write Software, Well - A Brief Introduction to Hotwire
- Write Software, Well - You Don't Need Rails to Start Using Hotwire
- Write Software, Well - Turbo Streams: How They Work and Differ From Turbo Frames
- 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
- Turbo Music Drive app demonstrating upcoming features of Turbo 8
- Turbo 8 in 8 minutes
- 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:
- Be a mentor:
- Career advancement:
- Computer science:
- π²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
- π²Data Structures and Algorithms in Java
- π²The Algorithm Design Manual plus lecture videos
- π²Operating Systems: Three Easy Pieces
- π²Computer Systems: A Programmer's Perspective
- Crafting Interpreters
- Coding challenges:
- Advent of Code
- Project Euler
- Gilded Rose kata: tests included or not, plus Sandi Metz's talk
- Exercises at cyber-dojo (or see the source code)
- Kata compiled by Emily Bache
- Kata at Coding Dojo
- Kata at CodeKata
- Kata by Luca Minudel: Refactoring legacy code driven by tests, Tensions and synergies between design principles, Objects relationships
- Awesome Katas
- A curated list of programming kata
- Design patterns:
- Monitoring:
- Documentation
- Divio Documentation System (a.k.a. Diataxis)
- Learn Crystal: Whenever you need to make an isolated bit of Ruby code run faster than Ruby can run, porting it to Crystal is easy because they're so similar.
- Crystal for Rubyists (doc page)
- Crystal for Rubyists (book)
- Crystal on Exercism
- Crystal Koans
- Learn how to offload CPU-intensive tasks from a Ruby app into Crystal. There are several approaches (1, 2, 3, 4).
- Learn functional programming:
- π²Data-Oriented Programming: Reduce software complexity
- Wikibooks - Haskell
- The Haskell Phrasebook
- π²Effective Haskell
- awesome-learning-haskell list with lots more books
- Obelisk is a web app framework in which the front end is written in Haskell too.
- IHP or Yesod are more traditional web app frameworks.
- Pandoc as an example project outside of web dev
- PureScript for functional programming on the front end.
There are several game libraries in Ruby, but I recommend π²DragonRuby Game Toolkit because it has the liveliest community. You may qualify for a free license (see "Free Unrestricted License" on the homepage), and the creators regularly give it away for free during game jams and other special occasions.
DragonRuby tutorials:
- Building Games with DragonRuby
- Let's make Tetris with DragonRuby Game Toolkit, Part 1 and Part 2
- Notes on DragonRuby Game Toolkit
DragonRuby community and reference:
Other Ruby game libraries: Ruby 2D, Gosu, MiniGL, Taylor.
- Blogs: There are lots more out there; these are just my favorites.
- "Let's build" screencasts: These are channels that have at least one series that uses Rails 7.
- Topical screencasts:
- Podcasts:
- Bike Shed
- Code and the Coding Coders who Code it
- Code with Jason
- Fullstack Ruby
- IndieRails
- Rails Changelog
- Remote Ruby
- Rooftop Ruby
- Rubber Duck Dev Show
- Ruby for All
- Ruby on Rails Podcast, especially starting at episode 372 went they went independent, brought on co-hosts, and hired an editor.
- Running in Production β Rails
- Tightly Coupled Book Club
- YAGNI
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/docusealco/docuseal (6k lines): Open source DocuSign alternative.
- 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/chicago-tool-library/circulate (17k lines): A lending library management system.
- github.com/rubyforgood/pet-rescue (19k lines): Connects adopters/fosters with pets.
- github.com/ifmeorg/ifme (21k lines): Mental health communication web app to share experiences with loved ones.
- github.com/feedbin/feedbin (25k lines): RSS reader.
- github.com/rubygems/rubygems.org (26k lines): Where Ruby gems are hosted.
- github.com/huginn/huginn (36k lines): Web task automation.
- github.com/AlchemyCMS/alchemy_cms (36k lines): CMS (Content Management System).
- github.com/rubyforgood/casa (37k lines): Volunteer management system for the nonprofit CASA.
- github.com/rubyforgood/human-essentials (39k lines): An inventory management system for essentials supply banks.
- github.com/SumOfUs/Champaign (39k lines): Digital campaigning platform. A Rails app generator.
Larger codebases: More than 50k lines of Ruby code.
- github.com/WikiEducationFoundation/WikiEduDashboard (50k lines): Wikipedia course dashboard system. Has a React front end.
- github.com/chatwoot/chatwoot (56k lines): Customer engagement suite. Has a Vue.js front end.
- 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/redmine/redmine (117k lines): Project management app.
- github.com/alphagov/whitehall (117k lines): Publishes government content on gov.uk.
- github.com/zammad/zammad (250k lines): Helpdesk/customer support system.
- 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/opf/openproject (368k lines): Project management software.
- 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.