歡迎你們關注公衆號「JAVA前線」查看更多精彩分享文章,主要包括源碼分析、實際應用、架構思惟、職場分享、產品思考等等,同時歡迎你們加我微信「java_front」一塊兒交流學習前端
你們想想工做中有沒有遇到如下狀況:一位同事用了很長時間羅列了不少事實和數據向你說明一件事情,可是你聽完根本不知道他想要說什麼。一位同事用了大量筆墨編寫了技術方案,不只有文字還有圖表,可是你看完也不知道這個方案到底要解決什麼問題以及如何落地。java
上述狀況的出現大機率是由於表述者沒有使用結構化方法進行闡釋,信息看似很是豐富可是雜亂無章,讓人很難抓住重點,因此咱們須要引入結構化思惟方法論。數據庫
金字塔原理就是一個由芭芭拉·明託女士提出的結構化思惟方法論,風靡世界五十年並在各個行業都取得過很好的效果。本文咱們就運用金字塔原理分析一個技術系統優化方案,並看看如何落地執行,最終總結出一個閉環思考工具。設計模式
咱們在工做中作的全部事情,本質上都是爲問題提供解決方案。不管咱們是提出一個方案,仍是優化一種場景,或者是自己就是在解決問題,因此想要闡釋清楚咱們在作什麼,第一步明確咱們正在解決什麼問題很是關鍵。緩存
那麼應該如何闡釋清楚問題呢?咱們可使用金字塔原理提出的結構化表達SCQA工具,這四個字母分別表明背景、衝突、疑問、回答。微信
背景(Situation)是這個問題出現的環境,咱們對環境的描述必須是真實和樸素的,你們對這個描述都是承認的,甚至是能夠產生共鳴的。markdown
衝突(Complication)是在上述背景下出現了哪些矛盾,常見的類型有三種:哪些預期未達標、哪些流程不暢、哪些隱患還存在。架構
疑問(Question)是根據背景和衝突天然而然提出的問題,常見的類型有四種:應該作什麼、應該如何作、是否應該作、爲何會發生。框架
回答(Answer)是針對上述四類問題給出的答案,而回答就是金字塔結構的中心思想。運維
假設如今你想要向同事說明白技術方案應該如何實施,那麼第一步就應該闡釋清楚究竟是在解決什麼問題,等到你們對問題有必定共識以後再談技術方案:
背景:業務數據量愈來愈大
衝突:響應常常超時現有系統難以支撐
疑問:應該作什麼纔可以支撐後續業務
回答:咱們應該優化系統
此時技術方案准備解決什麼問題就清楚了,而對這個問題的回答就是金字塔結構的中心思想。下面咱們就要對這個中心思想使用金字塔原理進行結構化組織。
金字塔原理的核心思想並不複雜:一件事情能夠總結出一箇中心思想,這個中心思想能夠由三至七個論點支持,每一個論點再能夠由三至七個論據支持,基本結構圖以下:
對於金字塔原理僅僅分析到這裏是不夠的,還應該進一步去分析金字塔原理的內在結構,而內在結構咱們能夠從橫向和縱向兩個維度去分析。
金字塔的縱向結構體現了兩個原則:結論先行和以上統下,咱們分別進行分析。
結論先行是指開宗明義地展現中心思想,讓聽衆一開始就明白溝通主旨,而若是把中心思想隱藏在溝經過程中,聽衆可能由於走神或者溝通訊息太多而失焦,根本不知道你在說什麼。結論先行具體有如下六個方面:
假設一個同事代碼發佈上線後致使系統故障,若是不使用結構化方法是這麼表述的:
我看監控發現數據庫負載升高,多是沒有加索引致使的。我又發現頻繁收到重複消息,是否是消息中間件有什麼問題?監控還顯示建立了大量線程,是否是線程池使用不當致使的?問題排查很難短期獲得結論,咱們仍是先回滾代碼至上一個版本吧
這位同事中心思想是問題緣由比較難排查,應該先回滾代碼再分析問題,可是他把最重要的觀點放在最後,不聽到最後不知道他要作什麼,而若是結論先行應該怎麼表述呢?
咱們應當即當回滾代碼,由於問題排查比較複雜,仍是先恢復系統再排查問題。可能的問題分三類:第一多是索引使用不當致使的數據庫問題,第二多是中間件問題致使大量重複接收消息,第三多是線程池使用不當致使線程大量被建立。等到恢復正常以後咱們依次排查這些問題
咱們比較兩段表述不難發現,第二段表述結構清晰不少,信息傳達效率顯著提高,這就是結論先行的優點所在。
以上統下是指任何一個層的思想必須是其下一層思想的總結歸納,咱們分析一個例子進行說明:小王今天須要買牛肉、雞蛋、蘿蔔、果汁、白菜、牛奶、青菜、雞肉、酸奶,但這麼多菜品他記不住,請你想辦法幫助小王。
第一步咱們要對菜品自下而上進行聚合概括,這是一個找規律的過程。第二步再以上統下進行結構化表達從而幫助記憶。
自下而上聚合咱們不難發現,牛肉、雞肉、雞蛋屬於肉蛋類,白菜、青菜、蘿蔔屬於蔬菜類,牛奶、果汁、酸奶屬於飲品類,這樣聚合以後咱們再以上統下進行結構化表達。
上述實例比較簡單,由於元素之間的關聯性比較容易尋找,可是真實場景是不會這麼簡單的,元素之間關聯性並不容易創建,那麼咱們應該如何從中心思想展開至第二層?
金字塔原理推薦使用疑問-回答式對話,經過設問的方式向下展開結構。那麼應該問哪幾個問題從而涵蓋中心思想的要點?咱們能夠參考5W2H分析法,儘可能作到要點不缺失:
What:是什麼、作什麼
Why:爲何、什麼緣由
Where:在哪裏、從哪開始
When:開始結束時間、里程碑
Who:誰負責、誰來作、誰驗收
How:怎麼作、什麼方法、從哪切入
How Much:作多少、各項指標是多少
在此模型基礎上咱們能夠進行簡化,從而減小要素的數量,這樣更加易於結構化表達和記憶。咱們通常選取What、Why、How這三個核心要素組成2W1H模型。
咱們看看結論先行和以上統下的實際應用。根據第一章節咱們使用SCQA工具獲得了回答,這個回答就是金字塔結構中心思想,那麼根據結論先行原則在金字塔頂端就要開門見山地展現中心思想。而後咱們再用2W1H模型組織論點,到這裏一個金字塔的基本結構就已經搭建完成:
如今咱們須要思考如何組織論據,這就要使用橫向結構的兩個原則:歸類分組和邏輯遞進。咱們分別進行分析。
咱們通常用概括推理和演繹推理兩種方法進行歸類分組,咱們先看概括推理。
概括推理是指把觀察到的事實、規律概括總結爲理論。這種推理方法是不嚴謹的,由於只要觀察事實和信息是有限的,那麼概括推理出來的結論就不必定是正確的。這就是邏輯錯誤中常見的一種:錯誤歸因。
歐洲人看到的天鵝都是白色的,那麼他們就概括總結說全部的天鵝都是白色的。當一隻黑天鵝出現時,這個結論就被證實是錯誤的,這就是黑天鵝事件。
固然咱們不可能觀察到全部事實,收集到全部信息,而通常是爲了解決某個具體問題,咱們會收集側重於某個角度的信息,創建特定模型去分析解決問題,這也不失爲一種有效方法。
金字塔原理概括推理通常有如下四種維度:時間維度、結構維度、程度維度、經驗維度。時間維度是根據自然時間線進行概括,結構維度根據組織結構進行概括,程度維度是根據程度級別進行概括,經驗維度是根據已有經驗進行概括。咱們分別來看上述四種維度的幾種常見類型:
咱們選取時間維度和結構維度分析一個實例:怎樣減小代碼上線錯誤。從時間維度分析事前須要作好代碼測試,事中須要監控關鍵指標,過後須要進行分析覆盤。從結構維度分析開發人員須要作好單元測試,測試人員須要作好邊界測試,運維人員須要完善監控平臺。
演繹推理是指根據公理、定理或者本身相信的觀念,作出推理或者判斷,獲得結論。
這種方法從邏輯上來講是嚴謹的。命題A是真的,推理出命題B也是真的,那是由於命題B的真實性包含在命題A中。
須要注意在邏輯上嚴謹,不是說結論必定是正確的。例如本身相信的觀念最終被證實是錯誤的,那麼獲得結論也就是錯誤的。
標準式演繹推理分爲大前提、小前提和結論:全部小鳥都會飛,這是一隻小鳥,因此它會飛。
演繹推理還能夠分爲現象、緣由和解決方案三個要素:現象是開發代碼質量不高,緣由是沒有統一代碼規約,解決方案是制定統一代碼規約。
這是一種自上而下的推理方法,由已知的公理、定理或者觀念向下推理。使用這種方法,須要在出現問題的領域有必定的經驗和積累。
邏輯遞進是指每種思想須要按照必定順序進行排列,例如時間維度按照事前、事中、過後進行排列,程度級別按照高級、中級、初級進行排列,這樣排列的優勢是符合理解和記憶的習慣。
前面章節咱們介紹了SCQA和金字塔原理,本章節咱們用一個實例將結構化思惟方法論落地,並總結出一個閉環工具。
咱們仍是以系統優化案例進行說明,第一步是使用SCQA提出問題從而引出回答。背景是業務數據量愈來愈大,衝突是響應常常超時現有系統難以支撐,疑問是應該作什麼纔可以支撐後續業務,回答是咱們應該優化系統,而回答就是金字塔結構的中心思想。
第二步是使用金字塔原理組織回答,在縱向結構上咱們經過設問的方式提出2W1H三個問題:
在橫向結構上咱們按照必定維度去組織論據,我選取了經驗維度,在怎麼作優化這個問題上選取3H理論指導優化工做,這個理論包含高擴展、高可用、高性能三個維度。
高擴展強調系統可擴展性,包含劃分清晰的領域邊界,使用合適的設計模式,進行合理的組件抽象,遵照統一的代碼規約。
高可用強調對系統的保護,面對大流量可能帶來的非線性壓力,咱們要作好降級、延時、隔離、冗餘、告警和響應防止系統崩潰。
高性能強調系統的性能表現,咱們首先經過分析時延、負載、壓測表現等指標瞭解系統能力,再從數據層、緩存層、服務層、WEB層、前端層、客戶端、代理層等層級思考優化方案。
由於須要組織和表達信息較多,咱們能夠選擇將金字塔旋轉90度,這樣作只是爲了展現信息更加方便,在邏輯上並不改變金字塔結構。
咱們已經將回答進行告終構化表達,如今須要思考如何將回答落地執行,我認爲要從如下四個方面思考。
團隊(Team):有多少人能夠投入這個項目,人員構成是什麼,例若有幾個服務端和幾個前端,人力投入量直接影響執行節奏。
切點(Pointcut):從哪裏入手這是須要明確的,例如咱們作系統優化,能夠先從一個耗時最長,性能最差的接口入手,用這個接口驗證方案的可行性。
節奏(Rhythm):受限於開發人數和項目排期等因素,系統優化很難一步到位,因此咱們能夠設置幾個里程碑節點,規劃短時間、中期、長期目標,這樣大目標就被拆成幾個小目標逐一實現。
結果(Result):系統優化的結果怎麼樣,投入了這麼多時間和精力到底產出是什麼,這是必需要回答的問題。咱們能夠把哪些預期未達標、哪些流程不暢、哪些隱患還存在等問題拿出來逐一檢視。
咱們把SCQA和上述四個維度進行合併,組成SCQATPRR閉環工具,這個工具能夠助力方案減小缺失環節,從而造成閉環。
本文首先分析了SCQA結構化工具,提好一個問題是解決問題的第一步。在初步給出答案後咱們能夠進行第二步使用金字塔結構組織答案,縱向結構要符合結論先行、以上統下原則,橫向結構要符合概括分組、邏輯遞進原則。第三步在落地執行層面,咱們提出團隊、切點、節奏和結果這四個維度,結合SCQA工具進而組成閉環工具。
須要說明的是結構化思考工具只是一個工具,解決問題的關鍵仍是咱們要在本專業領域鑽研和精進,也要在平時注意將零散的專業知識進行概括整理,這樣專業知識和工具相結合纔會發揮更大的做用,但願本文對你們有所幫助。
歡迎你們關注公衆號「JAVA前線」查看更多精彩分享文章,主要包括源碼分析、實際應用、架構思惟、職場分享、產品思考等等,同時歡迎你們加我微信「java_front」一塊兒交流學習