Hi! As a second-career developer who didn't go through a bootcamp, I've found it helpful to keep notes on learning resources—building my own curriculum, in a way. If you have a favorite resource that's missing below, let me know by opening an issue!
- Preliminaries ✅
- Frontend basics ✅
- Ruby ✅
- Rails basics ✅
- Rails codebases to study
- Ruby blogs, podcasts, screencasts
- Rails architecture
- Miscellaneous essentials
- Advanced Ruby and Rails
- Performance optimization
- Hotwire and StimulusReflex
- JavaScript
- Meanwhile, computer science (progress: ~30%)
- Other programming and CS resource lists
- If you've never written a line of code in your life, you may want to start with these tutorials, all free:
- Try Ruby
- BigBinary Academy, and/or
- Learn to Program (or buy the updated book version)
- If you're wondering why I chose Ruby and not full-stack JS, I explain why on my blog. Or if you want a second opinion, read this or watch this.
- I list a lot of books and courses below, and hardly any hands-on projects. To be clear, you should be spending more time coding than reading about coding. 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" or try Project Based Learning or Projectbook), whereas knowing what to read is not at all obvious at the beginning. Hence the focus on books and courses here.
- If you are a working adult looking to transition into software development, 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 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 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 try using a break app such as Workrave.
So without further ado, here is my learning path.
Key:
- 💲 = costs money. 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, interlibrary loan, or more dubious sources) but buy them if/when you can, to support the authors!
- ⭐ = absolute favorite. If you mainly learn by doing and/or googling and you want only a handful of books/courses, these are the ones I'd most recommend.
- Learn some HTML, CSS, and JavaScript: Here are good starting points:
- Foundations path at The Odin Project
- Getting started with the web at MDN (plus their HTML + CSS + JS tutorials)
- web.dev courses, especially HTML and CSS
- Any of the plethora of other tutorials out there
- 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.
- Subscribe to Ruby newsletters: You can learn a lot by listening in on what the Ruby community is talking about.
- Basics: There a few good options here:
- Guided practice: ⭐Exercism, then CodeWars if you want more. 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.
- 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 the Bridgetown Discord server—the maintainers are very welcoming and helpful to newbies.
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.
- Where to ask for help: Here are some places where you can ask questions when you get stuck. Stick around and you might find opportunities to help others too.
- Ruby on Rails Link community on Slack
- StimulusReflex community 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.
- GoRails community on Discord
- Rails from scratch:
- ⭐GoRails - Rails for Beginners
- The Odin Project - Rails or (if you prefer videos) Michael Hartl's 💲Ruby on Rails Tutorial
- Testing: Minitest is familiar at this point. Now it's time to learn RSpec and Rails-specific testing techniques.
- Upcase - Fundamentals of TDD and Test Doubles
- Jason Swett - 💲The Complete Guide to Rails Testing
- ⭐💲Effective Testing with RSpec 3
- Polishing up:
- Style guides for Ruby, Rails, and RSpec
- SQL:
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 Real World Rails (and how to search through it) and Awesome Ruby and Rails Open Source Apps.
- Small codebases: Less than 50k lines of Ruby code.
- github.com/codetriage/codetriage (6k lines): Issue tracker for open-source projects.
- 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/rubygems/rubygems.org (26k lines): Where Ruby gems are hosted.
- 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/forem/forem (103k lines): Powers the blogging site dev.to.
- github.com/alphagov/whitehall (117k lines): Publishes government content on gov.uk.
- github.com/discourse/discourse (322k lines): Discussion forum platform.
- 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.
Checking one of these off means "I've read/watched/listened to all the posts/episodes that interest me from the past few years, and I'm keeping an eye out for new posts/episodes that would help me, or old posts/episodes when they become relevant to me."
- Blogs:
- "Let's build" screencasts:
- Topical screencasts:
- Podcasts:
- Ruby for All
- Sierra Rails
- Fullstack Ruby
- Remote Ruby
- Code and the Coding Coders who Code it
- The Rubber Duck Dev Show
- 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
A.K.A. where the heck do I put my business logic / how can I keep my models from getting huge? Note that I've hardly dipped my toe into this area, so I can't yet say how useful any of these approaches are.
- DCI (Domain, Context, Interaction):
- 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:
- Review criticisms of the Active Record pattern:
- Review criticisms of service objects:
- Mentorship
- 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.
- Open source:
- Contribute to open source projects. I've written a short guide on how to get started.
- 💲Richard Schneeman - How to Open Source
- Git:
- Linux:
- HTTP:
- MDN Web Doc on HTTP. See also "Networks" under the computer science section.
- Security:
- Design patterns: They didn't revolutionize my coding, but they're worth knowing for those times when people refer to them in design discussions.
- Software architecture: see also the Rails architecture section
- Monitoring:
- Coding challenges:
- Advent of Code
- Code katas: awesome-katas and another list
- 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 which will soon be easier than ever to get started with via Bridgetown
- Hanami
- Lucky, a web framework for Crystal… which is not Ruby but it's close 😉
- The arcane arts of getting hired:
- How to find your first Rails job, notes from my own job search.
- 💲Get Your First Developer Job
- Attend some Ruby meetups, where you might find job leads.
- 💲The Tech Resume Inside Out
- I didn't read any of the popular books on interview prep because I wanted to avoid that type of algorithm/whiteboarding interview, which in any case is not very common in the Ruby world. But if you want to be ready for that: 💲Cracking the Coding Interview and/or 💲Elements of Programming Interviews
- Advanced Rails:
- 💲Noah Gibbs - Rebuilding Rails
- Rails Guides
- Ruby Science on design patterns in Rails
- Rails API docs
- Better Rails views:
- Advanced Ruby:
- Victor Shepelev (zverok) - The Ruby Reference (Ruby 2.7) and Ruby Changes (for Ruby 3+)
- 💲Metaprogramming Ruby
- 💲Ruby Under a Microscope
- Authentication:
- Steve Polito - Rails Authentication from Scratch and the derived Rails MVP Authentication
- Lázaro Nixon - Authentication Zero
- Rails deployment/DevOps:
- 💲Josef Strzibny - Deployment from Scratch
- 💲Deploying Rails Applications
- 💲Efficient Rails DevOps
- Guides to deploying Rails on AWS: 1, 2, 3
- Rails and Active Record:
- Advanced SQL:
- SQLZoo for practice and some new concepts
- Markus Winand - Use the Index, Luke!
- Markus Winand - SQL Performance Explained
- Advanced Topics in SQL course from Stanford
- PostgreSQL:
- Background jobs:
- Principles of optimization:
If you ever get stuck, the StimulusReflex community on Discord is an amazing resource, even for Hotwire.
- Hotwire:
- Read the docs
- Sign up for newsletters: Hotwire dev newsletter and Hotwiring Rails
- Evil Martians talk and blog post
- Alexandre Ruban - Turbo Rails Tutorial
- Mix & Go screencasts on Hotwire
- SupeRails screencasts on Hotwire
- SupeRails blog which includes even more Hotwire tips.
- David Colby's blog, starting with the post Turbo Rails 101
- Hotwire Handbook, Part 1
- Hotwire examples from Thoughtbot
- Andrea Fomera - Learn Hotwire by Building a Forum
- David Colby - Hotwired ATS: Modern, full-stack Rails development
- Stimulus-Use
- Better Stimulus
- Stimulus Components for inspiration
- Hotwire extensions:
- StimulusReflex:
- Read the docs
- Videos by Nate Hopkins, the StimulusReflex creator
- StimulusReflex lifecycle chart
- Julian Rubisch - Hotwire with StimulusReflex presentation, in case you're wondering how the two can fit together.
- Mix & Go screencasts on StimulusReflex
- 💲Ayush Newatia - The Rails and Hotwire Codex
- 💲Jason Charnes - Interactive Rails with StimulusReflex
- 💲Julian Rubisch - StimulusReflex Patterns
- CableReady:
Because try as you might, you can't avoid it. Note: there are so many JS books and courses out there. These are not necessarily the best, and I don't plan on going through all of them. I just picked a bunch that I saw recommended; eventually I'm going to look through them more carefully and shorten the list.
- Vanilla JS:
- Functional JS:
- React:
- The official React tutorial
- Beginner's Guide to React
- Learn React for free
- React course from FreeCodeCamp
- Full Stack Open
- useHooks
- React Hooks resources in an awesome-react list
- Tons of JS and React links to sift through
- 💲Road to React
- 💲React Front to Back
- Dave Ceddia's blog
- 💲React For The Rest of Us
- 💲Pure React
- React challenges at FreeCodeCamp for practice
- 💲React Tutorial and Projects if you want more practice
- React + Rails:
- Web components:
- Web components section in the Modern JavaScript Tutorial
- 💲Web Components course at Frontend Masters
- 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 frontend 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
- 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
- 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:
- Networks:
- Computer Networks from Scratch
- 💲Computer Networking: A Top-Down Approach
- for a fun review: Julia Evans - How DNS Works
- books by Jesse Storimer on network and system programming—with Ruby!
- Program design: different from software architecture in ways that I don't yet fully understand.
- How to Design Programs and courses based on it (here's one + extra content, and here's another)
- Design of Computer Programs
- Structure and Interpretation of Computer Programs (and video lectures). So far I've had trouble figuring out exactly what this book is about. It is an often-recommended introductory text on "programming", funnily enough.
- Databases:
- Compilers:
- 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.