• Advice

Learn by Doing: Lessons from a Programmer

Want to learn smarter?

Every day, millions of people around the world learn to code. And whether it’s through online courses, books, podcasts, or online communities, many of these people are choosing to forgo a “traditional” education (a college degree) and are instead learning by doing. This should be old news for most of you who have seen the meteoric rise of sites like Treehouse and

These programs seem to be a result of widespread dissatisfaction with the way we typically learn. While it’s common knowledge that people actually learn by doing, practicing, messing up, building and messing up stuff, these new platforms are bringing knowledge to life -- and inspiring those of us in other fields to teach & mentor others in new ways.

Build Stuff

I talked with Mark Nathan, the Chief Technology Officer of Freelancers Union, about how people learn to code.

Mark recommends that beginner programmers start with step-by-step tutorials that lead you through very simple projects. This lets you get your hands dirty right away. “If I want to learn a new programming language, I pick a project I want to do first. I don’t want to take a course. I just want to build and get started.”

This is much more satisfying than trying to stuff your brain with facts. “You’ll end up with something you can touch and feel, something you can feel good about,” even though it’s a very simple thing straight from the example.

Don’t get caught in the details

When you learn to code, don’t try to become a master of the details. “If your goal is to build a website, just find a way to quickly set it up. Have something working that you can tweak,” Mark says. Skip over all the advanced stuff and start building. “Don’t become a master of the tools. It’s not useful to know all the stuff people who have been doing this for ten years know.”

Learning a lot of stuff first and doing later slows everything down and can be frustrating. Trust that you’ll learn along the way.

Customize It

After you do the example, you might still not have an idea each individual parts and how they work behind-the-scenes (deep-level knowledge), but you will be able to tweak things (color, tabs, text, systems) to make it your own. This tinkering is an important part of learning: it cements the process in your brain.

“It’s just like cooking,” Mark says. “You decide you want to cook tilapia. Find a recipe, cook it two or three times. Then change the spices around to what you like.”

Throw It Out

Mark normally throws away his first draft of a project. But through the process of making and fixing the not-good thing, he learns the elements. He knows what’s important. So he just does it over, and considers it time well spent.

The Problem of Perfection

Expert programmers build broken code. They build stuff that just doesn’t work at first. The thing that makes you an expert isn’t building perfect working lines of code, but knowing what to do when something doesn’t work and the mindset that whatever it is, you can get around it another way.

This teaches programmers not to be discouraged by failure. “It’s hard to get used to failing,” freelance front-end developer Phanousit Syhakhom says. “It can be frustrating when things don't work and you don't really know why, but when the problems are fixed and things work, you'll understand and appreciate how things work more.”

Diligent Practice

All this doing and redoing, refining and throwing away -- it takes time. A lot of time. But the value of that time is not spent memorizing code, or learning exactly what code to use in certain circumstances.

You’re actually learning how to adapt. How to approach a problem. How to debug and fix and move on. “It’s problem solving,” Phanousit says. And the more problems you solve, the more flexible you become. This mental flexibility and deep-level confidence in your ability to adapt is more valuable that knowing a lot of facts about stuff -- for programming and for any field.

Join the Community

There are a number of tech communities online to support you when you have questions or run into a wall. “It’s very D.I.O. - Do it Ourselves,” Mark says. “It’s a thriving community. There’s an incredible amount of information on these websites, like StackOverflow. Any question you have, you’ll find a dozen answers there. It’s so much faster than going to a textbook.”

This resource only exists because thousands of developers were willing to spend thousands of hours participating in these communities and helping new learners. This is only one of many open source communities popping up around learning new things, from cooking to hand lettering. Learning from each other, enabled by technology, is quite simply a more efficient way to learn. (And it also makes us feel connected, which makes us happier.)

Getting the Gig

One of the biggest issues with self-learning is the perception that it’s less valuable or less thorough that a traditional education. Programmers and developers have been breaking this perception for years, and I suspect where technology goes, the rest of the world will follow.

In programming, it’s what you build, not your degree, that matters. A portfolio (or GitHub) filled with your code is a better resume than anything.

The only way to break the perception that this kind of learning is inferior is to have lots of self-taught become successful. And that starts with us. This is not to say that a degree is inferior -- just that this new model of community-supported, self-initiated learning also deserves (and is receiving) recognition.

Freelancers, as entrepreneurial, independent people, have always been the avant-garde of this new educational movement. Is this how you learn?