Hi! As a second-career developer who didn't go through a bootcamp, I've found it helpful to keep a roadmap 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, keep reading!
- If you're wondering why I chose Ruby and not full-stack JavaScript, I explain why on my blog. Or if you want a second opinion, read this or watch this.
- 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 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 roadmap. 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: I've rebuilt it by now, but here is the first iteration, 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 or (for more interactivity) Try Ruby and BigBinary Academy
- 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: Sandi Metz's books π²Practical Object-Oriented Design: An Agile Primer Using Ruby (a.k.a. POODR) and π²99 Bottles of OOP
- Build a Ruby app: Apply those OOP lessons. I made a CLI (command-line interface) app that gives statistics on a reading log. Or if you want to make a game, see the Games in Ruby section.
- Build a site with Bridgetown: With Bridgetown you can build a site without yet getting into the complexity of Rails. Maybe rebuild your blog? Be sure to join the Bridgetown Discord serverβthe maintainers are very welcoming and helpful to newbies.
Only books and courses are listed below, but be sure to build stuff 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:
- GoRails - Rails for Beginners
- The Odin Project - Rails or (if you prefer videos) π²Michael Hartl's Ruby on Rails Tutorial
- Rails testing and RSpec:.
- Polishing up:
- Style guides for Ruby, Rails, and RSpec
Here are some places where you can learn with others or ask questions when you get stuck.
- Communities:
- 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.
- 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
- Ruby one-liners cookbook
- Ruby Regexp
- π²Text Processing with Ruby
- Tools for Ruby on the command line: ru, rb, pru, rexe
- Blogs:
- "Let's build" screencasts: My criteria for inclusion are (1) not too out of date, and (2) insightful for someone who has done a basic Rails course such as The Odin Project.
- Steve Polito - Rails Code Along β Rails 6, Heroku, Devise, Bootstrap
- Web-Crunch - Let's Build collection
- Web-Crunch - Job marketplace app
- Justin Searls - ChatGPT clone
- Dr. Nic - Notion clone
- CJ Avilla - Automate YouTube Video Production
- CJ Avilla - Stock App
- CJ Avilla - clearbnb
- CJ Avilla - CreatorPlatform.xyz
- Mix & Go - Instagram clone
- SupeRails - user feedback app
- TypeFast - Trello clone
- TypeFast - AirBnB clone
- TypeFast - Twitter clone
- Pet adoption app
- Topical screencasts:
- Podcasts:
- Ruby for All
- Sierra Rails
- Fullstack Ruby
- Remote Ruby
- Rooftop Ruby
- Code and the Coding Coders who Code it
- The Rubber Duck Dev Show
- Framework Friends about Rails and Laravel
- Ruby Rogues
- Ruby on Rails Podcast, especially starting at episode 372 went they went independent, brought on co-hosts, and hired an editor.
- Code with Jason
- Maintainable (not Ruby-specific)
- DevDiscuss (not Ruby-specific)
- The Bike Shed
- Running in Production β Rails
- MDN - Getting started with the web
- MDN - HTML
- MDN - CSS
- web.dev courses
- The Odin Project - Intermediate HTML and CSS
- The Odin Project - Advanced HTML and CSS
- Try CSS Naked Day on my personal site
- π²Julia Evans - Hell Yes! CSS!
- 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
- Victor Ponamariov - 50 UI Tips
- π²Victor Ponamariov - 100 UI/UX Tips & Tricks (or on the landing page)
- π²Refactoring UI
- Better Rails views:
- Phlex
- 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 (seems abandoned, though)
- Andrea Fomera - Learn Hotwire by Building a Forum
- David Colby - Hotwired ATS: Modern, full-stack Rails development
- 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:
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.
- 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
- Review criticisms of the Active Record pattern:
- Review criticisms of service objects:
- 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: awesome-katas and 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. Here's an example app: github.com/decafsucks/decafsucks. And another: github.com/bkuhlmann/hemo
- Lucky, a web framework for Crystalβ¦ which is not Ruby but it's close π Here's a handy starting point: Crystal for Rubyists. You can even use Crystal alongside a Ruby app, for background jobs: github.com/crimson-knight/fruit_juice.