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