天天看點

【建議】如何優雅的提問?

學習方法

Author:louwill

Machine Learning Lab

     關于提問的事情,都是老生常談了。偶爾也能看到呼籲正确提問的文章,但似乎很多人并不是很重視提問的方式和價值。本着懲前毖後的原則,筆者也來寫一寫提問這個話題。

     生活中當我們向外界抛出一個問題時,這個問題能否得到有用的回答,很大程度上取決于我們提問的方式。聞道先後,術業專攻,向他人請教問題是每個人都避免不了的事情。三人行,必有我師焉說的就是這個道理,是以總體而言,我們都是鼓勵大家提問,一問一答的互動過程,本身就是提問者和被提問者互相學習和啟迪的過程。但現實情況下,問答之間的互動過程會因為提問者的不當發問而出現問題,問問題的水準會直接影響到問題答案的品質。

     是以,前面說的鼓勵提問并不是對提問的完整了解。孔子說必有我師和不恥下問,放到今天,也得加上一層正确發問的含義。技術人鼓勵提問,但并不是我們鼓勵随便提問,而是鼓勵在充分努力自我擷取答案而不得的基礎下有見地的發問。

提問之前應該做的事

     一般情況下,每個人都有自己的事情,并為此而忙碌。因為向别人提問而占用别人大量時間本身就是一個讓人過意不去的事情,對于大多數從事專業技術的人來說,時間比任何事情都寶貴。是以在提問之前,最好要確定自己的問題不會成為他人的時間殺手。但凡事沒有絕對,可能你的問題沒辦法讓回答者一兩句話說清楚,也可能願意回答你問題的人本身就足夠耐心或者古道心腸。即使如此,我們要確定在提問前做到以下兩個原則。

     第一是不問蠢問題。第二是不當懶家夥。這兩個原則通常相輔相成,有些朋友是因為懶不想自己動手搜尋答案而導緻問一些愚蠢的問題,有些朋友則是不願意思考而随口問出沒人願意回答的問題。是以,第一個問題,什麼是蠢問題?蠢問題就是提問者本身動動腦筋和動動手就可以從搜尋引擎得到答案的問題。所有人都應該對這種提問表示蔑視,這樣的人隻想做伸手黨,隻想從他人那裡直接擷取,以至于浪費他人寶貴的時間來自私自利。我們把這樣的懶家夥歸為最令人讨厭的那一類人。

【建議】如何優雅的提問?

典型蠢問題和懶家夥

     把握住兩個基本原則之後一般就能避免大多數尬尴的提問局面了。在這個過程中,你需要善用搜尋引擎,讓你能夠高效的從網際網路中找到問題的答案。熟練使用谷歌搜尋和擅于在Stack Overflow、GitHub Issue、Quora、Medium和Reddit上找到問題的答案是每一個技術學習者都應具備的基本能力。為什麼我們會這麼重視通過網際網路搜尋來解決個人問題呢?一是網際網路上開源資料汗牛充棟,這些都足夠解決你碰到的一些問題。再者是你作為初學者在學習過程中碰到的問題和踩到的坑99%的人都碰到過,并且在網絡上也都留下了解決方案,你要做到隻是把你的Error Information丢到谷歌裡去。

     比如下圖是Python的一個簡單報錯,清單索引超出了:

【建議】如何優雅的提問?

IndexError

     即使是小白初學者,碰到這種問題一般根據代碼的報錯資訊就可以自我解決問題了,稍微麻煩點把報錯複制到谷歌同樣也可以很快解決問題。如若這類問題還有人要拿來問,且不說被提問者會不會回答你,他可能會對你的學習能力産生很大質疑對你來說才是重大關切。

     除了使用搜尋引擎之外,很多工具使用、程式設計語言和代碼使用問題,官方都會給相應的Manual或者Tutorial。比如說學習R語言你會用到R help,學習PyTorch官方也給了一個非常完整的PyTorch Tutorial。

【建議】如何優雅的提問?

PyTorch Tutorial

     是以,正式提問前的一些自我探索的工作很可能能解決你個人80%的問題,在這個過程中你熟練了如何使用搜尋引擎,學會了如何對擷取的資訊流進行區分,知道了在什麼地方可以找到一個問題的答案,假以時日,你就是一個學習能力超強的人。同時也節約了他人時間,讓你極大了減少了成為别人時間殺手的機率。可以說,提問前的搜尋和閱讀決定了你的成功。

正式提問時

     人生不如意者十有八九。搜尋引擎能解決我們碰到的80%的問題,但剩下的不能靠自己解決的20%總是要面對的。是以這時候,就大膽地向别人提問吧。經過提問前的準備,相信99.9%的人都不會再問出蠢問題,問出的問題也一定是付出了努力和經過深思熟慮了。

     走到這一步,我們也要注意一些問題,讓我們的提問更加易于了解并能快速得到回報。首先是我們提問的平台或者說方式,如果是身邊的同僚和同學,梳理一下邏輯、組織好語言,直接找到對方就可以提問了。線下的提問和交流一般不會出什麼問題。但大家身邊能随時可以請教的人不多,很多人還是習慣于線上提問。比如說通過微信向他人提問,就某段開源項目的代碼給作者發郵件等等。

     線上提問很重要的一點就是語言描述。跟當面請教别人一樣,你先要理一下基本邏輯,你要做什麼,嘗試了什麼方法,在什麼環境下用了什麼工具,碰到了什麼問題,說明通過搜尋引擎找到的答案都不能完全解決等等。總的來說,你需要把你問題的來龍去脈用簡單的語言表達清楚。千萬不要小看這一點,很多時候提問者的語言表達能力簡直可以用混亂來形容。

【建議】如何優雅的提問?

bad case

     我們看一下上面這個bad case。作為一個咨詢類提問,提問者先是對自身情況做了一個一句話的介紹,讓被提問者知道他是哪個學校的以及他是一名大四學生。然後該學生就直接提出了他的問題,想找一份算法工作,然後問需要做什麼。我不知道大家看到這樣的提問會是什麼樣的感受。就筆者而言,第一感受就是一個字都不想回答。即使有意願回答,也不知道從何答起。第一,這位同學在提問之前肯定是沒有做調研,哪怕把這個問題原封不動的輸入谷歌都沒有試過,否則不會問出這樣的問題。第二,即使是沒做調研,把自身情況說詳細一點,有專業背景,受過哪方面訓練,想做哪個方向的算法,針對算法崗自身有哪些相關比賽和在校項目等等。

     我們來對上面的bad case做一下修改,大家可以做個對比:

【建議】如何優雅的提問?

bad case修正

     修改之後雖說問的也不是很好,但至少言之有物,介紹了更多的自我情況,問的問題相對具體許多,讓被提問者有可以接話的點。

     其次是追問的時候注意不要踩雷。通常來說,一次問答互動過程極有可能不足以幫你解答疑惑。這個時候追問就很重要了,比如說下面這個例子:

【建議】如何優雅的提問?

bad case

     提問者的追問可以說是非常糟糕的。對于被提問者的回答,提問者應該像提問之前自己解決問題的過程一樣,對對方的回答出現的未知概念先做一個基本的了解,努力搞懂對方的回答。圖中追問的方式就是典型的不假思索的追問。

     還有很重要的一點就是要注意禮貌。俗話說禮多人不怪,沒人會因為你多禮而怪罪你。也不是要有多禮貌,就是基本的對話禮貌用語即可。開頭詢問時要打招呼,别人回答完要說感謝。僅此而已。相信下面這種對話僅僅是少數,大多數人都幹不出這種事。

【建議】如何優雅的提問?

bad case

     最後說一下涉及到代碼的提問。畢竟與代碼相關的問題占了技術學習者的大部分時間。有代碼就會有bug,有bug自己解決不了就會向外界發起求助。在向人詢問有關代碼bug的問題時,最好是能說明該bug是在什麼運作環境下産生的,比如在Linux Python3.6環境下,該代碼在第8行報了一個RuntimeError,谷歌嘗試的方法都沒能解決,這時候在向對方描述的時候就會非常具體了。高手之間的代碼詢問可能會通過制作bug測試用例來呈現問題,當然這不做普遍要求,通常能夠描述清楚自己的運作環境、Bug所在位置和預期結果就足夠了。大家在Stack Overflow上查問題時可以留意一下,别人是如何描述自己的代碼bug的。

終極目标:鍛煉自己快速解決問題的能力

     提問永遠隻是一種解決問題的手段和方法,對于技術學習來說,我們的終極目的是提升自己快速解決問題的能力。每個人都應該以此為目标。使用搜尋引擎快速解決bug、良好的溝通和提問習慣以及強大的自我學習能力,這些都是一個人個人能力的展現。

【建議】如何優雅的提問?

     就簡單的說這麼多,很多地方可能說的詞不達意,但核心目的都是希望大家能夠努力提升自己解決問題的能力,進而提升個人核心競争力。最後祝願大家都能愉快的提問。

繼續閱讀