For anyone who doesn’t write code, this will seem a bit strange. For those of us who do, it’s quite normal except for the name being given to it, rubber ducking. Often when some problem escapes a programmer for longer than it should, calling someone over for “a second pair of eyes” is the surest way to solve one’s own problem. The very act of explaining the problem to someone else and walking through showing the code is frequently the fastest way to find the problem, even though the problem may be found and corrected before the listener even fully understands the problem.
Anyway, I disagree with one point in the article. Explaining to a rubber duck or cardboard cutout of a human will not actually do the job, at least for me. For this to work, at least in my case, the listener must be someone I respect enough to bother with a full explanation and a real attempt to get them to understand the problem. For a rubber duck, I wouldn’t bother and would be left in the same state as before the introduction of the duck.
The other aspect I find about this is that I must not actually be thinking of it as rubber ducking. I must be genuinely explaining the problem with the intent that the other programmer will actually be able to help. This is important for two reasons. One, it really does require that one reduce the problem, which may have taken days or longer to code, into simple enough terms that the new programmer on the scene will get a basic understanding. Two, in the cases where the rubber ducking does not work, it often is actually helpful that now another programmer understands the problem and can provide real help. Asking even one question about the code or pointing the debugging in a new direction is not rubber ducking. That’s real hands-on helping.
Surprisingly though, the act of being a rubber duck in good faith is also genuinely helpful, not at all a waste of time, and should not be considered by the duck to have been an annoyance, (e.g. why did you waste my time only to find the problem yourself?) Without a duck in good faith, it is almost certain that many more hours would have been spent finding the problem. This was neither a waste of time for the duck nor an insult to him/her. When I end up acting as a rubber duck, I often end my job by sort of glibly stating “glad I could be of no help at all” while recognizing that indeed, though I did not solve anything or even as a question, I was indeed a help.
This has been a rare geeky post for me. Hope you enjoyed it.