A year ago, I answered a question on Quora regarding Ruby on Rails and how I learned to program. It got voted up a bit, and now I sometimes receive contact from Quora users probing for a more detailed description on the topic of ‘how to learn to program’.
My answer covered my journey, but I think I receive the follow-up mail because people think I’ve forgotten to include the ‘easy’ part in my answer. The shortcut—the something tangible they can apply overnight that will grant them the ability to understand and write code. I know this because that used to be me.
I’ve even received a message that read, “I want a job as a programmer, but I want to wait until I land a job before I learn to program. How do I get a job?”.
So, instead of repeating the same keystrokes, I’m going to point everybody to this article from hereon in. If you are short of time or simply can’t sit through my terrible grammar, the gist of it is: have a real product to build.
I doubt I’d have committed to learning Ruby on Rails if it wasn’t for the fact I knew why I wanted to learn it. I had very specific goals. I wanted to build a quote system for my insurance business, and I wanted to replace our third party property software with something better. Make sure you have a clear indication of why you’re learning to program.
Learning From Books
I bought a lot of books. It was a waste of money, though, because I never read them. I thought that just by owning these books, I’d magically absorb the educational material from them overnight whilst I slept.
Upon admiring my bookshelf brimming with Ruby books, a friend once said to me, “You must be a really good programmer”. At that point I couldn’t even string a line of code together, but hey, I owned a lot of books about it.
I also bought into any eBook about programming that had a fancy marketing page. Man, I was a sucker for those. I bought into it all, yet none of it really worked. Why? The books are great, I’m sure, but reading a book about a practical subject doesn’t quite compete with being practical. In other words, have a tangible product to build and just do it (instead of reading about it).
FYI: The best eBook I have read is Ruby on Rails Tutorial by Michael Hartl.
I Googled ‘Rails tutorial’ and tackled every one I could find. I’m unsure if it’s changed since then, but at that point good tutorials were fairly scarce—it was mostly to-do lists, Twitter clones and blogging engines. I’ve built a lot of those, but aimlessly following tutorials doesn’t get you very far.
Although these tutorials never taught me how to program, I certainly don’t consider them a waste of time. They introduced me to the fundamentals, which I was able to apply to the real product I wanted to build. It’s important to not spend your time in an endless loop of tutorials, though.
FYI: The best online tutorial I have completed is Rails for Zombies.
An Introduction to Ruby on Rails
I signed up for a 6-week introduction to Ruby on Rails at a local college. It was a weekly evening class that only lasted a few hours, but it transformed everything. The class worked on a web app—which wasn’t a to-do list or a blogging engine—covering the basics as well as the more complex aspects of Rails that online tutorials didn’t typically touch—such as relationships (which are hella confusing when you’re starting out).
Since I had already been aimlessly tackling a bunch of tutorials on the web, reiterating the basics in class increased my confidence as there was now a sense of familiarity with Rails (“Hey, I remember this! I already know this!”). With this familiarity, I felt I was on the right track and getting my head around things.
FYI: The course I attended was local to Glasgow, but One Month Rails—an online course—looks similar.
An Encouraging Community
Most importantly, what kept me going was a network of encouraging Rails devs who I ranted to when I felt I wasn’t getting anywhere, or turned to for solutions when I was stuck and Stack Overflow didn’t provide the answer. The Rails community is sickeningly supportive—I never felt silly for asking even the most basic of questions. They really get behind you, which is just what you need when learning something as complex and overwhelming as programming.
For me, the turning point was when I started applying what I was reading about and learning to build a real product, slowly chipping away at my app until the MVP took shape.
I mentioned this in an article I wrote for 24Ways:
Having a real product to work on, like I did with Lodger, means you have something tangible to apply the techniques you are learning. I found this prevented me from flitting aimlessly between tutorials and books, which is an easy area to accidentally remain in.
I’m confident that it helps to have a real product to build. Not another Twitter clone that no one will use, but an app you think will scratch an itch, address a pain point, or something you would use yourself just for fun. When learning something new, it’s easy to get lost along the way, but having a clear goal of why you’re learning to program will keep you on track.
Don’t get stuck in an endless loop of following tutorials or buying books. Learn the basics and begin applying those to your product.
Got it? Great. Now get building.