提問的藝術
在開發過程當中,難免會遇到一些問題,而提問是最不費腦并且可能是最快的一種方式,但是,你的問題不一定會被人家所理解,但是你應該學會怎么提問
提問之前
在提問之前,首先要確保以下幾個點:
- 有做好可能解決不了的心理準備
- 或許應該準備好付費的情況
- 確定這個問題是因為實現什么而出現的,是否可以換種實現方式
- 有認真思考過該問題的解決方案
- 有嘗試過搜索該問題的解決方案
- 確定 開發手冊/文檔中 沒有該問題的解決方案
- 確定你有該問題的基礎知識
- 有做一系列的排查,并將問題確定在一個范圍內
解決不了
當你的問題難度太大時,可能沒有人能回答你的問題,你得做好解決不了的準備,解決不了請不要惱羞成怒,做出一些不理智的事情,或許可以嘗試下付費解決,也或許可以換一種解決的方式(放棄問題的源頭,用另一種方式實現你的邏輯)
認真思考問題的解決方案
當問題特別明顯,只要有動腦就能解決這個問題時,沒有人會喜歡回答這種基礎問題,
例如:
當你知道echo "hello world"語句,卻不知道怎么輸出"EasySwoole天下第一"時
當你知道如何移動文件到/tmp目錄,卻不知道移動到指定日期的目錄時
當你知道mysql有解釋器可以查看是否有使用到索引,卻不知道如何看組合索引是否有效時
當報錯信息出現的情況,卻不知道去搜索時
搜索問題的解決方案
同樣,當一個問題直接搜索就能出現答案,卻一直拿出來問時,沒有人會給伸嘴黨
喂飯,這是對回答者的一種侮辱
請在提問的時候,先嘗試在搜索引擎中搜索,或許答案就在第一頁
開發手冊
當你在搜索引擎沒有找到一些 生僻/不知名/不公開 的一些問題時,或許你得考慮下是否有一份文檔還沒有看完
既然搜索引擎都找不到的問題,那你問對該項目毫不知情的人有什么用呢?
既然有開發文檔,那你為什么不嘗試下在開發文檔中發現這個問題的解決方案呢?
問題的基礎
千萬不要問你對該問題一無所知的問題,當你沒學過php時,請不要問為什么if(){}
括號里不加條件就會報錯的問題
當你提出一個問題的,該問題相應的基礎你應該要會,否則你會被人恥笑.
例如:
當你沒看完新手教程,問swoole為什么運行之后改代碼要重啟
當你沒看完面對對象,問為什么不use命名空間就會報錯
當你連接websocket時,問為什么會發起一個http請求
排查問題
在提問之前,首先你得學會排查這個問題,確定問題的一個大致范圍.否則會讓人無從回答.
例如:
當你上傳文件這個邏輯出現問題時,你問:"為什么我沒法上傳文件",是沒有人能回答的了你的,你得自行排查,直到一個小范圍.
例如:
- 上傳文件,選擇文件之后,發生錯誤.
- 選擇文件成功,發起http請求時出錯.
- 發起http請求成功,到后端接收不到文件信息.
- 接收文件信息成功,無法保存上傳文件.
將一個大問題分解成一個個步驟,自行測試每個步驟.直到某個步驟出錯(如果每個步驟都有錯,那就一個個步驟慢慢解決)
提問 (首先確保你看完了上面的 提問之前
小節)
在提問時,我們應該避免以下幾種問法:
- 在嗎?
- 大神救我
- 你好
- 大佬求帶
- 有沒有人用過xxx(說一個框架,或者一個不知名的項目)
- 大神這個是怎么做的(直接要代碼)
- 可以問個問題嗎?(不說問題,等別人回答可不可以)
- 這個代碼有什么錯?(發出一串代碼,不說問題)
- 這個代碼怎么改?(發出一串代碼,不說怎么改,不說問題)
- 為什么我這個有問題?(截圖一段"xxxxx"自行判斷輸出的錯誤信息不截圖代碼)
- 能不能咨詢一下(某種語言,某種框架,某種項目 一個大范圍的概念)
當然,沒有人會跟錢過不去,只要給錢,可無視一切
正確的提問包含以下幾點:
- 描述準確,準確描述你要實現的功能,問題出現之前以及出現之后的現象
- 截圖準確,不要截一些和問題無關,或者對解決問題沒有任何幫助的圖
- 態度端正,虛心請教,沒有人有義務幫你.
問題可分為以下幾種:
- 概念問題,某種抽象概念的不理解
- 代碼問題,代碼出現非預期的情況,報錯等
- 框架問題,出現框架報錯,運行出錯,運行邏輯不理解等問題
- 邏輯問題,對某種功能實現的邏輯不理解
- 性能優化問題
每種問題的提問方式如下:
概念問題
概念問題,我們必須要描述準確,并且有自行了解過概念的基礎,例如:
- 我不太清楚為什么要用面對對象,直接函數封裝不行嗎?
- 為什么協程要是用mysql連接池 等
代碼問題
代碼問題,我們需要截圖代碼,以及報錯信息,并且說明自己要實現什么功能,例如:
- 我想要實現文件上傳,我已經嘗試了修改權限,但是不知道為什么代碼會報錯(附上錯誤信息,以及代碼) 等
框架問題
框架問題,我們需要詳細的說明框架的哪個部分,以及發生了什么問題,例如:
- 使用EasySwoole時,發現在生產模式下,調用配置文件錯誤
- 使用tp3.2時,上傳文件總是報文件夾不存在,但是文件夾存在
- 使用tp3.2時,session生存時間無法配置
邏輯問題
邏輯問題,我們需要詳細描述某個功能的哪部分邏輯,例如:
- 請問session過期是怎么實現的?
- 請問mysql連接池是怎么實現的?
性能優化問題
性能優化問題,需要先確認慢的地方,然后截圖,例如:
- 我發現這段代碼執行特別慢,有什么錯誤嗎?(附上代碼截圖)
- 這段sql我想實現xxxxx查詢,但是非常慢,能優化嗎?(附上sql語句,表結構,解釋器截圖)
可查看https://github.com/tioncico/How-To-Ask-Questions-The-Smart-Way