技術人員排查問題的三個方法論

歡迎你們關注公衆號「JAVA前線」查看更多精彩分享文章,主要包括源碼分析、實際應用、架構思惟、職場分享、產品思考等等,同時歡迎你們加我微信「java_front」一塊兒交流學習java


1 方法論很重要

在平常工做中,你們確定處理過一些棘手的問題。在面臨這些複雜的問題時,尤爲當問題又很緊急時,有人徹底沒有頭緒,不知道從哪裏下手,而有人思路清晰,分析問題有條有理,行動步驟清晰明確。爲何會產生這樣的差距?程序員

我認爲思路清晰的人掌握了一套方法論,這種方法論能夠套用在不少場景,讓他們在遇到問題時鎮定自若,最終找到問題的答案。數據庫

程序員在工做中就須要面對不少複雜問題。好比當系統出現問題時,因爲系統的複雜性,很難一眼看出問題所在,那麼更須要學會解決問題的方法論。緩存

本文談一談程序員如何解決問題,咱們就從一個問題開始:網頁訪問忽然變慢了。微信


2 發現問題

咱們首先區分兩個概念:表徵和問題。markdown

表徵是問題的表現。好比一樣網頁訪問忽然變慢,可是致使表徵的問題根源並不相同,那麼解決方案確定不一樣。架構

問題是表徵的根源。技術人員須要找到問題根源,並且必須符合一元論原則,即這個問題能夠解釋當前系統中出現的全部表徵。工具

我認爲辨析上述概念給咱們的啓示是:不能糾結於表徵,這只是外在的表現,須要深刻思考致使表徵的問題。源碼分析

這裏介紹第1個方法論:根據表徵羅列問題。性能

網頁訪問忽然變慢了。這個描述是表徵仍是問題?很明顯是表徵。

明確了這一點,下一個步驟就是根據表徵,羅列所知可能致使表徵的問題,程序員能夠根據經驗,羅列到底有什麼問題會致使網頁訪問忽然變慢呢?咱們嘗試羅列兩個問題:

問題1:同事剛剛修改的代碼有錯誤

問題2:流量激增引起數據庫性能問題

這個步驟須要程序員在工做中多多學習實踐,才能見多識廣,而且在羅列問題維度上要作到MECE,即相互獨立,徹底窮盡。

須要說明本文着重介紹方法論,所羅列問題並不全面,並且不涉及具體技術方案。


3 驗證問題

如今咱們已經提出了問題,如今就要驗證問題,就是看看咱們提出的問題到底對不對。

這裏介紹第2個方法論:PDCA循環。

PDCA循環是質量管理專家休哈特博士首先提出的,由戴明採納宣傳普及,因此又被稱爲戴明環。咱們來介紹PDCA循環的概念:

P:計劃(plan)

D:執行(do)

C:檢查(check)

A:處理(act)

第一步:提出計劃。能夠根據假設,提出驗證假設的計劃。咱們先驗證提出的問題1。上面咱們猜想有同事進行了代碼升級,從而引起的網頁變慢。那麼咱們的計劃是:查看發佈記錄和代碼提交記錄。

第二步:執行計劃。咱們對發佈記錄和代碼修改記錄進行查看。

第三步:檢查執行結果。上一個步驟的執行結果,並無發現發佈記錄和代碼修改記錄,那麼能夠排除是由這個緣由致使的。

第四步:根據檢查結果,決定是直接處理這個問題,仍是從新制定新計劃驗證下一個問題,即進入PDCA循環。此時咱們應該進入循環,驗證問題2。

我認爲這個方法意義在於每次可靠得驗證一個變量,找到問題則退出循環,沒有找到問題則進入下一個循環。雖然每一步雖然邁得不大,可是每一步都是紮紮實實。

這個理論在各個行業都有普遍應用。好比科學實驗中經常使用的方法:控制變量法。爲了驗證一個變量是否對試驗結果有影響,那麼就要保持其餘變量不變,只對這一個變量進行修改,驗證是否對實驗結果有影響。

還有互聯網產品常說的最小可用品,即每個版本推出解決知足一個主要的核心需求,根據用戶反饋,在下一個版本中解決或優化。這就是快速迭代,小步快跑。

同一現象或實踐,在不一樣領域被重複發現。同一規律或理論,在歷史上被反覆總結。


4 解決問題

假設根據第三步驗證問題,咱們發現了真正的問題是問題2:流量忽然增大,引起了數據庫性能問題。

即便是同一個問題,解決的方案也能夠有不少,好比對於性能問題,能夠加緩存,優化數據索引,優化交互流程,流控隔離熔斷等等,那麼應該選擇哪種方案呢?

這裏介紹第3個方法論:因時因地評估解決方案成本和效果,先治標再治本。

假設如今網站正在進行雙11促銷活動,因此如今最高優先級是保證用戶能夠正常參與活動,那麼須要選擇時間成本最小的方式快速解決問題,若是加一個索引就能夠搞定的事情,那麼就選擇這個方案。先治標的意思是先把迫在眉睫的問題解決。

假設如今用戶量高峯已過,響應時間逐漸正常,那麼給程序員留出比較充裕解決問題時間,此時能夠添加緩存層,優化代碼,發佈新版本。

假設你發現產品交互流程有不合理之處,那麼在項目會議上,你要向產品經理拋出這個問題,一塊兒優化產品流程。流程優化後進行大版本迭代。

解決方案很是具體,因時因地而異,根據優先級,先治標,再治本。


5 文章總結

程序員思考問題主要有三大步驟:發現問題,驗證問題,解決問題。

發現問題首先要區分表徵和問題,不能被表徵所迷惑,不要陷在表徵的泥潭裏,應該思考表徵背後的問題,羅列出可能形成表徵的全部問題。

驗證問題就是對羅列的問題進行證明或者證僞,採用的工具是強大的PDCA循環,這個循環也普遍應用於各個學科和產業。

解決問題時要因時因地評估解決方案的成本和效果,先治標,再治本。問題發生的場景不一樣,要針對當前場景給出邊際效益最高的解決方案。

方法論是一個很是重要的工具。一個看似紛繁複雜,雜亂無章的問題,使用得當的方法論進行梳理,馬上使得問題清晰,方案具體,結果可衡量。這就是從實踐總結理論,再用理論指導實踐。

歡迎你們關注公衆號「JAVA前線」查看更多精彩分享文章,主要包括源碼分析、實際應用、架構思惟、職場分享、產品思考等等,同時歡迎你們加我微信「java_front」一塊兒交流學習

相關文章
相關標籤/搜索