新聞中心
提出好的問題是在編寫軟件時(shí)的一個(gè)非常重要的技能。這么多年來我對(duì)此也算略有小成。這里有一些我用著覺得很棒的指導(dǎo)方針!

我們擁有10年網(wǎng)頁設(shè)計(jì)和網(wǎng)站建設(shè)經(jīng)驗(yàn),從網(wǎng)站策劃到網(wǎng)站制作,我們的網(wǎng)頁設(shè)計(jì)師為您提供的解決方案。為企業(yè)提供成都網(wǎng)站制作、做網(wǎng)站、微信開發(fā)、小程序制作、手機(jī)網(wǎng)站制作設(shè)計(jì)、H5頁面制作、等業(yè)務(wù)。無論您有什么樣的網(wǎng)站設(shè)計(jì)或者設(shè)計(jì)方案要求,我們都將富于創(chuàng)造性的提供專業(yè)設(shè)計(jì)服務(wù)并滿足您的需求。
開始
我實(shí)際上是那種總是會(huì)問出愚蠢問題或“不好”問題的大信徒。我一直在問人們一些愚蠢并且完全可以通過谷歌搜索或搜索代碼庫解決的問題。大多數(shù)時(shí)候我都不愿意自己去搜索解決,但有的時(shí)候我又會(huì)無論如何都自己去搞定,而且也不會(huì)認(rèn)為這如同世界末日一樣可怕。
所以本文中列舉的各個(gè)策略不是關(guān)于“在提問之前你必須要做的所有事情”,而是“一些可以幫助提出更好的問題并得到我想要的答案的要點(diǎn)!”。
何為好問題?
我們的目標(biāo)是提出易于回答的關(guān)于技術(shù)概念方面的問題。我時(shí)常碰到知識(shí)淵博并且這些知識(shí)也是我想知道的人,但他們并不總是知道如何確切地用***的方式解釋。
如果有一系列好的問題,那么就可以幫助解答的人將他們所知道的內(nèi)容有效地解釋給我聽,并指導(dǎo)他們告訴我我感興趣的東西。那么我們?cè)撊绾巫龅竭@一點(diǎn)呢?
說明你所知道的
這是我最喜歡的提問技巧之一!提問形式基本上是這樣的:
- 說明到目前為止你對(duì)這個(gè)話題的理解
- 問“對(duì)嗎?”
例如,我最近在和人(一個(gè)優(yōu)秀的問題提問者)談?wù)摼W(wǎng)絡(luò)!他們說“所以,我在這里的理解是有某個(gè)遞歸式dns服務(wù)器鏈……”。那是不正確的!實(shí)際上沒有遞歸式DNS服務(wù)器鏈。(當(dāng)你談到遞歸式DNS服務(wù)器時(shí),只涉及一個(gè)遞歸式服務(wù)器)因此他們說出他們當(dāng)前的理解,可以方便我們澄清它實(shí)際上的工作原理。
我對(duì)rkt很感興趣,但我不明白為什么rkt在運(yùn)行容器時(shí)會(huì)比Docker占用更多的磁盤空間。
雖然“為什么rkt比Docker要使用更多的磁盤空間”不怎么像是正確的問題——我差不多知道代碼是如何工作的,但我不明白為什么他們那樣寫代碼。所以我把這個(gè)問題寫到 rkt-dev 郵件列表:為什么rkt存儲(chǔ)容器圖像時(shí)不同于Docker?
我:
- 寫下了我對(duì)rkt和Docker如何在磁盤上存儲(chǔ)容器的理解
- 想出了幾個(gè)我認(rèn)為他們可能會(huì)按照他們的方式設(shè)計(jì)的原因
- 問“我的理解對(duì)嗎?”
我得到的答案超級(jí)超級(jí)有幫助,正是我所尋找的。我花了很長(zhǎng)時(shí)間以一種我滿意的方式制定了這個(gè)問題,我很高興我花了時(shí)間,因?yàn)樗刮腋玫孛靼琢藗€(gè)中奧妙。
闡明你的理解并不容易(需要時(shí)間思考你所知道的并澄清你的想法),但效果會(huì)很好,更方便你要求幫助的人針對(duì)性地提出解答。
問答案是事實(shí)的問題
我有很多問題一開始有點(diǎn)模糊,如“SQL中的連接查詢JOIN如何工作?”。這個(gè)問題不是很棒,因?yàn)檫B接查詢?nèi)绾喂ぷ饔泻芏嗖煌牟糠?!那么?duì)方怎么知道我有興趣學(xué)習(xí)的是什么?
我喜歡問那種答案是一個(gè)直截了當(dāng)?shù)氖聦?shí)的問題。例如,在SQL連接查詢示例中,一些事實(shí)問題的答案可以是:
- 連接兩個(gè)大小為N和M的表的時(shí)間復(fù)雜度是多少?是O(NM)嗎?還是 O(NlogN)+ O(MlogM)?
- MySQL在進(jìn)行連接查詢之前是否始終將聯(lián)結(jié)列排序作為***步?
- 我知道Hadoop有時(shí)會(huì)“hash連接”——這是其他數(shù)據(jù)庫引擎也使用的一個(gè)連接策略嗎?
- 當(dāng)我在一個(gè)索引列和一個(gè)未索引列之間進(jìn)行連接時(shí),我需要對(duì)非索引列進(jìn)行排序嗎?
當(dāng)我問像這樣超級(jí)具體的問題時(shí),被問的人并不總是知道答案,但至少他們理解了我感興趣的問題是怎么樣的——很明顯,我并不想知道如何使用連接查詢,我就是想了解一些實(shí)現(xiàn)細(xì)節(jié)和算法。
真誠地說出你不明白的地方
很多時(shí)候當(dāng)有人向我解釋某事時(shí),他們會(huì)說一些我不明白的東西。例如,可能有人正在向我解釋一些關(guān)于數(shù)據(jù)庫的東西,并說“好的,我們使用MySQL的樂觀鎖,因此……”。等等,我不知道什么是“樂觀鎖”啊。所以這需要提問了! : )
阻止某人接著說下去并提問“嘿,那是什么意思?”是一個(gè)超級(jí)重要的技能。我認(rèn)為它是自信的工程師的屬性之一,并且培養(yǎng)起來會(huì)大有裨益。我看到很多高級(jí)工程師經(jīng)常要求澄清說明他或她不明白的地方——我覺得當(dāng)你對(duì)自己的技能更有信心時(shí),這更容易。
越是這么去做,在我要求別人澄清的時(shí)候就越是感覺自然。事實(shí)上,如果有人在我解釋的時(shí)候不要求我澄清,我反而會(huì)擔(dān)心他們不是真的有在聽!
這也為問題回答者創(chuàng)造了在觸及他們知識(shí)領(lǐng)域范圍之外時(shí)可以承認(rèn)的余地!很多時(shí)候,當(dāng)我問某人問題時(shí),如果問到他們不知道的東西。我問的人通常真的非常善于說“不,我不知道!”
識(shí)別你不明白的術(shù)語
當(dāng)我開始當(dāng)前這份工作時(shí),我首先去了數(shù)據(jù)團(tuán)隊(duì)。當(dāng)我看我的新工作需要什么的時(shí)候,有這些要求!Hadoop,Scalding,Hive,Impala,HDFS,zoolander,以及等等。我可能之前聽說過Hadoop,但這些單詞是什么意思我基本上是兩眼一抹黑。其中一些是內(nèi)部項(xiàng)目,其中一些是開源項(xiàng)目。所以我從要求幫助我理解每個(gè)術(shù)語的含義和它們之間的關(guān)系開始。我可能會(huì)問的一些問題是:
- HDFS是數(shù)據(jù)庫嗎?(不,它是一個(gè)分布式文件系統(tǒng))
- Scalding使用Hadoop嗎?(是)
- Hive使用Scalding嗎?(不)
實(shí)際上我編寫了一部關(guān)于所有術(shù)語的“字典”,因?yàn)樾g(shù)語實(shí)在太多,并且理解所有的術(shù)語意味著真正幫助我定位自己,以便于以后提出更好的問題。
做一些研究
在我鍵入上面的SQL問題時(shí),我在Google搜索框中輸入了“如何實(shí)現(xiàn)SQL連接”。我點(diǎn)擊了一些鏈接,看到“哦,我知道了,有時(shí)有排序,有時(shí)有哈希連接,以前我聽說過”這些話,然后寫一些我遇到的更具體的問題。首先稍微Google一下,這可以幫助我寫出更好的問題!
也就是說,我認(rèn)為人們有時(shí)對(duì)“在沒有谷歌搜索之前就不要提問題”這一原則太過苛刻——有時(shí)我在和某人一起吃午飯的時(shí)候,因?yàn)閷?duì)他們的工作好奇,于是我就會(huì)問到相關(guān)的基本問題。這完全正常!
但是做研究非常有用,并且做足夠的研究以便于提出一系列超贊的問題真的很有意思。
決定去問誰
在這里我主要談?wù)撓蚰愕耐聠枂栴},因?yàn)榇蠖鄶?shù)時(shí)候我都是向他們求助的。
詢問同事時(shí),我會(huì)思考到的一些問題是:
- 是提問的好時(shí)機(jī)嗎?(如果他們?cè)诿χ鲆患o迫的事情,那么可能就不是好時(shí)機(jī))
- 詢問他們解答問題所需要的時(shí)間是不是可以節(jié)約我盡可能多的時(shí)間?(如果我問了一個(gè)問題,將花費(fèi)他們5分鐘回答,卻將節(jié)約我2個(gè)小時(shí)的時(shí)間,那就棒棒噠 : D)
- 他們需要多少時(shí)間來回答我的問題?如果我有半小時(shí)的問題要問,那么我可能會(huì)之后再安排一段時(shí)間,如果我只有一個(gè)快速的問題,那么我很有可能現(xiàn)在就問了。
- 這個(gè)人對(duì)這個(gè)問題而言是否過于太高級(jí)了?我認(rèn)為這是很容易陷入的陷阱,那就是每個(gè)問題都去問最有經(jīng)驗(yàn)/最有知識(shí)的人,而且每個(gè)問題的主題還各不相同。但實(shí)際上更好的辦法是找一個(gè)知識(shí)稍微沒那么淵博的人——通常他們可以回答大部分的問題,擴(kuò)散負(fù)荷,而且他們還可以展示他們的知識(shí)(哈哈)。
我不總能做好這些事情,但考慮這些確實(shí)于我有所幫助。
此外,我通常會(huì)更多地去問更靠近問題的人——幾乎每天我都會(huì)與之談?wù)摰娜?,一般說來我更很傾向于去問他們問題,因?yàn)樗麄兏私馕业墓ぷ鞅尘?,從而給我一個(gè)有用的答案。
《How to ask questions the smart way by ESR》是一個(gè)流行和相當(dāng)有敵意的文檔(它的開頭陳述很爛,如‘我們稱呼這樣的人為“失敗者”’)。內(nèi)容關(guān)于如何在互聯(lián)網(wǎng)上向陌生人提問。向互聯(lián)網(wǎng)上的陌生人問問題是一個(gè)超級(jí)有用的技能,可以讓你獲取真正有用的信息,但這也是一類“硬模式”的問題。因?yàn)榕c你對(duì)話的人對(duì)你的情況知之甚微,所以更仔細(xì)地陳述你確切想要知道什么更佳。我不喜歡ESR文檔,但它確實(shí)說明了一些有用的東西。文章的“How To Answer Questions in a Helpful Way”部分還是挺不錯(cuò)的。
提出問題以顯示不明顯的內(nèi)容
更高級(jí)的問題提問形式是提出問題以揭示隱藏的假設(shè)或知識(shí)。這種問題實(shí)際上有兩個(gè)目的——***,得到答案(可能這個(gè)人知道但其他人不知道的信息),但也要指出,這里有一些隱藏的信息,并且共享這些信息是有用的。
Etsy的“Debriefing Facilitation Guide”中的“The Art of Asking Questions”部分就是在討論已發(fā)生事件的背景下的一個(gè)非常好的入門介紹。以下是從該指南摘錄的幾個(gè)問題:
- “當(dāng)你懷疑這種類型的失敗發(fā)生時(shí),你想要尋找什么?”
- “你怎么判定這種情況是‘正?!??”
- 你是怎么知道數(shù)據(jù)庫崩潰的?
- 你怎么知道那是你需要page的團(tuán)隊(duì)?
這些類似的問題(看起來很基本,但實(shí)際上并不明顯)在某些權(quán)威人士提問的時(shí)候特別強(qiáng)大。我特別愿意看到經(jīng)理/高級(jí)工程師問及這類基本但重要的問題,如“你是怎么知道數(shù)據(jù)庫崩潰的?”,因?yàn)樗鼮樗捷^低的人創(chuàng)造了以后提問相同問題的空間。
回答問題
André Arko的“How to Contribute to Open Source”里面有部分是我非常欣賞的
既然你已閱讀了所有要點(diǎn)并pull請(qǐng)求,那么就開始查看你可以回答的問題。如果問題你以前就回答過,或者你剛剛閱讀的文檔就可以解答,那么用不了多少時(shí)間你就能發(fā)現(xiàn)這一點(diǎn)。回答你知道怎么回答的問題。
如果你正在攀登一個(gè)新項(xiàng)目,那么回答那些正在學(xué)習(xí)你剛學(xué)完的那些內(nèi)容的人的問題,可謂是鞏固知識(shí)的好方法。每當(dāng)我***次回答關(guān)于一個(gè)新主題的問題時(shí),我總是會(huì)有一種“OMG,要是我答錯(cuò)了該怎么辦啊,OMG”的感覺。但通常我都可以正確回答他們的問題,然后我就會(huì)感覺自己棒棒噠,好像自己更好地理解了主題!
問題也是巨大的貢獻(xiàn)
好的問題可以為社區(qū)做出巨大的貢獻(xiàn)!我回答了一些關(guān)于CDN的問題,并在 CDNs aren’t just for caching寫出了答案。很多人告訴我,他們真的很喜歡這篇博文,我認(rèn)為我問的這些問題幫助了很多人,不僅僅惠及自己。
很多人表示自己很喜歡回答問題!我認(rèn)為將好的問題當(dāng)作一件你可以做的超棒的事情,并放到對(duì)話中是很重要的,而不要只是認(rèn)為“問好的問題,這樣人們才只會(huì)稍微惱火,而不會(huì)非常非常惱火”。
新聞名稱:程序員如何提一個(gè)好問題
轉(zhuǎn)載來于:http://www.dlmjj.cn/article/ccscdeg.html


咨詢
建站咨詢
