An Outline to Learning To Code in 1 Year

15 hours/week for free

I always had an inclination towards entrepreneurship even from a young age. However, a little over a year ago I reached a tipping point. I felt frustrated and handicapped by my inability to quickly build and create. I felt dependent on developers to create my vision. I decided to take success into my own hands and learn to code.

Now that I had decided to learn to code, I had a new challenge. How could I learn to code on a budget while still working full time? Unfortunately, I was not in a place where I could quit my day job and focus fully on coding.

Here’s the good news: there are a ton of resources available online.

Here’s the bad news: that information is scattered and disorganized. As a newcomer, it was very difficult to make sense of it all and find the right resources that fit my particular learning style.

I’m glad (and relieved!) to say that after a year I managed to land my first software position. And 6 months after that I decided to leave and launch my own startup ScienceVest.

I wanted to create the following guide to help others in a similar position become professional software developers quickly and cheaply. And hopefully help others build out their own entrepreneurial ideas along the way. The real moral of my story is that there is no excuse. You don’t need to quit your day job to become a developer. You don’t need to go to a boot camp to become a developer.

What you DO need is perseverance and effort. It’s not an easy journey but I whole-heartedly believe that everyone has the ability to learn how to code. Buckle up, it’s going to be one hell of a ride.

This curriculum is intended to make you a competent/employable web developer, it takes many years to become an expert.

Reading material before we start:

Some notes before you start:

Throughout the following guide, a good amount of topics and items are intermittently repeated. My theory is that repeating concepts we have already gone over after acquiring some new knowledge will allow you to build deeper and more developed insights. Sometimes having a slightly different explanation can also give you a new perspective that better fits within your learning framework.

If at first you feel like everything is going over your head, don’t worry. It’s totally normal. Keep pushing forward if you don’t understand something. Feel free to take a bit longer on certain subjects but if you spend more than 30 minutes stuck on a subject, move forward (copy & paste if you have to).

This is important especially during your first 6 months. You have to trust that through repetition, the material will eventually click further down the line. If you finish any given week early, I would recommend getting a head start on next’s week material. There will be places where you may struggle so give yourself some buffer time to fall behind.

I have tagged each item with an estimation of how much time it will take to complete but obviously this is dependent on everyone’s learning speed. I tried to stay well under 15 hours per week to account for any inaccuracies in my time estimates. Let me know via the comments or on Twitter if you spot any error or if my estimates are way off.

Everyone learns differently, you do not have to use this as a definite guide. In fact I think experimenting outside of this framework will be beneficial. However, I do think this guide can be the backbone of your learning.

Curriculum

Month 1:

Let’s get started! The first month is where most falter, get past this difficult month and things will get easier. Are you up for the challenge?!

Week 1:

If you are already pretty familiar with basic ruby you can just browse through this week.

Extra resources if you finish early:

Reminder: You do not have to get everything! Do not get stuck on anything for too long. Just copy & paste or skip it if possible. Move forward and you will run into it later on in this course once you have more knowledge.

Week 2:

This week we dive into Chris Pine’s famous “Learn to Program”. This is a great introductory book to the Ruby programming language and basic algorithms. Some of the problem sets might be difficult for you if you are completely new to programming. Do not spend more than 30 minutes on any problem, just look up the answer if you really can’t figure it out. Make sure you get through the whole book this week, it’s doable.

Extra resources if you finish early:

Reminder: You do not have to get everything! Do not get stuck on anything for too long. Just copy & paste or skip it if possible. Move forward and you will run into it later on in this course once you have more knowledge.

Week 3:

This week we start work on the Rails Tutorial by Michael Hartl which almost every Ruby on Rails programmer has gone through at some point early in their learning. This week is focused on getting your development environment setup and working with a very simple toy app to get familiarized with the format of the book.

Extra resources if you finish early:

Reminder: You do not have to get everything! Do not get stuck on anything for too long. Just copy & paste or skip it if possible. Move forward and you will run into it later on in this course once you have more knowledge.

Week 4:

It’s time to continue Mike Hartl’s Rails Tutorial. Here you will work on some basic static pages, get introduced to testing and review a bit of ruby. After this week I would recommend not dwelling too much on testing. However if you feel comfortable by all means go ahead and follow all the testing examples. My advice would be to just copy and paste anything related to testing if you don’t understand it. We will dive into testing later on in the year’s curriculum.

Extra resources if you finish early:

Reminder: You do not have to get everything! Do not get stuck on anything for too long. Just copy & paste or skip it if possible. Move forward and you will run into it later on in this course once you have more knowledge.

Month 2:

Wooooo! Month 2!

Week 5:

Great Job getting this far! If this is your first serious programming some of this might seem like it doesn’t quite make sense. It’s okay, that happens to everyone. Keep pushing though and try to absorb the most important concepts. We will consolidate everything throughout the rest of this course. This week is a very important week, you get to learn how to model users. Pay attention, you will be doing a lot of this throughout the next few months.

Extra resources if you finish early:

Reminder: You do not have to get everything! Do not get stuck on anything for too long. Just copy & paste or skip it if possible. Move forward and you will run into it later on in this course once you have more knowledge.

Week 6:

It’s time to do some serious coding! Learn how to deal with users and create sign-up and log-in functionality for your apps!

Extra resources if you finish early:

Reminder: You do not have to get everything! Do not get stuck on anything for too long. Just copy & paste or skip it if possible. Move forward and you will run into it later on in this course once you have more knowledge.

Week 7:

I can’t stress enough how important it is that you keep moving forward! You are almost done with the Rails Tutorial. You have come a long way and have a much stronger understanding of what a Rails application entails. Keep going!

Extra resources if you finish early:

Reminder: You do not have to get everything! Do not get stuck on anything for too long. Just copy & paste or skip it if possible. Move forward and you will run into it later on in this course once you have more knowledge.

Week 8:

Well done! This is the end of the Rails Tutorial book by Michael Hartl. While much of the information may have not quite sunk in yet, there is no denying you know much more than you did just 6 weeks ago. We will shore up all of those confusing concepts in the coming weeks. But first, make sure to finish this section!

Extra resources if you finish early:

Reminder: You do not have to get everything! Do not get stuck on anything for too long. Just copy & paste or skip it if possible. Move forward and you will run into it later on in this course once you have more knowledge.

Month 3:

Project #1

Great job! As a reward you get to pick a project to work on now!

Pick a simple project you want to build. You do not need to feel ready for it but should at least feel that you might be able to complete it.

I recommend picking something simple like a Todo-list application, Facebook clone or a Pinterest clone (these are all great because there are tutorials online that you can fall back on if it becomes too difficult).

Do not spend too much time deciding, just pick something. The important thing to do is to start coding so you know what you don’t know. It might feel scary, but this is something that you must do. Use this first week to try and do it all yourself and see how far you can get! Try it without looking at any tutorials with the exception of the Rails Tutorial to serve as a reference.

Next week we will let you start using other tutorials but for now you must do this on your own, push yourself and see how far you can get!

Note: Do not pick a Blog or a Reddit Clone since we will be doing those in later weeks.

Week 9:

Extra resources if you finish early:

Week 10:

Work on Project #1 — You may now look online for more help on this project. (11–13 hours)

Watch How To Build A Recipe Box in Rails 4 (2 Hours)

Extra resources if you finish early:

Week 11:

Work on Project #1 — You should start getting a sense for how much more there is to learn, this is crucial. We need to know what we don’t know! (11–13Hours)

Watch How to Build A Pinterest Clone in Rails 4 (2 Hours)

Extra resources if you finish early:

Week 12:

Here we introduce “Learn Ruby The Hard Way” by Zed Shaw: Move through this book fast! There are lots of parts in this book that you should already be familiar with from previous tutorials, if so just skim through that section and get ahead. You do not need to memorize everything or be able to solve every problem. Just try your best and if you get stuck on something, move on!

This week we also get started on Schneems Database and Rails class from the University of Texas. This mini course was one of the most useful tools in my own learning. I hope you enjoy it as much as I did:

Extra resources if you finish early:

Month 4:

More UT on Rails & Learn Ruby The Hard Way!

Week 13:

Extra resources if you finish early:

Week 14:

Extra resources if you finish early:

Week 15:

Extra resources if you finish early:

Week 16:

Extra resources if you finish early:

Month 5:

Congratulations on making it this far!

Week 17:

Extra resources if you finish early:

Week 18:

Extra resources if you finish early:

Week 19:

Extra resources if you finish early:

Week 20:

Extra resources if you finish early:

Month 6:

Back to practice & real life coding! Now that you have a lot of the fundamentals we will be doing

Much more real coding than the previous 5 months.

Project #2

For Project#2 try to pick something more difficult than your previous project. I recommend an online store utilizing the Stripe API to get some exposure to new things. It will be challenging and push you to do things out of your comfort zone. Plus, there are tons of tutorials to help you along the way.

Note: Do not pick a Blog clone since we will be doing that in later weeks.

Week 21:

Extra resources if you finish early:

Week 22:

Work on Project #2 (11–13 hours)

Watch How To Build A Movie Review Site in Rails 4 (1–2 Hours)

Extra resources if you finish early:

Week 23:

Work on Project #2 (11–13 hours)

Watch How To Build A Jobs Board App in Rails4 (1–2 Hours)

Extra resources if you finish early:

Week 24:

Extra resources if you finish early:

Month 7:

Here we introduce the Rails 3 Way by Obie Fernandez. This is the one book I consider the most important in all of my learning. I link to the Rails 3 Way because there is a free ebook version online and its very, very similar to Rails 4. If you can get the Rails 4 Way from the local library or afford to buy it by all means do that but it is not necessary.

Week 25:

Extra resources if you finish early:

Week 26:

Extra resources if you finish early:

Week 27:

Welcome to week 27! Here we introduce Test First Ruby. It’s a great introduction to test driven learning and gets you working on some more complicated pure ruby algorithms. Make sure you keep pace with the Rails 3 Way book readings!

Extra resources if you finish early:

Week 28:

Extra resources if you finish early:

Month 8:

I expect that you are starting to feel a lot more confident in your abilities. Let’s put those to use with our 3rd project.

Project #3

Pick something already! You may even be able to complete two projects if your skills have increased enough. Get ready, set, goooooooooooooo!

Week 29:

Extra resources if you finish early:

Week 30:

Extra resources if you finish early:

Week 31:

Extra resources if you finish early:

Week 32:

Extra resources if you finish early:

Month 9:

After doing most of the required readings from the Rails Way 3 book and working through yet another project you must be feeling a lot more confident in your abilities. This month we will be gearing up to make you a more complete and employable developer. Our focus will be to give an introduction of AngularJS, Web API’s and get you some real experience with Rails testing using Minitest.

Week 33:

Extra resources if you finish early:

Week 34:

Extra resources if you finish early:

Week 35:

Extra resources if you finish early:

Week 36:

Extra resources if you finish earlier:

Month 10:

Time to work on another project! Try to build this project using TDD with your new knowledge on Minitest. Since this is your first time writing tests for an application it’s okay to build out each feature of the project and then write the test after you have finished each feature.

Project #4

Week 37:

Extra resources if you finish early:

Week 38:

Extra resources if you finish early:

Week 39:

Extra resources if you finish early:

Week 40:

Extra resources if you finish early:

Month 11:

The following month is to get you prepared for Jr Ruby on Rails interviews! Each week I share 1 coding challenge that I was asked by companies when I first started interviewing for positions. Make sure to write tests for these challenges and submit them in their own Github repository with a ReadMe that explains your solutions and gives instructions on how to run your program/code if needed. Really do make sure you write tests and submit it with a ReadMe! This is very important; I was rejected from the first 2 positions because I did not know this was something companies implicitly expected.

Similarly, I expect you to get together a quick resume highlighting your previous projects and start applying to 5 Ruby on Rails jobs or internships every week. Even if you feel you aren’t ready you need to do this. This will be the strongest forcing function on your learning. I went through 2 cycles of 2–3 weeks where I applied. The first cycle taught me what I still needed to learn and then I was able to get a job on the second cycle. Trust me, just apply.

Week 41:

Challenge #1 You have an array of integers, and for each index you want to find the product of every integer except the integer at that index. Write a function get_products_of_all_ints_except_at_index() that takes an array of integers and returns an array of the products. For example, given: [1, 7, 3, 4] Your function would return: [84, 12, 28, 21] By calculating: [7*3*4, 1*3*4, 1*7*4, 1*7*3] Do not use division in your solution.

Extra resources if you finish early:

Week 42:

Challenge #2 Create a function that will scale the aspect ratio of image dimension ([w,h]) to fit inside of a 200x200 box by using scale to fit. Meaning that one side, the width or height, will be 200 and the other will maintain the aspect ratio. The function should be able to take in an array of multiple w,h pair ([w,h,w,h,w,h,w,h]) and return an array of the scaled down ratios sample input: [200,200] [400,200] [1256,1200, 600, 800, 200, 200, 400, 200, 800,1256] sample output: [200,200] [200, 100] [200, 191, 150, 200, 200, 200, 200, 100, 127, 200] each array is its own input that corresponds to its own output. So the first input array corresponds to the first output etc.

Extra resources if you finish early:

Week 43:

Challenge #3 Write a program for managing locker reservations at a hotel concierge desk. Customers leave bags with the concierge, who then uses your program to determine in which locker to place the bag. The program tells the concierge the number of the locker in which to place the bag, and prints a ticket to give to the customer. Upon return, the customer provides the ticket, and the concierge uses that to look up the corresponding locker, retrieve the bag, and return it to the customer. There are 1000 small lockers, 1000 medium sized lockers, and 1000 large lockers (it’s a big Vegas hotel). You can assume that all checked bags fit into one of these three sizes. The program should always assign the smallest available locker that fits the bag.

Extra resources if you finish early:

Week 44:

Challenge #4 Create an Elevator System class that manages all the elevators in a high-rise. The behavior of the cars in response to button pushes can be any reasonable scheme of your own defining. For example, if someone on the fifth floor pushes the “down” button, what are the factors that will determine which car or cars are sent to service that request? Come up with your own spec that answers such questions. The main interest is in seeing your design and implementation for meeting that spec. Notes: Feel free to create additional classes and internal objects; whatever you feel you need to model the elevator system well. The code doesn’t need to be complete if you don’t have the time. Primary concerns are design and algorithmic sense. The priorities are: class hierarchy and object model, public interfaces, major member variables, important private methods, implementations. However, every major method of every major class should at least have a pseudo code implementation that explains what that method would actually do. Also, at least one complicated method should be implemented in real code. Assume you’ll have an API for sending commands to the physical cars themselves and for receiving notifications about things like button presses on the floors and in the cars and the current positions and movement of the cars. Define how you’d want that API to look and what you’d want it to do for you. You don’t have to implement any of these functions.

Extra resources if you finish early:

Month 12:

You know the drill, work on a project for this whole month. Try to use TDD and implement as many of the things that you have learned over the past 11 months.

Project #5

This is a project that you really want to be able to showcase to potential employers and be proud about. You are ready, own the fact that you are ready and get to work.

Week 45:

Extra resources if you finish early

Week 46:

Extra resources if you finish early:

Week 47:

Extra resources if you finish early:

Week 48:

Extra resources if you finish early:

The End

You will notice that this course spans 48 weeks while a year actually has roughly 52 weeks. This means that you should have about 4 extra weeks during this time frame. These 4 weeks can be used to review something that never quite stuck from previous months, interview for jobs, build out your portfolio, or move on to new topics.

Here are my suggestions on where to go from here:

Get an entry level job and have someone pay you to continue learning!

Contribute to an open source project

I sincerely hope you make it and truly do learn to code. It is one of the most empowering skills to have in this day and age. I understand that the path I have laid out is far from perfect and everyone takes different paths. If this guide helps at least one person make that leap into the amazing world of programming then I will consider it successful. Thanks for reading this far and good luck!

P.S. if you are interested in solving problems in science and scientific funding feel free to reach out to me or someone at ScienceVest or drop me a line on Twitter!