《高效能程序员的修炼》一向橡皮鸭求助

2023-10-17 15:30

本文主要是介绍《高效能程序员的修炼》一向橡皮鸭求助,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本节书摘来异步社区《高效能程序员的修炼》一书中的第3章,作者: 【美】Jeff Atwood 译者: 陆其明 , 张健 责编: 陈冀康, 更多章节内容可以访问云栖社区“异步社区”公众号查看。

向橡皮鸭求助

高效能程序员的修炼
在Stack Exchange上,我们坚持要求提出问题的人需要在自己的问题上多下些功夫,而且我们在这方面有些偏执。那就是说,当你开始要提问题的时候,你应该:

  • 用足够多的细节来描述发生的状况,这样我们可以顺着你的描述继续研究下去。即使在你所在的特定领域里我们并不是专家,你也要向我们提供必要的背景情况,这样我们可以了解到底发生了什么事情。
  • 告诉我们你为什么需要知道答案。你怎么会出现在这里?是闲来无事的好奇,还是在某个项目里遇到了障碍?我们不是要求你长篇大论地讲生活故事,只是想了解跟你的问题相关的一些基本情况。
  • 说一说为了解决这个问题你都做过什么研究,以及你的发现(如果有的话)。如果你没有做过任何研究,你应该来这里提问题吗?
  • 归根结底,这关乎公平:如果你想要我们花上宝贵的时间来帮助你,只有在你也花了相当的宝贵时间酝酿出一个合格的问题时才算公平。帮我们也就是帮你自己!

我们有一个很棒的“如何提问”(How to Ask)网页来解释所有这些规则。整个网络到处都有到达这个页面的链接。(在Stack Overflow上,由于问题数量的巨大,事实上我们强制新用户在提出第一个问题之前必须点击进入那个页面。如果你想试一下,你可以在隐身或者匿名浏览模式下点击“Ask Question”。)

这里的要点是,我们试图杜绝那些无法解答的“无厘头”问题。那些问题对谁都没什么好处,如果听之任之,它们还会毁了一个好端端的问答网站,把它变成一个虚拟世界里的幽灵镇。在Stack Exchange上,那些因为缺乏有效信息和背景情境而无法得到合理解答的问题会被及时关闭。如果它们不能被改进的话,最终还会被删除。

正如我前面说的那样,我们在这个规则上有些不尽人情。但是,我们是有充分理由的:我们是在教你一种“向橡皮鸭求助”的问题解决方法,以帮助你自找出路。虽然我们的方式有些笨拙,但方式本身是非常管用的。


3

这个问题很普遍。你自己看看吧:

当我自己解决了自己的问题,我该怎样感谢社区呢?

迄今为止我只贴出了一个问题,第二个问题差一点就贴出去了。在我写两个问题的过程中,我自己找到了答案(至少是部分答案)。我把这归功于网络社区和提问流程,因为它们促使我自己思考答案。在我所写的东西里,没有任何内容明确地指明了我要的答案。但是在我把它们写下来的过程中,某种东西让我用额外的思维方式去思考问题。

**为什么适当地组织你的问题通常能让你自己找到答案?
**
我已经记不清这样的情况发生过多少次:

  • 我碰到一个问题;
  • 我决定把这个问题提到Stack Overflow;
  • 我很笨拙地写下我的问题;
  • 我意识到这个问题根本就说不通;
  • 我花了15分钟重新思考该如何提出我的问题;
  • 我意识到我正在一个完全错误的方向上解决这个问题;
  • 我从头再来,然后很快就找到了解决方案。

你也有过这样的情况吗?有时候,提出正确的问题差不多就已经把问题解决了一半。

  • 开始提出问题实际上促使我自己诊断自己的问题。

为了得到满意的答案,当我尝试组织一个内容连贯且信息翔实的问题时,提问题的动机实际上促使我自己诊断自己的问题。这在别人身上也发生过吗?

这不是一个新的概念。如果给予足够的时间,每个社区似乎都能自己意识到这个问题。但是,“问鸭子”确实是一个非常有效的解决问题的技巧。

Bob指着办公室的一个角落说:“那里有只鸭子。我想让你拿你的问题去问问那只鸭子。”

我看了看那只鸭子。它被塞得鼓鼓的,没有任何生命迹象。即便它不是死的,也不像是能回答人类问题的呀。我看着Bob。他看起来非常严肃。他是我的上司,而我想保住这份工作。

我尴尬地走过去,站在鸭子边上,然后把头低下去,和这只鸭子说起话来,就像是在祈祷一样。“你在干什么?”Bob问道。

“我在问鸭子我的问题。”我回答道。

Bob手下的一个主管正好在他的办公室里。他乐得合不拢嘴,像个混蛋。他说道:“Andy,我不是让你去向这只鸭子祷告。我要你去问它你的问题。”

我舔了舔嘴唇说:“大声问出来吗?”

“大声问出来!”Bob说得很坚决。

我清了清嗓子,开始说:“鸭子……”

  • “他的名字叫小Bob!”Bob的那个主管插了一句。我狠狠地瞪了他一眼。*

我继续对着鸭子说:“鸭子,我想知道,当使用一个U型吊架时,是什么来保持喷水管在水龙头放水的时候不会跳出吊架,导致水管……”

就在问鸭子的过程中,答案突然(在我脑子里)出现了。U型吊架是用一个固定长度的全螺纹杆从上面的结构悬挂下来的。如果装管道的人可以把全螺纹杆剪成让它的底部正好顶住管道的顶部,它基本上就能把管道保持在吊架里,并且让它不会突然跳出来。

我转过身去看Bob。Bob在点头。“你现在知道了,不是吗?”他说。

  • “用全螺纹杆去压住管道的顶端。”我回答道。*
  • “对!”Bob说,“下次你再有问题的时候,我希望你先来这里问问这只鸭子,而不是先来问我。大声说出你的问题。如果你还是不知道答案,那时候再来问我。” *
  • “好的!”我说着,然后回去工作了。*

我喜欢这个特别的故事,因为它把 “向橡皮鸭求助”这种解决问题的方法的关键部分展示得清清楚楚,那就是完全投入地向一个假想中的人或者是没有生命的物体问一个透彻而详尽的问题。是的,你往往会在最后认识到你犯了某种愚蠢的错误,于是问题不再是问题,你也因此如释重负。当你带着假想中的人一步一步细致地审视你的问题时,这些努力往往就会引导你找到答案。但是,如果你不愿意付出努力去完整地解释你的问题,并且也不说明你是怎样尝试去解决问题的,那么在你向别人请教之前,你也就不能通过深入思考自己的问题来获益。

如果你还没有一个编程伙伴(但是你完全应该有一个),你可以利用“向橡皮鸭求助”这种方法完全依靠自己去解决问题,或者你也可以向互联网社区求助。即便你没有得到你想要的答案,强迫自己去完整地解释自己的问题(最好以书面形式),常常也会引领你进入新的视野或者为你带来新的发现。

这篇关于《高效能程序员的修炼》一向橡皮鸭求助的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/226316

相关文章

LabVIEW程序员是怎样成长为大佬

成为一名LabVIEW编程领域的“大佬”需要时间、实践、学习和解决复杂问题的经验。尽管LabVIEW作为一种图形化编程语言在初期可能相对容易上手,但要真正成为精通者,需要在多个层面上深入理解。以下是LabVIEW程序员如何逐步成长为“大佬”的路径: 1. 打好基础 LabVIEW的大佬们通常在初期会打下非常坚实的基础,理解LabVIEW编程的核心概念,包括: 数据流编程模型:Lab

程序员必备心理学——心流

心理学之心流 前言一、“心流”是什么?二、心流的好处二、如何进入心流心流状态的四个阶段第一个阶段:挣扎第二个阶段:放松第三个阶段:心流第四个阶段:巩固 进入心流的技巧 总结题外话 前言 你是否常常感觉自己明明学习了一整天,但是就是感觉没有太多的收获。这个时候除了你的学习方向等问题之外,也可能是你的学习方法太低效了。作者本人就经常有这种情况,好在偶然间在b站刷到一个大佬的这个心

程序员都在使用的画图工具

大家好,我是袁庭新。 程序员都在使用的画图工具,你一定没用过这款画图工具吧!我教程中的架构图都是用它来画的。 比如我编写的RDB工作原理图就是用draw.io绘制的,如下图所示: 再例如Redis集群故障恢复原理图我也是通过draw.io工具绘制的,如下图所示: 是不是觉得draw.io绘制的图形特别简洁、美观。它的官网是: https://www.drawio.com dra

GitHub:代码是程序员沟通最直接的手段

如果不是 Andreessen horowitz 的投资,估计 GitHub 很难被福布斯、CNN、纽约时报等传统媒体注意到。普通大众之前不了解这个工具,是因为它距离记者的世界太远了——GitHub 是一个程序员所使用的托管项目的服务。 但在一些程序员眼里,它不仅是托管项目的地方,还是“开源”项目的大本营,而且是提高程序员“技术水平”和“技术品味”的地方,更是一个程序员社交的地方。

黑马程序员---银行业务调度系统

模拟实现银行业务调度系统逻辑 需求分析: 银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。 有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费、电话费之类业务的客户)。 异步随机生成各种类型的客户,生成各类型用户的概率比例为:         VIP客户 :普通客户 :快速客户 =  1:6:3。 客户办理业务所

黑马程序员---空中网面试题

空中网4k/5k月薪挑选大四实习生的线程题     两年前,我们一个大四的学员去应聘空中网的实习生职位,空中网只给他出了三道线程题,拿回家做两天后再去给经理讲解,如果前两题做好了给4k月薪,第三道题也做出来的话就给5k的月薪。这样的实习薪水和招聘要求,不需要有工作经验的限制,纯粹是技术功底的比拼和考核,而不像许多其他公司非要招两年工作经验的人,逼得那些刚毕业和未毕业的大学生不得不去撒谎,不得不去做

黑马程序员---线程并发库

软件包 java.util.concurrent 在并发编程中很常用的实用工具类。 请参见:            描述 接口摘要BlockingDeque<E>支持两个附加操作的 Queue,这两个操作是:获取元素时等待双端队列变为非空;存储元素时等待双端队列中的空间变得可用。BlockingQueue<E>支持两个附加操作的 Queue,这两个操作是:获取元素时等待队列变为非空,以及

黑马程序员---多线程

TraditionalTread 传统线程技术回顾 创建线程的两种方式: thread3中,同时创建了Thread的子类和Runnable,那么会优先执行Thread的子类,因为Runnable的代码被当做参数传到了Thread类里,Thread子类的run方法又覆盖了父类的方法,所以会执行Thread子类的代码。 package cn.itcast.heima;public class T

黑马程序员---代理

分析代理类的作用与原理及AOP的概念 代理的概念与作用  1.已经写好一个类,现在要为这个类增加一些功能,例如,异常处理、日志、计算方法的运行时间、事务管理、等等,你准备如何做? 现在我们写一个代理类: 保持了原来那个类的功能,又增加了你现在需要的功能。 主函数调用的时候,直接调用代理类就行了。 这就是代理类的功能。   2.编写一个与目标类具有相同接口的代理类,代理

黑马程序员---类加载器

------- android培训、java培训、期待与您交流! ----------   简要介绍什么是类加载器和类加载器的作用 Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap,ExtClassLoader,AppClassLoader   类加载器也是Java类,因为其他是java类的类加载器本身也要被