Amy M Haddad

Are You Becoming a Better Programmer?

By: Amy M Haddad


I received an interesting question from a reader recently. He wanted to know how you can tell if you’re making progress as a programmer.

It’s a great question, and it’s a tough one to answer. Improvement at a skill like programming is hard to quantify, as this reader rightly acknowledged. Problems can take hours, days, and even weeks to solve. Building an application can also be a lengthy process. Technologies take time to learn.

Measuring your programming process is different than trying to become a faster runner. The time it takes you to run a lap around the track is either decreasing or it’s not. Measuring your progress as a programmer is less clear-cut. But it’s not impossible.

If you want to see whether you're getting better then read on. Here are a few tactics to try.

Daily Tracking

I rely on daily and longer-term tactics to gauge my progress. Let’s start with daily tracking.

Monitoring your progress each day helps to ensure that the work is getting done and focuses your attention on the small improvements, which add up over time. Here are two approaches to try.

Have a Programming Objective

Have an objective each time you sit down to program. Here are some examples:

  • Add CSS to the index page.
  • Fix the bug in “x” program.
  • Write “y” number of tests and get them to pass.

An objective is concrete and specific. It’s a particular outcome you want. The best way to find your objective is to work backwards and ask yourself this question: what do I want done two hours from now?

This specific target will focus your time and attention. So two hours later you’ll feel like you really accomplished something. Even if you miss the mark, it’s likely you still made progress toward your goal.

Use a Programming Journal

Each evening before bed I pull out my programming training journal and jot down a few notes about my programming work from the day.

I’ve written previously about keeping a programming journal. Since then, I’ve added something to it. Now I note my “stats” from the day before I start writing. My stats are the core buckets I track—programming, writing, reading, math, and exercise—and how much time I spent on each bucket.

The idea stems from a similar practice that author Jim Collins uses: he keeps a spreadsheet to track the number of creative hours he logs each day. He admits that the habit was inspired by his mentor Peter Drucker, who championed: “what gets measured gets managed.”

Likewise, my stats are a concrete reminder of where I spend my time. They not only hold me accountable, but they also ensure that my time is spent on the right things.

Once my “stats” are out of the way, I write about my programming work from the day. What went well. Where I got stuck. What I learned. What I want to learn. It’s an informal process. But there’s an important question I like to ask myself.

The question is: “Am I better now than I was this morning?”

Then, I write a few words to answer it.

I’ll note if a concept that I’ve been struggling with finally makes sense, for example. Or a bug that I fixed. These are small wins, to be sure. But they matter—a lot.

Building a skill is a marathon, not a sprint. Taking a few minutes to reflect on your programming work will remind you of positive things you’re doing each day, no matter how big or small. It’s a reminder that you are making progress. These small wins add up over time and propel you forward.

Longer-Term Tracking

To see the fruits of those accumulated small wins you’ve been chronicling, there are two approaches to try.

The Weekly Spot Drill

The “weekly spot drill” is one the best ways to gauge your longer-term progress. Not only will this learning tactic help keep your skills sharp.

But it’ll also help you see the progress you’re making over the long-term. I briefly point this out in my article on the topic, but it’s worth exploring more deeply here. The weekly spot drill is a fantastic way to see whether or not you’re making progress.

Each week I do two spot drills: one for web development and one for problem-solving. For web development, I pick a technology or topic that I’ve already learned about, and work on a project related to it. The technology or topic I choose is one that I haven’t touched in a while.

This process certainly helps solidify my knowledge. But it’s also a clear indication of whether or not I’m making progress: if I find the project or problem a bit easier, then I’m making progress.

The first few times I implemented the weekly spot drill on CSS, for example, I struggled—a lot. I had more work to do, and progress was very slow. But over time things began to change.

Eventually, I intuitively knew what to do and what to reach for. I got stuck less frequently, and when I did get stuck I could get myself unstuck a bit quicker. Overall, the process got smoother. I was making progress.

Recycle a Programming Problem

Recycling programming problems is another great way to see your improvement over time.

Here’s how it works. Solve a problem today and try re-solving it three or four months from now. Let plenty of time pass to completely forget the problem and its solution. You know if you’re improving when something that’s hard right now becomes a bit easier several months from now.

Earlier today, I pulled up a problem I solved earlier this year and re-solved it. Afterwards, I compared the solutions. My original program was lengthy. The code was complex. I remember feeling really stuck when I wrote it.

But a lot has changed. This time I knew what to do nearly immediately and intuitively. My variable names were meaningful. My code was shorter and clearer.

I have more tools in my programming toolbelt now than I did earlier this year. The better approaches coupled with better writing and designing resulted in a much better program. They were also signs of improvement.

Can I do better even still? Most definitely.

So I’ll circle back again in a few more months to see if I can re-solve this same problem with a better approach and a better-designed program.

See the Fruits of Your Labor

We need ways to measure our progress. That’s the key point. Monitoring programming progress is more like an art than a science. Have a system in place to gauge what you’re doing, to guide your efforts, and ultimately get you where you want to go.

← back to all posts