I get asked the question a lot, “How do I learn how to write code?” or “How do I become a programmer?” Since there is such demand, I thought it would be a good idea to clarify the approach I use to learn anything related to code.

This is the approach I used by accident starting at age 11, and I’ve been using it ever since. Along the way I’ve learned and used the following languages, technologies, frameworks, etc..

  • C
  • C++
  • Assembly
  • Java
  • C#
  • PHP
  • Ruby
  • Python
  • JavaScript
  • CoffeeScript
  • Objective-C
  • Swift
  • HTML/CSS
  • Scala
  • Kotlin
  • Go
  • NodeJS
  • Ruby on Rails
  • Django
  • Zend Framework
  • Play Framework
  • Adobe Flex/ActionScript
  • jQuery
  • React
  • KnockoutJS
  • Kendo UI
  • MySQL
  • PostgreSQL
  • MongoDB
  • Torque 2D
  • CoronaSDK
  • Allegro library
  • Vim
  • Emacs
  • WordPress
  • A dozen other things I’ve already forgotten…

That is to say, this process works and will continue to work for me every time I use it.

In fact, it might the the most fool-proof mechanism I’ve ever used to learn and grow throughout my career. It’s also the simplest approach I’ve ever seen.

The Simple Learning System

  1. Pick software you are excited to build
  2. Each day write at least 1 new line of code for what you are building
  3. When you finish building your project, pick new software to build
  4. Repeat this process every day forever

This is the basis for my entire career as a software developer. It seems too simple right?

Did I miss something?

Nope. Slow down buckwheat, in a moment I’ll explain why you think there are missing parts. You can go faster by going slower.

Patience.

Most People Never Get Good At Programming

Before explaining why this approach works so well, it’s worth explaining why other approaches suck. The fact is, most people who take up “learning to code” never really learn.

If I were to venture to guess, 50-80% of people who think about “learning to code” never get started. Of those who start, another 50-80% never advance beyond a beginner level.

Only a fraction of a fraction of the population ever go beyond introductory courses in programming. The reasons for this are usually things like:

  • The course was too hard
  • It was boring
  • I didn’t like it
  • I’m just not good at programming
  • The teacher was mean and gave me a bad grade

There is an infinite number of excuses but none of them have anything to do with the inherent difficulty of programming computers.

The basics of programming are no more difficult than the basics of reading or math. In fact, they are simpler than either and can be taught far quicker.

So Why Do So Few Ever Develop The Skill?

The skill of programming is better described as “building software” and most traditional approaches don’t teach people to build software. They teach them about programming languages, theory, how computers work, and ten other things that new programmers shouldn’t waste their time on.

Programming is about building software that is useful to a user. The best way to get good at that is to build software that is useful to a user.

When a course strays away from building real software, it strays away from the reason that people get into the programming business in the first place…

TO BUILD SOFTWARE!!!

And actually…

Most don’t really want to build software, they want to build apps, games, or some particular thing that lives inside their imagination.

And that is the point.

Developing A Healthy Obsession

Have you ever met a really good musician? Every great musician I’ve ever met was totally obsessed with music. They would practice their instrument for hours and hours and hours long after everybody else stops.

What about great athletes? Guys like Peyton Manning, Michael Jordan, and Kobe Bryant are famously obsessed with their sport. They practice and train even when everybody else is sleeping.

What about great writers? The best writers write a lot. Every day. They will obsess over their latest book or article until it’s done. It can take years.

What about doctors? To become a doctor you must do a 4 year undergraduate program, 4 years of medical school, and 3+ years of residency, and 1-2 years more to build their practice.

That is 12-15 years to become a doctor. Talk about obsession!

But there is a secret to all of those examples…

People Do What They Enjoy

In every case listed above, the people were doing what they enjoy. They wanted to be there practicing, training, and growing.

Nobody forces you to practice or go to medical school or write a novel.

At some point the work and the process is something you put yourself through because it’s what you want to do.

It’s enjoyable even if it’s hard!

When people get no joy from what they are doing, they stop doing it.

Which leads us back to The Simple Learning System…

Creating Software Should Be Awesome!

The fact is, if you are the kind of person that enjoys building software, writing code is awesome. I don’t mean easy, I mean enjoyable.

It should make you feel good.

When you build software that you care about, it feels good. If it feels good, you will do it more. The more you do what feels good, the more you want to do it.

It’s a feedback loop. My Simple Learning System is built on that feedback loop.

The Simple Learning System Explained

Let’s go back to looking at the system and I’ll explain each step.

  1. Pick software you are excited to build
  2. Each day write at least 1 new line of code for what you are building
  3. When you finish building your project, pick new software to build
  4. Repeat this process every day forever

Pick Software You Are Excited To Build

This is the foundation to the system. You get this right and everything else is easier. Get this wrong and the rest falls apart.

First you have to decide on some kind of software you want to create. It doesn’t matter if it is simple or complex. It doesn’t matter if you know how to build it yet. It doesn’t matter what language or platform or tools it requires.

It matters that YOU decide what YOU want to create. It has to be something that you take ownership of.

And most importantly…

You must be excited to build it!

If you are excited to work on the project, you are more likely to show up and do the work every day.

If it feels like homework and you’d rather watch Netflix or go hang out with friends, it won’t work.

It has to be exciting to YOU.

That is the foundation. Your excitement for your project will compel you to action until it’s done.

Each Day Write At Least 1 New Line Of Code For What You Are Building

Once you are excited to build something, you start by building it. Every day you must make progress on the project. There is a reason for this.

If you make at least one line of code change every day, two things happen…

First, you make progress.

Second, you learn new things.

Again, this is a feedback loop. Software projects tend to stall out and die when they stop making progress forward.

So, the rule of one new line of code each day forces forward movement, even if the smallest incremental amount. If you make progress every day, you can build any software given enough time.

You don’t skip days. You don’t skip code. You don’t skip progress.

The other thing that happens is, once you have forward movement, it builds momentum and energy. Momentum and energy propel you forward even faster.

So, what starts as just a small code change turns into cool new features and hundreds of lines of code without you even noticing.

You get into flow. Flow is a powerful force in itself to master.

That being said, a cool thing happens when you have that flow…

Learning and building becomes easy and automatic. Your brain makes connections and solves problems because you have momentum. You start to see the end of a feature or idea and you keep pressing forward without even noticing.

Time distortion happens and hours go by. On the other side of those code sessions you’ve learned new things, refactored code, built features, tweaked the design, and are proud of your work.

And yet nobody told you to do any of that. You wanted to. You were compelled to do it.

It became your obsession in the best possible way.

Another Amazing Thing Happens Along The Way Too…

You will start learning things just to make your software better. Maybe you will want a nicer UI or for it to perform faster. Guess what?

You’ll start figuring out how to do those things because your software will need them!

All of a sudden, instead of waiting for a teacher or course to tell you what to do next, you are searching for answers to questions you’ve never had before and doing everything in your power to find them.

That is how I learned that long list of technologies at the top of this article. I was building software and those were the tools I used along the way.

It was easy and automatic because I wanted to build something I was excited about.

When You Finish Building Your Project, Pick New Software To Build

This is where the entire system starts to turn into an endless loop. If you get to the point where your software project is done, go back to the first step.

Find a new software project you are excited to build.

Go back and reread that section if you’ve forgot the criteria. It’s still there.

The looping nature of this step is critical to maintain momentum and energy around this process.

It’s like being on a diet or exercise program. It works when you do it, it stops working when you don’t.

When you take days off or weeks between projects, apathy sets in and you loose that good feeling of doing the system.

Feedback Feels Good Along The Road To Mastery…

The feedback makes you feel good. When you take the positive reinforcement away, the system falls apart.

So, after you finish a project you go find another project. You never stop finding projects. You keep building software forever.

Decades will roll by and you will find yourself in “retirement” sitting at a keyboard building some software you are excited about.

At that point you will be a Master Programmer. It is the equivalent of an 80 year old 8th degree black belt practicing his Tae Kwan Do forms.

We should all be so lucky as to write code until the day we die and enjoy it. That is a beautiful thing.

Which brings us to the last step in the system…

Repeat This Process Every Day Forever

As you can tell, this system is about looping and iterating over things that work and never stopping. This step sounds redundant.

It isn’t redundant.

In fact, this step is as critical as step one, maybe more so. Here is why…

If I took every step away from this system, I could replace it with one step and get 50-80% of the result. Here is that step…

Write Code Every Day.

If you wrote code every day, you would learn to code and eventually get quite good at it. The process might be boring and you’d be very likely to quit at that point, but they would learn.

However, the reason that isn’t the system is simple. Writing code every day for its own sake isn’t very motivating.

Building software you are excited about is motivating.

So, when you take building software that you are excited about, and you write code every day for that software, you will want to do that every day forever.

And that is why I’ve put them together. It is more motivating than just writing code by itself to most people. The more motivated you are, the more likely you are to do it.

And thus, that combination is more powerful than the sum of the parts.

When you put it all together, you are motivated to learn and grow every single day. Any person who makes progress every day ends up learning a lot along the way.

Questions and Edge Cases

A quick recap, the Simple Learning System is this:

  1. Pick software you are excited to build
  2. Each day write at least 1 new line of code for what you are building
  3. When you finish building your project, pick new software to build
  4. Repeat this process every day forever

And there are usually some questions, so I’ll answer a few here. If you have a follow up question, email me at brian@codecareergenius.com.

What if I’m not excited to build anything?

If you aren’t excited to build software, you are probably in the wrong business. Maybe you should build cabinets or become a doctor or work on cars for a living?

Do you have any ideas on what I should build?

You should build the software you are excited about. I learned programming in C because I wanted to make my own video games. After learning a few basics, I went about making my own video games.

What if I don’t know Java/Swift/JavaScript/Whatever?

Go learn whatever language you need to build your software. That is the point. If you want to make iPhone apps, learn Objective-C or Swift. Want to build web apps? Learn PHP or Ruby. Want to build and operating system? Learn C or Assembly.

This sounds hard, is there a shortcut?

This is hard and it is the shortcut.

How can I speed up the learning process?

Start now and show up every day. Keep at it for months or years. That is the fastest way to learn.

Do you really do this yourself?

Yes, I do. Even now, I still do this. It’s not always code. For example, lately it is with this website. I am learning more about marketing, advertising, making videos, teaching, and helping people like you learn to code. Different skills, same system.

What if I skip a day?

No big deal, get back to it the next day.

What do I do if I’m not excited about a project anymore?

That is where step three comes in. You must find a new software project you are excited to build. We all get burned out on something. It can be good to pick up something else and build that instead.

Can I work on more than one project at a time?

No. You should only work on one project at a time. This is for reasons of focus and momentum. If you work on three things at once, you only progress at one third the rate. Momentum requires progress. Less momentum gives you less motivation.

Work on one project at a time.

Can I use this with programming books?

Sure, if they fit the program. The big thing is to be excited to go through the book and do the exercises. If you are motivated and excited to work through the book every day, then it will work great. If the book isn’t excited, then you’ll treat it like homework. (and not do it!)

What about programming bootcamps?

Bootcamps can be great, but they are very expensive. My problem with them is not the price, but the problem with other traditional learning systems. Are you building something you are excited about every day? Will you keep doing that after the bootcamp?

Ask yourself this question, if they don’t tell me what to build, will I build anything? If the answer is no then the bootcamp won’t solve your motivation problem long term AND it won’t fit this system of lifetime learning.

Can you coach me or mentor me on my project?

Yes, I offer coaching services to those wiling to do the work. That isn’t everybody. I only offer coaching to those who are subscribed to my newsletter or who contact me directly.

How do I contact you if I have other questions?

If you have a follow up question, email me at brian@codecareergenius.com.