提問是軟件開發的一個不可避免的環節,各類思想火花地碰撞每每能產生奇妙的結果,可是做爲一名傲嬌霸氣君臨天下的程序員,你是否真的思考和總結過本身的提問方式呢?如何去問一個讓雙方都滿意的好問題並最大程度的獲得回覆呢?畢竟人生苦短,誰也不肯意爲一個爛問題浪費大把好時光。git
提問以前,請先扣心自問下以下事項:程序員
仔細思考過遇到的問題嗎?github
單憑自身的能力已經沒法解決了嗎?數據庫
搜索引擎和社區裏有人提過相似的問題嗎?瀏覽器
我有合適的提問人嗎?框架
作好了提問前的準備材料嗎?編輯器
對於各類凌亂的技術問題,程序員中,女程序員覺得男程序員,什麼都會;男程序員中,通常程序員覺得技術好的程序員,什麼都會;技術好的程序員,每次都在網上苦苦找答案......工具
提出好的問題是你提高的第一步,提問就跟寫程序同樣,要有語境,要有上下文,要有條理,要有斷點調試,而不是一來就要求被問人必須給出答案,畢竟誰也未曾欠誰的,幫你是熱心,不幫你是本分。測試
確認本身沒法獨立解決,已經作過不少嘗試 :遇到問題不要急着問別人,解決問題的獨立性必定要培養出來,在時間容許的狀況下先看看本身可否應付而非偷懶,一方面能夠鍛鍊分析問題和解決問題的能力,另外一方面,一旦問題解決了,問題就不是問題,而是經驗和知識庫。若是有條件,請記錄下來,能夠避免其餘人在你的問題上犯一樣的錯誤,知識做爲財富是能夠被散播和繼承的。優化
搜索引擎沒有找到滿意答案 :如今互聯網環境整體來講已經很是開放了,諸多的技術資料和各種問答網站均可以利用,想碰到一個別人沒碰到的問題,已經很是困難了,此外也不存在什麼問題是一眼就能夠看出答案的(若是有,只能說明這個問題太粗淺或者太常見,更沒有諮詢求助的必要了),你提出的問題初衷應該是對這些問題的答案並不滿意,解決不了當下的問題。另外,不要排斥英文閱讀,結合語境語義地閱讀其實只要看關鍵字就好,各類翻譯軟件也隨時可查,要知道你的問題可能早已經被人解決只是並不是用中文來表述,因此請多多使用google和stackoverflow等知識搜索引擎,會有不少意外之喜。
找對要諮詢的目標人選 :若是作了努力依然不能解決,或者客觀條件不容許你本身解決了,那麼首先要選擇提問對象,確保他是你所知道的最佳解決人選,而且對你的問題會感興趣,因此選擇通常的建議順序是:同事 > 社區 > 軟件做者(github私信),必定要在解決問題的時長,質量,響應速度上作到均衡,畢竟沒有人會時刻準備着爲你提供各類無私的服務。
用最幹練和扼要的語言來提問 :多用清晰的短句來做爲你遇到的問題的發問標題,若是沒法總結,那就貼出你的關鍵代碼和報錯日誌,不要讓被問人在梳理你的問題本意上浪費過多時間。
一篇提問的內容如同一篇好的破案報告同樣,既要有客觀詳實的敘述,也要求有嘗試方案的記錄,這是對問題的起碼尊重,若是連你本身對問題的表達的不清晰全面,怎麼能期望被問人從中發現更多有價值的思路。
不要先入爲主地固守本身的方法:切記不要一上來就強調本身的每一步操做都是對的,爲什麼結果不對,這種是極其不負責任的作法。想一想既然你都有如此的主見,爲什麼還須要來諮詢他人,另外你肯定這樣作不會把提問人帶進溝裏?子還曰過"三人行,必有我師焉",虛心求教,放低姿態,是對他人與問題的起碼尊重。
提供你的運行上下文 :程序的運行都會依賴自身所處的執行環境以及對應的各類配置項參數,這些一般包括有:操做系統、數據庫、瀏覽器、框架等相關軟件及其版本號等等,參考下本身公司用來記錄bug的報告(如jira,issue list等),一般測試系統在報告一個問題時都會有很是規範的敘述模板,通常包括:出錯表現、運行環境、錯誤日誌等多要素,因此儘量地按照這些來要點組織你的提問語言和線索。
問題是否能夠重現,怎樣重現 :請儘量地詳細地復現出錯步驟,找出問題復現的通常規律,一般解決問題的關鍵點其實就是某一段小代碼或者某個配置項不對,復現的過程當中會逐步減小出錯的範圍,這會極大的節省調試時間,同時也能激起各類解決問題的靈感。
描述下以前使用過的解決方式:把你的本身以前用過的方式都簡明扼要地記錄下,能夠是日誌、程序中的try catch信息、出錯截圖等,這個有點相似排除法,一來避免求助人在一樣的操做上浪費時間,二來也是對求助人的尊重,說明本身至少是嘗試過解決而非直接上來乞討答案。
善於利用編輯器:有良好的排版能夠提升可讀性,減小閱讀成本,若是條件容許請多用協做調試平臺和代碼片段分享工具,儘量地讓被問人和你接觸到的代碼環境保持一致(若是是站點發問諮詢也能夠額附上代碼片段和github公有庫地址),真實環境下的實時調試會比滔滔不絕地文字描述效果好的多;
實時跟進和完善你的提問內容:一個複雜的問題每每不是一步到位解決,而是經過一個個片段的持續改進與更新來最終完成,因此每當解決一個關鍵點時,請及時同步你的進度信息,持續優化與集成,而不是把問題甩出去後就與我無關,等着拿成果就行,畢竟做爲當事人沒人比你須要更對這件事的總體進度負責。
就事論事,不要附加負面情緒:不少時候咱們遇到的問題每每本身也沒法避免,好比選用了不熟悉的語言,框架,不成熟的技術選型等,這種狀況下每每會有各類槽點和不服想傾述,但請記住這些東西你自行消化或者找個地方寫篇長文批判下都行,可是不要帶到你的提問內容中,由於這些信息對解決問題沒有任何實質性的幫助,同時會帶來很多負面的情緒。既然已經跳到坑裏了,首先應該想到的是怎麼儘快跳出來而且確保之後再也不掉進來,而非一直在抱怨是誰挖的坑。
提問是門學問,請認真對待,在提問的過程當中不斷提高概括問題,分析問題的能力,不斷提高自我纔是最終目的,一個好的提問會跟好的回答一樣精彩,同時別忘了給每個幫你解答過的人說聲謝謝。