Roughly the same thing as SelfTalk. See also DebugByDescribing, ProgrammersNotebook, RubberDucking.
I constantly 'talk to myself' by typing into a text file, whether it's designing, debugging, or implementing. My writing is fairly stream-of-consciousness, as if I'm talking to someone next to me. It is useful for the reasons other people have described above, but often even more so when I'm coming back to code I wrote a long time ago. It's like having the old me describe things about the system to the current me, including all of the reasons that I discarded other approaches before settling on the current one. As other people have noted, coding speed isn't really bound by typing, so I don't think being verbose in my diary costs me any time overall. And it makes working a lot more fun. --DanSchmidt
I do this too! ( And thought I was the only one :-) In addition to plain stream-of-consciousness, I have found certain structured formats very helpful.
"Question and Answer"
In question and answer, I write all unknowns as questions, and then post answers as I get them:
Q: How does the client know their own id?
A: The local_client record contains a client's own id.
"Problem and Solutions"
In problem and solutions, I write a problem statement followed by brainstorming of possible solutions. These can nest indefinitely. When I choose a solution, I flag it with an IMPLEMENTED comment:
Problem: Actively colliding objects need to be able to find each other.
Solution: Each object stores a link to a possible collider.
Solution ( IMPLEMENTED ): Use a central Mediator object to manage collisions.
"Key Idea"
I use Key Idea to place special emphasis on the gestalt of a system. For example:
Key Idea: Record ids have static mappings to object types, therefore record ids provide MEANING, not just a pointer to data.
ShouldWeTalkToOurselvesWhenReadingCode?