Learn To Program For Free

A path to full-time software development

"I Just Finished CodeAcademy/Khan Academy/etc, Now What?!"

Breaking into a new career can be intimidating! Many people get stuck after finishing an online course like CodeAcademy. We want to provide free guidance necessary to get that dream job.

Success Stories

We have used this course with several people to help them break into full-time software developer jobs.

Rachel B.

Rachel was working as a baker when we started together. After nine months working this course she had her first full-time development job.

Ariel S.

Ariel graduated with a degree in music and no technical experience. Within eight months she was working as an automated tester, and now manages a team of automated testers.

Ben S.

Ben had a B.A. degree and one basic programming class in high-school. He followed this program and had a full-time development job in six months. He now has worked in both front-end and back-end development.

The Free Course

There are no shortcuts to learn how to program: just hard work!

The course is broken into sections. Each section builds on the skills in the previous sections, so don’t skip around. This is designed to teach the basic skills needed to get an entry-level development job.

Step 1 - Basic Syntax And Git

If you are already not familiar with any programming languages, then complete both of these:

You will also need to sign up for GitHub and work through their tutorial to set up git on your computer. Make a repository for the code from “Learn Python the Hard Way”. Commit and push your work every time you get something working or complete an exercise.

Commit early, commit often

Make sure you push your changes as often as possible (at least hourly). If your computer ever dies, you will have lost no more than an hour or two of work, because everything is backed up. This will have the side-effect of giving you an online portfolio of all the work you do.

Immediately commit and push any code you want to keep safe

Make a new github repository for every new language, book, or project you start. By the end of this course, you will have at several repositories of projects and book homework. This will be very effective in showing your progress to potential employers.

Step 2 - Powerful Tools

Knowing the best tools for the job will accelerate your learning. Before we get too far, you need to invest in some skills to make your learning faster. One of the fastest tools we know is called Test-driven development.

Read and work through the following post where they show you how to write basic unit tests with Javascript:

After you have finished that, we’ve provided a basic way to run tests for Python. All the code, tests, and test helpers are in the same file. This works for small TDD katas, but you will want to research how to split up those sections for larger katas.

  • To run the python tests, right-click and “Save Link As” the following files: python-tdd.py to a file called “python-tdd.py” and execute the file with python python-tdd.py. You should see the results printed out, with a . for success and a message for a failure.

We included two correct passing tests, and one failing test to illustrate a test failure. You can delete the failing test, because it is nonsensical.

Use TDD with either Python or Javascript to finish three small katas from the Kata Catalog. We recommend KataTennis, KataRomanNumerals, and KataBowling.

For the rest of the course, we recommend you do thirty minutes of kata practice every day. Redo the same kata multiple times, until you can do it effortlessly in both Python and Javascript.

Step 3 - Concrete Foundations

Armed with the power of TDD and regular kata practice, you need to invest in some foundations. These concepts can be a little slow to learn, but they are incredibly valuable. We recommend reading and completing the exercises of the first three chapters of the textbook Structure and Interpretation of Computer Programs (SICP).

SICP will help you build a mastery of basic algorithms and data structures, which are essential for interviewing practice. Complete the exercises in MIT Scheme, which can be run from either the command-line or DrRacket.

DrRacket is a general editor and code-runner for Racket and Scheme. There are many different versions of Racket and Scheme, so to run DrRacket in “MIT Scheme mode”, you need to put a header at the top of your files to tell DrRacket which language to use: #lang planet neil/sicp

When you first run a file, DrRacket will download a working version of MIT Scheme that can be used to complete the exercises. Ctrl-R will execute a file and output the results.

You can see an example of a basic test framework for Scheme in the file scheme-tdd.rkt. Right click and “Save Link As” to save the file. Open it in DrRacket, and type Ctrl-R to run the tests.

Some of the exercises are very challenging! You will probably not be able to complete every single exercise without help. This is okay! Plenty of people have posted excellent answers online for how to solve all the homework. If you get stuck and frustrated, just look up a solution and take some time to understand it.

Step 4 - Pick A Language

Almost every new programmer feels significant pressure to pick the “right language”. When you have finished the homework in the first three chapters of SICP, you will want to select a programming language to get that first job. Any language in the Tiobe top ten will do just fine.

Many skills of the different software development areas are easily learned, so what matters most are the intangibles of the job environment. Do you want to be able to go home every day at 5pm? You might want steer clear of video games or start-ups. Does the business matter to you? How important is an extra 10-15% more pay if the work is otherwise boring? Many boring big-business Java jobs make good pay with short hours. Many game jobs are rewarding in other ways, as you take pride in seeing a product unfold. You’ll want to ask yourself these questions when thinking about what domain you want to get into.

Here are some wild generalizations of how different languages are used in the industry:

  • Java (and some C#) are typical for business-oriented big-company jobs
  • Ruby (and some NodeJS) are common in Silicon Valley start-up jobs
  • Javascript is mandatory for web front-end jobs
  • C++ (and some C# Unity) are used for most video game jobs
  • Assembly and C for embedded hardware jobs (more difficult without an electrical engineering degree)
  • R or Python for data science or numerical analysis jobs (I wouldn’t attempt these without an advanced math degree or equivalent)

Take some time to research what people say about these different types of job environments, and remember these are just generalizations. Java is used for many Android mobile games. People run start-ups in every possible language. Some mega-companies have huge Perl desktop applications. As a rule, every language can and has been used for every type of application.

You will have an easier time finding a job if you pick a language is commonly used for that domain. For example, you really want to work in web development, do you want to limit yourself to the one company that forces VB6 into the browser, or the tens of thousands that just use plain Javascript?

Look around the job boards for languages used in your current location. If you want to get a job in Chicago, get a quick count of how many jobs for each language exist in Chicago. The more jobs in that language, the easier it will be to get a job!

Whatever you pick, it shouldn’t be the last language you learn. You will want to learn a new language at least once a year for the rest of your career. Most developers are able to switch languages several times in their careers. This language just has to get you that first job.

If I was picking a good “first job” language in late 2016, I’d pick one of: Java, C#, NodeJS, PHP, Python, C++, C, or Ruby. I’d likely settle on either Java or Ruby for a combination of practicality and breadth of jobs. If I lived in a place with more Ruby jobs than Java, I’d pick Ruby. I would also learn the basics of front-end Javascript so I could get into most web jobs. Remember you can always switch languages and jobs after a few years!

Step 5 - Regularly Go to Meetups

The more people you know in the industry, the more potential contacts you will have for finding a great job. A person with less skills and good contacts sometimes gets the better job.

Use a site like Meetup.com to find local meetups and user groups in your chosen language. In most major cities there are typically several free meetups every single day around programming, languages, and technology. Most even have free food and door prizes! Find the local meetups for your language, and attend every single session. Go to a minimum of one meetup per week.

Who you know can be more important than what you know

If you are in a more remote location, the meetups might be less specific. Instead of a meetup just for PHP, you might have to settle for one just about web-programming. This is fine!

Try to meet at least two people a night. Ask them what technologies they use, how they got started programming. Ask them what sort of job they have and their role. Do they have any side projects they are interested in? Most developers will light up at the chance to talk about their programming hobbies, and will talk your ear off all night! This is great, you’ve made a friend!

Let everyone you meet know that you are trying to break into the field. Ask for recommendations and suggestions. If they know what SICP is, they will be majorly impressed with your progress.

Step 6 - Small Project

Choose a small project to build yourself using your newly selected language. Ideally, it will align with the sorts of jobs that language is most commonly used for. Maybe a basic web-site for saving a shopping cart, a simple game, or a graphing calculator. Write out a list of the features you would want to see before you start.

You will want to list out all the things you will need. Perhaps you need a way to run a web site, or build an Android game. Maybe you need to store data in a file or database. Search the internet for tutorials to get those tools up and running. For almost any topic, many excellent tutorials exist that can guide you to a starting application.

Keep a list of questions, and spend some time each session searching for answers. Almost any question you have has been answered on forums, Stack Overflow, and blogs. If you have Internet, you can teach yourself to build almost any sort of programming project.

Work on this until you have finished enough that you have answered most of your own questions and implemented most of your own features. A small project provides you with a list of questions, and the motivation to learn how to research them. Second, a small project teaches you important details and technologies you would otherwise miss in katas.

Step 7 - Algorithm and Interview Practice

At this point we introduce the first non-free material. If you want to use only free materials, you can instead work through the questions on ProgrammerInterview.com. Do “Design Patterns”, “Data Structures”, and if it is there, the section on your language of choice. Search the internet for interview questions and study them.

If you can afford it, purchase the book Cracking the Coding Interview and do all the problems in chapters 1-9 in your “first job” language. If you have time, finish all the problems in the whole book. You will find most of the problems are significantly easier if you use TDD. TDD can be very effective for algorithmic work like the problems presented in this book. While it may seem slower to write tests, you only have to write them once!

Every couple of problems, take a break and complete another kata using TDD. You should be able to complete something like KataTennis in about 30 minutes from scratch using TDD. Do each kata at least a couple times, until it feels fluid and natural. These will help you learn that new language quickly.

Step 8 - Start Interviewing

At this point, you’ll be able to pass an entry-level developer interview with a very decent success rate! You’ll be well versed in the basics of object-oriented programming, functional programming, data structures, algorithms, and unit testing. You’ll have a good grasp of the basics of several different programming languages, and have a portfolio of code and projects to discuss.


Myth: I Need a Degree/Six Months of Bootcamp

Anyone with desire and drive can learn to program in their spare time. You can get a full-time programming job without any schooling or credentials. All you you need is hard work, practice, and some basic guidance!

Myth: I Need Expensive Books/Software

I have trained many people from zero to full-time programmers. We only used free resources to teach them everything they needed. They used free tools like Notepad++, Vim, Intellij Community, and Visual Studio Express.

Myth: I Need a Fancy New Computer

You can learn everything you need with just an old computer and the internet! If it can reliably run notepad and a web browser, it will do just fine. I have been a professional developer for almost a decade, and I learned much of what I know on an old Acer Aspire One netbook. It barely ran three tabs on Chrome, but it got the job done!

Myth: I Need to Pick the Right Language Now!

The first language you learn should not be your last! Ideally, you will learn the basics of two or three languages before getting your first job. Learning several different languages is very effective for training developers. Having a few under your belt gives you a breadth of understanding that helps you learn new concepts faster.

Train With Us

We offer one-one-one pair-programming and mentorship. Work through katas, get feedback through code-review, and practice interview questions together.

Our team of three instructors has over thirty years of expertise building software solutions. We each have over seven years of experience in training and pair-programming.

We can pair and offer instruction in the following languages:

  • Ruby
  • C#
  • Javascript
  • Typescript
  • Java
  • Android Java
  • F#
  • Haskell
  • Common Lisp
  • Racket
  • Scheme
  • Clojure
  • Python
  • Perl
  • PHP

Our training is $20/hour. Contact us through Steve’s Twitter