什么是橡皮鸭?

有史以来最大的一些问题是通过和一只橡皮鸭交谈解决的。等等,什么?...

很少有事情比运行程序无数次却发现它仍然无法启动更糟糕。即使是最好的程序员也知道它是什么样子。

Seven yellow rubber ducks sitting in water

你在盯着一块你已经琢磨了几个小时的代码。语法看起来正确,间距一致,变量命名恰当。。。那是什么原因呢?

也许你需要一个新的方法来调试。你会惊讶地发现,其中一种行之有效的方法,奇怪的是,涉及到一个浴缸的各种玩具。

什么是橡皮鸭调试(rubber duck debugging)?

这最好通过一个小故事来解释。想象一下:你是一个程序员,和一群人一起工作。你在做你的日常工作,编码任何你需要编码的东西,然后你就遇到了问题。不管出于什么原因,这个程序都没有发挥应有的作用。

所以你决定走进大厅,告诉你的同事你正在对付一个顽固的虫子。他们同意帮你解决问题,问你到底出了什么问题。你开始详细地解释这个问题,发现在你的解释过程中,你找到了一个解决办法。

事实上,这种情况在现实世界中发生的频率比你想象的要高。你可能想知道这和橡皮鸭有什么关系。嗯,你可以向一个塑料黄色的伙伴(或任何无生命的物体)倾诉,而不是打扰别人。

最好的部分?当你知道你的鸭子不会因为你的长篇大论而评判你时,你会感到安慰。如果您发现自己需要经常调试,请查看下面列出的最常见的编程和编码错误。

“橡皮鸭调试”一词从何而来?

“橡皮鸭调试”引用了安德鲁·亨特和大卫·托马斯的编程书《实用程序员:从熟练工到大师》中的一个故事。在这种情况下,程序员会随身携带一个橡皮鸭,并通过强迫自己逐行向橡皮鸭解释来调试代码。

为什么橡皮鸭调试工作?

通常,在描述代码应该做什么的时候,您会观察代码实际做了什么,然后发现事情没有排成一行。这就是为什么人们说教一门学科是学习它的最好方法之一。你必须从不同的角度评估问题,以帮助别人理解,这有助于你理解。

使用这种方法最重要的部分是你对它的承诺。是的,这样彻底的一边倒的谈话可能会让人觉得非常愚蠢。但是倾注如此多的精力让另一个人(真实的,想象的,或者用橡胶做的)通过你的问题,正是让问题看起来能自己解决的。

这种方法之所以能够很好地工作,是因为代码中的大多数错误都是由于缺乏向软件提供明确的信息和指令造成的。计算机不能理解含糊不清的指令。假设你的鸭子对你的问题一无所知,你就不得不描述所有的细节。结果发现你并没有像你想象的那样理解每件事。

如何使用橡皮鸭法?

只有三个简单的步骤,橡皮鸭:

  1. 假设你的鸭子对你的问题一无所知。陈述问题,事情目前的状况,以及你想要完成的目标。
  2. 解释事物的流动。发生什么事了?仔细检查过程中的每一个步骤,不要遗漏任何细节。
  3. 顿悟。

将该方法应用于实际问题

这种简便的方法是由程序员发明的,但它肯定可以应用于编程之外的问题。怎样?在这里,让我们建立另一个想象的场景:你刚刚买了一个新的冰箱为你的房子。

你把新冰箱运到家里,放在厨房的位置上。你把旧冰箱里的所有东西都转移到新冰箱里,把旧冰箱扔掉。一天结束了,你就上床睡觉。当你第二天早上醒来时,打开冰箱门发现你所有的食物一夜之间都坏了!

当然,你很愤怒,开始向家人发泄情绪。”怎么会这样?我付了钱,把它拿回来,把里面的东西都搬走了,当它通电的时候,它应该有难以置信的温度控制

哦。你忘了把那该死的东西插上。

这有点尴尬,但至少你现在知道问题所在了。那是因为你从头到尾花时间考虑了整个情况。有时候,当你对一个过程如此深入和熟悉的时候,你不会注意到最明显的问题就在你身边蔓延。

将方法应用于代码

例如,我们将讨论一些示例Python代码。正如我们已经演示过的,你可以用你信任的橡皮鸭来解决各种各样的问题。这个方法可以应用于任何你正在使用的编程语言。

我们要打印1到5的数字。所以,你继续键入所有代码:

for x in range(5): print(x, end=" ")Output: 0 1 2 3 4

呵呵。真奇怪。您要求编译器打印一个五位数的范围。有什么问题吗?让我们把所有的可能性都考虑一下。您的语法是正确的,因为代码运行时没有错误。并不是因为缺少任何参数,因为start和step参数是可选的。。。

坚持。range函数返回一个数字序列,按1递增(默认情况下),并在设置的上限之前停止。但是范围从哪里开始呢?在Python中,除非指定,否则范围从零开始。

现在,你知道你应该写作。

for x in range(5): print(x+1, end=" ")Output: 1 2 3 4 5

相关:学习Python编程的5个最佳网站

你的编程伙伴

虽然不能告诉你你的代码到底哪里出错了,但橡皮鸭已经帮助了各地的程序员。下次编程时遇到bug时,试着抓一只橡皮鸭(或者其他对象或人来充当橡皮鸭),看看这种解决问题的方法是否适合您。

谁会想到橡皮鸭不仅仅是一个洗澡玩具?

  • 发表于 2021-03-28 14:29
  • 阅读 ( 293 )
  • 分类:编程

你可能感兴趣的文章

你从未听说过的最奇怪的编程原理

... 当你忽略这个会发生什么?你最终得到了软件原理: ...

  • 发布于 2021-03-12 02:06
  • 阅读 ( 333 )

即将推出的chrome操作系统功能可在设备锁定时保护usb端口

...但谷歌也正在采取措施来解决这个问题。 有一种被称为橡皮鸭的恶意USB工具,它模拟键盘,每分钟可以在**键盘的任何机器上注入多达1000次按键。只要一个潜在的不法分子有物理访问您的计算机,他们所需要做的就是**USB密钥,...

  • 发布于 2021-04-04 02:34
  • 阅读 ( 117 )

看通用电气销毁家居用品,以证明其极端的测试

...破碎和弯曲的机器。这些视频只不过是广告而已;毕竟,橡皮鸭和蜡笔从来就不能忍受这种情况。但看起来确实很有趣。
 
 
 
 

  • 发布于 2021-04-26 09:33
  • 阅读 ( 101 )

圣诞节的时候,经典的猎鸭游戏将出现在wii u上

没有什么比射鸟更好的方式来度过假期了——所以任天堂在12月25日将其经典的猎鸭游戏带到Wii U上是很自然的事。从圣诞节开始,这款游戏将通过虚拟主机服务提供,你将可以使用Wii遥控器来代替与原版游戏一起使用的标志性...

  • 发布于 2021-04-28 10:04
  • 阅读 ( 143 )

垄断将取代靴子,顶针,手推车件在新版本

...***报道,原来的靴子、顶针和手推车将被霸王龙、企鹅和橡皮鸭取代。 选民们可以从56种新的代币(加上8种原件)中进行选择,其中包括一个吻脸表情符号、一个大拇指和一个翻盖**。最后,似乎大多数选民都希望保...

  • 发布于 2021-05-10 08:26
  • 阅读 ( 124 )

一个橡胶鸭子手机壳只吸引婴儿,偶尔星巴克咖啡师,和我

...**表达个性的唯一方式之一,那么我们的**壳选择能说明什么呢? 橡皮鸭是显而易见的选择。我的朋友凯西这个月早些时候从洛杉矶来看我,在纽约***的一次旅行中,我们在一个大型购物中心停了下来。我告诉她,我...

  • 发布于 2021-05-11 00:52
  • 阅读 ( 149 )

可以说“无数”

看看上面那张照片。你会说那是无数肮脏的橡皮鸭吗?或者你看到无数肮脏的鸭子?直到最近,我都会把这个问题称为争议性较小的问题来完全回避,比如说一堆该死的老鸭子。前一种用法在我看来总是自命不凡,但我对后一种...

  • 发布于 2021-05-12 12:45
  • 阅读 ( 98 )

机器人先生的移动黑客包

...是3V Velox II。伴随着大量的毒品,从有线和Quora,这里是什么倾向于在里面:iPhone 6 Plus三星Galaxy S5Nexus 5(安装NetHunter)安装了Kali Linux的笔记本电脑(以及:Metasploit、Social Engineer Toolkit、FlexiSPY和DeepSound)Multiblue USB蓝牙加密狗各...

  • 发布于 2021-05-16 17:30
  • 阅读 ( 113 )

用这些壁纸给你童年的玩具以新的生命

...壁纸(2560x1600)| HQ桌面大理石下载此墙纸(1920x1200)| HDW橡皮鸭下载此墙纸(1920x1200)| FWS Freewall魔方下载此壁纸(3848x2280)| DeviceArt泰迪熊下载此墙纸(2048x1371)|墙纸重聚下载此墙纸(2560x1440)|墙纸宽度口袋妖怪之战下载此墙...

  • 发布于 2021-05-20 15:20
  • 阅读 ( 84 )

整洁沉稳的木质工作间

...用于偏光照明的二极管LED灯。我特别喜欢“某种植物”和橡皮鸭。在下面的Flickr链接中查看Simon的注解照片。如果你有自己的工作区可以炫耀,可以通过使用标签特色工作区将其发布到你的个人Kinja博客或将其添加到我们的tl80工...

  • 发布于 2021-05-24 00:03
  • 阅读 ( 78 )
jiyw6750
jiyw6750

0 篇文章