A variation of this post originally appeared on the Rails Masterclass newsletter.

Learning new technologies can be a challenge. With books, forums, videos, blog posts…where do you start?!?! I’ve used all these resources in the past and only one thing has reliably led to me to really learn the concepts – building something REAL!

How I learned Ruby and Rails

Several years ago, I was learning both Ruby and Rails and trying to figure out which books were worth the time. I ended up starting with Agile Web Development with Rails, which was a fantastic introduction to the features and benefits you’ll get from learning the Rails framework. However, like many other books, it guides you through building a website with little real world value – an e-commerce shopping cart (you’ve heard this one before, right???). The concepts in the book generally apply to other products built with Rails, but it was sometimes hard for me to see their value elsewhere. I found that the books and articles often skipped over things that were fairly trivial for a more experienced developer, but essential to get a real world application out the door.

The best way to learn (with a catch)

I propose you build something…anything really. But it would be more useful if the thing you build is useful to either you, someone else, or even better…everyone! But there’s a catch…whatever you build, you must not only put it out there for the world to see, but you must share it in whatever way you feel comfortable.

My Craigslist Scraper

A few years ago, I was in the market for a new job. I built a small Craigslist scraper that searched for “my perfect job” and had it notify me via email whenever it found a similar post.

The process of creating this little scraper did two things for me. First, it allowed me to learn (I wrote it in Perl and at the time knew very little about the language…). And second, it saved the 15 minutes or so it would take me each day to sift through the new job postings. It really was a win-win!

Start to Finish

It’s easy to copy and paste code snippets from a blog post or book. It’s much harder to see these applications through to the point where they’re useful. Who cares if no one uses it? The value you get from seeing your application code all the way to the point of production is exponentially greater than the value of having run “rails server” on your local development machine.

Questions such as “How will I log and be notified of errors?” and “How will I backup my production data store?” take time and thought to answer.

There are so many easy to use PAAS platforms now-a-days, even if you’re not the devops guru that you aspire to be, you too can have production code running with minimal effort for FREE! Heroku is a great example of a place that you can host your Rails applications without hassle or cost. If you have an application running locally that you’d like to share, hosting it at Heroku is a no-brainer.

If you have more aspirational goals of managing servers and understanding what makes a Rails application tick, servers at Digital Ocean, Linode, and Rackspace can be extremely cost effective.

Dogfooding

Building an application that can save you time in your daily routine (ie. task tracker, appt. reminder, etc.) is a great first step to learning more. It’s also very possible that if the application helps you, it could help other people. I’ll leave the marketing talk for another time, but stepping back and being an actual user of your application will cause you to look at it in a very different light. It’s likely that you’ll find ways to drastically improve your application within the first 10 minutes of usage.

Sharing (this is my favorite part)

You’ve now spent several weeks/months building something interesting – tell the world about it. Tweet about it, post it to your local user group mailing list, email your friends, anything…the more people that see it, the better. Like dogfooding, you’ll get valuable feedback that you might not have gotten otherwise.

I can hear all the perfectionists now…“I don’t want to share it until it’s perfect”. Having worked on a number of large applications, the candid truth is that it will NEVER be perfect. The feedback you’ll get sooner is more valuable than the time you’ll waste by attempting perfection. Besides, I have a feeling that most the features you thought you had to have before you launched are unimportant to the people that actually want to use your application.

There’s a more subtle point to sharing your new application…subconsciously you’re likely not going to share something that you think is crappy. If your goal is to ultimately share what you’ve built, you’ll put the work in to make it worthy of sharing, and in the process, learn about the finer details of releasing a web application in to the wild, not just a basic shopping cart that has minimal real-world value.

Where to go from here?

Knowing what you want to build is easier said than done. I keep a list of ideas that I ultimately want to build someday. Some have very little use outside my own world and others probably have potential to be used by other people, but either way, bringing these ideas to life with new technologies or concepts really helps me to solidify their real-world value.

If you don’t have ideas, a quick Google search for “startup ideas” will provide you with some very interesting results. However, I’d think about the things you’re doing everyday and ask yourself if any of them can be solved, or aided, with software. If the answer is “yes” to any of them, you have yourself a great candidate.

I’d love to hear about what you’re building and the challenges you’re facing.