How I (*Finally) Learned Ruby on Rails

(…and you can, too.)

I’ve always been an engineer, but I didn’t always know it. You see, I joined the military right out of High School. Growing up in the deep south, that’s what a lot of us do there. Military service is a family tradition and I proudly served in the Air Force for a few years as an Operating Room technician in Surgery, which it turns out is very much an engineering job.

Lets say our patient has a carotid artery blockage, for example. The carotid is extremely important because it sends blood flow to the brain. Not exactly something we can just turn off. The surgeons and I would sew in a shunt that would route the blood flow around the blockage, buying us enough time to remove the offending clot and to sew it back together. I enjoyed my job and though it didn’t pay much, I was happy. I got out of the military, moved to Boston and was enjoying life. Mostly.

Steve Jobs at the original iPhone keynote- the day that changed the trajectory of my life.

While working at various hospitals in Boston and NYC, I followed technology closely and was always hip to the new stuff. One day some guy named Steve Jobs announces this device that he called the “iPhone”. Now I immediately knew the potential of it- This thing wasn’t a phone, it was a little programmable computer with sensors like a microphone and even an accelerometer, so it always knew its orientation. It was a computer that everyone would always have in their pocket, and I knew it that very second. I had always been very jealous that I wasn’t around during the original computer revolution and didn’t get the chance to invent amazing technology like VisiCalc. It felt like all of the cool stuff had already been invented. but this changed everything. A new computing paradigm was being born and I wasn’t going to miss this opportunity.

It was time to make moves.

I hired a kid to build a medical terminology dictionary app for the App Store, and was one of the first developers in at the App Store launch. I’ll always be proud of that. There was no playbook to follow at the time, so I just figured it out. “Apple says I need an app icon 512 x 512 pixels? OK, better get photoshop and make one”. The app was pretty successful and I soon found myself consulting for other people through word of mouth that wanted to build their own apps and eventually I even wrote a book about the process. This went well for a few years, but I started to get engineering envy and wanted to build things myself. My ideas were starting to get larger than my meager engineering budget and I wanted a new challenge.

Time to make another move.

Starting with Wordpress, I began building websites for clients and charging them for it. I worked out of a co-working center with lots of other web developers and started on every online HTML/CSS instructional course I could find. (I highly recommend learning WordPress if you’re just starting out in web design- It’s a great platform with tons of solid documentation.) After some time with WordPress I was eventually able to build out complex social network applications and e-commerce stores. I loved the immediate gratification of inspecting the elements of a page I was building, using CSS to move the components around and saving it, then reloading the page to see that what was in my minds eye just a few moments ago now exists online for the world to see. I was hooked on web development but I needed more granular control over my creations, so I after speaking with a few friends that were Rails devs, I decided it was time to take the plunge.

Now I’m a smart guy, but I was no natural born programming savant. Everything that I am and everything that I want to be, I earn it by studying and working my ass off. Hard. So I did what I always do and did some intensive online research and networking. It turns out that I knew a friend of a friend that was launching his own Rails developer training course, so I gave that a shot. All set, right? Well, not quite. Nothing in life is ever that easy, not for me at least. It turns out that style of teaching wasn’t right for me so I left the course with no hard feelings and contemplated my next step. I didn’t quit or give up, I just got creative.

Rufus, our13 year old old family dog, napping on my leg back home in Mississippi.

What I needed was a few months with no distractions to beat Ruby and Rails into my head. The demands of living in the city and paying high rent bills don’t mix well with intensive study, so I thought out my options and talked to my family. It turns out I have a really awesome family down south that missed me! I decided to go back and see my family for a few months and work my ass off, around the clock, and continue learning Ruby and Rails. I’d be away from my beloved Boston for a while, but when life is all over and done with, would I ever regret spending a few months with my family and getting to know them all again? Regret watching movies with my family and our family dogs?

Of course not. I have a wonderful family. I went home and made moves.

(Update: My mother passed away recently, and in hindsight, it turns out I was very fortunate to go home and spend those months with her while learning Rails.)

I did more research and settled on taking the Pragmatic Studio Rails program. I’m a big fan of the Reddit and it came highly recommended at r/rails, so I paid the $200 and got to work. It turns out that, for me, screencasts are a fantastic way to learn this stuff- Mike Clark (the Pragmatic Studio course instructor) and his wife (the course co-host) have these awesome animated visuals that really helped me understand some of the more abstract computer science concepts that I was learning. I also joined RailsMentors.org and was introduced to a guy from Houston (also) named Jesse that was happy to help whenever I ran into something I couldn’t figure out. (Jesse runs a really great ruby course over at Ruby Off Rails, by the way. I highly recommend it.) I became a master at using a search engine to find my Rails answers and realized that you’re supposed to do that. Nobody knows everything, and Rails is amazing at telling you exactly what and where your errors are, so usually a google search of the error message will diagnose your problem and give you one or more possible solutions. (Especially with the Better Errors gem, using the Binging_Of_Caller gem with it. Add both you your gemfile, you won’t be disappointed.)

After I completed the Pragmatic course and did the Hartl book, I signed up for Ryan Bates’ RailsCasts.com screencast series- This was a game changer. I could now watch his screencasts and be able to add almost any features I wanted to my app. Twitter authentication/login? Took me a couple of hours to sort out. And I loved it. I was starting to design data models and think about the overall architecture of my applications and enjoying every minute of it.

The most important thing I did while learning was to recognize the value of community. Some people may think of “Programmers” as certain stereotypes, but honestly, most of the people in the Rails community are really cool, chill, normal people that are more than happy to help. I followed r/Rails and r/RubyonRails on Reddit, and used Twitter to my full advantage. I did a twitter search for “Ruby on Rails”, “Rails”, “Bootstrap”, etc and followed everyone that I could find in the industry. Then I checked to see who they were following and followed them. Then I’d see what companies they worked for and followed everyone that they followed. I made a point to passively observe, crack a joke now and then, and to do my best to be a genuine honest friendly guy doing my best to learn. It worked so well that I could tweet a general Rails question (“Whats the difference between two spaces and one tab, honestly? I don’t get it.”) and have amazing developers from world-class development shops like Terrible Labs , thoughtbot, and DockYard explaining and discussing Rails minutiae with me in 140 characters or less. That certainly made me feel much less alone when I was learning this stuff from rural Mississippi. I’ll always be grateful for that.

Screenshot of Rapportive inside of Gmail. Note the soical network links. BTW, Feel free to follow me @JesseWaites on Twitter or to add me on LinkedIn

Another Protip: I installed Rapportive. Rapportive is a Gmail extension that shows you rich contact information right inside of Gmail, on the right side. This means that, if I get an email from someone, I have links to their social media profiles and can easily follow them on Twitter, check them out on LinkedIn, etc. Pairing this with Ruby and Rails mailing lists meant I can see the profiles of everyone involved and thus have more opportunities to build my network and support structure. I followed everyone I could from the Boston Ruby mailing list on Twitter to build out my twitter network.

I’ve considered thanking all of my mentors and friends one at a time here but I’ve honestly been helped by so many people in the Rails community, from all over the country and the world, that I fear I’d leave someone out so I’ve decided against that. (I will give one large shout out to the Boston Ruby group, however.) Instead I will assure you I will pay your kindness and friendships forward to anyone else that needs help. That begins with this post that I hope a newcomer to Rails might find useful.

So where I am I now? I was accepted into thoughtbot’s Metis program, which is filling in the rest of the blanks in my self-education. thoughtbot is the #1 Rails consultancy on the world and I am honored and humbled to have been accepted into such a prestigious program.

UPDATE: Thanks to Metis and my own private studies, I finally have a great job doing Rails at a place I love, with great people. Metis and thoughtbot have helped me make all of my dreams come true. Thank you!

It seems like the learning never ends, but the thing is, thats exactly right- It doesn’t, because technology never stops changing. The best thing you can do for yourself is learn how to learn. Once you do that, you’ll never have anything in your way. My advice? Grow your community, be friendly and sincere, do your best to manage your expectations of yourself, meditate, and get to work.

HTML. CSS. Ruby. Rails. Version Control. Erb. Sass. Gems. Routing. Heroku. Make no mistake, there is a lot to learn here, so give yourself time and give yourself compassion and understand that it won’t happen overnight. Set a path and set out towards it, and feel free to tweet me @JesseWaites or add me on LinkedIn if I can ever be of assistance.

Make moves.