可别小看了一边写代码嘴里一边叨咕的同事,人家可能用的是小黄鸭调试法

公众号「古时的风筝」,专注于后端技术,尤其是 Java 及周边生态。

个人博客:www.moonkite.cn

大家好,我是风筝

什么,鸭子还能调试代码?什么神奇的鸭子啊。

当然不是了,是鸭子帮你调试,那好像也有点儿厉害。

初听感觉是傻子,再听感觉是玄学。

什么是小黄鸭调试法

当然不是鸭子调试代码了,也不是鸭子帮你调试,其实还是靠你自己的。

小黄鸭调试法(Rubber Duck Debugging)是一种常用于解决编程问题的技巧,不是代码技术层面的技巧。

大致的调试过程是这样的:

  1. 首先你写好了代码,或者有些逻辑一直写不出来,然后很有自信或者不自信;
  2. 然后你找到一只鸭子,玩具鸭子,或者任意一个电脑旁边的物件;
  3. 最后,把你的代码的逻辑尽量详细的讲个上一步找到的对象,比如一只玩具鸭子;
  4. 通过讲解的过程,你很有可能发现代码上的漏洞,有时候还能发现隐藏的漏洞;

你还可以拉过旁边的人,对着他讲,前提是保证别人不会打你。

这个过程更像是一种review的过程,而且是那种非常具体的review,只不过是自己 review 自己的代码或逻辑。

它的核心是通过将问题或逻辑用语言描述出来,在这个过程中找到解决问题的线索。

虽然这个方法听起来可能有点奇怪,但它在实际中确实能够帮助很多人解决问题。解释问题的过程可能会强迫你慢下来,更仔细地思考,从而找到之前忽略的问题点。

另外,在进行这一些列操作的过程中,尽量保证周围没有人,不然别人可能觉得你是个傻子。

当然了,这个操作你可以在心里默默进行,也是一样的效果。

各位平时工作中有没有遇见过有人使用小黄鸭调试法呢?我看到这个概念的时候想了一下,好像还真碰到过。之前有同事在那儿写代码,一边写嘴里一边叨咕,也不知道在说啥,还开玩笑说这是不是你们这个星座的特质(某个星座)。

现在想想,人家当时用的是不是小黄鸭调试法呀,只恨当初孤陋寡闻,没有问清楚啊。

内在原理

小黄鸭调试法的内在原理其实是涉及到认知心理学中的一些概念的,并不真的是玄学和沙雕行为。

认知外部化

这是小黄鸭调试法的核心。当你将问题从内心中的思考状态转移到外部表达时,你会更加仔细地思考问题。解释问题需要你将问题的细节和步骤以清晰的语言描述出来,这个过程可以帮助你整理思路,更好地理解问题。

问题表达

描述问题的过程可以迫使你更具体地考虑问题。将问题分解为不同的部分,逐步地解释代码的执行流程,有助于你更好地理解代码中可能的缺陷或错误。

观察问题:

当你通过语言表达问题时,可能会注意到之前忽略的细节。这可能是因为你在描述问题时需要更仔细地审查代码和逻辑,从而让你注意到潜在的问题点。

听觉和口头处理

讲述问题的过程涉及到将问题从书面表达转化为口头表达。听觉和口头处理可以帮助你以不同的方式来理解问题,可能会在你的大脑中触发新的洞察力。

认知切换:

与代码一起工作时,你可能会一直陷入相同的思维模式中,难以看到问题。通过将问题从代码中抽离出来,并通过描述来关注它,你会进行认知切换,从而能够以不同的角度审视问题。

总结起来其实很简单,如果一个知识点你理解了,你一定能给别人讲出来,或者写出来,而且别人能够理解。如果你在讲的时候发现有模棱两可的地方,那说明你还没有百分百理解。

就像我们平时写技术文章一样,有时候碰到一些细节写半天也写不清楚,那就是还没有完全理解。

推荐阅读

我的第一个 Chrome 插件上线了,欢迎试用!

相关推荐
源代码•宸21 小时前
Golang原理剖析(GMP调度原理)
开发语言·经验分享·后端·面试·golang·gmp·runnext
LawrenceLan21 小时前
Flutter 零基础入门(二十三):Icon、Image 与资源管理
开发语言·前端·flutter·dart
津津有味道21 小时前
WEB浏览器网页读写Desfire EV1 EV2 EV3卡,修改DES、3DES、AES密钥JS源码JavaScript
前端·javascript·nfc·desfire·ev2·ev3·ev1
pixcarp1 天前
Golang web工作原理详解
开发语言·后端·学习·http·golang·web
青衫码上行1 天前
SpringBoot多环境配置
java·spring boot·后端·学习
爬山算法1 天前
Hibernate(54)Hibernate中的批量更新如何实现?
java·后端·hibernate
敲敲了个代码1 天前
前端指纹技术是如何实现的?(Canvas、Audio、硬件API 核心原理解密)
前端·javascript·学习·算法·面试·web
Amumu121381 天前
Vue简介
前端·javascript·vue.js
rfidunion1 天前
springboot+VUE+部署(9。安装MySql)
spring boot·后端·mysql
放逐者-保持本心,方可放逐1 天前
React核心组件 及 钩子函数应用
前端·javascript·react.js·非阻塞更新·延迟更新·同步更新