卡住了?问一只橡皮鸭

在有史以来最书呆子气的网络笑话之一中,程序员网站StackOverflow推出了一个橡胶鸭作为愚人节的笑话。鸭子的作用是帮助游客解决计算机编程问题。它会倾听人们的问题,听了之后,鸭子会开始“打字”,但在等待之后只会发出“嘎嘎”的声音。

正如任何软件开发人员都可以告诉你的那样,事实上,许多问题都可以通过简单地向某人解释情况来解决——即使此人对该领域一无所知,不是特别聪明,也没有兴趣提供任何指导。是的,即使那个人只是一只橡皮鸭。解决方案不是来自外部,而是在用自然语言解释问题的过程中找到的。

当然,这种技术不仅适用于程序员,而且在计算机科学和软件工程课程中也有教授,我们倾向于称之为“橡皮鸭调试”,简称“橡皮鸭”。这个名字来自安德鲁·亨特和大卫·托马斯在《实用程序员》一书中讲述的一个故事,在这个故事中,一个程序员用一只鸭子强迫自己逐行思考软件代码。

更普遍地说,必须解释或教授一门学科迫使你从不同的角度来评估这门学科,这样才能提供更深入的理解。

不言自明

向外部实体解释代码的行为是一种自我解释的形式。无论听众是另一个人还是儿童玩具,解释都会迫使一个人表达自己的想法,这包括花时间明确地分析和关注问题。反过来,这个过程可能会揭示隐藏的假设、逻辑错误或被忽视的细节。

研究人员,如大学教授兼作家MicheleneT.H.Chi,已经探索了自我解释在学习和解决问题中的好处。其基本思想是,当个人用自己的话解释概念或问题时,可以增强他们对材料的理解和保留。不仅如此,自我解释还鼓励更深层次的认知处理,并有助于识别理解中的差距。

对于软件开发人员来说,在描述程序应该做什么和观察它实际做什么的过程中,任何差异都会变得显而易见。自我解释往往比在没有听众的情况下大声思考产生更好的结果。使用无生命物体还有一个额外的好处:程序员不需要打断任何人。

学习中的自我解释效应也在许多学科中得到了检验,它在化学、生物学、数学、护理等领域都起到了全面的作用。此外,自我解释是帮助学习者将新知识与现有知识相结合的有用工具,使他们能够更新和完善现有的心理模型。

自我解释的另一个好处是,学生还可以更加了解自己的实际理解水平,并找到他们可能需要花更多时间发展知识的领域。

知识成双

尤其是,他们喜欢软件开发工作,欣赏日常工作中缺乏人际互动。然而,有些互动是非常有价值的。例如,团队合作可以帮助在公司内传播特定知识,并帮助个人进一步发展技能。

结对编程是软件团队实践的另一种解决问题的技术。顾名思义,这是一种团队合作,两个软件开发人员坐在同一台计算机上,解决一个编程问题。他们将查看同一段代码,一个人打字,另一个人以观察者的身份查看所有内容。这个过程与橡皮鸭调试的工作方式非常相似:当“驱动程序”编写代码时,他们也在解释程序需要做什么,以及新添加的程序将如何实现这一点。 两人一组工作也能促进注意力集中,减少分心。如果两个人都盯着同一件工作,错误和错误往往会在早期被发现。同样,当两个人实时讨论设计决策、代码结构和潜在的改进时,他们不断的对话有助于确保对他们正在进行的项目有一个共同的理解。

除了促进知识转移,结对工作还可以作为团队成员或导师关系的练习。想想一个初级团队成员,他通过与更有经验的同事合作,接触到不同的方法和解决问题的技巧。
有些工作甚至要求团队成员紧密合作。例如,商用飞机飞行员通常在驾驶舱里有一名副驾驶,医疗团队在手术或复杂程序中也会一起工作。或者,在电影行业,两位电影编辑之间的合作可以带来更完美、无缝的最终剪辑。
成对工作也有好处。例如,音乐作曲家或词曲作者经常在艺术家二人组中创作原创作品,每个成员都将自己独特的想法、才能和视角融入作品中。不管怎样,无论这对情侣中的另一个是真人还是玩具,谈论问题都是摆脱困境并做出伟大工作的好工具。