Need some help when first starting out? Check out books to read when starting to code.

What happens when you ask for advice on learning to code?

"Try Python. At first you'll be just fooling around, but then in 15 minutes you'll be intrigued and after an hour you'll wonder where the time went!" -- Anon
"I don't recommend python as a first programming language to learn... Java is the perfect starting spot." -- Zef D
"Learn Java or C++ then take Stanford's online class in iOS app development." -- 1finite
"Which programming language you learn and use doesn't matter." -- Zed S
"VBA and SQL are excellent beginner's languages for almost any professional or student." -- Zuhalter
"Make sure not to ask too many questions and turn into a help vampire." -- Max
"It’s a good idea to start with a very simple programming language that doesn’t require setting up a lot of environment." -- Queisser
"Learn the basics of a programming language in a command line or some kind of eval loop." -- Anon
"Use whatever your friends use." -- Peter N
"No book is going to replace getting your hands dirty and just figuring things out." -- JZ
"[Do] things the right way at all costs, rather than just [make] it work and [improve] from there" -- via Nick B
"Pick one language and stick with it until [you are] reasonably fluid in it. I say go with Ruby, Python, or Clojure and forget PHP." -- James

Learning to code for the first time is awesome and overwhelming and scary and fun. We call the sweet beginning of this exciting journey, where you're surrounded by helping hands, the "Hand-Holding Honeymoon" because of all the great resources out there and how much help you're likely to receive. It's the first of four phases of the learning process and certainly the most supportive.

This is an easy phase in which to get advice because everyone has a strong opinion about how you should learn. Sometimes, though, this support and advice can be overwhelming.

If you ask a dozen people how to get started, you will probably receive 15 different answers. Ask the Internet and you'll find that it's rife with giant SEO-friendly listicles packed full of resources for learning how to code (see here and here and here and here and here...) and occasionally even a few tips about how to navigate through them.

The dilemma comes when you're faced with all those reasonable-seeming approaches and need to choose between them or risk wasting your time. The problem, therefore, isn't a lack of resources or even a path, it's a set of criteria for figuring out which path makes the most sense for you to take.

Our Purpose Here

In this post, I'll show you an opinionated approach for taking on the first 100 hours of your coding adventure. It's hardly the only one out there but it's been an effective jump start for thousands of students so far so I believe in its inherent value. Despite this, only you can decide if it's the right fit.

That's why, prior to walking through the path itself, we'll look at how to actually think about this phase of the learning process. It's a commonly missing piece which will allow you to independently evaluate the effectiveness of this or any other suggested plan.

The goal of this post is to once-and-for-all answer the question "How should I get started with coding?" by empowering you to answer it for yourself.

Note: An underlying assumption of this post is that you do, in fact, want to learn to code. Many people only think they do... something we'll cover in an upcoming post.

Syntax and the Self

In your first 100 hours, you should accomplish 3 deceptively simple goals:

  1. Go fundamental -- Learn the basic syntax and constructs of coding.
  2. Go broad -- Familiarize yourself with the full web development stack.
  3. Go within -- Find your coding "match" so you can passionately dive deeper into that area.

Most students tackle the first part, give a nod to the second part, and generally pay little mind to the last part. They're more likely to force themselves to power through a bunch of dry syntax in a language they hate because they've heard it's the thing to do. This approach should really be inverted.

Learning to code is like a new relationship. You’ll spend weekend nights curled up with a glass of wine and the gentle glow of a text editor. You’ll yell at code, you’ll fight with code, and you’ll eventually make up with code and build wonderful things together. It's an intellectual love driven by passion. So it should make sense that the initial phase is a bit like a dating game and it's worth your time to find the right match.

Coding with wine by the fire

The flames of [intellectual] romance...

With this in mind, there are two questions you should consider on the way to finding what you're genuinely passionate about:

  1. What do I enjoy learning the most (ie. which technologies or projects)?
  2. How do I enjoy learning the most (ie. which types of resources)?

When you can answer these questions, the path ahead becomes much clearer.

This is relevant because most of the knowledge you'll gather in your first 100 hours is completely interchangeable among all languages or technologies anyway so it hardly matters which one you pick up. A deep well of genuine passion for what you're studying, however, can be critical to help you to pick yourself up after the inevitable stumbles. It keeps you fully engaged with the material instead of feeling like learning is an obligation. Additionally, an understanding of how you learn best will prevent you from becoming discouraged by resources that don't fit well with your learning style.

If all of this means that you'll be happiest when learning Haskell from a dusty old textbook, it may not be my choice but you'll pick up far more useful knowledge than forcing yourself into a tumultuous relationship with Javascript.

So, regardless of which path you end up taking into coding, make sure it doesn't just allow you to learn a bunch of syntax or context but also provides enough room for you to find what you're genuinely passionate about.

I'll focus on web development in the recommendations below, but you should be able to port the same thought process to pretty much any stack.

Key Principles

Before I show you our preferred path, let's cover a few key principles that guide our approach. Some of these align with conventional wisdom and others might be contrary to what you've heard. While everyone is different, experience has shown the following to generally hold true:

  1. Learn one thing at a time. Many people tell you to learn several languages at once. That might work for the particularly gifted, but it's a recipe for disaster with your average human. We'll cover multiple technologies but in a single-threaded progression so you can get comfortable with the syntax of one before diving into the next.
  2. Get a taste of the full stack. You'll often hear people tell you to dive deep into one language. We agree... but not before you've had the chance to play with all the technologies of the web stack to give you necessary context and to help you discover what you really enjoy.
  3. Try a variety of resources. It's easy to find a resource which doesn't match your learning style. We believe you should try several different types of resources to identify the way you learn best. By honing in on this, you'll make all your future learning much more productive and you'll know when it is, in fact, not your fault that it seems so difficult :)
  4. Have a project you want to build. This is one which people will commonly cite and it's great advice. You will learn significantly better and find your passion quicker if you have something you'd really like to build. We don't, however, advocate starting on it immediately because that will encourage major gaps in fundamentals. In the first 100 hours, unless you absolutely must see your project hacked together ASAP, focus on the fundamentals and use your desired project as an incentive to stick with it.
  5. Explore... When you're just starting out is the best time to explore -- everything is new and exciting! It's okay to experiment because, as we've said, finding your passion is a major goal of this phase.
  6. ...But don't dawdle. You need to explore, but also move on when it's time. It's easy to get trapped in a loop of constantly trying new beginner resources because it's so easy and immediately rewarding. If you want to move forward, you've got to be disciplined about taking on the next challenge before the current one becomes comfortably easy.

An Overview of Our Approach

Our 100-hour approach is designed to get you the exposure to web development technologies that you need to accomplish all three goals laid out above -- going broad, going fundamental, and going within.

It uses the best possible resources but also provides several different options for progressing through them based on your preferred style. It assumes you already understand the basic context and terminology of web development.

Technologies Covered

The 100 hour approach breaks down into the following buckets, which cover the "full stack":

  1. HTML & CSS -- 20 hours
  2. The Command Line & Git -- 5 hours
  3. Databases & SQL -- 5 hours
  4. Ruby -- 20 hours
  5. Ruby on Rails -- 25 hours

You'll get introduced to a half-dozen languages/libraries of all different types and roles, including two very different scripting languages -- Javascript (browser side) and Ruby (server side).

This layered approach is designed to give you the kind of breadth you need while providing many different touch points that you can use to determine which language really "does it" for you.

How it's Laid Out

Each step of this approach is laid out in detail below. You'll find:

  1. An overview of what you're learning and the estimated time it will take.
  2. Your goal for that step -- usually something you can build to prove you're ready to move on.
  3. Two options for learning the material using different styles of teaching. You only need to use one but it's often best to try both to help layer your knowledge and get familiar with different resource styles.
  4. Alternate resources which cover a spectrum of different styles and can be used either to shore up holes in your knowledge or to experiment with other teaching methodologies.

Step 1: HTML & CSS

20 Hours

Markup and styling combine to build the interface for every web page in existence. HTML is the web -- everything else is there to serve it to you. Or style it, in the case of CSS. You may not need to become an expert, but everyone needs to understand how HTML and CSS work to some degree.

Your Goal

Your goal is to build a copy of a simple homepage on your own, for instance

Google's Homepage

Option A: Codecademy's Web Track

Codecademy learn to code image on the Viking Code School Blog

Click to jump to the site

Codecademy is a fully interactive in-browser tutorial which covers all the basics with tons of support. It's too slow and "hand-holdey" for some people and just right for others. This represents the most supportive learning you can get without working directly with another human but it's also the most confining because you're stuck in their tracks.

Your Plan: Go through the entire track.

Best For: Anyone who's starting almost literally from scratch or who is just experimenting.

Downsides: You'll grow out of it quickly if you're a quick learner or want to try things that are outside their scope.

Option B: Shaye Howe's HTML & CSS lessons

Learn to code with Shaye Howe via the Viking Code School Blog

Click to jump to the site

Shaye's taught HTML and CSS for years on his site and it keeps getting better. It's the best parts of working with a textbook but built and optimized for the web. It covers the material more thoroughly than Codecademy but with much less support.

Your Plan: Go through all 12 lessons and, at the end of each, write some markup in a code editor which uses what you just learned.

Best For: The impatient and fast-moving learners or those who prefer a more text-based learning approach.

Downsides: You're pretty much on your own to build toy projects alongside it to test your knowledge, so be sure to do so instead of just trying to power through.

Pair With:, the in-browser markup and code editor, if you prefer not to work on your local machine yet.

Alternate Resources

These are resources similar to those above which are worth glancing through before choosing one

Step 2: Javascript &

25 Hours

Your first scripting language will be the browser-based Javascript. You'll learn to build dynamic user experiences, which are standard these days. Consider this your first introduction to "real code".

Your Goal

Build the Etch-a-Sketch project or something of similar difficulty. You should be able to interface with the DOM and apply Javascript-based logic to whatever you find. You can use an in-browser editor like Code Pen or JS Fiddle if you're not ready to run scripts on your local machine but it's best to run them locally.

Option A: Codecademy's Javascript and jQuery Tracks

Codecademy's Javascript path screenshot from the Viking Code School blog

Click to jump to the site

As with the HTML and CSS tracks, Codecademy's signature tracks will slow down and hold your hand through all the tricky bits. The challenges will have everything you need to complete them.

Your Plan: Do the entire track for both Javascript and jQuery.

Best For: Anyone without familiarity with "real" coding and/or who is highly visual.

Downsides: Lots of hand-holding means you need to focus more to retain the knowledge.

Codecademy's jquery path screenshot from the Viking Code School blog

Click to jump to the site

Option B: MDN's Javascript documentation and

MDN's Javascript documentation screenshot from the Viking Code School Blog

Click to jump to the site

These text-based resources dive deeply into Javascript and jQuery, as they are supported by the respective curators of each (MDN for Javascript and the jQuery Foundation for jQuery).

Your Plan: Read at least the "Introductory" section of MDN and the "About jQuery" and "Using jQuery Core" chapters of Read ahead through the Events, Effects, and AJAX sections for a deeper look at things.

Best For: Textual learners and those who really just want to get to the point. Best if you have previous experience with coding (or have gone through Codecademy's courses).

Downsides: There are no exercises baked in so you'll have to set up your own projects and exercises to help retain the material. Building is key! resources screenshot from the Viking Code School Blog

Click to jump to the site

Alternate Resources

Step 3: The Command Line and Git

5 Hours

To get good with any server-side scripting, you'll also need to pick up some basic command line usage. The moment you crack open that white-on-black screen, you'll really start to feel like a developer. Git is the most popular version-control system out there and an essential tool in your developer arsenal.

Your Goal

Create Git repos for your previous projects and push them to a Github account.

Option A: Web Development Basics from VCS

Viking Code School Prep Web Basics Course to learn the command line terminal and git

Click to jump to the site

This is a partially text-based and partially video-based collection of lessons and links to external resources. "The Basics of Web Development" section contains the good stuff for our purposes here.

Your Plan: Do (at least) the Command Line Crash Course lesson for learning the CLI, Getting to Know Git to introduce you to Git and Git Calisthenics to marry the two by using Git from the command line.

Best For: People who need to see it, watch it, then try it.

Downsides: It's not textbook depth so you'll need to look elsewhere to get really deep.

Option B: Learn Shell, Try Git, and The Git Guide

The first two of these are more interactive resources which allow you to type directly into the browser. The third is a straightforward beginner's guide to Git with "no deep shit".

Learn Shell for the command line screenshot on the Viking Code School blog

Click to jump to the site

Your Plan: Read through all three of these resources.

Best For: Interactive learners since these allow you to type directly into the browser for command execution.

Downsides: For greater depth, you'll need to peruse the alternate resources below. In-browser execution is okay but doesn't force you to learn (and apply) it on your own machine, which you'll need eventually.

Try Git screenshot on the Viking Code School blog

Click to jump to the site

The Git Guide screenshot on the Viking Code School blog

Click to jump to the site

Alternate Resources

Step 4: Ruby Scripting

20 Hours

Now it's time to get some use out of your command line with Ruby, the high level scripting language built for programmer happiness.

Frankly, you can learn Python or even PHP instead if you'd like; it really doesn't matter in this phase. But we love Ruby because it has a massive community of supportive developers and just about every question in the world has been answered on Stack Overflow. Once you get familiar with its syntax, Ruby will always have a special place in your heart.

Your Goal

Your goal is to build a simple Tic-Tac-Toe game on the command line which can be played with two players or just you vs the computer.

Option A: Codecademy's Ruby Track and Ruby Monk

Codecademy's Ruby Track screenshot on the Viking Code School Blog

Click to jump to the site

As before, Codecademy will get you over the basic syntactical hurdles by guiding you gently through exercises. Ruby Monk will ask you to complete challenges that start to have some real meat to them. It's a quirky journey into some deeper aspects of Ruby.

Your Plan: Go through the entire Codecademy Ruby track and then tackle the full Ruby Monk Primer course to layer it on. Next, do at least the first four sections of the Ruby Primer: Ascent course (which should get fairly challenging).

Best For: Interactive learners who want a bit of hand-holding.

Downsides: Ruby monk isn't always clear what they want and some of the material jumps into the intermediate realm.

Ruby Monk challenges screenshot on the Viking Code School Blog

Click to jump to the page

Option B: Learn to Program and Learn Ruby the Hard Way

Chris Pine's Learn to Program Ruby book screenshot from the Viking Code School Blog

Click to jump to the page

Chris Pine's Learn to Program is a condensed Ruby book and a good introduction to the language for people with a bit of scripting experience (like you have now with Javascript). Learn Ruby the Hard Way by Zed Shaw is a text-based web book that goes into much more depth.

Your Plan: Go through the entire web version of the Learn to Program book and then dive into LRTHW (or buy the full Learn to Program book and do that instead). Do the exercises presented at the end of each chapter of Learn to Program.

Best For: Textual learners and people coming in with existing scripting experience who just need a translation of syntax.

Downsides: LRTHW can be a bit opaque but should be within reach.

Learn Ruby the Hard Way by Zed Shaw screenshot from the Viking Code School Blog

Click to jump to the page

Alternate Resources

Step 5: Databases

5 Hours

You can't build a web app without thinking about data. In fact, data is the critical backbone of any true web application so it will need to be top-of-mind regardless of whether you end up working mostly in the front end or back end.

Our goal here is simply to give you a taste for what's going on in databases and a bit of SQL syntax which will come in handy when you actually employ a database in the future.

Your Goal

Do the SQL Zoo's tutorials 0 (SELECT basics) through 3 (SELECT from Nobel). This should give you some practice playing with databases without actually requiring you to do any installation work on your local computer.

Option A: Udemy's MySQL Databases for Beginners

Udemy's MySQL Course screenshot from the Viking Code School Blog

Click to jump to the site

This video-based course is free and has just over 2 hours of total content. It provides a good overview of SQL.

Your Plan: Go through the entire course.

Best For: Video learners.

Downsides: It'll go a bit quick if you haven't seen this stuff before. Consider doing the course below as well.

Option B: Stanford's Intro to Relational DBs and SQL Sub-Courses

Stanford's Coursera Databases course screenshot from the Viking Code School Blog

Click to jump to the site

These two sub-courses are part of a larger Introduction to Databases course from Jennifer Widom of Stanford. They are also primarily video-based and represent pretty much the best the free Web currently has to offer for database training.

Your Plan: Go through both sub-courses and do the quizzes they offer.

Best For: Those who like the MOOC-style learning.

Downsides: It's a bit 1990's and a bit deep on irrelevant-to-you technical details but you can stick with it.

Alternate Resources

  • UMass Boston's CS630 Handout 1 (Database Theory) and Handout 2 (SQL) are in-depth text-based resources. Consider them beyond our scope here but interesting nonetheless.
  • W3 Schools' SQL Tutorial is a no-nonsense walk through the syntax and usage of SQL. Follow the "Next Chapter" links at the top right and bottom right to navigate.
  • Learn SQL The Hard Way from Zed Shaw is an incomplete book which walks through the basics of SQL. It's good because it can be followed in tutorial format but it's not the most user-friendly in the world.

Step 6: The Ruby on Rails Framework

25 Hours

Rails is the "Killer Framework" of Ruby (and perhaps the last 10 years as well). It allows you to rapidly build production-ready applications while maintaining the control you need to make them 100% customized. This website is built on Rails.

Our goal here is to give you a taste of building something on Rails and going through the end-to-end steps of producing a functional web app. Whether or not you use Rails in the future, this should give you a good taste of "MVC" web frameworks and a sense for what all the fuss is about with Rails.

If you're committed to using Rails on your local machine (which you'll need to actually build a Rails app), check out the installation instructions here (RailsApps), here (Go Rails, Mac OSX), here (One Month Rails, Windows track) or here (EngineYard). Installing Rails usually means lots of time debugging things on the command line (especially if you have Windows), so bear with it! Otherwise, look into a free hosted virtual machine from which will have it already installed.

Your Goal

To build the world's simplest Blog application on your own machine without "cheating" too much by using a tutorial. It should be able to create Posts, read Posts, update Posts, and delete Posts.

Option A: Codecademy's "Make a Rails App" Track

Codecademy's Rails track screenshot from the Viking Code School Blog

Click to jump to the site

This fully in-browser application will not require you to do any installations on your own so you can skip that rite of passage. As with all Codecademy lessons, it'll hold your hand a fair bit.

Your Plan: Do the entire track.

Best For: Anyone totally new to Rails who might not want to go through the installations process before trying it out.

Downsides: don't have to go through the installations process, so you don't really have ownership of your code.

Option B: The Rails Guide Tutorial

Rails Guides tutorial screenshot from the Viking Code School Blog

Click to jump to the site

This simple tutorial is hosted by the Rails Guides, the primary documentation for the Rails framework.

Your Plan: Install Rails and do the tutorial on your own machine. Try reading it through once first to see how much you can understand (probably not a lot yet!).

Best For: People with a bit of prior Rails experience or dedicated text learners.

Downsides: It gets the job done but it's a bit dry. You're on your own, so you'll need to debug your own error messages.

Alternate Resources

  • Rails for Zombies by Code School is a fast-moving in-browser introduction to Rails. It's a good course to take after you've already had a bit of exposure to Rails because it will otherwise probably feel a bit overwhelming.
  • Learn Ruby on Rails book (PAID) from Daniel Kehoe is a gentle tutorial-introduction to the Rails framework
  • One Month Rails (PAID) is a tutorial which walks you through building a Pinterest clone.

Where to go Now? Choose Your Own Adventure!

Choose Your Own Adventure

If you've followed the plan above, you've invested roughly 100 hours to get a good sense of what the web stack looks like and a solid grasp of the fundamentals of programming. You've tried out a number of different resources and technologies.

It's time to self-evaluate. Which of the previous steps did you enjoy learning the most? Which resources did you find to be the most helpful? Basically, what sparked your passion?

  • If you enjoyed working with HTML and CSS but couldn't for the life of you figure out how Javascript or Ruby did their magic, that's okay. You might be in a good position to try out web design or UX or product roles.
  • If Javascript and building in the browser felt the most natural for you, stick with that.
  • If you were most comfortable being in the driver's seat on the server-side or thinking about data models, you'll want to look deeper into Ruby and Ruby on Rails. Another popular option is Python/Django.
  • If you loved the Javascript language but also dig working with servers and data, you might consider pursuing Node.js, which is part of the MEAN Stack for full-stack Javascript. You'll find it less beginner-friendly than some of the other options due to its relative youth but the support and community are growing quickly.

Don't stress out about the decision -- once you learn one language well, it's much easier to jump into another later.

Regardless of which direction you choose, your goal should be to start building. We'll dive much deeper into how you can navigate this process in the next post, but the moral of the story is that you need to roll up your sleeves and build. Do whatever it takes to move from the toy projects you've created so far towards constructing more meaningful applications.

The first time the training wheels come off and you need to build something on your own is a difficult transition but it's why you're learning this stuff in the first place. As long as you've found your geek passion, you'll have the necessary motivation to push through and kick some butt.

You might even impress yourself along the way.

Good luck!

Special thanks to Nick Peterson, Peter DePaulo, liningcode, and Michael Alexander for helping to debug these thoughts.

Erik Trautman of Viking Code School wrote this on Feb 26, 2015

Learn to Code with Thinkful

Take the proven path to a high-income career with professional mentorship and support, flexible ways to pay, and real-world, project-based learning.

Share this article