← articles

Why you should keep a learning journal

December 20, 2020

I've had a learning journal since 2011, but only recently have I realized the main benefit from it: it makes me learn more by paying more attention to bugs.

I wasn't aware I had a learning journal back then since I was simply sharing short programming articles. But in essence, my entire blog was a learning journal back then. Only after seeing Rico Sta. Cruz's TIL page have I decided to create a separate Today I Learned page. Seeing Rico's page full of small tricks that can be immediately applied inspired me to create my own.

The advantage of being a programmer

As a programmer, you have the advantage of being able to share the knowledge that is easily applicable in different environments. Since code is just text, it's easy to copy, and since it's unambiguous, it's applicable to different environments. Because of this, the friction for knowledge sharing is minimal.

This knowledge sharing is useful to other people, and I think that explains why Stack Overflow (with 20,574,098 questions) is a much more popular platform than Stack Exchange Philosophy (with 15,316 questions). Yes, the latter was created some years after the former, but that alone doesn't explain the huge difference. Another explanation could be that philosophers are more interested in the discourse than in sharing solutions to problems, and Stack Exchange might not be the best platform for discourse. Stack Exchange is geared towards solutions for problems, and with philosophy, it might be difficult to understand the problem in the first place since it can be ambiguous.

This is not so in programming, where you can just read the solution, understand it, and apply it to the problem at hand.

An additional advantage of programming is that the feedback is fast. Nothing expensive needs to be done to test the proposed solution.

The benefits of keeping a journal

Publishing solutions to your problems helps not only other people but also yourself. Help for other people is obvious, but how it's helping you is much more interesting. Keeping a journal makes you more aware of what you are learning and encourages looking for learning opportunities.

It's easy to forget what you have learned, which is the main reason not all experts can teach well. They forget what's it like to be a beginner since they were beginners a long time ago. Keeping a learning journal helps fight this effect. It exposes everything that you didn't know, which can sometimes be embarrassing if shared publicly.

Bugs are the best learning opportunities. As a programmer, you interact with a machine of pure logic for a significant part of the day. It's a machine that simply follows your orders. With every bug, the initial reflex is always that the machine is not working correctly. Yet, with almost every bug, this turns out not to be true.

It usually turns out that you've gotten the logic wrong: the model in your head for how the code works did not match the actual reality of how the code works. Every debugging session is essentially a recalibration of the model in your head. And a learning journal encourages better recalibration. You will tend to go deeper to understand what happened with every bug.

Memes normalize the shrugging attitude at the problem — the bug shrug: not understanding why the bug happened in the first place, fixing it, and still not understanding anything. Instead of that, the learning journal makes you go the extra mile to understand. It makes you listen to lessons that bugs are trying to teach you. Since the bugs are coming from the code you wrote or have to maintain, they reveal your thinking errors and not someone else's.

The problem with Stack Overflow

You might ask yourself what's the point of keeping a learning journal when you can instead just start answering questions on Stack Overflow. The problem with Stack Overflow, outside the most obvious one of you giving them your content for free, is that you are answering other people's questions. These might not be the most useful questions you should be asking.

These questions are useful for other people and their problems, which can sometimes lead you down interesting paths of discovering how things work if you have the time to do so. But, more often than not, they are the questions about this or that triviality. Stack Overflow used to have better questions, but now they are mostly trivial, at least in the Ruby and JavaScript department.

You learn better from your bugs than from other people's bugs since your bugs exist because of your lack of understanding. Even from an "it's a feature, not a bug" kind of bug, you can learn something: that your feature is not intuitive but surprising. Every bug teaches you about something you currently don't understand in the context of your current project. In that way, bugs are better even than building new features.

With Stack Overflow, you might get better reach compared to your blog. But reach is not the most important thing. Learning journal makes you a better learner, and that's way more important.

Learning in public can sometimes be embarrassing

The biggest problem with the public learning journal is that you can sometimes end up sharing stupid things. Sometimes, you'll learn things that will seem stupid to other people. One of my stupidest entries is about opening a portion of the log file with Vim. Everyone knows that editors should only be used for making changes and not just for viewing. Well, everyone except past me.

Embarrassment is one of the biggest drawbacks of having a public learning journal. People will see what you have only recently learned: that you learned about yield_self just two days ago. Oh, the shame. You might never recover from that.

If that's the problem for you, keep a private learning journal for yourself. You'll still have the benefit of learning more while still keeping your spotless reputation.

0 kudos
Join my newsletter and get articles that sometimes end up on the front page of Hacker News straight in your inbox.

Unsubscribe anytime. By submitting your email, you agree to our privacy policy.