The journal has served two main purposes. One, I can write and annotate free-form pseudocode at exactly the level of abstraction I need without getting distracted by the errors produced by the code editor. It's really helped me work through the difficult parts of coding puzzles before I ever touch the keyboard to implement.
Two, I have a scientific notebook for debugging. I write down a hypothesis, design a small experiment, document the steps and complications as I go, and write down what the actual result was; then repeat the cycle. Putting it all in writing keeps it straight so I don't chase my tail, and I have something to look back on if I need to explain the bug and how it was solved to my coworkers.