主頁 > 軟體設計 > 長文圖解:詳解金字塔原理如何應用于架構設計

長文圖解:詳解金字塔原理如何應用于架構設計

2023-05-15 07:53:20 軟體設計


0 文章概述

大家想一想作業中有沒有遇到以下情況:一位同事用了很長時間羅列了很多事實和資料向你說明一件事情,但是你聽完根本不知道他想要說什么,一位同事用了大量筆墨撰寫了技術方案,不僅有文字還有圖表,但是你看完也不知道這個方案到底要解決什么問題以及如何落地,

上述情況的出現大概率是因為表述者沒有使用結構化方法進行闡釋,資訊看似非常豐富但是雜亂無章,讓人很難抓住重點,所以我們需要引入結構化思維方法論,

金字塔原理就是一個由芭芭拉·明托女士提出的結構化思維方法論,風靡世界五十年并在各個行業都取得過很好的效果,本文我們就運用金字塔原理分析一個技術系統優化方案,并看看如何落地執行,最終總結出一個倍訓思考工具,



1 怎么樣提好一個問題

我們在作業中做的所有事情,本質上都是為問題提供解決方案,無論我們是提出一個方案,還是優化一種場景,或者是本身就是在解決問題,所以想要闡釋清楚我們在做什么,第一步明確我們正在解決什么問題非常關鍵,

那么應該如何闡釋清楚問題呢?我們可以使用金字塔原理提出的結構化表達SCQA工具,這四個字母分別代表背景、沖突、疑問、回答,

背景(Situation)是這個問題出現的環境,我們對環境的描述必須是真實和樸素的,大家對這個描述都是認可的,甚至是可以產生共鳴的,

沖突(Complication)是在上述背景下出現了哪些矛盾,常見的型別有三種:哪些預期未達標、哪些流程不順暢、哪些隱患還存在,

疑問(Question)是根據背景和沖突自然而然提出的問題,常見的型別有四種:應該做什么、應該如何做、是否應該做、為什么會發生,

回答(Answer)是針對上述四類問題給出的答案,而回答就是金字塔結構的中心思想,

假設現在你想要向同事說明白技術方案應該如何實施,那么第一步就應該闡釋清楚到底是在解決什么問題,等到大家對問題有一定共識之后再談技術方案:

背景:業務資料量越來越大

沖突:回應經常超時現有系統難以支撐

疑問:應該做什么才能夠支撐后續業務

回答:我們應該優化系統

此時技術方案準備解決什么問題就清楚了,而對這個問題的回答就是金字塔結構的中心思想,下面我們就要對這個中心思想使用金字塔原理進行結構化組織,


2 結構化方式組織回答

金字塔原理的核心思想并不復雜:一件事情可以總結出一個中心思想,這個中心思想可以由三至七個論點支持,每個論點再可以由三至七個論據支持,基本結構圖如下:



對于金字塔原理僅僅分析到這里是不夠的,還應該進一步去分析金字塔原理的內在結構,而內在結構我們可以從橫向和縱向兩個維度去分析,


2.1 縱向結構

金字塔的縱向結構體現了兩個原則:結論先行和以上統下,我們分別進行分析,

2.1.1 結論先行

結論先行是指開宗明義地展示中心思想,讓聽眾一開始就明白溝通主旨,而如果把中心思想隱藏在溝通程序中,聽眾可能因為走神或者溝通資訊太多而失焦,根本不知道你在說什么,結論先行具體有以下六個方面:

  • 先重要后次要
  • 先框架后細節
  • 先總體后細分
  • 先論點后論據
  • 先結論后原因
  • 先結果后程序

假設一個同事代碼發布上線后導致系統故障,如果不使用結構化方法是這么表述的:

我看監控發現資料庫負載升高,可能是沒有加索引導致的,我又發現頻繁收到重復訊息,是不是訊息中間件有什么問題?監控還顯示創建了大量執行緒,是不是執行緒池使用不當導致的?問題排查很難短時間得到結論,我們還是先回滾代碼至上一個版本吧

這位同事中心思想是問題原因比較難排查,應該先回滾代碼再分析問題,但是他把最重要的觀點放在最后,不聽到最后不知道他要做什么,而如果結論先行應該怎么表述呢?

我們應立即當回滾代碼,因為問題排查比較復雜,還是先恢復系統再排查問題,可能的問題分三類:第一可能是索引使用不當導致的資料庫問題,第二可能是中間件問題導致大量重復接收訊息,第三可能是執行緒池使用不當導致執行緒大量被創建,等到恢復正常之后我們依次排查這些問題

我們比較兩段表述不難發現,第二段表述結構清晰很多,資訊傳達效率顯著提升,這就是結論先行的優勢所在,


2.1.2 以上統下

以上統下是指任何一個層的思想必須是其下一層思想的總結概括,我們分析一個例子進行說明:小王今天需要買牛肉、雞蛋、蘿卜、果汁、白菜、牛奶、青菜、雞肉、酸奶,但這么多菜品他記不住,請你想辦法幫助小王,

第一步我們要對菜品自下而上進行聚合歸納,這是一個找規律的程序,第二步再以上統下進行結構化表達從而幫助記憶,



自下而上聚合我們不難發現,牛肉、雞肉、雞蛋屬于肉蛋類,白菜、青菜、蘿卜屬于蔬菜類,牛奶、果汁、酸奶屬于飲品類,這樣聚合之后我們再以上統下進行結構化表達,

上述實體比較簡單,因為元素之間的關聯性比較容易尋找,但是真實場景是不會這么簡單的,元素之間關聯性并不容易建立,那么我們應該如何從中心思想展開至第二層?

金字塔原理推薦使用疑問-回答式對話,通過設問的方式向下展開結構,那么應該問哪幾個問題從而涵蓋中心思想的要點?我們可以參考5W2H分析法,盡量做到要點不缺失:

  • What:是什么、做什么

  • Why:為什么、什么原因

  • Where:在哪里、從哪開始

  • When:開始結束時間、里程碑

  • Who:誰負責、誰來做、誰驗收

  • How:怎么做、什么方法、從哪切入

  • How Much:做多少、各項指標是多少

在此模型基礎上我們可以進行簡化,從而減少要素的數量,這樣更加易于結構化表達和記憶,我們一般選取What、Why、How這三個核心要素組成2W1H模型,


2.1.3 實際應用

我們看看結論先行和以上統下的實際應用,根據第一章節我們使用SCQA工具得到了回答,這個回答就是金字塔結構中心思想,那么根據結論先行原則在金字塔頂端就要開門見山地展示中心思想,然后我們再用2W1H模型組織論點,到這里一個金字塔的基本結構就已經搭建完成:



2.2 橫向結構

現在我們需要思考如何組織論據,這就要使用橫向結構的兩個原則:歸類分組和邏輯遞進,我們分別進行分析,

2.2.1 歸類分組

(1) 歸納推理

我們一般用歸納推理和演繹推理兩種方法進行歸類分組,我們先看歸納推理,

歸納推理是指把觀察到的事實、規律歸納總結為理論,這種推理方法是不嚴謹的,因為只要觀察事實和資訊是有限的,那么歸納推理出來的結論就不一定是正確的,這就是邏輯錯誤中常見的一種:錯誤歸因,

歐洲人看到的天鵝都是白色的,那么他們就歸納總結說所有的天鵝都是白色的,當一只黑天鵝出現時,這個結論就被證明是錯誤的,這就是黑天鵝事件,

當然我們不可能觀察到所有事實,收集到所有資訊,而一般是為了解決某個具體問題,我們會收集側重于某個角度的資訊,建立特定模型去分析解決問題,這也不失為一種有效方法,

金字塔原理歸納推理一般有以下四種維度:時間維度、結構維度、程度維度、經驗維度,時間維度是根據天然時間線進行歸納,結構維度根據組織結構進行歸納,程度維度是根據程度級別進行歸納,經驗維度是根據已有經驗進行歸納,我們分別來看上述四種維度的幾種常見型別:

時間維度
  • 事前、事中、事后
  • 短期、中期、長期
結構維度
  • 資訊部、行政部、人力部
  • 開發組、測驗組、運維組
程度維度
  • 高級、中級、初級
  • 重要、次要、不要
經驗維度
  • 市場戰略3C理論
  • 市場決策4P理論
  • 高擴展、高可用、高性能

我們選取時間維度和結構維度分析一個實體:怎樣減少代碼上線錯誤,從時間維度分析事前需要做好代碼測驗,事中需要監控關鍵指標,事后需要進行分析復盤,從結構維度分析開發人員需要做好單元測驗,測驗人員需要做好邊界測驗,運維人員需要完善監控平臺,


(2) 演繹推理

演繹推理是指根據公理、定理或者自己相信的觀念,做出推理或者判斷,得到結論,

這種方法從邏輯上來說是嚴謹的,命題A是真的,推理出命題B也是真的,那是因為命題B的真實性包含在命題A中,

需要注意在邏輯上嚴謹,不是說結論一定是正確的,例如自己相信的觀念最終被證明是錯誤的,那么得到結論也就是錯誤的,

標準式演繹推理分為大前提、小前提和結論:所有小鳥都會飛,這是一只小鳥,所以它會飛,

演繹推理還可以分為現象、原因和解決方案三個要素:現象是開發代碼質量不高,原因是沒有統一代碼規約,解決方案是制定統一代碼規約,



這是一種自上而下的推理方法,由已知的公理、定理或者觀念向下推理,使用這種方法,需要在出現問題的領域有一定的經驗和積累,


2.2.2 邏輯遞進

邏輯遞進是指每種思想需要按照一定順序進行排列,例如時間維度按照事前、事中、事后進行排列,程度級別按照高級、中級、初級進行排列,這樣排列的優點是符合理解和記憶的習慣,


3 綜合實體

前面章節我們介紹了SCQA和金字塔原理,本章節我們用一個實體將結構化思維方法論落地,并總結出一個倍訓工具,


3.1 提出問題

我們還是以系統優化案例進行說明,第一步是使用SCQA提出問題從而引出回答,背景是業務資料量越來越大,沖突是回應經常超時現有系統難以支撐,疑問是應該做什么才能夠支撐后續業務,回答是我們應該優化系統,而回答就是金字塔結構的中心思想,


3.2 給出回答

第二步是使用金字塔原理組織回答,在縱向結構上我們通過設問的方式提出2W1H三個問題:



在橫向結構上我們按照一定維度去組織論據,我選取了經驗維度,在怎么做優化這個問題上選取3H理論指導優化作業,這個理論包含高擴展、高可用、高性能三個維度,



高擴展強調系統可擴展性,包含劃分清晰的領域邊界,使用合適的設計模式,進行合理的組件抽象,遵守統一的代碼規約,

高可用強調對系統的保護,面對大流量可能帶來的非線性壓力,我們要做好降級、延時、隔離、冗余、告警和回應防止系統崩潰,

高性能強調系統的性能表現,我們首先通過分析時延、負載、壓測表現等指標了解系統能力,再從資料層、快取層、服務層、WEB層、前端層、客戶端、代理層等層級思考優化方案,

因為需要組織和表達資訊較多,我們可以選擇將金字塔旋轉90度,這樣做只是為了展示資訊更加方便,在邏輯上并不改變金字塔結構,



3.3 落地執行

我們已經將回答進行了結構化表達,現在需要思考如何將回答落地執行,我認為要從以下四個方面思考,

團隊(Team):有多少人可以投入這個專案,人員構成是什么,例如有幾個服務端和幾個前端,人力投入量直接影響執行節奏,

切點(Pointcut):從哪里入手這是需要明確的,例如我們做系統優化,可以先從一個耗時最長,性能最差的介面入手,用這個介面驗證方案的可行性,

節奏(Rhythm):受限于開發人數和專案排期等因素,系統優化很難一步到位,所以我們可以設定幾個里程碑節點,規劃短期、中期、長期目標,這樣大目標就被拆成幾個小目標逐一實作,

結果(Result):系統優化的結果怎么樣,投入了這么多時間和精力到底產出是什么,這是必須要回答的問題,我們可以把哪些預期未達標、哪些流程不順暢、哪些隱患還存在等問題拿出來逐一檢視,

我們把SCQA和上述四個維度進行合并,組成SCQATPRR倍訓工具,這個工具可以助力方案減少缺失環節,從而形成倍訓,



4 文章總結

本文首先分析了SCQA結構化工具,提好一個問題是解決問題的第一步,在初步給出答案后我們可以進行第二步使用金字塔結構組織答案,縱向結構要符合結論先行、以上統下原則,橫向結構要符合歸納分組、邏輯遞進原則,第三步在落地執行層面,我們提出團隊、切點、節奏和結果這四個維度,結合SCQA工具進而組成倍訓工具,

需要說明的是結構化思考工具只是一個工具,解決問題的關鍵還是我們要在本專業領域鉆研和精進,也要在平時注意將零散的專業知識進行歸納整理,這樣專業知識和工具相結合才會發揮更大的作用,希望本文對大家有所幫助,歡迎大家關注公眾號「JAVA前線」查看更多精彩分享文章,主要包括原始碼分析、實際應用、架構思維、職場分享、產品思考等等,同時歡迎大家加我微信「java_front」一起交流學習

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/552444.html

標籤:其他

上一篇:如何繪制漂亮的架構圖,方法論+工具

下一篇:返回列表

標籤雲
其他(159036) Python(38129) JavaScript(25421) Java(18034) C(15226) 區塊鏈(8265) C#(7972) AI(7469) 爪哇(7425) MySQL(7184) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5871) 数组(5741) R(5409) Linux(5340) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4572) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2433) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1972) 功能(1967) Web開發(1951) HtmlCss(1936) python-3.x(1918) C++(1915) 弹簧靴(1913) xml(1889) PostgreSQL(1876) .NETCore(1860) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 長文圖解:詳解金字塔原理如何應用于架構設計

    0 文章概述 大家想一想作業中有沒有遇到以下情況:一位同事用了很長時間羅列了很多事實和資料向你說明一件事情,但是你聽完根本不知道他想要說什么。一位同事用了大量筆墨撰寫了技術方案,不僅有文字還有圖表,但是你看完也不知道這個方案到底要解決什么問題以及如何落地。 上述情況的出現大概率是因為表述者沒有使用結 ......

    uj5u.com 2023-05-15 07:53:20 more
  • 如何繪制漂亮的架構圖,方法論+工具

    架構圖一詞應用比較廣泛,涉及到各個行業,從軟硬體領域來對架構圖分類就有如下幾種 物理架構 描述整個資訊系統需要使用到的軟硬體設施,以及其部署位置及各個軟硬體之間的關聯關系。軟硬體設施包括主機、服務器、交換機、路由器、防火墻、快取服務器、注冊中心、資料庫等等。 如下兩種架構圖屬于物理架構: 部署圖 基 ......

    uj5u.com 2023-05-15 07:52:49 more
  • 長文圖解:詳解金字塔原理如何應用于架構設計

    0 文章概述 大家想一想作業中有沒有遇到以下情況:一位同事用了很長時間羅列了很多事實和資料向你說明一件事情,但是你聽完根本不知道他想要說什么。一位同事用了大量筆墨撰寫了技術方案,不僅有文字還有圖表,但是你看完也不知道這個方案到底要解決什么問題以及如何落地。 上述情況的出現大概率是因為表述者沒有使用結 ......

    uj5u.com 2023-05-15 07:52:45 more
  • 一文揭秘DDD到底解決了什么問題

    DDD作為架構設計思想幫助微服務控制規模復雜度,那它是怎么做到的呢? 一、架構設計是為了解決系統復雜度 談到架構,相信每個技術人員都是耳熟能詳,但如果深入探討一下,“為何要做架構設計?”或者“架構設計目的是什么?”類似的問題,大部分人可能從來沒有思考過,或者即使有思考,也沒有太明確可信的答案。 1. ......

    uj5u.com 2023-05-14 09:32:36 more
  • 一文揭秘DDD到底解決了什么問題

    DDD作為架構設計思想幫助微服務控制規模復雜度,那它是怎么做到的呢? 一、架構設計是為了解決系統復雜度 談到架構,相信每個技術人員都是耳熟能詳,但如果深入探討一下,“為何要做架構設計?”或者“架構設計目的是什么?”類似的問題,大部分人可能從來沒有思考過,或者即使有思考,也沒有太明確可信的答案。 1. ......

    uj5u.com 2023-05-14 09:26:48 more
  • 分布式系統常見問題

    一.概述 分布式系統存在網路,時鐘,以及許多不可預測的故障。分布式事務,一致性與共識問題,迄今為止仍沒有得到很好的解決方案。要想完美地解決分布式系統中的問題不太可能,但是實踐中應對特定問題仍有許多可靠的解決方案。本文不會談及諸如BASE, CAP, ACID 等空泛的理論,只基于實踐中遇到的問題提出 ......

    uj5u.com 2023-05-14 08:32:39 more
  • 分布式系統常見問題

    一.概述 分布式系統存在網路,時鐘,以及許多不可預測的故障。分布式事務,一致性與共識問題,迄今為止仍沒有得到很好的解決方案。要想完美地解決分布式系統中的問題不太可能,但是實踐中應對特定問題仍有許多可靠的解決方案。本文不會談及諸如BASE, CAP, ACID 等空泛的理論,只基于實踐中遇到的問題提出 ......

    uj5u.com 2023-05-14 08:31:54 more
  • 詳解快取更新策略及如何選擇

    概述 快取更新是指在資料發生變化時,保持快取和資料庫的資料一致性的問題。如果快取和資料庫的資料不一致,會導致用戶看到過期或者錯誤的資料,影響業務邏輯和用戶體驗。 為了實作快取更新,我們可以采用以下四種方式其中的一種: Cache Aside策略:應用程式直接與資料庫和快取互動,并負責維護快取的一致性 ......

    uj5u.com 2023-05-13 08:54:04 more
  • Java設計模式【單例模式】

    Java設計模式【單例模式】 單例模式 單例模式(Singleton Pattern)是一種創建型設計模式,其主要目的是確保一個類只有一個實體,并提供對該實體的唯一訪問點。 優缺點 優點: 提供了對唯一實體的受控訪問。 由于在系統記憶體中只存在一個物件,因此可以節約系統資源。 缺點: 單例類的擴展有很 ......

    uj5u.com 2023-05-13 08:53:55 more
  • Java設計模式簡介(總結)

    Java設計模式簡介(總結) 什么是設計模式 Java設計模式是一組經過驗證的解決特定問題的編程技術,這些技術可以幫助開發人員快速、有效地開發高質量的軟體。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 設計模式分類 設計模式一般分為三大類:創建型、結構型、行為型,具體分類如 ......

    uj5u.com 2023-05-13 08:53:48 more