最近加了很多新人朋友,大部分都是初級開發者。都想要加入開發者群交流討論平時遇到的問題。新人朋友有這種想法其實蠻好的,但是很多人似乎都不知道如何有效提出自己的問題,他們往往一張圖或者一句話就往群裡一扔,並且希望能有群友給自己解答。
大部分情況這種問題都會石沉大海,少部分情況下會有一些熱心腸的群友會指出他們的問題描述不夠有效,進而 引導他完善自己的問題。可後來新人越來越多,這種新手問題似乎總是充斥在群裡,慢慢得,沒有人願意在給新人做解答了。
再舉個例子: 我是一個技術群群主,看到了一個新手提出了不知頭尾的問題,我起初熱心教導他得先完善問題描述,並且耐著性子引導他解決問題,然後他一句話也沒說消失在了群裡,最後我發現他似乎是得到問題答案後就退了群。大家會覺得我怎麼想,我以後還會願意幫助這些新手嘛?
上面這個例子雖然比較極端,但是我想表達得是提問者作為被幫助得一方,最基本得道德底線就是對幫助自己的人持有禮貌得態度。同為開發,我本無私,不求回報,沒想到你卻如此絕情!
自人類社會誕生以來,人情世故就充斥其中。
好啦,上面說完了,我寫這篇文章得目的就是想在 it 領域告訴那些不擅長向別人提問得開發者,如何做一個優雅(禮貌且有效)得提問者。接下來,我會按照為什麼要提問、自我解決、禮貌且有效的提問這三個部分來給大家講解。
為什麼要提問
自參加九年義務教育起,老師通常都會在上完課後問底下得同學們,大家還有什麼問題嗎?
讀書時,有些同學可能一年也提不出一個問題,有些同學則幾乎每節課都會提出問題,若干年後,哪些提問較多得同學大部分都比不愛提問題得同學混得好。
在開始學習如何提問之前,我們需要理解為什麼提問如此重要:
- 加速學習過程: 透過提出正確的問題,可以更快地理解複雜的概念和技術。
- 解決實際問題: 在遇到技術難題時,有效的提問可以幫你更快地找到解決方案。
- 建立專業網路: 高質量的問題可以吸引同行的注意,幫助你建立專業人脈。
- 提高溝通能力: 學會清晰表達技術問題,這項技能在職業生涯中至關重要。
提問題不僅是為了解決問題,也是體現你的專業能力以及溝通能力,你不問是沒人會主動來問你的!在這裡送給大家一句話 “勇敢的人先享受世界”。
嘗試自我解決
在向他人尋求幫助之前,最好先自己在網上搜尋一番,毫不誇張得說,it 領域中大部分人遇到得問題在網上都有 現成得答案。只是大家可能沒有掌握正確得搜尋方法,導致得不到想要得答案。
所以在大家自我解決問題之前,我得先給大家講講怎麼搜尋問題!
怎麼搜尋問題
搜尋引擎
在國內最常用的就是百度了,大部分人都知道百度的存在,那為什麼在得到控制檯一串報錯後,不捨得餵給百度,而是丟到群裡一大串 error log?有條件的開發者也可以使用谷歌搭配英文搜尋,得到的搜尋結果會更準確一些。
官方文件
大部分熱門的語言、框架、中介軟體都提供了官方文件,官網通常是最權威、最新的資訊來源,並且許多專案的官網中都有 FAQ 部分,裡面包含了最常見的問題和解答,瀏覽這些,就可以解決大部分人的疑問。
瀏覽相關論壇和社群
如 Stack Overflow, GitHub Issues, Reddit 等平臺上可能已經有人問過類似的問題。如果有,那麼評論區裡往往就包含了現成的答案。
通常情況下我搜尋問題的優先順序就是按照搜尋引擎 -> 官方文件 -> 瀏覽相關論壇和社群。大部分問題都可以在前兩步找到答案。只有當我遇到框架、中介軟體中一些罕見的報錯時,我才需要在 Github Issues 區尋找相似問題是否已經有人提出以及解決方案。
復現和分析問題
復現問題
首先檢查是必現問題還是偶現問題,這有助於別人幫你解決問題時,節約時間。
分析問題
檢視錯誤訊息、日誌、堆疊跟蹤等資訊。大部分框架、語言返回的錯誤資訊實際上已經告訴了你們問題產生的原因。只不過現代作業系統起源與國外,大部分程式語言的關鍵詞都是英文。這對於國人新手學習一門程式語言確實是一種阻礙,相比之下,隔壁阿三把英文作為官方語言,在 it 領域確實比國內人更有優勢一些。
幸運的是,現如今各種翻譯軟體層出不窮,對於大部分程式語言的報錯,你只需要動動手把這一段英文翻譯一下就能知道這個問題根源是什麼,進而聯絡程式碼檢視問題出在哪裡。
優雅的提問
當你自己確實解決不了一個問題時,那麼是時候該向別人請教了。雖然我建議能自我解決的問題就儘量自我解決,但是考慮到時間成本和實現成本,我建議大家給自己設定一個 end time。當超過這個時間還是解決不了又或者實現成本巨大的話,就直接去尋求外部幫助把,這一點也不丟人,因為你也付出了努力。
有效的問題
問問題誰不會啊,但是大家要清楚,問題是你提的,你當然知道這個問題的產生背景、上下文、程式碼等。但是對於被提問者,他知道這些嗎?你有考慮過被提問者能第一時間理解你提的問題嗎?對於一些不知道頭尾、一句話描述的問題,被提問者有必要為你解答嗎?
接下來我透過兩個真例項子告訴大傢什麼是有效的問題什麼是無效的問題。
無效的問題 1
這是群友某日在群裡發的一個問題,上來就是一段經典的英文 log。隨後問怎麼解決?說實話,對於這種問題我都是預設不予理睬的,這個問題激發不了我得助人慾。我來講講我為什麼。
- 問題背景:這個日誌在在什麼環境在產生?是 Java、Javascript 還是 Python 又或者是瀏覽器。
- 提供上下文 : 解釋你試圖實現什麼,以及在哪一步遇到了問題。
- 可復現的程式碼:提供足夠重現問題的最少程式碼。
- 禮貌用語:尋求幫助的話得保持禮貌。而不是一段 log 接一句怎麼解決。別人憑什麼給你解決?你連最基本得禮貌都沒有。
看了我不予理睬得原因後,大家應該也能理解我了把。那麼怎麼把這個無效得問題變成一個有效得問題嘞?我在用搜尋引擎直接搜尋這段 log 後得到了問題得上下文以及復現程式碼(這個問題別人早已經遇見過了,並且提供瞭解決方案。。。)後,重新編寫了一個有效得問題如下,
有效的問題 1
對比無效問題 1 大家可以看到我提出得問題有哪些改變嗎?
- 問題背景:前端開發在瀏覽器 chrome 控制檯有報錯。
- 提供上下文 :使用 element ui 提供的單選框元件 el-radio-gruop 時,點選單選框報錯。
- 可復現的程式碼:問題程式碼已經提供。
- 禮貌用語:開頭第一句話就是大佬們,滿滿得求知慾。
無效的問題 2
這是某日群友在技術群直接 at 我發的一張圖,問我 xxl-job 後臺賬號密碼多少,我在仔細看完他發的圖後,尋思 xxl-job 後臺的登入框也不長他圖裡這樣啊!我怎麼給你回覆嘞?後面的對話更像是加密通話一般,
在這個問題裡,提問者一開始就缺失了問題背景、上下文,最後一句我知道啥問題了,結束了話題收了場,對他而言相當於自己靈光一閃,迅速解決了問題,但是對於那些想幫他解決問題的人而言只能說是莫名其妙。
我在嘗試理解他這個問題得背景、上下文後,得出的結論是,可能他一開始就把 xxl-job 後臺與其他系統後臺地址搞錯了,登入其他系統後臺時輸入 xxl-job 後臺的賬號密碼就登不進去了,其實就是一個烏龍。那麼這種烏龍問題能不能變成一個有效的問題,讓大家不在感覺莫名其妙?
有效的問題 2
對比無效問題 2 得改變如下,
- 問題背景:xxl-job 後臺登陸失敗
- 提供上下文 :後臺地址 http://localhost:8081/login,使用 xxl-job 預設賬號密碼 admin/123456
- 可復現的程式碼:這個問題暫不不需要。
- 禮貌請教:開頭第一句話就是大佬們,滿滿得求知慾。
總結
OK,本文到這裡也就結束了,針對如何做一個優雅得提問者這個話題,我來給大家做一個總結。
- 遇到問題不要慌,善用搜尋引擎、官方文件、技術論壇社群如 Github 等,查詢是否有現成答案。
- 分析問題原因,遇到錯誤時分析錯誤日誌,聯絡程式碼,嘗試定位問題原因,自我解決。
- 提出問題時要攜帶背景、上下文資訊,便於他人理解,禮貌得尋求他人幫助,不要吝嗇謝謝兩個字。
如果覺得這篇文章寫的不錯的話,可以關注我的公眾號【程式設計師wayn】,第一時間更新更多技術乾貨、專案教學、經驗分享的文章。