What I’ve learned about learning

When I first started learning to code, I was insatiable. I scoured programming subreddits for tips and advice on how to get started. Instead of choosing one path, I chose them all. I registered for edX’s CS50, Coursera’s 7-course Fundamentals of Computing and 10-course Data Science specializations, Codecademy’s Python course, Udemy’s Web Developer Bootcamp and Complete C# Unity Developer courses, and probably a few more that I can’t even remember.

This was, of course, insane. At the time, my logic was that if I treated learning to code like high school, with 6-8 different subjects to learn simultaneously, I would become a well-rounded programmer, with experience in web development, game development, and data science, within a matter of months. To someone who hadn’t coded since high school, this made a lot of sense. To anybody with real programming experience or half a brain, it’s an obvious recipe for disaster.

I started to burn out almost as soon as I began. Then panic set in. I had just left a stable career as a tenured high school teacher, which I had thrown away for something that I wasn’t sure I could do. I couldn’t stand the thought of going back to teaching. The only way out was through the other side. I needed to focus on just one thing.

I chose web development. The job boards showed plenty of junior developer positions in Chicago, and while I didn’t want to drop the $15-20k on a bootcamp, I knew I could work through a similar, cheaper curriculum online by myself. I spent most of the fall and winter of 2017 working through Colt Steele’s Web Developer Bootcamp on Udemy, and by the time 2018 rolled around, I felt great about my abilities and my prospects.

Then I started trying to build my own web apps for a professional portfolio. Despite feeling comfortable with all of the languages, technologies, and concepts I had learned in that online bootcamp, including HTML, CSS, Bootstrap, JavaScript, jQuery, APIs, Node.js, Express, RESTful routing, MongoDB, Mongoose, GitHub, Heroku, etc., when I sat down to actually build something on my own, I was lost.

The problem, I realized, was that when I was learning to code, what I was really doing was coding along. I watched what Colt typed, copied it down in my own text editor, and felt a sense of accomplishment when the code ran, despite not being its real author. Now, here I was, familiar with many of the necessary technologies to be a competent web developer, but without any depth to my understanding or experience building web apps from scratch.

This led to more panic. I had spent so much time on this course, and even though I felt like I learned a lot, I was unable to put it to good use. I had no idea what to do next.

I reflected on my time as a teacher. Over the past eight years, I learned more about reading and writing by teaching hundreds of students how to read and write than I ever had as a student, or by reading and writing on my own. When you teach something, you need to know what you’re talking about, top to bottom. You need to know how to make connections between a wide variety of texts, skills, and concepts. Depth, connections… these were what I was missing. Maybe, I thought, teaching other people how to code is the key to becoming the best programmer I can be.

I started putting together some simple, 5-minute lessons, based largely on freeCodeCamp‘s course, which I’ve found to be the single most helpful free resource out there. Through writing these lessons, I’ve already discovered dozens of gaps in my understanding of simple HTML and CSS. This was the key. To learn, I need to teach.

In the next few weeks, I hope to begin posting a video every day that teaches beginners how to code the way I should have learned: slowly, one concept at a time, with plenty of time to make mistakes and learn from them before moving on to the next thing. I’m making the course I wish I had been able to find when I was first starting to code, and I couldn’t be more excited.

That’s what’s coming up. I hope to see you there.