What to expect in this course


I'm so glad you're here!

In this course I'm going to teach you a structured, repeatable method for debugging your code that is agnostic of any language, framework, or domain. After a decade as a software developer and several years as a bootcamp instructor, I noticed some regular patterns as I helped junior devs debug their code, both on the job and in the classroom. This course was born out of my attempt to formalize my own debugging process for their benefit.

You will get the most of out of the course if you are early in your career, especially if you're working in web development. The examples and exercises will be presented in JavaScript, but the lessons are applicable to software development generally.

Please note that I am actively developing this course at this very moment. You are experiencing it hot off the presses, and I am hungry for your feedback! Please don't hesitate to drop me a line about anything at all related to the course, whether that's about the content itself, the experience of using the platform, or anything in between. You can email me at [email protected].

What follows is a general overview of each section of the course.

Core Principles

In this first section, I'll discuss the relationship of development to debugging (spoiler: they're the same thing!) and the mindset you need to adopt when approaching unanticipated behavior in your code (ie. a bug). We'll talk about how to find boundaries within your code that can serve as checkpoints to quickly isolate where a defect is occurring, before you commit to figuring why the defect is occurring. I'll cover ways to surface assumptions that may be sending you down blind alleys, and why you should wait as long as possible to for a theory about the cause of a defect.

Using the Chrome Debugger

This course is not about specific tooling, but the debugger is too powerful and too integral to the process not to cover here. When you need to inspect the inner workings of your application, most people start by logging messages to the console, a log file, or stdout. It works fine, but it's just telling you what happened after the fact. The debugger allows you to inspect the internal state of your app while it is running, even running the code line-by-line if desirable. This gives you so much more power to quickly follow lines of logic as you uncover new information.

The Chrome debugger is a graphical interface on top of the command-line debugger that ships with Node. Since pretty much every programming language ships with a debugger, learning this one is a great stepping stone to learning how to use others.

A Step-by-Step Process for Debugging (almost) Anything

Now we're getting into the meat of the course. I developed this 5-step process by watching my students and mentees debug their own code, taking notes on my own debugging experiences, and a lot of discussion with colleagues. I don't claim that it is the One True Way to Debug, but it brings structure to your thinking, keeps track of what you know and what you don't, and keeps you from forming unfounded theories too early in the process.

Each step has a short video lecture and one or more exercises to help you practice and internalize it.

Let's Debug Some Stuff

Once you've got the process down, we'll apply it to some specific examples of the types of bugs you might find in the wild.

Ready to get started?