First things first. The why. I’ve got started with coding in March 2015 and Rails in September 2015 to be able to code this app: faskyn. Prior to that I didn’t really know what coding is about. I’ve got a strong math background and used some ANSYS, Mathcad and Excel though, none of those has anything to do with web development. So I had to pick up not only the Rails but the front-end, browser, http, server, rack, command line, git, etc. things and also figure out how the business logic fits in. More than half a year passed and now the app is in a pretty good shape. At the moment with my friend we are trying to get some users, but that’s another story.
Why Rails? Based on the type of the app it was clear it would be a web app, so I needed a web framework with which I could quickly implement it. As of 2015 there were basically two reasonable choices: RoR and Node.js. I decided to go with Rails since it’s faster to get shit done, easier to pick up for newbies and there are a ton of resources available. There was/is a huge hype around Node.js but fortunately I have not fallen prey to it.
Full stack: RoR (Ruby 2.2.3, Rails 4.2.4), Heroku + addons, PostgreSQL, Puma, AWS(S3 and CloudFront), SASS, jQuery, Bootstrap, AJAX, RSpec+Capybara, Middleman. There is nothing fancy about the stack. Since I decided to stick with Heroku (works great, awesome documentation and deals with DevOps stuff almost with no config) Postgres and Puma were default choices. As I was a total beginner I preferred the convention and the well documented solutions.
Gotchas along the way
Most of the resources online are for total beginners. You can also find plenty for seasoned coders, but there are only a few of them that sit in the middle of the spectrum. Thanks to this it’s crucial to find the right order of reading or watching them.
As I was learning I realized that most of the concepts are easy to pick up when are isolated, but can be pretty hard to understand them in complex context. When you have to mix 4–5 things together it’s hard to connect all the dots. That’s one of the problem with almost all the resources. They try to explain all the features and answer the questions as if they were isolated. If you are experienced this is not a problem you can quickly figure it out. But for a beginner this is not ideal at all. That’s why I like to watch end-to-end feature implementation videos in practice. Even better if I can find more resources that differ a bit, so I can compare them to each other and see why and how changing the small parts affect the whole structure. This is how people learn after all. Trying different approaches and after failing a few times, finding the way that’s working. So, awesome Ruby and amazing Rails teachers out there, please make videos/articles a bit longer and show us the implementations from 2–3 different angles.
Thanks to various reasons (mainly to the quality of the resources) I found some parts easier and other ones harder to learn:
easier to pick up: HTML, relational database, SQL queries, controllers +routing, background + cron jobs, basic Ruby, server-side rendering, bootstrap, jQuery, git
harder to pick up: HTTP, client-side rendering, CSS, naming things, advanced Ruby, googling at advanced level (most important skill btw.), configuration of different tools, design principles/patterns in practice
Resources (what you are reading this for)
Hard to choose best resources. As I mentioned it’s way more important to find the right order. The list below contains the videos/books/courses I consider high quality stuff. I wish I had this list back when I got started and I hope it will serve you well. (I have tried other resources as well, but as I didn’t like them I don’t include them in this list.)
- Codecademy, Learn To Program, Javascirpt & jQuery, Stackoverflow, Google. These are awesome resources if you know nothing about coding and you can go through them pretty quickly. On Codecademy I recommend doing everything that is connected to HTML, CSS, JS, Ruby, RoR and SQL. From day 1 when you are stuck you should go to Google and Stackoverflow. Utilizing these tools properly will make you way faster.
- Rails Guides, RailsCasts, GoRails, The Well Grounded Rubyist (for improving you ruby skills). So when you get stuck (gonna happen a few times) it’s sure there is an answer on the web somewhere. But this doesn’t mean you will find it. At least I didn’t. So in retrospect the most crucial skill is to find the name of your problem or at least be able to describe it. In the first point I mentioned Stackoverflow and Google. Those are still your best friends but on the top of those here are some extra ones which are only useful if you are familiar with the basic stuff. RailsGuides is somehow underrated by newbies. I remember I’ve been looking for some answers for days and it was clearly explained in the RailsGuides just I somehow couldn’t find it. RailsCasts is a bit out of date, but if you check the videos you will get a basic idea about how to do something and then can easily find further resources on the topic. Since there are over 400 RailsCasts episodes so you are sure gonna find some screencasts on your desired feature. I already mentioned GoRails in the previous point for picking up the basics, and now you can search for certain feature implementations in the later episodes. It’s like RailsCasts but with the newest stacks/trends and it only costs $9/month. It’s also time to dive deep into Ruby. By this time you are already familiar with Rails and wrote a good amount of code. If you read The Well Grounded Rubyist you will start seeing how the building parts of Rails come together and also will realize that there have been way too many times when with a bit more advanced Ruby skills you could easily have tackled your obstacles.
- Rails Antipatterns, Growing Rails Applications, Everyday Rails Testing with RSpec, Rails 4 Test Prescriptions, Rest of the Railscasts (~420 overall) and GoRails episodes you haven’t watched yet (~120 overall), RailsConf videos, Refactoring articles and videos, Upcase: Weekly Iteration episodes (also ~120 overall), Upcase: Intermediate Ruby on Rails, Upcase: Test-Driven Rails. Keep up with reading and watching coding videos. The books/videos I mention in this point are not for newbies. Unless you have some real experience with web development or Rails, you should only go for them when you are through (or almost through) the ones in the previous points. With these resources you can learn how to write clean and maintainable code in Rails. You will also be able to pick up some OOP principles/patterns and architecture design. Rails Antipatterns is a super useful book about the mistakes almost all the people make when they jump on the Rails train. I assure you you will also find many of these in your existing codebase. I come back from time to time to this book to check out if I follow the conventions properly. Growing Rails offers solutions for organizing code down the road to keep it modular and maintainable from controllers to CSS. At this stage you also should get started with tests. There is an endless debate in the Rails community about what testing frameworks should be used. If you know nothing about testing and there is nobody around you who can help you out if you get stuck, then I definitely recommend RSpec over Minitest. There are a ton of great resources to learn it like the 2 books above which saved my life a few times. Testing is basically picking up a whole new framework and concept, so I wouldn’t do it right from the beginning otherwise you quickly will get overwhelmed. But keep in mind it’s inevitable for your production apps and your Rails career, so you got to pick up somewhere along the way. With watching the rest of the RailsCasts and GoRails videos you will have a broader understanding what Rails is capable of. RailsConf is held once a year where all the experts come together and talk about the best practices, the future of Rails and connected topics. All the videos are uploaded to youtube and there are some gems among them. Upcase is created by thoughtbot and they target guys who wanna make the quality of their code better. In the Weekly Iteration series you can find a bunch of independent videos about design principles and refactoring. The videos usually start with an existing codebase which will be refactored by the end of the episode to a more maintainable and modular code. With the Intermediate Ruby on Rails and Test Driven Rails paths you can get your hands dirty and make some small apps which are rather about implementing some features in the proper way than refactoring existing ones.
- Metaprogramming Ruby 2, Practical Object Oriented Design in Ruby, Ruby Science, The Complete Guide to Rails Performance, Objects on Rails, Rubytapas, Destroy All Software, Refactoring (ruby version), Design Patterns in Ruby, Eloquent Ruby, Rebuilding Rails. In the previous points I only mentioned resources I had already finished/been deep into them. In this point I’m listing some resources I’m pretty excited about, but haven’t started yet except the Practical Object Oriented Design in Ruby. The POODR book is one of the best books I’ve ever read. It clearly explains why you have to care about well designed code and what are the most basic steps to follow the rules in ruby apps. As you can see the rest of the books are also mostly Ruby related. At the end of the day Rails is just nicely organized Rack app written in Ruby and I hope with these I will be able to really deepen my Ruby and OOP knowledge and get to the next level.
- DHH, Yukihiro Matsumoto, Aaron Patterson, Yehuda Katz, Tobias Lutke, Jose Valim, Obie Fernandez, Avdi Grimm, Ryan Bates, Sandi Metz, Mike Perham, Gary Bernhardt, Nate Berkopec, Chris Oliver, Richard Schneeman, Jonas Nicklas, Joe Ferris. The bonus point. These guys are considered experts in Ruby or RoR and also have meaningful contents over the web you can learn from. The list is by no means exhaustive as I’m sure I accidentally left some great minds off the list. I would suggest searching for their contents. Some of their best stuff is already listed in this post, but there are a bunch of articles/blogs/youtube videos out there that will make you a better coder.
What should I have done differently?
There is only one particular thing that bugs me. I might should have found a coding mentor. I talked to a bunch of guys and showed my code to a few of them still I feel if there had been an experienced mentor, whom I could have talked to twice a week for an hour, my learning curve would have been way shorter.
This heavily depends on what you have to or want to do. For me it’s the following:
If you are a Rails developer it’s not rare that you have to do some front-end stuff. For a new project jQuery is perfectly enough, but once the codebase gets bigger it can easily get out of control therefore I started picking up react.js and it seems to be promising. I am not sure if I really need it in the near future, but I enjoy using it.
There are a few super important features that all the web apps share but I know less about like implementing analytics with Segment + Mixpanel + GA or payment processing with Stripe/Braintree. If you just need a basic setup then you will be able to integrate them quickly into your app, but these topics can get pretty tough if you need a more complex implementation.
With reading this you already have most of the best resources at your disposal. I highly recommend sticking with this or a similar order. If you don’t, you are gonna hit the wall way too often and you may give up. If you keep the order you still are gonna hit the wall quite often. If so, try to spend some time on figuring out the root cause. If you can’t, go back and check out all the resources on that topic one more time. If it’s still not enough, go back to the basics and start again.
That’s all for now, if you have any questions just shoot it.
*Update March 2017:
- Thanks to the proliferation of Rails courses on Udemy, it keeps getting more accessible to get started. I don’t know any of the beginner courses, but in general it is super easy to find some quality material on the site.
- I’ve also finished the resources under point 5 and they are awesome. Metaprogramming Ruby2 and Rebuilding Rails will deepen you Ruby knowledge and uncover most of the Rails magic. I wish I had read them earlier. POODR, Ruby Science, Refactoring and Design Patterns will immediately enhance your coding and design skills that can be applied in any languages.