I initially wrote this as a response to this joke post, but I think it deserves a separate post.
As a software engineer, I am deeply familiar with the concept of rubber duck debugging. It’s fascinating how “just” (re-)phrasing a problem can open up path to a solution or shed light on own misconceptions or confusions. (As and aside, I find that among other things that have similar effect is writing commit messages, and also re-reading own code under a different “lighting”: for instance, after I finish a branch and push it to GitLab, I will sometimes immediately go and review the code (or just the diff) in GitLab (as opposed to my terminal or editor) and sometimes realize new things.)
But another thing I’ve been realizing for some time is that these “a-ha” moments are always mixed feelings. Sure it’s great I’ve been able to find the solution but it also feels like bit of a downer. I suspect that while crafting the question, I’ve been subconsciously also looking forward for the social interaction coming from asking that question. Suddenly belonging to a group of engineers having a crack at the problem.
The thing is: I don’t get that with ChatGPT. I don’t get that since there’s was not going to be any social interaction to begin with.
With ChatGPT, I can do the rubber duck debugging thing without the sad part.
If no rubber duck debugging happens, and ChatGPT answers my question, then that’s obvious, can move on.
If no rubber duck debugging happens, and ChatGPT fails to answer my question, then by the time at least I got some clarity about the problem which I can re-use to phrase my question with an actual community of peers, be it IRC channel, a Discord server or our team Slack channel.
So I’m wondering, do other people tend to use LLMs as these sort of interactive rubber ducks?
And as a bit of a stretch of this idea—could LLM be thought of as a tool to practice asking question, prior to actually asking real people?
PS: I should mention that I’m also not a native English speaker (which I guess is probably obvious by now by my writing) so part of my “learning asking question” is also learning it specifically in English.
That’s exactly how I’ve been using it all along. I didn’t know it had a name, but I opened a previous conversation and simply asked, 'Review our conversation. Is this rubber duck debugging?
Got this:
Yes, this conversation does align with the concept of “rubber duck debugging,” which is a method where a developer explains their code or problems to an inanimate object, such as a rubber duck, in order to clarify their thinking and uncover solutions.
Key Aspects of Rubber Duck Debugging in Our Conversation:
Explaining the Problem: You’ve been explaining issues and errors in your code step-by-step, as well as discussing the structure and organization of your files and directories.
Step-by-Step Problem Solving: We went through the process of debugging various issues, such as errors related to missing modules, routing problems, and configuration issues.
Clarifying Thought Process: The conversation involved clarifying certain technical aspects, which mirrors how a developer might talk through their code to better understand it themselves.
Iterative Troubleshooting: We’ve repeatedly revisited issues and refined our approach, which is characteristic of how rubber duck debugging helps to identify the root cause of a problem.
While the term “rubber duck debugging” typically involves explaining the code to an inanimate object, in this case, you’ve been using me as a “virtual rubber duck” to guide you through the process and help identify errors. This technique is often helpful for developers to slow down, think critically, and uncover solutions they might not have seen otherwise.
…well… that’s an awkward moment of silence…