Over the last several months, I’ve had conversations with more than two dozen aspiring Ruby and Rails developers, both online and in person.
And when I ask them what they’d like to accomplish after they improve their web development skills, the responses are almost always a combination of these three goals…
- Start freelance-consulting while looking for a full-time Ruby and Rails position
- Getting a full-time Ruby and Rails developer position, either remotely or locally
- Building micro SaaS apps and niche sites that generate income in the long-term
They go on to tell me that it’s taking them more than 90 days to even learn Ruby and Rails basics. They find themselves reading books, taking courses, attending bootcamps…
…and completing countless tutorials, but they aren’t able to make significant progress towards their career goals as professional Ruby and Rails developers.
They feel as though they’ve cloned the same ecommerce and social network app a 1000 times, yet there’s no indication their technical skills are growing and they keep running around in a never-ending circle.
At first, I thought they weren’t aware of all the tried and tested systems for accomplishing all of their career goals faster, one after the other, systematically.
So I’d immediately jump into showing them how they could also use The Briefcase Technique and The Stairstep Approach to produce measurable results with their work, stand out from their peers and be the most helpful programmer to their team, consulting clients and/or employer.
But something strange happens at the end of every single conversation.
Once I finish explaining how they could also provide killer solutions to one or two clients and then leverage that experience into a full-time position or more lucrative projects, they’d immediately reply with statements along the lines of:
“That makes perfect sense, but I don’t feel ready to start working on client projects. I’d like to keep practicing and building new portfolio pieces before I start looking for work.”
What I hear is that they don’t have the confidence they desperately need sell themselves to potential clients and/or employers. They don’t believe in their own capabilities to ship web products that make an impact using only their current Ruby and Rails skills.
They don’t have clarity about how they can break into the software industry in no time.
That’s why this guide is designed to help you acquire the foundational skills you need to become a confident Ruby and Rails developer, in 90 days.
Using books, video courses and practical projects…
Our goal is to build a solid foundation that you can expand on to become a professional software developer who uses Ruby, Rails and related tools to create value for yourself, employers and freelance-consulting clients.
Learn Ruby and Friends Faster Than Your Peers, In 11 Simple Steps
In the summer of 2010, I wanted to learn Ruby on Rails while I was still a college student, but I couldn’t accomplish any of my actual goals.
You could say I failed miserably and everything I did was a complete waste of time.
Then in 2013, I stumbled on a little yellow book called The First 20 Hours: How To Learn Anything…Fast by Josh Kaufman, who’s also the International Bestselling author of The Personal MBA.
In that book, Josh Kaufman describes his research into the field of Rapid Skill Acquisition (RSA) and shows us how he used the principles to teach himself the basics of Ruby programming and web development with Sinatra and other creative skills.
After failing to improve fast enough for my liking and almost gave up on learning web development, I suspended my disbelief and applied the principles when I decided to take another stab at learning Ruby, Rails and related technologies.
Since then, I’ve built Ruby gems and released Rails apps I’m proud of.
And I’ve applied the same principles to learning various other skills, including Copywriting, Marketing Automation and Data Analysis.
Here’s a quick rundown of the 10 major principles of that’s mentioned in the book, plus an additional principle that I believe makes the entire concept complete.
- Choose a lovable project
- Focus your energy on one skill at a time
- Define your target performance level
- Deconstruct the skill into subskills
- Obtain critical tools
- Eliminate barriers to practice
- Make dedicated time for practice
- Create fast feedback loops
- Practice by the clock in short bursts
- Emphasize quantity and speed
- Teach everything you know
I’ll show you how I applied these 11 simple principles to teach myself Ruby and Rails and related tools in record time, and how you might go about using them too.
Before we start looking at each of these principles…
…it’s important to remember that RSA principles help you train to become an amateur faster so that you can enjoy the proverbial 10,000 hours of practice required to become an world class expert in any field.
Principle #1 – Choose a lovable project
I invite you to look back at your schooling days. In high school and college, you were required to complete several projects for grades. If I were a betting man…
I’d bet $1 you completed most of the projects, $5 you hated the idea of working on yet another project whenever a new one was assigned, $10 you waited until the last possible minute to complete them.
And finally, I’d bet $100 you never touched the project again once it was submitted and graded; it just took up disk space or collected digital dust.
What you’ve just read is a characteristic of non-lovable projects.They don’t make you excited enough to give them your full attention and effort.
Despite the obvious fact that you didn’t choose the project, most school projects do not encourage skill acquisition because they focus on mindless repetition of what you already know, have no immediate benefit to you…
…and it’s impossible to be passionate about them, even if your future livelihood depended on them.
Projects that encourage skill acquisition are the exact opposite of school work.
A lovable project is something you care about and produces a short term value for you. You are more likely to learn the skills required to complete a project if you care about the project enough to develop a temporary obsession over it.
I started learning to use Rails because I wanted to develop prototypes for app ideas I had for startups. Although none of those original Rails apps became profitable products…
…because I lacked the marketing skills then, I was still able to practice because I was temporary motivated to launch them quickly.
To learn Ruby, Rails and related tools fast, you need a practical project you can work on.
Josh Kaufman learned Ruby and Sinatra because he needed to rebuild his business website to support more concurrent users so that he could sell more books.
I believe DHH wouldn’t have learned Ruby (or even created Rails) if he wasn’t motivated to build Basecamp with Ruby, working only 10 hours per week.
And more recently, I wouldn’t have learned how to build RubyGems if I didn’t need custom command-line apps for work and I wouldn’t have learned to consume APIs in Ruby if I wasn’t motivated to connect with SaaS founders and their teams.
To come up with project ideas that you can use for practice, choose a SaaS app you currently pay for or interested in selling, then build a basic version just for yourself.
Most SaaS apps have lots of features to appeal to the various user groups they serve. Eliminate the features you’ve never used and build a version that includes just the features you use often.
You don’t have to replicate the UI exactly, unless you’re already a designer; just rebuild the core functionality or features in its simplest form.
Principle #2 – Focus your energy on one new skill at a time
In order to practice and complete your project, you need to focus your energy on one new skill at a time because dividing your attention between many new skills is a recipe for disaster; a recipe for extremely low skill acquisition.
It’s completely understandable that you want to learn many new skills, but if you spread your limited time and energy across many skills, it will take longer to notice a significant improvement in any one of them.
If you only have few hours to devote to learning, you are better off focusing on one skill until you are proficient before moving on to the next one.
Context switching drains your cognitive energy and hinders your ability to learn, so it’s important to focus on one skill at a time.
It’s hard to resist the temptation of working on multiple skills at a time, especially if you are a curious person or the kind who just likes learning new things.
The way to deal with this is to establish a “someday/maybe” list, where you list things you want to explore when you get a chance.
This buys you time and allows you to focus on your current skill without feeling you have given up on a chance to learn new things.
In the words of Josh Kaufman, “pick one, and only one, new skill you wish to acquire. Put all of your spare focus and energy into acquiring that skill, and place other skills on temporary hold.”
Focusing on one new skill at a time that will put you on the path to mastering your Ruby and Rails skills in the shortest possible time, and become the software developer you’ve always imagined you could be.
Principle #3 – Define your target performance level
Rapid Skill Acquisition is all about knowing your desired target performance level and finding the shortest, fastest path to get there.
Your target performance level for software development depends on your reason for acquiring the skill in the first place, but know that the more specific it is, the better.
What is it that you want to achieve and what will you be able to do when you are done acquiring the skill?
What level of performance is “good enough” for what you’re trying to accomplish with your software development skills?
How do you know you’re done for now?
Your target performance level should be relaxed as well, making it easier to get there.
When I started learning web development after reading The First 20 Hours, my target performance level statement was very specific.
I wanted to be able to develop and deploy one Rails application I had envisioned without any hand-holding.
The only personal advice I’d add is that, don’t put a time pressure or any other constraint on yourself like I did.
The more relaxed your target performance level, the more confident you’ll feel that it’s possible to achieve, which makes it more likely that you’ll do what’s required to get there.
You can acquire the related skills for web development faster without getting frustrated if you shoot for capacity and sufficiency at maximum speed, instead of perfection.
Keep in mind that the most important part of learning any new skill is breaking through your frustration barrier, which takes 20 hours of deliberate, focused practice.
Getting to your target performance level should be your next focus. And from there you can decide whether you want to keep going, perhaps to world class mastery.
Principle #4 – Deconstruct the skills into sub-skills
We’ve already covered choosing a lovable skill, focusing one’s energy on one new skill at a time, and defining a desired target performance level when acquiring a new skill like web development with Ruby, Rails and friends.
Now you’ll see why it’s important to deconstruct a skill into its sub-skills before you start. Let’s take writing for example…
First you need to know all the alphabets, then learn how to put them together to make words, followed by constructing meaningful sentences. Then you learn to write proper paragraphs, and eventually essays.
You can imagine what would happen if you skipped the first two steps and jumped into constructing sentences – years of frustration and incompetence.
Same goes for other new skills; you can’t learn without knowing the fundamentals.
That’s why it’s important to deconstruct a skill into its sub-skills; doing so will let you know which ones are critical for beginners and which ones are better left until you know enough to handle them.
Here is a brief history of my journey into web development with Ruby, Rails and related tools. In 2010 (The Social Network movie is released), I made several attempts to learn web development because I thought I had a brilliant idea for a web app.
(If you guessed a social networking app, you’re right)
I bought every book that showed you how to build an application (in retrospect, they all showed you how to clone Facebook or Twitter). I muddled through them, but at the end, I could only repeat what was covered in these books and could not bring my idea to life.
What’s the reason?
If you said that it’s because I didn’t have the fundamentals and that I didn’t actually understand what was going on, you’re right. I was so frustrated, I wanted to apply to a web development bootcamp. All my concerns about tuition didn’t matter anymore.
As I researched and visited their websites, I noticed an interesting pattern. Their beautifully designed websites didn’t just say they’ll teach you web development.
No wonder all the books claiming to teach beginners web development from scratch never work. These books are usually written for those who have experience with other programming languages or frameworks and need a crash course in using another one.
So it made sense to focus on the core framework being taught (Rails, for example) and pay little attention to everything else.
Beginners need a solid foundation upon which to build their skills.
Understanding how to effectively combine all these technologies puts you on the path of becoming a professional Ruby developer.
You’ve already solved half the problem of learning web development by knowing which sub-skills to learn first, and which ones to ignore until it’s absolutely required.
Principle #5 – Obtain critical tools for practicing
Assuming you want to learn how to play tennis (think Rafael Nadal, Maria Sharapova and Serena Williams), you can’t really learn if you don’t have a good racket, tennis shoes and the right tennis balls, can you?
Most of us already have the critical tools needed to learn web development, a computer with a decent internet connection.
But, we also need additional resources to help us with our practice. People who’ve been programming in their mother’s womb can easily look at documentations and understand what’s going on.
For the rest of us, we need books, video tutorials, in person classes, coaching, problem statements, and/or test cases. Obtaining these resources beforehand will make it easier to practice and acquire the skills we want faster.
We also need to get the best resources and tools we can afford to buy or borrow. You don’t want a situation where the tools get in your way and prevent you from learning, right?
It’s difficult to know which resources teach to your learning style given the plethora of resources out there, the background of the person who created the training program, and the outcomes that you expects.
Also, some people learn better from books, others from videos tutorials or in-person instructions. Still, others do better with multi-media.
From experience, it’s better to mix things up and take the multi-media approach.
Use books, videos courses or in-person instructions, when appropriate. And if you feel adventurous, use docs for each of the technologies you’d like to become productive in.
Principle #6 – Eliminate barriers to practice
Once you have your tools, you need to remove all obstacles that will prevent you from achieving your goal. There are barriers that can get in the way of practice when learning a new skill, thus increasing the time it would take to become proficient.
It’s important you identify these barriers early on and eliminate them before they affect your efforts. Barriers to practice include significant pre-practice activities such as…
…misplacing your tools and resources, not having the correct tool before practice and skipping setup requirements.
Having limited access to resources hinders your ability to practice too. Other barriers include environmental distractions such as television, ringing phones, and emails.
Emotional blocks such as fear, doubt, and embarrassment can also get in the way of learning. Each of these barriers make it harder to practice and increase the time it takes to acquire a new skill.
You can’t rely on willpower each time to overcome them, so it’s better to invest some time in eliminating them before you start learning. It takes a lot of willpower not to check email and Facebook frequently.
I was lucky that I had developed a habit of using only my phone to access both email and Facebook. All I needed to do was toss my phone somewhere that wasn’t an arm’s length away, somewhere I couldn’t reach without getting up from my desk.
Principle #7 – Make dedicated time for practice
Often, when we want to acquire new skills, we also want to keep doing most of the other things we love doing, so we end up not having the time we need.
We tell ourselves, we will get around to acquiring the new skill when we “find time.”
However, no one ever finds time. There are limited set of hours in a day and we can’t magically find extra time if we don’t actively make it.
You can make time for practice by eliminating low-value use of your time.
Cutting the amount of time you spend watching TV, reading magazines, playing video games and engaging in other low-value activities can help you find time for deliberate, focused practice.
By keeping a simple log of your daily activities for a week, you will know which ones are not necessary, and can be safely eliminated from your daily routine, at least for the duration of your learning.
In addition to making time for practice, pre-committing 20 hours to practicing your new skill will help you overcome the obstacles and frustration you are bound to face when you start learning.
By pre-committing 20 hours and not stopping until you’ve practiced for 20 hours or reached your target performance level, you ensure that little issues in the beginning will not stop you.
Finally, the more hours you devote to daily practice, the faster you will acquire the skill. For busy people, practicing for 90 minutes or more a day is ideal for using Rapid Skill Acquisition principles gain the foundational skills of web development.
When I started learning, I had a summer job that required that I left home at noon and I couldn’t do much at night because I was usually tired by the end of the day.
The only way I was able to get 90 minutes or more of practice per day was to wake up early, usually at 5AM. Around that time, there was no body awake to interrupt me.
I can’t confidently give advice as to what you can do to make time for practice because we all have different habits and responsibilities. But I’m sure there are certain activities that aren’t good use of your time.
Keep a log of all your activities for a week to find out which activities you can safely eliminate and you will have enough time to practice.
Obvious ones to eliminate are long hours of late night TV and Netflix reruns.
Principle #8 – Create fast feedback loops
Getting fast feedback is likely the most important principle of Rapid Skill Acquisition; creating fast feedback loops means getting accurate information about your performance as quickly as possible.
The longer it takes to get feedback, the longer it will take to acquire a skill because you can’t associate your success or failure to a particular activity and correct your mistakes.
Depending on the skill you are acquiring, you can incorporate feedback from a number of sources. These sources include coaches, video cameras, computer programs and training aides that alert you of your mistakes.
From a personal experience, the more sources of feedback you can incorporate into your practice, the faster you can acquire the skill. One of the reasons learning to program is easy, fast and mildly addictive is the near instantaneous feedback it provides.
You write a line of code and you can tell within a few seconds whether it works as expected. If it doesn’t behave as expected, you delete and try again. Feedback of that sought is bound to make you a better, faster learner.
Principle #9 – Practice by the clock in short bursts
Another principle you can use to make your skill acquisition faster is to practice by the clock in short bursts. You need to practice by the clock in short bursts because human brains aren’t built to estimate how long an individual has been doing something.
When you aren’t good at something, you overestimate how long you’ve been practicing and usually get frustrated when you don’t experience enough progress that matches the time you think you’ve spent practicing.
Practicing by the clock combats this behavior. Similar to pre-committing at least 20 hours to acquire a skill, you must also pre-commit at least two sessions of practice per day when learning a new skill.
Set a clock for about 45 minutes per session, and once you start, you can’t stop until time runs out. The more sustained periods of practice sessions you have, the faster you’ll acquire your new skills.
Principle #10 – Emphasize quantity and speed
As a beginner it’s tempting to focus on perfection when learning web development, which sets you up for frustration. It is more important to focus on quantity and speed while maintaining a good enough form than focusing on perfection.
Josh Kaufman tells a story about a pottery class that was split into two. One class will be judged on quantity of pots made, the other the quality of pots. At the end of the class, not only did the quantity group have the most pots, they also had the best pots.
Why, you ask?
The quantity group improved on each pot they made, while the quality group fixated on perfecting the one pot they worked on.
By making more pots and learning from the experience, the quantity group learned what would make the next pot better than the previous one.
Quantity and speed is important in web development as well. The best developers, musicians, and writers aren’t so because they are geniuses. Instead, they get better over time, with each new piece they work on.
The more deliberate practice you put in, the faster you can acquire your skills, the better you get overtime and reach world-class status if that’s your goal.
Principle #11 – Teach everything you know
I added this principle to Josh Kaufman’s Rapid Skill Acquisition principles because I believe teaching is the fastest route to mastery and expertise in every field.
To practice this principle, simply maintain a blog, a YouTube channel, an email newsletter or answer questions on forums to share some of things you’re learning as your practice because it solidifies your understanding of topics.
You’re reading this on “ReProfit Lab” right now; this very guide started its life as a series of blog posts all the way back in 2013. If you’ve learned one or two lessons from it, I encourage you to teach everything you know too.
It doesn’t matter if this is your first hour of learning web development with Ruby, Rails and related tools. There’s someone out there who knows less than you right now and will appreciate your perspective.
You don’t have to wait until you’re a “professional developer” to start being helpful.
10 Tested and Proven Ruby and Rails Resources
There isn’t a shortage of resources when it comes to learning Ruby, Rails and related tools for building SaaS and digital products, so I’m only going to show you the exact books and courses I used to master the “hard skills” of software development.
These are the same resources I recommend to all new team members at Enza Academy, where I’m a product development coach, so that we are all better prepared to perform our duties and serve our students.
You’ll notice I’ve included other resources to help you learn what we’ll categorize as “soft skills” because the ability to produce working software isn’t enough to even get your foot in the door these days, especially if you’re a recent graduate.
You also need the mindset, motivation and mental models that’ll make you produce software that makes an impact, so that you can stand out from your peers. It’ll also ensure you’re never undervalued and underpaid for your skills and knowledge again.
Here are the bare minimum books and courses you must have in your library if you’re really serious about breaking into the uber-profitable web development industry too.
The Passionate Programmer by Chad Fowler
Success in today’s IT environment requires you to view your career as a business endeavor. In this book, you’ll learn how to become an entrepreneur, driving your career in the direction of your choosing.
You’ll learn how to build your software development career step by step, following the same path that you would follow if you were building, marketing, and selling a product.
After all, your skills themselves are a product.
Ruby Programming Course by Pragmatic Studio
In this course we follow a step-by-step, project-based approach to learning how to write well-designed Ruby programs. You’ll come away knowing how to write your own Ruby programs and have a deeper understanding of both the “how” and the “why”.
HTML & CSS by Jon Duckett
Many books teachingHTML and CSS are dry and only written for those who want to becomeprogrammers, which is why this book takes an entirely new approach.
Introduces HTML and CSS in a way that makes them accessible to everyone — hobbyists, students, and professionals — and it’s full-color throughout.
Utilizes information graphics and lifestyle photography to explain the topics in a simple way that is engaging. And boasts a unique structure that allows you to progress through the chapters from beginning to end or just dip into topics of particular interest at your leisure
This full-color book will show you how to make your websites more interactive and your interfaces more interesting and intuitive.
It covers how to recreate techniques you will have seen on other web sites such as sliders, content filters, form validation, updating content using Ajax, and much more (these examples demonstrate writing your own scripts).
Don’t Make Me Think by Steve Krug
Hundreds of thousands of Web designers and developers have relied on usability guru Steve Krug’s guide to help them understand the principles of intuitive navigation and information design.
Witty, commonsensical, and eminently practical, it’s one of the best-loved and most recommended books on the subject. It’s short, profusely illustrated…and fun to read.
You’ll see why so many people have said it should be required reading for anyone working on Web sites.
Instant Sinatra Starter by Joe Yates
Instant Sinatra Starter is a practical, hands-on guide that provides you with the necessary knowledge to get started from scratch.Including all the necessary steps to put together a Sinatra application and get it online, we will also learn all that you need to know to make your application all it can and should be.
We’ll learn how a web request is received, pre-processed by Rack and Sinatra middleware, then handed to the application. Learn how to build a response via templates, then hand the response back to be sent to the client.
Everyday Rails Testing with RSpec by Aaron Sumner
Have you gotten your hands dirty with a Rails application or two, but lack reliable test coverage? Does your application testing consist of a series of browser clicks, hoping you cover everything? Or do you just cross your fingers and hope for the best that everything will just work?
In Everyday Rails Testing with RSpec, you’ll learn how to get past that hurdle, increase your code’s trustworthiness, and save untold time in browser-based testing.
Ruby on Rails Level I Course by Pragmatic Studio
In this course we follow a step-by-step, project-based approach to learning how to design and incrementally build a complete database-driven web app using Rails 5.
You’ll come away knowing how to create your own Rails apps and have a deeper understanding of both the “how” and the “why”.
TheorySprints by Jarrod Drysdale
Do your designs end up different from what you picture in your mind? Feeling unsure of how to improve your work? If so, it’s likely you missed learning aspects of design theory.
TheorySprints is an online course that will teach you design theory and process in 9 quick learning sprints. You’ll regain confidence in your design work and get back in action quickly.
Practical Object-Oriented Design in Ruby by Sandi Metz
Object-oriented programming languages exist to help you create beautiful, straightforward applications that are easy to change and simple to extend. Unfortunately, the world is awash with object-oriented (OO) applications that are difficult to understand and expensive to change.
Practical Object-Oriented Design, Second Edition, immerses you in an OO mindset and teaches you powerful, real-world, object-oriented design techniques with simple and practical examples.
The first thing you probably noticed is that I didn’t list any of the popular free resources you’re already familiar with. There’s a simple reason for that.
And no, it’s not because these free resources aren’t of high quality and useless.
I rarely recommend free educational material because I want you to invest a small fortune in your education. It’s a simple psychological hack that incentivizes you to follow through with your decision to acquire a difficult skill.
You’ll take ownership of your education when you have skin in the game.
As one of my coaches always says, those who pay…pay attention.
Those who don’t give up too easily, blame every resource at their finguretips and never hold themselves accountable for their lack of accelerated progress.
Your Ideal Next Step…Based On Human Intelligence
If you’d like to accelerate your progress, produce measurable results with your work and break in to the SaaS industry with confidence, here’s two more foundational trainings.
Normally, other trainers will charge at least $199 to show you these, but it’s yours, 100% on the house because I don’t want price to be an obstacle for anyone who’d like level-up.
ps - don’t forget to share The Entrepreneurial Way To Master Ruby & Friends to spread the word. Your fellow Kingmakers will thank you for it and return the favor, eventually.