A person reading a bunch of books

What books on Ruby should I read when trying to move from Junior to Intermediate Developer?

Want to avoid going through lots of frustration when self-learning Ruby or any other programming skills? In this post, I'm going to share a few tools for your self-learning technical practice toolkit and get the most out of your continuous technical practice.

Some weeks ago, one of our community members asked us the following question:

“What books on Ruby would you recommend when trying to move from Junior to Intermediate Developer? I can understand basic Ruby and intermediate Rails code well. I get lost when looking up code in the gems… I feel like they are a bit more advanced. Instead of looking for scattered content across the internet, it’d be nice to go through a Ruby book to have a more solid understanding of things!”

Depending on where you ask that question, you’ll most likely get an endless list of books to read. If you decide to pick one of the suggestions to read, then your next challenge is most likely going to be:

“I believe I mostly understand how this thing works but I’m struggling to see a good use case for them”.

Basically… you understand what you read except you can’t see how to implement something like that effectively in a real-world example 🥲

That sucks. Want to avoid going through all of that? It’s time to add new tools to your self-learning technical practice toolkit.

In this post, I’m going to share a few tools for your self-learning technical practice toolkit and get the most out of your continuous technical practice.

Here is my answer to our member’s question “What books on Ruby should I read when trying to move from Junior to Intermediate Developer?”

First of all, focusing on Ruby and on following a structured learning program gives you a lot of advantages! This focused objective helps you with figuring out how to build upon your current skills. When you get stuck, you can single down on what you’re trying to do, and this is way more effective than trying to solve a big thing or a bunch of things at a time. I wish I had this perspective when I was going from Jr. to intermediate. I ended up learning by trial, error, and lots of frustration :P

Second, looking up code in a gem is advanced. Reading code is a skill itself. Gems are written in pure Ruby, and there’s a lot of metaprogramming, abstraction, etc. It’s great to do a deep dive and see what you can get from it but go with realistic expectations. It can be a fun exercise to add a debugger and run the tests to get started by looking up the code in a gem (see my recommendations at the end for a talk on how to get started).

Pay attention to how experienced developers read code

Another thing about reading code: it’s one of the things that separates people with lots of experience from novices. Novices tend to read a class from top to bottom. But experienced programmers can navigate between the files differently. Is there someone you can ask to show you how they read code? You’ll see they look at different places.

Pay attention to what type of things they pay attention to. The more experienced you get, the less you remember why you do things the way you do. You just know it… so when you get to pair with them, ask how and why they do what they do, at the moment they are deciding. This helps you see how your brains pick up relevant information differently (they will probably get annoyed with the questions, so let them know ahead of time that you’re doing some research, or something :p).

Self-evaluate your technical practice efforts and results

Another important thing is to do a self-evaluation often. When you finish one thing, spend some time evaluating your skills objectively.

When you reach the point of “I am super stuck, I suck!” there’s a lot of information for you to take action. You are probably trying to rush something, or missing a crucial step. Learning what you don’t know yet is not bad, it’s information! Ask yourself: What is still hard for you to do? What I am missing here?

Asking open-ended questions that gets your brain picking up on clues is more actionable than announcing your defeat. And it’s a great way to identify your gaps, which is helpful to decide what to focus on next.

The talk I presented at RubyConf 2021 entitled Perceptual Learning == More Ruby Experts? gives you more details on the importance of:

  • be exposed to a bunch of examples, from easy to complex use cases
  • breaking your practice into small steps and measuring your performance as you go
  • being intentional with your practice (deliberate practice) is how to avoid the trap of practicing, practicing, and practicing.

How I moved from junior to intermediate Ruby developer

Now, finally to my recommendations!

One of the things I am mindful of is sharing my experience instead of giving advice. Here are the resources that helped me:

  • RubyTapas (currently GracefulDev) helped me a lot with Ruby! I had fun following the lessons there and adding more stuff on my own. I went from writing Ruby methods to writing PORO apps with confidence.
  • Anything from Sandi Metz! Including her conference talks. My favorites are “Polly wants a message” and “Get a Whiff of This”.
  • “Implicit to Explicit: Decoding Ruby’s Magical Syntax” talk. It’s a great resource when looking up code in a gem. This talk inspired our pry guide, by the way!

To wrap up, I want to share the most important tools to add to your self-learning technical practice toolkit are:

  • have fun
  • celebrate tiny wins!

That’s what will keep you going in the long term. I wish you all the best!

If this post helps you improve your continuous technical practice, I’d love to know. Remember to bookmark it for the next time you’re practicing a new technical skill. Enjoy!