
If you want to get smart, the question you have to keep asking is “why, why, why?”
— Charlie Munger
想寫這篇文章是因為去年夏天我讀了這篇互聯(lián)網(wǎng)提問圣經(jīng)《How to Ask Questions the Smart Way》(也曾在舊博文里推薦過此文)。文章自然是值得多次推薦的好文章;但我在讀過兩遍之后,始終覺得有哪里不太對,這點“不對勁”直到最近才慢吞吞地想明白——
奔著想知道?如何正確地提問 & 提正確的問題?的目的去讀這篇文章,但讀完后卻愈發(fā)覺得作者在教人?如何盡量少向別人提問?——因為你應(yīng)該盡量靠自己+搜索引擎解決99%的問題喔!
“學(xué)會不做伸手黨”當然也是很有價值的課題(其實這才是作者的本意,誤讀了標題是我的錯),但我最初的疑問卻并未被這篇題為《如何聰明地提問》的文章所拯救:我并不是伸手黨,也懂得如何搜索有效信息,但我還是需要知道應(yīng)該如何真正地提出一個好問題。
《如何聰明地提問》作者Eric寫各種提問的技術(shù)性細節(jié)時,顯然假設(shè)了讀者已知自己的問題是什么——可是如果,我還不知道呢?
那就回到這個原始動機問題上了:本無問題為什么還偏要提問呢?
我的回答有兩個。
一是,生活中很多時候需要你來提問,而且你提問的質(zhì)量高低很重要。
比如,在找工作面試時,面試官最后往往會加一句,“那你有什么問題要問嗎?”再比如,和別人聊天交談(面對面or通過通訊工具)時,如果你想盡量和別人多聊會兒,或想要引導(dǎo)對話的走向,那也常需要以合適的問題來結(jié)尾——這樣才能最大限度地保證會收到下一條回復(fù)。
二則是因為,提問是學(xué)習(xí)的最佳姿勢。
《學(xué)會提問——批判性思維指南》一書中把人的思維方式主要分成的兩種:海綿式思維與淘金式思維。
海綿式思維(the sponge):不假思索地盡量接收所有信息,簡單地說就是靠記憶力來處理信息、認識世界。
淘金式思維(panning for gold):除了記憶力還需要其他思維能力(分析、推理、歸納、總結(jié)……)來判斷一條信息是否有價值。
把這兩種思維方式具體化到學(xué)習(xí)(廣義的?學(xué)習(xí)?,指習(xí)得任何新知識與技能)上,不難發(fā)現(xiàn),大部分人大部分時候都是在海綿式地學(xué)習(xí)——求知欲就像是一塊兒海綿,目標是在知識(多數(shù)時候還不是知識,只是信息而已)的海洋里盡可能地吸收更多的水。雖然較為簡便易行,可是海綿吸水式被動記下的信息,很難內(nèi)化為自己能拿來用的知識,因為吸收時沒有判斷過信息的真?zhèn)?、?yōu)劣、等級和價值——再多的信息也像一堆磚頭,不成體系,難以發(fā)揮價值。
而通過淘金式思維學(xué)習(xí)到的技能,才最終有可能在復(fù)雜的現(xiàn)實中運用起來。淘金式學(xué)習(xí),主要依靠不斷提問來幫助、引發(fā)自己主動思考分析信息的真?zhèn)闻c價值,建立與已有知識體系的聯(lián)系。由此可見,提問的質(zhì)量必定與學(xué)習(xí)的效果成正比。
就算只考慮提問的第二種價值(即?提問是學(xué)習(xí)的最佳姿勢?),任何沒放棄進步的人也都應(yīng)該關(guān)心?如何提出好問題?這個課題。
(終于寫到重點?。┠?b>如何才能提出一個有價值有潛力的好問題呢?
不妨試試WHAT - HOW - WHY三段進階式提問法!
WHAT: 對”是什么”進行初級提問,如,基礎(chǔ)概念、表面現(xiàn)象、特征重點等;
HOW: 對“如何做”進行中級提問,如,運作機制、內(nèi)部結(jié)構(gòu)、報錯分析等;
WHY: 對”為什么”追根究底,“為什么要這么做而不是那樣做?”,“為什么是主導(dǎo)因素是這個而不是那個?”等等。
在不同領(lǐng)域內(nèi),所能提出的三階問題不同,不過大道相通。
比如,在學(xué)習(xí)Python 數(shù)據(jù)結(jié)構(gòu)時,你的問題也許會從“整型值與浮點值在 Python 里的表達方式與運算形式有哪些?(WHAT)”變化為“在 Python 中 0.1 + 0.2 ≠ 0.3,這個運算結(jié)果的背后機制是什么?(HOW)”再升級到“為什么用機器語言無法準確地存儲一些十進制浮點值?(WHY)”
再比如,在讀人類歷史時,你的問題可能從“是哪個人種、在什么時間、以什么方式首次到達并殖民了美洲大陸?(WHAT)”升級到“智人到達美洲后,大批動植物紛紛滅絕,這個過程是如何發(fā)生的?智人在其中扮演了怎樣的角色?(HOW)”再聯(lián)想到“為什么是歐洲人再次發(fā)現(xiàn)并占領(lǐng)了美洲,而不是印第安人占領(lǐng)了歐洲?(WHY)”。
舉一個與編程有關(guān)的具體例子(但與具體知識關(guān)系不大,沒有編程背景也能看懂)——
以前在公司實習(xí)時,老板曾交給我一個菜鳥級任務(wù):寫一個腳本(script),刪掉一系列文檔內(nèi)數(shù)據(jù)的排列組合在其他文檔內(nèi)的重合。
任何人的第一反應(yīng),肯定是先問WHAT級別的初級問題,比如,
? WHAT
? ? ? 具體要解決什么問題?最簡化的任務(wù):假設(shè)只有3個文檔,文檔1中數(shù)據(jù)未知,文檔2內(nèi)只有a, b, c這三個數(shù)據(jù),文檔3只有x, y兩個數(shù)據(jù);需要“摳掉”文檔1中所有可能出現(xiàn)的文檔2&3內(nèi)數(shù)據(jù)的全部排列組合(有ax, ay, xa, ya, bx, by, xb, yb, cx, cy, xc, yc 共3*2*2=12種組合),并且不改變文檔1內(nèi)數(shù)據(jù)原本次序。現(xiàn)實中,有一系列的文檔1,以及與文檔1配套的一系列文檔2&3,并且每個文檔內(nèi)有幾十到上萬行數(shù)據(jù)。
? ? ? 想要什么結(jié)果?得到一系列處理干凈的文檔1,以及一個可供后人審閱、升級、繼續(xù)使用的好用腳本。
? ? ? 預(yù)測可能會出現(xiàn)什么難點?文檔本身是多語種的,也許會遇到 encoding(編碼)的問題;怎樣最有效率地找到多對文檔間的全部排列組合。
搞清楚我要做什么了之后,就要進入下一步思考HOW的問題了,比如,
? HOW
? ? ? 怎么解決我的問題?先建立最簡任務(wù)模型,調(diào)試成功后再用到真正的問題上。
? ? ? 通過什么方式來解決?寫個Python腳本。
? ? ? 需要設(shè)計什么步驟?批量讀取文檔,獲取不同文檔內(nèi)數(shù)據(jù)的全部排列組合,找到需要處理的文檔1們中重合的部分,刪除重合并生成新文檔;測試結(jié)果。
想清楚 HOW 之后,就可以動手寫腳本了。或者邊寫邊調(diào)整具體策略,都沒什么問題。
接下來WHY的問題,其實對解決當下問題的幫助不大,因此大部分人也不會去多想。但問出重要、關(guān)鍵的WHY有助于優(yōu)化解決方案,加深對 HOW 的理解(“為什么要那樣做、不這樣做?分別有什么影響?那影響重要嗎?”),最終加速技能學(xué)習(xí)過程。
? WHY
? ? ? 為什么要寫幾十行代碼的腳本,而不是直接在命令行用sed, AWK之類專門處理文本的小工具、僅花兩三行就把問題解決掉?因為不止想要處理干凈的文檔,還想要一個可供別人審閱、升級、整合到其他程序中使用的腳本;還因為需要處理的文檔并不是只有現(xiàn)在這些,未來還會不斷更新,需要反復(fù)處理。(我處理這個小任務(wù)時想到的一個WHY)
第二天,老板來看我寫的腳本時,提出了更多我從未考慮到的、也更有價值的?WHY,比如,
? ? ? 為什么選擇用循環(huán)結(jié)構(gòu)(loop / iteration)去除重合?我當下愣了一秒,然后就老實承認:我沒想過為什么要這樣寫,只是第一反應(yīng)知道循環(huán)+遍歷可以達到自己的目的,就用了……但在實際問題中呢,假如要處理的文檔很大,用循環(huán)結(jié)構(gòu)就會降低效率;此時換成 set(集)則是更好的選擇。
根據(jù)二八定律,能從 WHAT 進階到 HOW 再到 WHY 的人僅占人群中的?4%?(20%*20%)。因為,問出更高階的好問題的前提是要先研究透徹低階問題;如果試圖越過 WHAT/HOW 階段的思考與實踐而直接提出 WHY,那個問題往往會顯得很傻很天真——最后又回到我上一篇文章中提到的,自學(xué)編程最重要的三句話之一:
Do Your Homework!
引申閱讀:
《How to ask questions the smart way》by Eric Steven Raymond
《讀書不止“讀”那么簡單》博客舊文
《學(xué)會提問——批判性思維指南》by 布朗 & 基利