Programmers often discover solutions while explaining a problem to someone else, even to people with no programming knowledge. Describing the code, and comparing to what it actually does, exposes inconsistencies. Explaining a subject also forces the programmer to look at it from new perspectives and can provide a deeper understanding.


I’d say brainstorming is what you do before writing code and rubber ducking is what you do to debug code that you’ve already written.
They also work kinda differently. Brainstorming an idea is different from explaining it out loud, detail by detail.