Ready. Set. Code. - Resources for Learning to Program

First Things First

My first exposure to programming was about a year ago when I began working on a mobile app. I was another non-technical ‘business guy’ looking for a developer to help bring to life my ‘awesome’ idea.

HTML5 or native? Ruby…Rails..Python…Java…Objective-C…AWS…API…backend…frontend…

I had no idea what was going on.

Before you get too far into a book or some of the great online resources, it’s worth familiarizing yourself with basic technical terminology. Vin Vacanti from Yipit has a great blog post summarizing the major components of a web application. Skillcrush is another great resource to learn tech lingo 101. They even have a 10 day email bootcamp to help you become a digital know-it-all in no time.

Tips & Tricks

Takeaways from learning to program over the past 6 months:

It Takes Time

Programming is not something you can pickup over a long weekend. Before deciding to focus on learning to program full-time, I spent many nights and weekends trying to pick it up. While it helped familiarize me with the syntax, I didn’t get far. With long breaks in between sessions I always found myself having to go through the same tutorials over and over. Just like learning a foreign language, immersion helps tremendously. If you’re in school consider going 110% over summer break. If you have a full-time job, consider forgoing a vacation and spending a week or two diving head first into the process. If this is something you become truly passionate about, there are some great immersion programs like Flatiron School (the one I am in right now), Dev Bootcamp, Hacker School, Hackbright, and a bunch of other similar programs that are popping up all over.

Embrace Failure

You will run into problems. Lots of problems. The first time I went through what is now my favorite tutorial, it took me a whole weekend just to get my environment set up so I could start actually coding. At first it will be frustrating. Very frustrating. Over time you will realize that you actually learn the most during these ‘debugging sessions.’ Also, no matter how good you are at programming you will always have bugs to fix and new mountains to climb. So if you don’t learn to embrace the struggle it’s going to be a long and painful journey.

Build Stuff

Building stuff is fun. It is also hard, making it the perfect combination for accelerating your learning curve. Your passion and desire to build projects is what’s going to help you get over those difficult tasks and roadblocks. I really enjoyed learning a topic (HTML, CSS, Javascript, Rails, etc.) and then spending a couple days playing around with my new knowledge on a side project.

3x Rule

After going over a new programming topic for the first time, I usually don’t remember much. If you ask me to do what I just learned without referencing the material I can almost guarantee I won’t be able to do it. However, it familiarizes me with the new terminology so that it’s easier to pick up the next time. In general, I’ve found that it takes me about 3x of going over the same topic (and messing around with that topic on my side projects) before I really begin to understand it. Don’t be frustrated if you go through a tutorial and still have no idea what’s going on. Also just because you’ve gone through a tutorial or topic doesn’t mean you can’t go over that topic (or same exact tutorial) again.

Picking a Language

Rubyists with tell you to learn Ruby. People who code in Python will tell you to learn Python. The truth is, you can’t go wrong with either. I have slowly fallen in love with Ruby, and really enjoy the intuitive nature of the language. At the same time, I’ve heard Python is a great first language because of its ‘explicit is better than implicit,’ principle. In contrast, Ruby is very abstract and has many ways to do the same thing. It’s beautiful, but some people may like the structure of Python. If you have a friend or mentor that is fluent in one of these languages, go that route. Being able to ask them questions when everything breaks will be indispensable. You will appreciate the tips he or she gives you that save you hours of banging your head against the wall.

“I hope to see Ruby help every programmer in the world to be productive, and to enjoy programming, and to be happy. That is the primary purpose of Ruby language.” -Yukihiro ‘Matz’ Matsumoto, creator of Ruby

Web vs. Mobile

Next, it is important to understand that there are different paths depending on if you want to develop primarily for web or mobile. While it is possible to make “native” apps using web development tools like HTML5, RubyMotion, and PhoneGap, the majority of successful iPhone and Android apps are made using specific languages for each platform (Objective-C for iPhone/iPad apps and Java for Android apps). These languages differ from the most popular web development languages (Ruby, Python, PHP). The resources below are primarily web development resources because that is what I’ve spent most of my time learning. I did do a little Objective-C / iOS development and recommend checking out the Stanford Tutorials on iTunes and the Big Nerd Ranch guide if you end up going down that path.

The Resources

General

Treehouse - Awesome video tutorials that explain basic programming concepts very clearly. After completing different levels you are rewarded with clips from a great coding drama / comedy (think Arrested Development meets 24 meets the Social Network).

Codecademy - Differs from Treehouse in two major ways. First off, it is completely free. Secondly, the tutorials are text based. This is a great place to familiarize yourself with the syntax of different languages. They also have a cool new section on APIs.However, if you want to actually build anything you will have to move beyond this resource. I wouldn’t even consider yourself ‘learning to program’ until you move beyond this site (I know too many people that dabble here and there with this site but never follow through).

Flatiron School Prework - A step by step guide to help you navigate the resources above, along with some others. This guide covers everything from basic topics like HTML, CSS, and SQL to more advanced topics like Rails, JQuery, and testing with RSpec.

HTML & CSS Resources

Magic of CSS - a to the point guide on major CSS topics.

A Practical Guide to HTML & CSS - awesome beginner and advanced front-end tutorials by Starter League instructor Shay Howe.

Rails Resources

Michael Hartl’s Rails Tutorial - I can’t say enough good things about this tutorial. Building stuff is the best way to learn how to program, and in this tutorial Hartl guides you through building a Twitter-esque app from start to finish.

Railscasts - These videos by Ryan Bates are perfect tutorials for doing lots of fun stuff like integrating facebook, using google maps API, and setting up automated mailers, etc.

Other Essentials

Stack Overflow - Pretty much every problem you run into has stumped a fellow programmer. This site is where people post their problems and others help answer them. At some point you will wonder how people learned to program before this resource existed. Yes, it’s that good.

Google - You are probably wondering why I’m listing google as an essential resource to learn how to program. While stack overflow is going to have many answers, other times you will just have to search around to help fix bugs and understand certain topics. The programming community is amazing, and learning how to use it to your advantage will help you more than you can imagine.

My Favorite Blog Posts on Learning to Program

  1. Programming Resources by Spencer Fry
  2. Why and When to Learn to Program by Spencer Fry (again)
  3. 6 Things You Need to Learn to Build Your Own Prototype by Vin Vacanti
  4. Want to Learn Rails? Start Here by Zach Shapiro
  5. Want to Learn to Code? Start Here by Zach Shapiro (again)
  6. Don’t Learn How to Code, Learn How to Make Things by Jake Levine
  7. How I Learned to Code in 8 Months by Li Ouyang

For all those that have been debating the idea of learning to program, I hope this post gives you the resources and motivation to give it a try.

If there are any topics that I didn’t cover or that you’d like me to expand upon don’t hesitate to reach out via twitter! If you thought this was helpful, please share the love!