Total Pageviews

2020/01/01

[閱讀筆記] Learn to Think in Systems (1/7)

  1. 這個世界比以往更加緊密連結、互相依賴,也是因為如此,常常會出現讓我們感到驚訝、未曾預期、無法預測的結果。全球化,毫無疑問地讓我們的生活更加富庶,但其也產生許多負面影響,如憂鬱症、選擇矛盾 (paradox of choice)、比以往更具攻擊性。
  2. 即使我們人類已經使用高度發展的生物與化學方法來製造食物,但是迄今每 10 秒就有一個人死於飢餓。我們對於所面臨的環境議題已具備充分的資訊 (i.e. 全球暖化),但是你無法一個人負起責任來處理這個全球性的議題。我們希望街上沒有街友、不要有人缺乏安全的房屋,但是我沒仍舊無法解決無家可歸的議題。這些議題的存在,是由系統錯誤 (system errors) 所產生。即使我們在政治與經濟的領域,喜歡尋找代罪羔羊,但是沒有人可以對這些問題,獨自負起責任
  3. System thinking 可以讓你找出複雜問題的源頭,了解為什麼會發生 (why),我們可以從哪裡介入 (where),藉此調整成我們想要的結果。未來的改變,皆源自於每日累積活動 (cumulative actions) 或缺乏行動,所產生的後果。
  4. 隨著互相依賴的程度更甚以往,我們必須採用新的方式學習。讓自己變得更聰明是不夠的,我們必須用有一個共同的語言與框架 (i.e. 世界語言系統, Esperanto),來分享我們的專業知識與經驗,並與其他專家進行知識共享與交換。簡言之,互相依賴的系統,更需要系統思考,找出複雜問題的源頭,了解為什麼會發生 (why),我們可以從哪裡介入 (where),藉此調整成我們想要的結果。
  5. 根據字典的定義,系統 (system) 是由一群互相依賴、互相回饋的群體所組成一個統一的整體 (unified whole)。換言之,一個系統包含不同的元素 (elements) 且彼此間有交互關係;元素間的互動與採取的行為,都會影響整體系統。例如,企業是一個系統,組成元素包含員工、主管、CEO、客戶與競爭者,elements 的行動或缺乏行動,都會某種程度影響著系統。統一整體 (unified whole) 的形成是指系統內元素間的互動,是基於統一的目的 (unified purpose),例如以企業為例,unified purpose 可以是利潤最大化、產品品質最佳化、產品易用度最大化等。
  6. 什麼東西不是一個系統呢?沙灘上的沙、落葉、走在街上隨機的行人,都不是系統。因為元素間彼此沒有互動、沒有共同的目的,就不是一個系統
  7. Systems thinking 由三個事物所組成:元素、互動與功能 (無生命系統) 或目的 (有生命系統)。功能或目的,在系統中或許最不顯眼,但是對系統行為,卻擁有極重要、決定性的影響。
  8. Systems thinking 的訓練,是讓你能看清楚元素間的互動關係,而非單獨的元素;看見改變的模式 (patterns of change),而非靜態的快照 (static snapshot)
  9. Linda Sweeney and John Sterman 認為,Systems thinking 應具備的技巧有:
  • 了解系統行為是如何因隨著時間,元素間的交互作用所產生的 (i.e. dynamic complextiry);
  • 發現系統中的回饋流程 (包含正面與負面),並觀察回饋流程對系統影響;
  • 找出 stock 與 flow 間的關係;
  • 辨識出 delay 並瞭解 delay 對系統所造成的影響;
  • 找出系統的非線性關係;
  • 找出並質疑心智模型的邊界


  1. Ross 與 Wade 對 Systems thinking 的定義:Systems thinking 是一組協同合作的分析技巧,用來發現與了解系統,預測系統的行為,設計與修改系統來產生想要的效果。這些技巧一起運用,就是一個系統。
  2. 在複雜系統中,需要靈活 (flexible)、協同合作 (collaborative) 與迭代的過程 (iterative processes),與最重要的元素進行協商討論,以便在相互理解的基礎上進行變革。
  3. 我們可以很容易且聰明地,將已經發生的事情勾勒出其因果關係 (cause-and-effect relationship),這是線性思考 (linear thinking) 的心智模型 (if A then B);然而,當我們要預測未來時,通常都不管用。
  4. 以 Ikea 為例,假設我想買一張床,所以我去 Ikea 購買一張符合預算的床。將其帶回家後,根據說明書的只是把相關零件組裝完畢,你就有一張符合預期的床。相同的,許多企業、政府、執行者,都有設定一個目標 (i.e. 床)、挑選適合的方法 (i.e. 組裝說明書)、尋找合作與支援對象 (i.e. 床的零組件),並相信可以解決所面臨的問題。但是真實生活很少像組裝一張床這麼容易,因為在複雜系統中,你不知道你將會獲得什麼東西
  5. 雖然未來的結果無法被精確的評估,但是 human systems 仍有高度重複性、可預見性的模式 (patterns)。儘管每個事件都是獨一無二的,但是人類對於這些世界的心智管理的不理性 (irrational) 卻是可預測的。由於可預測的不理性與系統思考專家的研究,專家們歸納出幾個系統典型 (systems archetypes)。每個典型 (archetype) 都有其屬性、情節 (storyline)、結構、隨著時間而改變的行為 (behavior over time)、心智模型、以及最重要的 - 有效干預的可能性。
  6. 透過系統典型 (systems archetypes),我們可以更快與更有效率地去瞭解與分析某種系統情節。也就是說,專家根據已經發生的事件 (ex. 911 攻擊事件),做出觀察與結論,找出數個可以運用的關鍵槓桿點 (key leverage points),例如干預、單方 / 雙方協議、採取某些行動或不做什麼行動。專家們利用這些 leverage points 與評估事件成因,產生可能的解決方案。這些觀察、預測與可能的解決方案,就是所謂的系統典型 (systems archetypes),用白話文來說,所謂的 systems archetypes 就是從歷史所學到的教訓 (learn lessons from history)。當你熟悉這些 systems archetypes 並將其應用到你的日常生活,你能快速偵測到目前狀況是哪種 archetypes 的模式,你就會對現況有較清楚的視野,並能對該事件做出快速反應。
  7. 本書的主要目的是要提供你對系統典型 (systems archetypes) 擁有豐富的知識,並讓你對你有興趣或重要的問題,快速找出問題的真實結構 (real structure) 與因果關係,擬出可能的解決方案。
  8. 有關系統典型 (systems archetypes) 的知識,本書有兩個主要目標
    1. 給予你全新的觀點與語言,來與複雜問題進行有效溝通:本書會給你 systems thinking language 來協助你與複雜問題做溝通;
    2. 協助你發展分析技巧:這是找出問題背後真實驅動力 (real driving force) 的必要能力,本書提出九個系統典型 (systems archetypes),希望能夠協助你有效解決真實生活所面臨的問題,並瞭解問題發生或持續存在的原因。
  9. 人面對問題時,常會針對最可視的徵狀 (most visible symptoms),採取頭痛醫頭、腳痛醫腳的短期修正策略 (short-term fix);但是對 system thinker 來說,雖然他們也是從最明顯的徵狀或問題開始看,但是他們會觀察各種問題間的關聯性,並建立一個長期預測模型,提供一個清楚、有效的干預策略。前者的解決方案是 linear solution (線性的解決方案),後者則為 systemic solution (系統性的解決方案)。
Linear solution
Systemic solution
  • 只看問題的表徵,採取頭痛醫頭、腳痛醫腳的短期修正策略 (short-term fix)
  • 認為問題間是獨立的
  • 認為企業部門是互相獨立的

  • 看待問題的觀點較狹隘
  • 會探究問題間的關聯性,並建立一個長期預測模型,提供一個清楚、有效的干預策略。
  • 認為問題間是有關聯性的
  • 認為企業部門間應多溝通、合作,共同解決問題
  • 看待問題的觀點較整體、全面 (holistic and big-picture view)

  1. 有些問題很單純,你可以使用 liner solution,例如,手錶調整了,你就要換電池;肚子餓了,就去買東西來果腹;如果你想念母親,打個電話或回老家看看她。但是,我們生活中有些問題,沒有這麼單純地可以使用這種直接的方法 (if this then that approach),例如,你是否定期感到焦慮?如果是,你可以每日定期吃藥來麻痺你的焦慮感 (linear thinking);但是,藥物無法治癒你的焦慮症 (anxity disorder),你需要深刻地,有時候痛苦地看看為什麼焦慮會如此嚴重地或經常地打擊你。
  2. 你或許對街友感到遺憾,你可能想給他們一晚遮蔽處與給他們一餐果腹 (linear thinking)。但是明天他們又會感到饑餓、一樣沒有安全與永久的住處。你應該聚集政府、眾人的力量,推動永久住宅的計畫給這些不幸的人,才是長久之計 (system thinking)。

2019/12/11

[Spring Boot] Enabling Swagger2

How To
1. Add dependency in your pom.xml
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

2. Add @EnableSwagger2 annotation
package tw.com.xxx.analysis;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@SpringBootApplication
@EnableSwagger2
public class AnalysisApplication {

    public static void main(String[] args) {
        SpringApplication.run(AnalysisApplication.class, args);
    }

}

3. Startup your spring boot project on the Tomcat port 8080

4. Check result: http://localhost:8080/swagger-ui.html
Swagger2 provides a user interface to access our RESTful web services via the web browser.


2019/12/10

[Google Spreadsheet] How to realize column alias in query function

Here has raw data



If I would like to find Apple's data, and rename column as bellows:



You can use label to do alias



2019/12/08

[Google Spreadsheet] How to remove duplicate item?

Here has my raw data:


If I would like to know all distinct item as bellow:


We can make good use of unique function to remove duplicate items:


2019/12/07

How to allocate memory in IntelliJ IDEA ?

Problem
If I would like to adjust memory allocation in IntelliJ IDEA?


How-To
You can use Edit Custom VM Options to fulfill your requirement. Steps are:

Step 1. Find Edit Custom VM Options



Step 2. Allocation memory and save, then restart IntelliJ IDEA


2019/12/06

How The Economic Machine Works by Ray Dalio



總結三大原則:

  • 不要讓債務的增長速度超過收入,避免被債務壓垮
  • 不要讓收入的增長速度超過生產率,避免失去競爭力
    • 例如通貨膨脹時期,央行大量印刷貨幣,人民帳面的收入大幅度增加,但是實際上這是與當前的社會生產率不符合的,必然是不可持續的。
  • 盡一切努力提高生產率,對於經濟增長是最關鍵的作用

2019/12/05

[閱讀筆記] Thinking in Systems: A Primer (9/9)

  1. 打破各種清規戒律 (Defy the Disciplines)
    1. 不管你主修什麼、教科書說什麼、或是你覺得你是專家,要了解系統,你必須從各個來源學習,例如經濟學家、化學家、心理學家與神學家等。讓跨領域的人聚在一起、互相討論、共同解決一個真實問題,彼此間必須坦承先前忽略了什麼,並樂意被教導。
  2. 擴大關切的範圍 (Expand the Boundary of Caring)
    1. 在複雜系統的世界成功存活,代表著你擴展的不只是時間的水平線,還包含思想的水平線,更重要的是,擴大關心的水平線 (i.e. 範圍)。當然,這出自於道德的原因。如果道德的爭論不夠的話,系統思考提供實際的理由來支持道德的原因。在真實系統,元素間是互相相連的,例如:當人體的肺部失能時,心臟無法持續跳動;當你個員工表現低落,企業是無法成功的;當全球環境崩壞,全球經濟是無法達到預期目標的。
  3. 不要降低「善」的標準 (Don’t Erode the Goal of Goodness)
    1. 降低標準 (drift to low performance) 是系統最具破壞性的典型的例子,這也是在現代工業化的文化中最常見的 -- 不斷降低善的標準。現今的國家領導人,毫無道德觀念、甚至不將道德列入考量,理想主義者反招奚落。在公共場合談論仇恨,比談論愛與和平來得容易。
    2. 不要過度重視壞消息,將標準設為不可改變的絕對值
  4. 與系統共舞的方法 Summary
No.
與系統共舞的方法
說明
1
跟上系統的節拍
如果可以的話,找出系統的實際資料,並繪製出 time graph。去了解系統的行為,別相信人們的記憶,因為那是不可靠的
2
把你的心智模式攤開在陽光下
你知道的任何事情,與每個人知道的每件事情,都只是個 model。將你的 model 攤開來,邀請別人來挑戰你的假設,與挑戰別人的假設。正所謂真理越辯越明,謹慎分析假設,透過證據來驗證,若未通過驗證就將其揚棄
3
相信、尊重並分享資訊
大部分出錯的系統,都是因為錯誤 (biased)、延遲 (delay) 與缺乏 (missing) 的資訊。若你想改善系統的運作,試著讓資訊更即時 (timely)、更精確 (accurate)、更完整 (complete),你將會收到令你驚訝的成效
4
謹慎地使用語言,並用系統的概念去豐富語言
尊重資訊代表避免語言汙染 (language pollution, 即用最清楚的語言避免誤解),這樣才能討論複雜系統的問題。
5
關注重要的,而不只是容易衡量的
若因為某些事物難以量化,就假裝它不存在,會導致 faulty models。若以此態度來設定目標,就導致僅考量容易量化的事物,而非重要的的事物此系統陷阱 (seeking the wrong goals)
6
為反饋系統制定帶有反饋功能的政策
建立新的 feedback loops 來解決系統問題,例如若美國能協助墨西哥改善經濟,而非花錢建築圍牆、增派軍警巡邏,非法移民的問題就能解決
7
追求整體利益
組織的層級架構 (hierarchies) 的存在是用來服務 bottom layers 而非 top layers。不要過度放大某個部分或子系統的利益,卻忽略了整體系統的利益
8
聆聽系統的智慧
先傾聽系統現況 (即 hierarchy 底部有哪些力量與結構維持現有系統),再思考改善方法
9
界定系統的職責
內在責任是指系統設計用來針對決策結果產生的回饋,對於決策者是最直接的。例如開 A380 的機師,坐在駕駛艙內,將最直接經歷其所做的決策所產生的後果。
10
保持謙遜,做一名學習者
當你遇到不懂的事物時,不需要虛張聲勢、不需要呆住,去學習就是了,透過實驗與試誤法 (trial and error) 不斷地學習,並且堅持到底 (stay the course)
11
慶祝複雜性
這個世界就是一團亂、非線性、突然地改變與動態的。其產生了多樣性與一致性,讓我們所處的世界既有趣、又美麗
12
擴展時間的範圍
當你走在難以應付、蜿蜒、未知、未預期與荊棘遍佈的道路,傻子都只是頭低低的往前走,你應該看清楚前方的道路後再往前邁進。你需要關注整體的系統狀態,包含短期與長期
13
打破各種清規戒律
讓跨領域的人聚在一起、互相討論、共同解決一個真實問題,彼此間必須坦承先前忽略了什麼、樂意被教導。
14
擴大關切的範圍
在真實系統,元素間是互相相連的,例如:當人體的肺部失能時,心臟無法持續跳動;當你個員工表現低落,企業是無法成功的;當全球環境崩壞,全球經濟是無法達到預期目標的
15
不要降低「善」的標準
降低標準 (drift to low performance) 是系統最具破壞性的典型的例子,這也是在現代工業化的文化中最常見的 -- 不斷降低善的標準。不要過度重視壞消息,將標準設為不可改變的絕對值。

  1. Summary for systems
    1. 一個系統不僅僅是其各個部分的總和;
    2. 系統是透過多個 information flow 的相互關聯來運作;
    3. 系統中最不明顯的部分,常常是決定系統行為最具決定性影響的地方 (i.e. function or purpose);
    4. 系統結構是系統行為的來源。系統行為透漏隨著時間更迭所產生的一系列的事件。
  2. Summary for stocks, flows and dynamic equilibrium
    1. Stock 是系統內 flow 改變的歷史記憶;
    2. 若 inflow 的總和 > outflow 的總和,stock level 會上升;
    3. 若 outflow 的總和 > inflow 的總和,stock level 會下降;
    4. 若 inflow 總和 = outflow 總和,stock level 為維持動態平衡 (dynamic equilibrium);
    5. 無論是降低 outflow rate 或是提升 inflow rate,都可以提升 stock level;
    6. Stock 在系統中扮演 delays, buffer 或 shock absorber 的角色;
    7. Stock 允許將 inflows 與 outflows 獨立分開來看。
  3. Summary for feedback loops
    1. Feedback loop 是一連串與 stock 相關的因果關聯,透過一套決策、規定、法律或決策,使其達到調整 stock level 的目的
    2. Balancing feedback loops 用來使系統保持動態平衡,是一個 goal-seeking 的結構,這是系統穩定的來源、也是抗拒改變的來源
    3. Reinforcing feedback loops 具備自我強化的功能,可以導致指數化的成長或是導致一段時間後,系統崩壞。
    4. 根據Feedback loop 所傳遞的資訊所做的回應,只能影響系統未來的行為,你無法矯正當下系統的行為
    5. Stock-maintaining balancing feedback loop 一定要有自己的目標,用來適當地補償影響 stock 的 inflow 或 outflow 流程。否則,feedback process 會低於或超過 stock 的目標
    6. 系統間都會擁有類似的 feedback structure,因此也會產生類似的動態行為
  4. Summary for shifting dominance, delays, and oscillations
    1. 系統複雜行為常常起因於 feedback loop 強度的改變,有些時候是 balancing loop 占上風,有時則是 reinforcing loop 占上風
    2. Balancing feedback loop 中的 delay,是系統產生上下震盪的原因
    3. 改變 delay 的長度,可以讓系統行為大不同
  5. Summary for scenarios and testing models
    1. 系統動態模型 (system dynamics models) 用來探索可能的未來 (不是預測未來),並且會詢問如果...會怎麼樣的問題 (what-if questions)
    2. Model utility 的重點並不在於驅動情境 (driving scenario) 是否真實 (因為沒人能確定),重點在於遇到真實的行為做何反應 (response)
  6. Summary for constraints on systems
    1. 在一個指數型成長的系統,一定至少有一個驅動成長的 reinforcing loop,但也至少會有一個 balancing loop 來限制成長,在一個資源有限的環境,沒有一個系統可以永遠成長
    2. Nonrenewable resources 代表 stock-limited;renewable resource 代表 flow-limited。
  7. Summary for resilience, self-organization and hierarchy
    1. 彈性 (resilience) 永遠都有限制
    2. 系統不僅僅需要管理生產力 (productivity) 或穩定性 (stability),還要管理彈性 (resilience)
    3. 自我組織 (self-organization) 是指系統能自我學習、產生新的結構、產生多樣化與複雜化
    4. 層級化系統 (hierarchical systems) 是由下而上緩慢發展而來。高層的目的是用來服務較低層級的目的
  8. Summary for source of system surprises
    1. 系統中許多關係都是非線性的
    2. 系統無法獨立存在,這個世界是逐漸演變的連續體 (continuum)。我們繪製系統邊界的目的是為了方便討論
    3. 在任何時候,系統中最重要的 input,通常也是系統的限制所在
    4. 任何一個實際的個體,一定擁有多個 inputs 與 outputs,並被多層限制所圍繞
    5. 系統永遠都有成長限制
    6. 當系統以指數型成長的方式朝向限制前進時,將會以極短且驚人的速度碰頂
    7. 當 feedback loops 擁有 long delays 時,遠見 (foresight) 就是一個很重要的能力
    8. 每個人的有限理性 (bounded rationality) 是導致無法達成共識的原因,應予以導正朝向系統整體福祉的方向思考
  9. Summary for mindsets and models
    1. 我們所認為我們知道的世界都是一個 model
    2. 我們認知的 model 必須與世界有高度一致性,但是可惜的是,我們所知與世界的全貌永遠都有落差