在 Stack Exchange 上,我們一直強(qiáng)調(diào)裕寨,提交問題的人應(yīng)該在提問前多花點(diǎn)時間研究一下他們的問題,而且我們對此非常偏執(zhí)派继。就是說宾袜,當(dāng)你提交問題時,你應(yīng)該…
- 描述問題要足夠詳細(xì)驾窟,以便我們能跟上你的思路庆猫。提供必要的背景信息,幫助我們理解發(fā)生了什么事情绅络,即使我們不是你所在領(lǐng)域的專家月培。
- 告訴我們?yōu)槭裁茨阈枰肋@個問題的答案嘁字。是什么讓你找到這兒來尋找答案的?你提的問題是出于好奇心杉畜,還是在某個項目上遇到了阻礙纪蜒?我們不需要知道你全部的故事細(xì)節(jié),這樣做寻行,只是需要在這兒給我們一些上下文的提示霍掺。
- 分享你在該問題上面所做的研究。迄今為止你發(fā)現(xiàn)了什么拌蜘?為什么它不能有效工作杆烁?如果你沒有做任何研究 ... 你應(yīng)該提交這個問題嗎?如果你邀請我們花費(fèi)寶貴的時間幫助你简卧,你應(yīng)該花同樣合理的寶貴時間設(shè)計一個像樣的問題兔魂,唯有這樣才是公平的。幫助我們也是幫助你自己举娩!
我們有一個非常好的如何提問頁面(How to Ask page)解釋了這些事宜析校。(并且在 Stack Overflow 上,由于問題太多铜涉,我們的確要求新用戶在提交他們的第一個問題之前去訪問那個頁面智玻。作為一個新用戶在提交第一個問題前,你自己就能看到這個頁面芙代。)
我們極力避免的吊奢,也是最最重要的,是那些無法回答的問題纹烹。這些問題對任何人都沒有幫助页滚,但是若任其發(fā)展卻可以毀掉一個問答網(wǎng)站,將其變成一個虛擬的鬼城铺呵。在 Stack Exchange 上裹驰,那些缺乏背景信息和上下文以至于不能被合理回答的問題,將被立即關(guān)閉片挂,然后如果情況不能得到改進(jìn)的話幻林,最終將被刪除。
正如我之前所說的音念,我們對此非常偏執(zhí)滋将。我們認(rèn)為,通過教授橡皮鴨子問題解決法(Rubber Duck problem solving)症昏,是一個明確地幫助你自助解決問題的好理由随闽。而且,這樣做一直以來都非常有效肝谭。在數(shù)年的時間里掘宪,我已經(jīng)從 Stack Overflow 或者 Stack Exchange 其它子站上得到了大量的反饋蛾扇,就是說,在以這樣的方式撰寫具體問題的過程中魏滚,最終他們想出了自己問題的答案镀首。
這種事已經(jīng)非常司空見慣了。不信的話你自己看:
迄今為止我只發(fā)布過一個問題,而且差點(diǎn)提交了另一個腥寇。這兩次經(jīng)歷成翩,最終都是在我撰寫問題的過程中,我至少部分地解答了自己要問的問題赦役。我之所以能夠想出答案麻敌,這要?dú)w功于社區(qū)以及描述問題的過程。當(dāng)我描述問題時掂摔,并沒有與答案有關(guān)的明確線索术羔,但當(dāng)問題寫完之后,卻讓我產(chǎn)生了考慮該問題的另一條思路乙漓。
我不知道這已經(jīng)發(fā)生多少次了:
- 我有一個問題
- 我決定把它放到 stackoverflow 上面
- 我粗略地將問題寫下來
- 我知道該問題描述的不好
- 我又花費(fèi)了15分鐘時間重新思考該如何描述問題
- 我意識到自己正在一個完全錯誤的方向上解決問題
- 我再次從頭開始,并且迅速找到了問題的解決方案
上述這樣的事情是否也發(fā)生在你身上呢叭披?有時候鱼喉,提出正確的問題,似乎問題就已經(jīng)解決一半了趋观。
開始提出一個問題锋边,實(shí)際上是在幫助我調(diào)試我自己的問題皱坛,尤其為了得到像模像樣的的答案時,我們總是會提供足夠詳細(xì)的與問題相關(guān)內(nèi)容豆巨。這樣的事情以前是否在別的人身上發(fā)生過剩辟?
這不是一個什么新東西,只要給予足夠的時間往扔,每一個互聯(lián)網(wǎng)社區(qū)似乎都能找到自己的解決問題方式贩猎,但是“向鴨子提問”的確是一個非常強(qiáng)大的解決問題的技巧和方法。
鮑勃指著辦公室的角落萍膛,“在那兒”吭服,他說,“有一只鴨子蝗罗。我希望你向那只鴨子提出你的問題艇棕◎蚪洌”
我看著那只鴨子。事實(shí)上沼琉,它吃的很飽北苟,一動不動。即便它還能動打瘪,也不可能是一個有關(guān)設(shè)計信息的有效來源友鼻。我看著鮑勃。鮑勃看起來很認(rèn)真闺骚。當(dāng)然彩扔,他是我的上司,我不想失去這份工作葛碧。
我搖搖晃晃地向鴨子走了過去借杰,并且站在了它的旁邊。我開始低下頭和鴨子交流进泼,看起來有點(diǎn)像在祈禱蔗衡。“你乳绕,” 鮑勃問绞惦,“在干什么?”
鮑勃的一位上司正巧在他的辦公室洋措。他開心地大笑起來济蝉。
“安迪,”他說菠发,“我不是讓你向鴨子祈禱王滤,我是讓你向鴨子問問題∽茵” 我舔了舔我的嘴唇雁乡。“大聲嗎?” 我說糜俗。
“大聲踱稍,” 鮑勃堅定地說。
我清了清嗓子悠抹≈樵拢“鴨子,” 我要開始了楔敌。
“它的名字叫小鮑勃啤挎,” 鮑勃的那位上司補(bǔ)充了一句。我冷冷地瞥了他一眼卵凑。
“鴨子侵浸,” 我繼續(xù)說旺韭,“我想知道,當(dāng)你使用 U 形夾掛鉤掏觉,在管道頭部排水時区端,怎樣防止噴水管彈出 U 形夾,導(dǎo)致管…”
在我向鴨子問問題的過程中澳腹,我得到了問題的答案织盼。U 形夾掛鉤是懸掛在螺紋桿上面的。如果管道安裝工將螺紋桿鋸到一定長度酱塔,使其緊緊頂在噴水管頂部的話沥邻,實(shí)際上管子已經(jīng)被固定在掛鉤上了,這樣也就防止了管子的突然脫落羊娃。
我轉(zhuǎn)頭看向鮑勃唐全。鮑勃在點(diǎn)頭∪镧瑁“你知道答案了邮利,是這樣嗎?” 他說垃帅。
“應(yīng)該把螺紋桿緊緊頂在管子的頂部延届,” 我說。
“完全正確贸诚,” 鮑勃說方庭。“下次你再有問題酱固,我還讓你來這兒繼續(xù)問鴨子械念,而不是問我。大聲地問它运悲。如果你仍舊無法得到答案龄减,你再來問我∩劝”
“好的,” 我說寄纵,然后就回去繼續(xù)工作了鳖敷。
我很喜歡這個特殊的故事,因為它講解地十分清楚 - 解決橡皮鴨問題的關(guān)鍵部分是向這個虛構(gòu)的人物或靜物問一個深入且足夠詳盡的問題程拭。是的定踱,即使你最終沒能解決這個問題,起碼你可以意識到自己犯了一些愚蠢的錯誤恃鞋。向虛構(gòu)的人物問問題崖媚,要一步一步來亦歉,并且要盡量詳細(xì),這種嘗試經(jīng)常能讓你找到問題的答案畅哑。如果你不愿意花費(fèi)精力去完整地說明問題以及試圖解決該問題的過程肴楷,那么在你詢問其他人之前,你就不能得到深度思考你的問題所帶來的好處荠呐。
如果你在編程上缺少伙伴(但是你絕對應(yīng)該有)赛蔫,你可以利用橡皮鴨問題解決法這樣的技巧找出答案,當(dāng)然這全部要靠你自己泥张,或者利用偉大的互聯(lián)網(wǎng)在社區(qū)中尋求答案呵恢。即使你沒有得到你想要的答案,強(qiáng)制自己完整地描述自己的問題 - 最好以書面形式 - 往往就會產(chǎn)生新的認(rèn)識和發(fā)現(xiàn)媚创。
作者:Jeff Atwood渗钉,程序員,著名博主钞钙,Stack Overflow / Stack Exchange & Discourse 聯(lián)合創(chuàng)始人及發(fā)起者鳄橘。
原文: Rubber Duck Problem Solving
感謝: Jodoo 幫助審閱并完成校對。
P.S. 如果您喜歡這篇文章并且希望學(xué)習(xí)編程技術(shù)的話歇竟,請關(guān)注一下 復(fù)唧唧挥唠。