全文共2108字,预计学习时长6分钟
图源:unsplash
与小黄鸭交谈是一种全球公认帮助调试代码的方法,它可以很容易地应用于任何业务。这是一个有趣的过程,能够让你以全新的眼光看待你的作品。
像大多数人一样,我起初对于和小黄鸭(及其它软体玩具)交谈持怀疑态度。尝试之后,它真的奏效了!我发现的首个漏洞是一个简单的打字失误,而我忽略这个错误已有好几个小时。这是十年前的事了,时至今日我仍然还在用这一方法。
这是一种非常有趣调试问题的方法,同时可以减轻压力。先把你的鸭子从浴缸里拿出来吧!
什么是小黄鸭调试(Rubber DuckDebugging)?
图源:unsplash
乍一看小黄鸭调试似乎很不科学。不过,它的确很管用,我一个月至少会用3到4次。
我在调试一个程序卡壳时,会把小黄鸭放在键盘和显示器之间,向它解释每一行程序。顺便说一句,我的鸭子叫霍华德。这听起来很蠢,但它确实非常奏效,可以捕捉到最容易忽略的漏洞。它也可以用于调试非编程任务,稍后将详细介绍。
通过向小黄鸭解释代码,会迫使你做一些事情。首先,你必须阅读代码的每一部分,大量拼写和语法错误都会显现出来。
其次,你必须把编程逻辑背后的理论用文字表达出来。不是你最开始时打算使用的逻辑,而是创建程序背后的实际逻辑。如果很难解释代码逻辑中的某一部分,那你就很可能已经找到了代码中出毛病的部分。
当然,并不是非小黄鸭不可,也不必大声说出来。也有程序员用其它软体玩具来代替小黄鸭,如星球大战玩偶和乐高玩具。我再也不想旅游时弄丢小黄鸭了,所以现在我在笔记本电脑的触控板旁边贴了一张“霍华德鸭子”的贴纸。
关键是在于向其他人(或某物)解释你的程序。这迫使你更加详细地审阅你的工作,而非仅仅阅读或浏览你的代码。
小黄鸭调试如何帮助我编写更好的代码
现在我在开发工作的各个方面都会使用霍华德,甚至在开始工作前都会用到它。如果在预先计划工作时我什么都无法确定,我会向霍华德解释一切,包括流程图、进程图、SQL模式、数据源以及其它任何不确定该如何处理的方面。
它还可以帮助确定支持系统中的缺口以及你必须依赖源数据中的缺口。其中在规划用户界面和用户输入时尤其有用。例如,它有助于确保我从用户角度而非程序员角度对输入进行逻辑分组。
小黄鸭调试如何帮助创建更好的业务实践
小黄鸭调试并非仅限于调试代码,它还可以用来调试任何流程,包括业务流程。它的工作原理是一样的。只需向小黄鸭解释流程,并留心任何你无法轻易解释的内容。通过在脑海中重述你的流程,就好像是在向别人解释一样,强迫自己完全理解整个流程。当你无法轻易解释时,所有缺口都会变得清晰。
如果流程涉及多个部门,那每一部门都应重复该练习。每次你进行到不同的部门时,就把那个部门的帽子戴在鸭子头上,并向小黄鸭解释整个流程中这一部门的部分。
调试每个部门的流程时,你可以用每个部门的实际人员替换小黄鸭。与此同时,你应该提前就准备好所有他们可能会询问的流程问题。
当将其应用于现有的业务流程时,它可以辨别出这样的情况:“我们之所以这样做,是因为向来如此”。如果只能靠“向来如此”来解释流程步骤,那么该流程就需要调查、删除或更换。
通过自言自语把它提升到一个新的层次
如果和小黄鸭交谈不管用,你还可以诉诸于更高权威,也就是自言自语。这个过程应该被称为“双重小黄鸭”,因为它给了你第二次调试的机会。
当你向小黄鸭解释工作时,要录下你讲解的声音。抱歉,此时你必须要大声跟小黄鸭说话。完成录音后,可以喝杯茶或者吃点东西,然后再回来听录音。
现在把录音回放给自己听。仔细听你在说什么,然后随之对应你的代码或业务流程。你在录音中所说的与你在代码或流程中看到的是否相符?是否错过了某一步骤?是否遗漏了某些本想删除的内容?
图源:unsplash
最重要的是,质疑你在录音中所说的每一句话。
这种方法虽没有任何科学依据,但它却是一种全球公认调试工作的方法,而且效果出奇的好。大多数调试问题都是打字失误或我们自己的愚蠢而造成的简单错误。人非圣贤孰能无过,而这一简单过程就是找出这些简单错误的理想方法。
另一个巨大的好处是它也可以减轻压力。很多调试工作都是在重压下完成的,特别是有某个截止日期迫在眉睫,或人们因为他们的软件已经停止运行而无法工作的时候。
与一只小黄鸭交谈,你很难紧绷着脸。而当你发现两个小时的调试仅仅是因为缺少分号时,你也可以在整个房间中来回扔小黄鸭。当小黄鸭从最近的墙面弹回来,听到它吱吱的叫声也是非常治愈!
推荐阅读专题
留言点赞发个朋友圈
我们一起分享AI学习与发展的干货
编译组:陈睿欣、任锦泓
相关链接:
https://medium.com/swlh/talking-to-my-rubber-duck-helps-me-write-better-code-and-improve-my-business-7fccf1ada336
如转载,请后台留言,遵守转载规范
推荐文章阅读
长按识别二维码可添加关注
读芯君爱你