橡皮鴨子解決問題法

Stack Exchange 上,我們一直強(qiáng)調(diào),提交問題的人應(yīng)該在提問前多花點(diǎn)時間研究一下他們的問題,而且我們對此非常偏執(zhí)。就是說,當(dāng)你提交問題時,你應(yīng)該…

  • 描述問題要足夠詳細(xì),以便我們能跟上你的思路。提供必要的背景信息,幫助我們理解發(fā)生了什么事情,即使我們不是你所在領(lǐng)域的專家。
  • 告訴我們?yōu)槭裁茨阈枰肋@個問題的答案。是什么讓你找到這兒來尋找答案的?你提的問題是出于好奇心,還是在某個項(xiàng)目上遇到了阻礙?我們不需要知道你全部的故事細(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)非常司空見慣了。不信的話你自己看:

當(dāng)我解決了自己的問題,我該如何感謝社區(qū)呢?

迄今為止我只發(fā)布過一個問題,而且差點(diǎn)提交了另一個。這兩次經(jīng)歷,最終都是在我撰寫問題的過程中,我至少部分地解答了自己要問的問題。我之所以能夠想出答案,這要?dú)w功于社區(qū)以及描述問題的過程。當(dāng)我描述問題時,并沒有與答案有關(guān)的明確線索,但當(dāng)問題寫完之后,卻讓我產(chǎn)生了考慮該問題的另一條思路。

為什么正確地描述你的問題往往會自助地產(chǎn)生答案呢?

我不知道這已經(jīng)發(fā)生多少次了:

  • 我有一個問題
  • 我決定把它放到 stackoverflow 上面
  • 我粗略地將問題寫下來
  • 我知道該問題描述的不好
  • 我又花費(fèi)了15分鐘時間重新思考該如何描述問題
  • 我意識到自己正在一個完全錯誤的方向上解決問題
  • 我再次從頭開始,并且迅速找到了問題的解決方案

上述這樣的事情是否也發(fā)生在你身上呢?有時候,提出正確的問題,似乎問題就已經(jīng)解決一半了。

開始提交一個問題,實(shí)際上是在幫助我調(diào)試我自己的問題

開始提出一個問題,實(shí)際上是在幫助我調(diào)試我自己的問題,尤其為了得到像模像樣的的答案時,我們總是會提供足夠詳細(xì)的與問題相關(guān)內(nèi)容。這樣的事情以前是否在別的人身上發(fā)生過?

這不是一個什么新東西,只要給予足夠的時間,每一個互聯(lián)網(wǎng)社區(qū)似乎都能找到自己的解決問題方式,但是“向鴨子提問”的確是一個非常強(qiáng)大的解決問題的技巧和方法。

鮑勃指著辦公室的角落,“在那兒”,他說,“有一只鴨子。我希望你向那只鴨子提出你的問題?!?/p>

我看著那只鴨子。事實(shí)上,它吃的很飽,一動不動。即便它還能動,也不可能是一個有關(guān)設(shè)計信息的有效來源。我看著鮑勃。鮑勃看起來很認(rèn)真。當(dāng)然,他是我的上司,我不想失去這份工作。

我搖搖晃晃地向鴨子走了過去,并且站在了它的旁邊。我開始低下頭和鴨子交流,看起來有點(diǎn)像在祈禱?!澳?,” 鮑勃問,“在干什么?”

鮑勃的一位上司正巧在他的辦公室。他開心地大笑起來。

“安迪,”他說,“我不是讓你向鴨子祈禱,我是讓你向鴨子問問題。” 我舔了舔我的嘴唇。“大聲嗎?” 我說。

“大聲,” 鮑勃堅(jiān)定地說。

我清了清嗓子?!傍喿樱?我要開始了。

“它的名字叫小鮑勃,” 鮑勃的那位上司補(bǔ)充了一句。我冷冷地瞥了他一眼。

“鴨子,” 我繼續(xù)說,“我想知道,當(dāng)你使用 U 形夾掛鉤,在管道頭部排水時,怎樣防止噴水管彈出 U 形夾,導(dǎo)致管…”

在我向鴨子問問題的過程中,我得到了問題的答案。U 形夾掛鉤是懸掛在螺紋桿上面的。如果管道安裝工將螺紋桿鋸到一定長度,使其緊緊頂在噴水管頂部的話,實(shí)際上管子已經(jīng)被固定在掛鉤上了,這樣也就防止了管子的突然脫落。

我轉(zhuǎn)頭看向鮑勃。鮑勃在點(diǎn)頭?!澳阒来鸢噶?,是這樣嗎?” 他說。

“應(yīng)該把螺紋桿緊緊頂在管子的頂部,” 我說。

“完全正確,” 鮑勃說?!跋麓文阍儆袉栴},我還讓你來這兒繼續(xù)問鴨子,而不是問我。大聲地問它。如果你仍舊無法得到答案,你再來問我?!?/p>

“好的,” 我說,然后就回去繼續(xù)工作了。

我很喜歡這個特殊的故事,因?yàn)樗v解地十分清楚 - 解決橡皮鴨問題的關(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ù)唧唧

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,928評論 25 709
  • 親愛的果果: 又到了小區(qū)的紫藤花盛開的4月,聞著花香,我感到這個春天格外美好,我們努力學(xué)習(xí)新知識,交新朋友,...
    熱帶毛毛蟲閱讀 277評論 1 3

友情鏈接更多精彩內(nèi)容