How To Start Learning To Code On Your Own
By Nick Such
There is no topic we've been asked about more than "Where should I start learning to code?". We hear this question from prospective Awesome Inc students about once a week. They’re considering one of our courses, but want to try taking the first steps on their own. This is great! We love seeing students take this kind of initiative. Their challenge at this stage is not a lack of options for learning, but rather an overwhelming abundance: how do you choose from so many seemingly-good options? And with this abundance comes the feeling of uncertainty, kind of like finding two competing products on Amazon with similar reviews. If I choose thing A, will I regret not choosing thing B? I’d like to make this process easier for people, so you can spend less time deciding, and more time learning. So, finally, it’s time to put pen to paper (err...hands to keyboard) and make this a thing.
Opinionated and Concise
There are lots of ways to begin self-guided learning of computer programming. This is my list. It is different from other lists you may see out there, and that’s ok with me. A few reasons I’ve picked these things:
Approachable over Comprehensive. I’d rather you make big progress toward a small goal, than small progress toward a big goal.
Active over Passive. You’d more effectively learn to play basketball by clumsily shooting hoops at the park than by watching experts in the NBA Finals on TV.
General over Specific. I’d rather you understand a concept than be able to implement it in PHP 7.
This is also a short list. I can’t give you a comprehensive list of how to finish learning programming because I don’t think you should ever stop learning. So I’ve chosen to focus on the beginning of your journey, how to start. Could you go off and learn DevOps, Rust, Machine Learning, and COBOL from here? Sure! In fact, my goal is that you will have learned enough about how to learn programming that you can chart your own path forward.
Progressing along this journey is also best approached through consistent progress. Don’t try to do it all in a weekend. Use the 20 Mile March concept, and move forward a predictable amount each day. Schedule it on your calendar. Set up a time to work on it with friends. Have a special place where you go to practice.
Do an Hour of Code
I doubt that you’ll continue on this journey of learning to code, which is indeed a difficult journey, unless you have a solid purpose. There are many valid purposes, but the reason that I keep going is that I think programming is fun. The Classic Maze from Code.org is my favorite place to start. It’s still fun for me after leading thousands of people through this activity. It’s block-based and approachable, yet it gives you enough of a taste of the logical nature of programming to whet your appetite.
Learn How To Learn Programming
Sure, it’s possible to "do" a MooC like this in lean-back mode, just watching the videos like TED talks and not actively engaging with the subject. That’s probably more beneficial than watching Hackers or WarGames, but not by much. Professor David Malan is indeed entertaining, but the real benefit comes from completing the Problem Sets (psets). You’ll have to actually write code to solve problems. They start easy, and get harder. You’ll leave with a reasonable understanding of core Computer Science concepts, as well as more computer programs to add to your portfolio. Bonus points for doing this with a friend rather than alone. Then you’ll have a chance to practice saying some programmer words out loud to another human being.
Learn About Learning
Before you can really learn software development, it’s useful to learn how to learn. I’d argue that this is the keystone skill for developers. If you can learn how to learn, you’ll be ready to learn other technical and non-technical skills, such as algorithms, data structures, language syntax, empathy for your customers, and the humility to accept that you’ll write imperfect programs that need debugging and code review. I don’t put this first because I think you need the context of programming before it really applies to your situation and starts to affect your next steps.
This is not a course. It’s not a book. It’s a challenge. You have enough programming skills at this point to make some programs. So, go do it! You also have some learning skills, so at this point, another guided learning experience is not what you need. You need experience building things. And with this experience will come emotions, like joy, sadness, fear, anger, and disgust. You need to try something hard enough that you might get stuck, then figure out how to get yourself unstuck. You need to struggle, then eventually succeed. You need to build a portfolio of work that you can reference for your own benefit and show to others. If you were learning to play guitar, this is when you go from practicing scales and chords to learning to play cover songs. Start small, like A Horse With No Name. Make a tic-tac-toe game, a to-do list, or a calculator. Once you get really good at playing someone else’s songs, try to write one of your own. Avoid the temptation of looking at someone else’s code solution for these. Instead, figure out all the small pieces that you’ll need to assemble, and focus on solving each of those problems: How do I keep score? How do I show X’s and O’s on a game board?
Sharpen Your Saw
Once you’ve gained some experience building things, it’s worth learning how to build things excellently (Awesome Inc Core Value #2). One of the best ways to improve your coding skills is through daily katas, which are like drills or exercises. There are several great options here, but Codewars tends to be the most beginner friendly. We used Codewars for Awesome Inc’s Bootcamp, switched to HackerRank for a while, then came back to Codewars.
Get Help From Others
This isn’t the kind of book you read straight through. It’s a guide to accompany you on your journey. It’s not full of software design patterns (while those are a helpful topic as well), but rather ways to improve yourself and your relationships with others, in order to become a better person who happens to create software as a career or hobby.
A few more resources that are worth your time
Learn Enough - Michael Hartl is great, and I love the focus on the attitude of "Technical Sophistication", or getting good enough to solve the next problem. This is a good follow-up to CS50 with some specific tools and tech you’ll need to get into web development.
Automate the Boring Stuff with Python - a great one for jaded office workers. One of my former students used this as his gateway to leaving the law profession and becoming a software developer. After automating the generation of legal documents for his firm, he realized that programming was more fun.
Code the Classics - Volume 1 – Raspberry Pi Press - a great one for the kids, or even nostalgic adults. I recommend reading Playing With My Son as a primer. Before you go down the rabbit hole of making Minecraft mods, see if you can first make Pong.
FreeCodeCamp - if you’re self-driven and consistent in engaging with the global community, this has everything you need to go from beginner to employed. It really is great, but you’ll only get out what you put in.
To Ensure Success, Hire a Coach
Once you’ve made it through these resources on your own, you may still want some help along the way. For both adults and kids, Awesome Inc has a lot of experience guiding people on this journey. We fashion ourselves as coaches. If olympic athletes have expert coaches, and chart-topping recording artists have voice coaches, then aspiring software developers can benefit from having a coach, too. After learning on your own, you may want to apply for Bootcamp or register for the Coding Club, and we’d love to help you take the next step on your journey.