【從學員練習影片觀察到一個關於 TDD 的有趣現象】
極速開發的課後練習作業,雖說重點是放在極速開發要學習的技巧與刻意練習的模型,但開發的方式、順序也是刻意安排成類似 TDD 的進行方式,來讓生產力最大化(TDD 本來就是幫助開發的,不是幫助測試的)
我從2位第一次上我課的學員(當然就是 #極速開發,代表他們沒上過#單元測試 跟 #TDD與持續重構),雖然他們是照著示範影片、上課教學用 TDD 在寫整個 tennis 的過程,但從他們執行測試的時間點就可以發現:
「他是用測試來驗證 production code 的正確性」,即使他先寫了測試,也不先執行,沒有看到紅燈,每次都等到 production code 寫完了,應該要綠燈時,才執行測試。
而其他上過 TDD 課的同學 ,或是上過單元測試的同學,知道測試是用來描述情境,如果現在「加入的這個情境是新的需求或需求異動,代表目前 production code 還不支援這個情境,執行測試跑出的紅燈,就是等等 production code 要完成的 #目標」
test-frist 從來都只是 TDD 其中一個小小的衍生產物,而不是全貌。TDD, 測試驅動開發 從來都是一種開發方法,而不是測試方法。
總有些人老愛把 TDD 拿來跟測試相提並論,就總是喜歡把 test-first 當作靶子打,覺得違反人性跟直覺,覺得先寫測試在很多情況下是浪費時間或是不 work,可能拿來跟一堆測試的方法論相提並論,或總是只拿回歸測試的效益來當作 TDD 的整體。抑或是陷入 isolation unit test 與 integration test (其實就是非 isolation 等級、有實際依賴的自動測試)之爭。
```
註:TDD 事實上是可以不是單元測試等級的。
```
要比較正確看待 TDD 的角度,首先要知道它是幫助開發的、它是一種開發方式(當然不是唯一一種,甚至也不會是最好的一種,因為根本沒有最好,只有剛好)
接著要了解 TDD 可能用 IPO 模型還比較貼切,input-process-output,在你開發任何功能之前,你總要先想過這件事。而先想這件事,才是 TDD 的最基本精神。
接著是怎麼把你想好的東西,變成可執行的 spec,我們只是用測試程式來「描述」你腦袋中的「IPO模型」,把 process 的過程當作一個黑箱子。
而這個 IPO 模型在結合成「使用情境」,就會帶來「高易用性 API 的好處」,只有在一開始就先想好怎麼給別人用,最後才會好用。所謂的一開始想好,指的不是預先設計一堆 class,而是 input/output 想清楚期待(一般會結合實例化需求,搭配 Given/When/Then 的 gherkin style 來把前置條件、資料、前提想好,當發生什麼事,應該是怎樣的結果),然後描述它。在紅燈定義清楚目標,綠燈完成 input/output 關係且沒弄壞前面的所有情境後,來針對 process 進行重構(事實上 Kent Beck 的 TDD by Example 更多是用 refactor 來 #完成 process。
```
註:所謂的 output 不一定只有回傳值,包含外部依賴狀態、資料的改變,甚至顆粒度小一點,針對物件導向設計的話,物件內部狀態的改變也算,只是物件內部狀態改變,驗證點要嘛是拿得到內部狀態,要嘛就是要驗證物件哪個行為會因這個內部狀態而有所不同。
```
## 戰 TDD 之前該先做好的功課
要戰 TDD,是不是至少要把 Kent Beck 的 TDD by Example 看完?
要戰 TDD,請不要拿它跟測試方法論來比,那只是一下就被人看破手腳。因為它是個開發方法論。
要戰 TDD,請不要把它的好處只限縮在跟回歸測試、自動測試的比較,因為那只是它的衍生好處,當你試過在白海報紙上 TDD 就懂,TDD 是在釐清你的思緒的同時,又可以以終為始,確保你在 production code 的每一個動作都是為了滿足某個期待的情境。
要戰 TDD,請不要去把 單元測試、整合測試捲進來,那是測試的顆粒度,那是測試的分類,TDD 從來都不是只能限於單元測試。
要戰 TDD,請不要在那邊戰他是 bottom-up ,是直接從程式/class 的角度出發,事實上 TDD 既不是 bottom-up, 也不是 top-down, (書裡面就有講這件事咩),實務上的 TDD 結合倫敦派(GOOS)跟芝加哥派(Classic TDD),會更像 Outside-In 的進行方式,先定義好驗收情境,接著從最外部(也就是使用者看得到的部份)一路把依賴往另一邊的系統邊界推,直到推到系統以外的依賴資源(persistence 或 external API/service)
```
註: ATDD by Example 中 ATDD by Example, Kent Beck 寫的序最後的一段話。
Kent Beck:
「就像我曾說過的,TDD的一個缺點是,它可能會退化為一種用來滿足開發人員需求的編程技能。某些開發人員從更廣泛的角度來看待TDD,輕易在他們測試的不同抽象級別間跳躍。然而在ATDD中不存在歧義,這是一種加強與非編程人員溝通的技術。我們之間良好的協作關係,以及作為這種關係基礎的溝通,能夠使軟件開發更有效率。採用ATDD是向著溝通更清晰這個目標邁進的重要一步,而此書是一本全面又平易近人的入門讀物。」
```
要戰 TDD,請不要只關注在 test-frist,因為他只是用 test 來幫助你 think-first,不要邊寫邊想。然後不要過份依賴或相信你腦袋的能力,把你想好的東西具體化出來,最好可以被直接執行,最好除了你以外每個人執行出來的結果都會一樣(不管是對的,還是錯的)
要戰 TDD, 請不要把論點放在見樹不見林,如果你有看 TDD by Example 的 Part 1, Part 2 那兩個加起來共 24 個章節,就知道一開始就得把當下想到的全貌紀錄在一個「紙本」的 backlog (所謂的紙本,只是要講這並不依賴於任何工具)
而這個需求輪廓的全貌,會隨著你逐漸完成一部分一部分的情境,設計逐漸浮現後,而隨時跟著增減調整。
但不代表 TDD 就是先想到一個測試案例,就直接先幹下去了,那根本是亂搞。
以上這些,都還不是在列 TDD 的好處,而是針對那些從來沒搞懂 TDD 但又愛戰 TDD 的人一點提醒,你戰的很可能是「你誤解的 TDD」。
TDD 還有許多實務上的用途,列上我在譯者序中的一小段:
>> 測試驅動開發(Test-Driven Development, TDD)!一種以測試為開發輔助、以測試來描述需求情境、以測試來當作目標、以測試來表達期望、以測試來驗證疑問、以測試來實驗學習、以測試來溝通協作、以測試來協助設計高易用性 API 的「開發方法」。
譯者序有開放給大家看,請見:https://tdd.best/book/tdd-by-example/
拜託,要戰之前去看一下祖師爺 Kent Beck 對 TDD 的原始見解:https://www.tenlong.com.tw/products/9789864345618?list_name=srh
如果你想正確的使用 TDD 來幫助你在實務上產生許多的價值,帶來許多的好處,尤其是需求釐清、持續重構、小步快跑的部份,最好理解的培訓課就在這:https://tdd.best/courses/classic-tdd-by-example-video-training/
最後我想講一段話:
TDD 從來都不該被導入到團隊中,但它是一種很好的自我鍛鍊與學習的方式,也是一種能用很低的成本來帶來很多好處的開發方法(見下方註腳),然而它也不是適用所有的情況,但它可以讓『完美』變成一個動詞,而非不變的形容詞。
```
註:
Kent Beck 在 DHH 靠腰:《TDD is Dead》 之後寫的一篇反串文:《RIP TDD》
https://www.facebook.com/notes/1063422864115918/
我幾年前的簡易翻譯,通常也是 TDD 可以幫助你解決的問題,如下:
- Over-engineering (過度設計)
- API feedback (改善API的設計與可用性)
- Logic errors (想的跟寫的不一樣,寫的跟需求不一樣)
- Documentation (寫跟維護文件是痛苦的)
- Feeling overwhelmed (找不到切入點)
- Separate interface from implementation thinking (抽象設計)
- Agreement (確保已修正問題的證據)
- Anxiety (改東壞西的擔心受怕)
```
很久沒對 TDD 發表這種長篇大論了,因為不理解、不想理解、不同角度理解的人居多,能真的到各自的塔上用不同角度來看原義,以及實務上用它來幫助解決的問題有哪些的人,真的太少。
大部分人只想針對這個詞彙來攻訐以博得流量跟吸引目光,而不是想著「我可以用它來幫助我什麼」
問題跟需求是中性的,解決問題跟滿足需求的手段與方式有千萬種,不會只有一種,也不會有所謂的對錯,多點角度去了解不同的方法、方式,然後融會貫通,發揮綜效,在實務上用最少的成本與風險來產生最大的價值,這才是真正的目標。
導入敏捷不該是目標,導入 TDD 也不該是目標,目標永遠都是在實務上產生價值、解決問題、滿足需求。
同時也有45部Youtube影片,追蹤數超過80萬的網紅果籽,也在其Youtube影片中提到,|香港街拍—瑞典回流攝影師港式幽默融入照片 日走幾萬步街拍為醫喪母之痛:試過影一張相等了3個月 大樹爆炸頭、間條撞間條、?頭問號……你心目中有畫面嗎?這些都是黃建榮(Edas)的作品,他是業餘街拍攝影師,初學習攝影時,也曾醉心研究森山大道與何藩的大師級作品,但近年拿起相機時,決定放下所有啟蒙與執念。...
「抽象化程式」的推薦目錄:
- 關於抽象化程式 在 91 敏捷開發之路 Facebook 的最佳貼文
- 關於抽象化程式 在 Facebook 的精選貼文
- 關於抽象化程式 在 矽谷牛的耕田筆記 Facebook 的最讚貼文
- 關於抽象化程式 在 果籽 Youtube 的最佳貼文
- 關於抽象化程式 在 小戴 Davina Youtube 的精選貼文
- 關於抽象化程式 在 啟點文化 Youtube 的最讚貼文
- 關於抽象化程式 在 【thunkable 抽象化與函式】EP1:抽象化(Abstraction) - YouTube 的評價
- 關於抽象化程式 在 2_3 抽象化在日常生活的應用| By 運算思維 - Facebook 的評價
- 關於抽象化程式 在 我該用類別, 抽象類別還是介面? - Dream Maker 的評價
抽象化程式 在 Facebook 的精選貼文
好書推薦《#造局者》部落格文末抽獎贈書 2 本
這是我今年讀過最喜歡的書之一,作者探討在這個 AI 崛起和時局飄渺動盪的年代,人類已經無法跟演算法和電腦的計算速度競爭。但是,身為人類的我們仍然擁有一項電腦無法取代的優勢:「懂得建立、想像、創造各種思考框架的能力」,掌握這項能力的人在未來會愈來愈有優勢。
部落格文章 https://readingoutpost.com/framers/
Podcast 用聽的 https://readingoutpost.soci.vip/
.
【這本書在說什麼?】
《造局者》這本書的作者是三位學者共筆,他們都是在 AI 和 大數據領域有卓越的成就,分別是《經濟學人》雜誌資深編輯庫基耶(Kenneth Cukier)、英國牛津大學網路研究所教授麥爾.荀伯格(Viktor Mayer-Schönberger)、歐洲管理科技學院教授,決策、模型暨數據中心主任德菲爾利科德(Francis de Véricourt)。
他們發現在 AI 崛起和世局動盪的現在,人類最無可取代的能力之一就是「決策能力」,而要擁有好的決策能力就必須掌握許多不同的「思考框架」。因為當一個人能提出正確的思考框架,就能找出更多的選項,做出更好的決策,創造更好的局勢。深諳此道的人就被稱之為「造局者」。
這本書從人類如何做出好的決策出發,談到建立思考框架的重要性,也提供我們三種最重要的建立思考框架的方式。在書本中段,則說明了遇到瓶頸的時候,如何重啟另一個思考框架。在後半段則說明了我們該如何學習更多的思考框架,以及讓自己擁抱更加多元性的策略,並且培養敏銳的心智。
如同這本書的介紹影片裡談到的:生活中一切都需要抉擇,而做出更好抉擇的秘訣,就在於思考框架。駕馭這種思考方式可以讓你更瞭解世界、改善工作表現和人際關係、促進社會進步。這也是人類之所以能夠勝過機器和 AI 的因素。成為「造局者」正是未來人才必不可缺的關鍵技能。
.
【什麼是造局者?】
以標準的定義來說,「造局者」(Framer)指的就是起草美國憲法的那一群人,他們建立了聯邦政府的框架。因為美國憲法就像是一個思考框架,用來定義和界定聯邦政府的職權及程序。而在這本書中,造局者指的就是那些「懂得建立和運用思考框架的能手」。
這本書要講的重點之一,就是無論人們的地位高低,每個人都可以成為造局者:「能夠發揮和建立思考框架,或是重啟思考框架的能力,讓自己的生活乃至於整個世界有所不同。」作者也不斷強調建立思考框架所需要的技巧,可以靠著訓練與經驗不斷進步。這本書就像是一本操作指南。
.
【什麼是思考框架?】
在1970年代,「心智模型」(Mental Model)的概念開始流行,人類的推理並非以邏輯形式在運作,反而更像是在模擬現實:人們評估各種選項的方式,是去想像可能發生的種種情況。我們對於世界萬物的思考方式,會受到你「相信」這個世界如何運作而影響。因此,面對同樣一件事情,用不同心智模型在思考的人會有不同的觀點。
而在這本書中所謂的「思考框架」(Frame)就是我們選擇和應用的心智模型,這會決定我們如何理解世界、決定我們如何行動。面對一個新的情境,我們也可以用思考框架去歸納和歸類,並且想出一個抽象的概念,在應用到這個全新的情境裡面。
舉例來說,當我們要畫地圖的時候,經常會採取「笛卡爾直角坐標」的思考框架,這上面有X軸和Y軸的維度可以幫我們用2D的觀念畫出相對的距離和位置。可是當你要在台北市搭捷運從A地到B地的時候,反而採用「捷運地圖」的思考框架比較有效,雖然捷運地圖的站點之間,距離和位置都不是真實的呈現,可是卻能幫助乘客直覺地理解:下一站要去哪裡。這時的重點就不是距離和位置,而是清楚地辨認出目的地的站點該搭乘哪一條線。
所以當我們問:「哪一種地圖最好?」這個問題本身並沒有意義,而是會因為使用的情境和目的的不同,而產生不同的答案。所以,也沒有什麼叫做最正確的思考框架,都是要看情況和目的而定。讓自己成為建立思考框架的能手——也就是造局者,就能懂得如何選擇並且應用思考框架,這會是各種決定與行動的基礎。
.
【思考框架的轉變】
在聊主動建立思考框架之前,讓我們先看一個被動轉換思考框架的真實故事,這是書中提到一段關於朗讀到默讀的閱讀框架轉變。在西元11世紀之前,歐洲大部分都是在教堂才會有閱讀的行為,而且都是以「集體朗誦」的方式在進行,主要的目的是讓大家參與一個讚頌神的集體活動。但是到了11世紀之後,開始出現另外一種閱讀的框架,也就是「默讀」。
默讀讓閱讀這件事情不再是集體的體驗,而是一種個人的經歷。每個讀者都可以控制自己要讀快一點或慢一點,你也可以重複閱讀某一些篇章,自己可以慢慢思考書裡面的內容,產生新的點子,促進獨立思考。到底,是什麼東西造成了人們從朗讀的閱讀框架,轉移到默讀的閱讀框架呢?
在早期的書籍和文章裡面,常常沒有標點符號,字跟字之間也沒有空格,就像是一連串的字母之間不斷地延續。這種情況下光是要閱讀就非常困難了,想要默讀更是不可能的任務。這個時候集體朗讀就有它的功能,因為在一群人裡面,總會有人過去曾經讀過這篇本文,還記得某些字跟段落該怎麼念,就可以帶領大家一起朗讀下去。
在後來才出現了一項創新,書籍的字裡行間,開始有了「空格」和簡單的「標點符號」,這個時候就不再需要有人帶領,許多讀者可以自己進行斷句,獨自閱讀一本書了。於是,在這個時候人們就可以切換到另外一種閱讀框架。這件事情的影響非常的深遠,因為這一整個新世代的讀者都可以自行默讀,有助於人們自己的獨立思考,進而激發出更多元的思考框架。
.
【建立思考框架的三個方式】
建立思考框架的方式有三個:想清楚因果關係,想像出平行現實,運用物理學定律制定適合的限制條件。這三個特色正是應用思考框架的時候最重要的因素。值得注意的是,思考框架本身並不是解決方案,而且是尋找解決方案的工具。以下分別介紹這三個方式:
.
1.#因果關係
人類運用因果思維來看待這個世界,可以更容易理解世界,也有助於預測未來可能發生的事情,可以說人類是天生「因果推理」的機器。相較起來,AI 科技就無法擁有自己的因果思維,而是需要人類幫忙設定。舉經典的 Dota 電腦遊戲來說,這是一個兩隊人馬 5 vs. 5 互相廝殺,力求破壞對方大本營的遊戲。
科學家找來遊戲高手擔任 AI 策略的開發人員,設計了一些獎勵因素,讓 AI 跟自己進行的數百萬次的對戰,反覆嘗試錯誤,找出最好的操作手法。但是當 AI 跟人類正式交鋒的時候,人類還是取得了上風,尤其在團隊合作上面 AI 顯得像一團散沙。
後來,開發人員發現說,一般玩家會分成三個階段來安排戰鬥,所以開發人員就依照這樣的順序安排程式,在不同的階段給予不同的策略,調整獎勵的優先次序。然後開發人員就發現說一開始機器人通常只會照顧自己,所以還得幫他們建立「團隊合作」精神的框架。他們建立起了一些跨越個人遊戲角色的「超參數」,調整成一隻要達成共同獎勵的團隊。經過這一些修改之後,AI 反過來把人類打得落花流水。
值得注意的是,電腦不是自己學會這些事情的,而是因為人類先輸入了一些「因果框架」的獎勵因素,才可以讓這些運算發揮它的功效。同樣的現象發生在其他像是圍棋和西洋棋遊戲的對決,真正的突破並不在於機器高速的數字運算,而在於人類調整了 AI 對於因果關係(獎勵)的思考框架。
.
2.#平行現實
書中的說法是「反事實思考」,但我認為有點難懂,用「想像出另一個平行現實」比較好理解。這個方法可以讓我們跳脫當下對世界的認知,想像出一個全新的情境,問自己:「如果……會怎樣?」就像是小孩子在玩扮家家酒,或者是科學家透過抽象理論設計出全新的實驗。透過想像出一個平行現實,我們可以將因果關係轉換成實際行動,測試看看可能有什麼影響,帶來什麼後果。
心理學家高普尼克(Gopnik)認為這種能力其實在人類孩童時期就已經具備了,他還把嬰兒稱為「搖籃裡的科學家」,她設計過一個很有趣的實驗名叫「贊多測試」的假裝遊戲(贊多指的是顏色鮮豔、形狀可愛的物體)。
實驗的第一階段,高普尼克和孩童待在同一個房間,孩童會學到一個因果關係:把贊多放到一個機器上面,機器就會播放生日快樂歌,幫一隻猴子玩偶慶生。然後,在實驗的第二階段,會有實驗人員走進來把機器和贊多拿走,高普尼克和孩童一起露出失望的表情。
這時候高普尼克會拿出一個「盒子」、兩個不同顏色的「積木」,並對孩童說:「我們假裝這個盒子是機器,這塊積木是贊多,另一塊積木不是贊多。」接著她鼓勵孩童繼續幫猴子玩偶慶生。此時,孩童挑選了正確的積木,放到盒子上。即使她把兩塊積木的定義互相對調,孩童都能夠選到正確的積木。
這個假裝遊戲的實驗,證實了人類自幼就擁有了反事實思考的能力,也就是有能力可以想像出另一個平行現實。高普尼克發現,更會玩假裝遊戲的孩子,就能對平行現實做出更好的推論。她說:「嬰兒和幼兒就像人類社會的研發部門,至於成人這是那些單調無聊的製造與行銷部門。」許多人在成年之後,反而容易落入單一現實的思考方式,而忘記了我們天生就有想像平行現實的能力。
.
3.#限制條件
作者提到,所謂的建立思考框架,並不是任由想像力無邊無際地飛翔,也不是像斷了線的氣球到處亂飄,而是要有一定程度的「條件限制」,有助於約束我們的想像力,讓平行現實的想像維持在可以執行的程度,這才能讓思考光架真正發揮效用。
書中舉了一個很像電影裡才會發生的真實故事「恩德培行動」,這是一個以色列精銳部隊在恩德培機場的行動中,從恐怖分子手裡救出人質的戰鬥情節。1976年,恐怖分子綁架了飛機上106名人質,關押在烏干達的恩德培機場航廈中。當時烏干達獨裁者跟以色列當局並不友好,出動軍隊肯定不是好的選項。另一個方案是讓突擊隊員假裝成獲釋的巴基斯坦犯人,但太容易被看穿了。還有人提議讓突擊隊員降落在機場旁的湖裡,但是湖裡有許多鱷魚,而且任務結束之後這麼多人該怎麼全身而退?
評估了各種可能選項後,在種種條件限制之下,以色列想出了一個奇招:讓突擊隊搭乘運輸機在夜間降落到機場,搭乘機場內常見的車輛前往航廈,消滅恐怖份子、救出人質之後搭乘運輸機直接回國。他們在空軍基地搭建了航廈的等比例模型,透過少數獲釋的人質口中知道人質的大約位置,並且一次又一次地排練所有行動,講究到每一秒、每一步該怎麼進行。
在一個沒有烏雲的午夜,29位突擊隊員搭乘運輸機降落機場,他們身穿烏干達軍隊的服裝開著機場車輛前往航廈。突擊隊以迅雷不及掩耳的速度突擊航廈,只花了十分鐘就解決所有的恐怖分子,然後就帶著人質直接搭乘運輸機返回以色列。整場行動中只有三位人質喪生,而且連烏干達政府都還來不及反應。這個故事從天馬行空的平行現實裡,限縮了各種條件,找出了最可行的方案,最後成功執行了這次任務。
.
【重啟另一種思考框架】
當你想要解決一個全新問題的時候,尤其是還沒有人曾經解決過的問題,你可能會感到不知所措。這個時候,先透過兩個步驟來思考:(1) 先從自己腦袋裡的框架庫找找看,有沒有其他適用和類似的框架、(2) 檢查其他不同領域的框架庫,看看有沒有能夠直接借用,小幅度調整就可以使用的框架。
如果這兩個步驟都找不到適合的框架庫,那麼才嘗試最困難、也是最後的殺手鐧:「發明新的思考框架」。作者提醒道:「切換到不同的思考框架,能讓你對世界有不同的觀點,但這也有風險。」一旦你重新找到一個新的思考框架,帶來的報酬可以是相當可觀的。
書中有一個重啟框架的例子很值得我們參考,美國紐澤西南邊的小城市康登市為了改善當地的犯罪率,直接解散整個警察隊伍並且重整執勤策略。當時城市的治安非常糟糕,市容也很破舊,到處都會發生大小程度不同的犯罪。這還不是最慘的,警方栽贓、造假、暴力執法的情況更是屢見不鮮。民眾除了害怕黑道,也非常害怕警察。
當地首長找來社區領袖和居民共同商討,最後決定放棄頭痛醫頭、腳痛醫腳的貼膏藥方式,採取全新的執法策略。解散警隊之後,他們精挑細選和新聘任的警察,改變了巡邏的方式。他們逐家登門拜訪、自我介紹、談談可以幫忙居民什麼。警察在街頭舉辦派對,和民眾聚餐,和小孩打籃球。
過去的思考框架是「警方將人民視為罪犯」,但是新的思考框架則是「警民一家親」的社區群體,警察從原本打擊犯罪的戰士,搖身一變成了社區當中親切的守護者。最後,康登市的犯罪率下少了一半,謀殺率少了六成,警方過度使用武力的案件少了九成五。重啟思考框架的方式,獲得了前所未有的成功。
.
【創造多元性的四種策略】
作者指出,很多人可能會認為,想要擁有多元性就代表要接觸大量的想法和觀點,其實那是抓錯了重點。多元性的優勢不是來自於數量,而是來自於差異。找出七百個類似的想法,不如找出七個不同的想法來得有價值。如果一個工具箱可以有七種不同的工具,絕對會比擁有七百把錘子的工具箱更加實用。
如果我們想要擁有多元的思考框架,就是要刻意的去營造,以及一起維護,這並不是一次的成功就可以高枕無憂。如同貝佐斯在《創造與漫想》書中提到的:「這個世界要你與眾無異,千方百計把你拉向跟大家一樣,別讓它得逞。」人類本能的從眾傾向,以及社會自然而然的同質化趨勢,都需要我們自己刻意地、有意識地選擇,才能夠擺脫與眾趨同的自然發展,擁抱更加多元化的觀點和想法。
如果你想為自己的生活、家庭、工作環境創造出多元性的樣貌,可以採取以下四種策略:擁抱變化,運用教育,鼓勵遷徙,容許摩擦。
.
1.#擁抱變化
如果一個思考框架一直以來都行不通,最好的做法就是擁抱改變,試試看別種思考框架。書中舉例同性戀婚姻的推動者,把美國從1995年支持同婚的人從25%提高到2020年將近70%。以前的同志運動一直把婚姻當成是核心議題,也一直把爭取這種「法律權利」當作是重點。但是進展並不顯著。
當時那種法律思考的框架,講究的是「法律權利」,但就是沒有效果。那種框架太缺乏想像力、太唯物主義,沒有說服力。到了2000年,他們研究很多民意調查還有焦點團體的意見,想弄清楚大家到底還有什麼疑慮。他們去思考說要怎麼樣用大眾的思考模式來談。最後他們選定了一個價值觀的思考框架,鎖定大部分的人結婚的原因:「愛、奉獻、家庭」。
他們把同性戀婚姻不再當成一種自由或者是權利,而是對於愛的表達與承諾。他們漸漸的讓大家知道,世界上有許許多多不同的框架,而且都同樣正當。到了2011年,第一次出現的黃金交叉,支持的人數正式超過了反對的人數。根據調查,只有14%的人會說這是一種「自由」,而有32%的人會說這是一種「愛」,是一種人類的情感。最後在2015年聯邦最高法院正式裁定的用憲法來保障同性伴侶的結婚權利。這並不是強迫民眾接受某種特定的思考框架,而是讓各種不同的思考方式能夠共存。
.
2.#運用教育
要建立起多元的思考框架,從教育著手是非常有效的模式。美國有一個很有趣的研究,就是去看美國的白人父母和黑人父母怎麼跟孩子談論種族。發自內心一片好意的白人父母,通常不會去刻意談到種族議題,因為他們相信「種族色盲」這種做法比較能夠讓孩子避免成為種族主義者。
另一方面,黑人父母卻常常和孩子討論種族議題,在他們看來,這種種族色盲的做法就是在故意忽視各種明顯的歧視現象。例如逛超市的黑人被懷疑是小偷,開著車子卻無緣無故被警察攔下來,黑人孩子的家庭教育就是要強調看到「種族的各種顏色」在日常生活的各種影響。
最後,這些社會學家發現,種族色盲的框架正好是種族歧視的主要來源,白人父母雖然出自於好意不想強調種族之間的差異,但也在無意之間,否認了有色人種遭受到歧視的真實狀況。這種教育方式忽略了差異,抹去了多元性。要培養多元的思考,就必須認識到差異的存在,承認仍然存在的落差。
.
3.#鼓勵遷徙
如果我們能夠鼓勵遷徙及流動,人們會把自己的文化和思考方式帶到別的地方,促進融合和變化。曾經有學者研究各個區域和城市的經濟成敗因素,發現了這些地區成功背後的原因有三個主要的因素:「科技、人才、寬容」。作者認為,「寬容」是其中最關鍵的一項,那些現在最開放的地方,經濟表現就最好。因為這些地方有更大的思考地圖,會讓人能夠放手冒險,這也是思考框架多元化所造成的經濟紅利。
像是美國被譽為一個民族「熔爐」,但是最近比較像一個「燉湯」,也就是讓裡面的好料都還維持各自的形狀。像是韓國人會住在洛杉磯的韓國城,華人會住在舊金山的唐人街,拉丁美洲的族群住在德州南方,古巴人住在佛羅里達州,巴西人就住在波士頓。雖然這種文化融合的速度不像我們想像中的快速,但是不同的文化激盪之下,也為美國社會注入了很多元的觀點和看法。
.
4.#容許摩擦
把社會上的摩擦,看成是這個社會的優勢、而非缺點。作者說到:「如果在社會裡面維持思考框架的多元化,確實會讓人們彼此之間感覺到不安很衝突,就是因為大家要看到彼此的不同,而且還要可以彼此互動。但畢竟,大家觀點不同、意見相對,本來就是正常生活該有的模樣。」
哈佛法律學院的昂格(Unger)教授認為,如果要讓政治進一步的去中心化,就必須要用一些反事實的模型來做思考。他說:「當社會很果斷地沿著一條路前進的時候,應該要多方下注,以避免損失,也就是要允許在特定的地點或部門,跳脫一般的解決方案,實驗看看不同的國家走向會怎樣。」
昂格鼓勵讓社會充滿摩擦,也鼓勵教育上面要用辯證式的討論方式,不要讓社會被束縛在單一的版本,而是可以嘗試其他的社會組織方式。運用和擁抱多元的思考框架,才能擁有多樣化的各種策略,再從中選取適合的方案。
.
【對思考框架保持警覺】
這本書告訴我們,幾乎沒有錯誤的思考框架,只有不適合某種情況的思考框架。而且各種框架應該要有共同存在的權利。但是作者們提醒我們要保持一個警覺,他們說:「唯一要注意的是,這種慷慨的態度要有一個前提,也就是說:『唯一』的一種錯誤的思考框架,就是拒絕其他的思考框架。」
要讓框架多元性的目的,就是為了讓各種框架可以彼此競爭、互補、對抗、共存。然而,如果有某一套思考框架的目的在於完全抹煞其他框架的存在,這就是不可被接受的。所以作者們才說:「如果你聽到有任何人或團體,說只有自己的思考框架放諸四海皆準,只有自己說的是真理的時候,千萬別相信。」
.
【後記:拓展想像的邊界】
如果說另一本我很喜歡的《超級思維》那本書是心智模型的「百科全書」,那麼《造局者》就像是心智模型的「使用指南」。書中有清楚的概念和步驟,讓我們了解為什麼要學習更多的心智模型,以及該怎麼樣活用各種心智模型,並且在必要的時刻推翻自己的假設,重新啟動一個新的心智模型。
這本書是今年我讀過的書裡面感到非常印象深刻,也讓我的思考方式深受啟發的。作者們把故事和理論的比例搭配得恰到好處,從一則又一則的故事和研究案例當中,會自然而然地理解作者們要帶給我們的觀點,也讓我感受到什麼叫做多元性,以及為何要擁抱差異。
從書中也可以發現,AI 並不會削弱心智模型的重要性,反而是增強了心智模型的重要性。因為 AI 無法自己建立思考框架,仍然只能依靠人類。人類最重要的特色就是可以處理「假設之外」的新問題,能夠把心智模型的空間拓展到可以親身體驗的範圍之外,也就是能夠做到抽象與推理。人類只靠著極少數的資料,甚至是完全沒有新的資料,就能夠適應全新的、過去從來沒有體驗過的情境。
作者最後提醒到:「這是一個救贖也是一個警訊:一個人如果擁有建立思考框架的能力,就會保有價值。但要是放棄了努力,沒有辦法做好這件事情,就會失去現在人類的特權地位。」我們能夠想像的邊界,就是我們世界的邊界。
.
Kobo 購書連結:https://bit.ly/3rRI8Kg
Kobo 電子書7折代碼:WAKIFRAMER
使用期限:8/15~8/21
.
感謝 天下文化 提供贈獎抽書
抽象化程式 在 矽谷牛的耕田筆記 Facebook 的最讚貼文
ref: https://loft-sh.medium.com/11-of-the-best-open-source-kubernetes-tools-2021-edition-b4aa49487845
本文會從三個類別來介紹作者認為跟 Kubernetes 開發維運有關的好用工具,這三個領域分別是
1. Running Kubernetes Environments
a. Minikube 依然好用,可以輕鬆創建環境,作者提到創建一個 cluster 只要 23 秒即可 <--- 我是懷疑加上 VM 時間應該沒辦法,除非單純用 container mode.
b. Helm 目前依然是部署方面最普遍被使用的包裝方式,
c. K3S 目前依然是輕量級 k8s 的選擇,特別是 IoT 等輕量級環境下想要部署k8s叢集則k3s幾乎是唯一選擇。
2. Simplify Feedback Loop
這個領域主要探討的針對開發者來說,如何能夠有效的提升開發流程,如何讓開發者能夠與 k8s 的互動更為抽象與簡單,讓開發者可以不需要學會太多k8s的指令又能夠將開發的結果送到k8s叢集內進行測試。
這類型的反饋資訊也就是標題所述的 Feedback Loop
a. 由 Google 開源維護的 Skaffold 專案目前能夠簡化開發者開發k8s 應用程式的流程,將建置Image,部署到k8s等步驟都自動化,開發者只需要呼叫指令或是存擋即可讓最新的程式碼自動部署到k8s叢集內。
b. 另外一套名為 Tilt 的軟體與 Skaffold 非常類似,不同點是 Tilt 有提供友善的介面,讓使用者可以更快地去知道當前撰寫的程式碼部署到k8s後會有什麼問題,從基本的 YAML 錯誤到部署後哪邊出問題都能夠盡量的點出
c. DevSpace 也是一套針對開發流程的開源專案,跟 Tilt 一樣都有提供介面,而全部的操作都是基於 devspace 這個指令來完成。
d. Lens 這套 Kubernetes 的 GUI 軟體功能愈加強大,作者甚至稱其為 IDE 而非單純的 GUI 功能,透過各式各樣不同的 Plugin 幾乎可以完成你想要達到的任何功能。
3. IDE Dev Tools I Can’t Live Without
a. 作者推薦 VSCODE 上面的 Kubernetes Tool 這個擴功功能,作者認為如果你的 IDE 不能夠有效地分辨 Helm Template 與 K8s vanilla YAML 的差異的話,你的開發速度跟體驗將會奇差無比。
b. VSCODE 上面的 YAML Language Support 這個功能也很好,能夠針對各種 YAML 文件的操作給予自動補齊與偵錯
c. 另外一個作者推薦的 VSCODE 擴充功能是 Footsteps,作者提到對於一個數百行以上的 YAML 檔案來進行修改有時候是厭煩的,而這個擴充功能會幫你把最近修改的內容用顏色給標示強調同時也透過快捷鍵可以讓你快速地跳於最近修改的行數之間往返。
這篇文章主要就是作者分享自己使用的一些工具,有興趣的可以參考原文
抽象化程式 在 果籽 Youtube 的最佳貼文
|香港街拍—瑞典回流攝影師港式幽默融入照片 日走幾萬步街拍為醫喪母之痛:試過影一張相等了3個月
大樹爆炸頭、間條撞間條、?頭問號……你心目中有畫面嗎?這些都是黃建榮(Edas)的作品,他是業餘街拍攝影師,初學習攝影時,也曾醉心研究森山大道與何藩的大師級作品,但近年拿起相機時,決定放下所有啟蒙與執念。回歸自我,街拍照不只諧趣,也不只煽情,而是結合具像與抽象的協調與和諧。
土生土長香港人Edas,曾到瑞典工作十一年,八年前,覺得從事程式編碼的工作太着重邏輯思考,他希望公餘時得到暫時解脫,所以學習攝影,另拓創作空間。二〇一四年回流香港,他在大街小巷看到各種有趣的景象,開始沉迷街拍,「當時在瑞典的照片比香港的簡潔,還在想,回到香港後就好難再拍到類似影像。真正到了香港,雖然覺得環境較雜亂,但變化很大,就嘗試甚麼都拍。」
https://hk.appledaily.com/lifestyle/20210205/W7NS47H2EVHXXEKMYREZUUKBCE/
影片:
【我是南丫島人】23歲仔獲cafe免費借位擺一人咖啡檔 $6,000租住350呎村屋:愛這裏互助關係 (果籽 Apple Daily) (https://youtu.be/XSugNPyaXFQ)
【香港蠔 足本版】流浮山白蠔收成要等三年半 天然生曬肥美金蠔日產僅50斤 即撈即食中環名人坊蜜餞金蠔 西貢六福酥炸生蠔 (果籽 Apple Daily) (https://youtu.be/Fw653R1aQ6s)
【這夜給惡人基一封信】大佬茅躉華日夜思念 回憶從8歲開始:兄弟有今生沒來世 (壹週刊 Next) (https://youtu.be/t06qjQbRIpY)
【太子餃子店】新移民唔怕蝕底自薦包餃子 粗重功夫一腳踢 老闆刮目相看邀開店:呢個女人唔係女人(飲食男女 Apple Daily) https://youtu.be/7CUTg7LXQ4M)
【娛樂人物】情願市民留家唔好出街聚餐 鄧一君兩麵舖執笠蝕200萬 (蘋果日報 Apple Daily) (https://youtu.be/e3agbTOdfoY)
果籽 :http://as.appledaily.com
籽想旅行:http://travelseed.hk
健康蘋台: http://applehealth.com.hk
動物蘋台: http://applepetform.com
#街拍 #攝影師 #喪母之痛 #攝影師 #瑞典
#果籽 #StayHome #WithMe #跟我一樣 #宅在家
![post-title](https://i.ytimg.com/vi/9S52GTEIzhw/hqdefault.jpg)
抽象化程式 在 小戴 Davina Youtube 的精選貼文
#podcast #邏輯思考 #抽象化
抽象思考是邏輯思維不可缺少的東西,但是我們該如何培養抽象思考的能力呢?
數學不好的人,是不是就與抽象能力無緣了?沒有抽象能力,是不是就不用談邏輯思考?
其實每個人多少都有抽象能力,也懂得使用抽象技巧,只是我們能不能更有意識地訓練它而已。
● 探討「如何訓練邏輯思考」這個問題 00:10
● 什麼是抽象化 03:08
● 如何增進抽象能力 08:59
● 使用語言訓練邏輯的問題 14:32
● 與聽眾共創內容 23:50
✒️前往閱讀本篇文字稿 https://moke.tw/talk/podcast-s2ep06/
💰支持小戴的推廣行動 https://moke.tw/donate/
📚 延伸閱讀
《如何訓練自己的邏輯思考力》 https://www.darencademy.com/article/view/id/16110
《不用學程式也能訓練邏輯思維的方法》 https://moke.tw/blog/2018/f398f7810ddd/
《掌握複雜系統的利器 — 抽象化思考》 https://daodu.tech/06-11-2020-manage-complex-system-abstraction
https://button.like.co/yenru606
![post-title](https://i.ytimg.com/vi/BuYK-eStHLI/hqdefault.jpg)
抽象化程式 在 啟點文化 Youtube 的最讚貼文
[ 7/21 開課!]【寫作小學堂】~寫出專屬風格,找回文字悸動
打造一盞自己的聚光燈,建立起專屬於你的品牌印象
課程資訊:https://www.koob.com.tw/contents/3655
【08/10開課!】《人際回應力-看懂情緒,輕鬆對談》~第20期(僅剩"2"位名額)
一個人的命運,是回應力的總和!
課程資訊:http://www.koob.com.tw/contents/157
更多學員心得分享:http://goo.gl/Guc6V6
【線上課程】《人際斷捨離》~
讓你留下怦然心動的關係,活出輕盈自在的人生!
課程連結:https://pse.is/E5MW5
第一講免費試聽:https://youtu.be/YyLvd1cNcDw
【人際維基】桌遊體驗會~讓你一玩就懂別人的在乎~06/16(日)14:00
活動資訊課程:https://www.koob.com.tw/contents/3072
【哈克工作坊】~讓你的存在,成為別人想親近的禮物~06/29(六) & 06/30(日)(僅剩“1”位名額)
課程資訊:https://www.koob.com.tw/contents/3897
【08/10開課!】《人際回應力-看懂情緒,輕鬆對談》~第20期
一個人的命運,是回應力的總和!(僅剩“2”位名額)
課程資訊:http://www.koob.com.tw/contents/157
更多學員心得分享:http://goo.gl/Guc6V6
【線上課程】《時間駕訓班》~
學會提升效率,擺脫瞎忙人生,做自己時間的主人
課程連結:https://pse.is/DDDHB
第一講免費試聽:https://youtu.be/flfm52T6lE8
線上課程【不用開口,就讓你擁有人際好感】
啟動人際溝通的關鍵影響力 https://goo.gl/v3ojdo
桌遊【人際維基】~一玩就懂得別人的在乎:https://goo.gl/Ej4hjQ
到蝦皮購買【人際維基】:https://goo.gl/ASruqR
=============================
以下為本段內容文稿:
不曉得你在生活中,有沒有一種經驗,就是你控制不住自己的腦袋,會一直往負面的方向想去,明明知道這樣想會讓自己心情很不好,可是你就是停不下來。
可能早上在會議裡,老闆多念了你兩句,你就開始擔心自己的飯碗會不保,下一波裁員會輪到你。
或是情人晚一點回家,也沒接到你打去的電話,你就開始焦慮他是不是愛上別人,不愛你了,
更有可能這次聚會你的朋友,表情比較嚴肅,笑容比較少,你就開始自責是不是自己不小心說話錯,讓朋友不開心等等,很多很小的事情,你都可以無限放大。
來,先別自責,你要知道這其實是代表你的腦袋有在進化。
因為我們人類的大腦,有一個地方是比一般動物還要發達的,叫「新皮質區」,因為有了這一塊,我們才有洞察力,可以看見表面事物底下的含義,語言發展,可以跟人溝通互動,閱讀書本,消化反芻成自己的知識等等,使我們擁有智力和反省能力,甚至是想像能力。
但有一得必有一失,在獲得抽象運作的同時,這個新皮質也讓我們學會的擔憂、變得容易絕望、固著。
這裡的固著,就是你的壞習慣為什麼那麼難改掉的原因,他有點像是電腦程式,一定被寫入,就很困難被刪除。
但動物沒有這一塊,所以你會發現一隻羚羊剛剛被一隻獅子追,千鈞一髮,躲過危險後,下一秒他可能就躲在草叢呼呼大睡,可是如果換成是人,恐怕就沒這麼快放鬆,我們可能會拼命抓住另一個人,跟他說:「你知道剛剛有多危險嗎?我被“一群”獅子追,差點死掉ㄟ!」
我們會在腦中重複播放這個可怕的畫面,然後開始擔心下一次如果獅子來怎麼辦?要怎麼逃脫?會不會傷害到我們其他的家人,可能想著想著就失眠了。
演化的需要,讓我們人類比較容易專注在負面想法,而不是正面想法,目的是活下來,而不是活得好。
可是即使我們已經不在草原上生活,生活也相對安全,你知道走在路上不會有獅子跑出來傷害你,你的平均壽命可以高達八十歲,但我們還是控制不住基因裡的本能,很容易鑽牛角尖,自己嚇自己。
這該怎麼辦?難道在等三百年嗎?等大腦在長出另一個「新新皮質區」,來抑制這樣的衝動發生嗎?
當然不是,其實有更簡單的做法。
既然你已經知道這是刻在骨子裡的本能,一昧的壓抑和阻止是無效的,你只會賦予他更大的吸引力,讓壞念頭越長越大。
你唯一能做的就是承認並允許自己這麼想。
蛤!不是不要想,反而要想個夠?
對,你沒聽錯。舉個例子,很多人有分手的經驗,如果有人跟你說,天涯何處無芳草,走,我們去喝酒,喝完你就不會想那個人了,你覺得有用嗎?
答案絕對是沒用了,很可能喝完一個人回家,隔天宿醉沒人照顧,你覺得更孤單,然後哭更慘。
那該怎麼辦?
請你拿一支筆一張紙,用力的把你腦袋中的想法全都寫下來,把那些抽象的、片段的、破碎的記錄下來,變具體的過程,你就在滿足大腦新皮質的需要,讓他覺得你有在做事,保護自己。
因為在創作的過程中,你需要寫字或打字,就彷彿你重新經驗那個可怕場景,但不一樣的是,這一次是你自己主動送入虎口。
不是啦!是你主動啟動事件,所以你可以控制危險的大小,你可以隨時按下暫停,讓自己跳離開,想想下一次可以怎麼逃脫。所謂的體悟或是啟發,其實就是大腦編織的一套行動策略,要你下一次不要重蹈覆徹。
這個效果,我確實在我帶領的寫作課學員身上有見證,有些學員他可能跟家人的關係有些糾纏,但他也說不出來自己卡住的地方是什麼,但透過寫下來,然後放個幾天,他重新發現原來這件事情還可以怎麼想?是對彼此都好的。
或是,有些學員並不知道生命中的某個經驗對他有很大的影響,他只記得某個畫面很重要,於是他花了一點時間,重新回憶,寫下來,啟動了新皮質區的運作,寫著寫著,他就懂了為何他會這麼在乎什麼事情?或是個性變得體貼?或是能言善道,那些都是在好多年前種下的種子。
所以寫作,並不是附庸風雅,只有那些喜歡咬文嚼字的文青才會想做的事情,不,他反而是一個最簡單、容易入手的方法,幫助我們冷靜下來,啟動新皮質區,開始反思、策劃。
如果你覺得自己的想法很容易原地踏步、糾結,或是你希望訓練自己的反思能力,每一次啟動的速度可以快一點,就像好的跑車0-100公里只有三秒鐘,那麼寫作會是一個很好的幫手,訓練你的抽象和邏輯能力,讓你更懂自己,同時也加大對自己想法的掌握度。
所以,希望今天的分享,能夠帶給你一些啓發與幫助,我是嘉玲。
如果你對於啟點文化的商品,或課程有興趣的話,如同今天分享到的「寫作小學堂」課程,下一期是在7月21號開課。是由我和另一名資深的編劇一起開立的課程,不只有教學,還會親自一份份給每個學員寫來的文章,給回饋,因為很量身定做,所以名額非常有限,很期待你能夠把握這難得的機會,期盼在教室能夠見到你。
最後,如果你喜歡我製作的內容,請在影片裡按個喜歡,並且訂閱我們的頻道。別忘了訂閱旁邊的小鈴鐺,按下去;這樣子你就不會錯過,我們所製作的內容。
謝謝你的收聽,我們再會。
![post-title](https://i.ytimg.com/vi/4wT4xTfM8CQ/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLD0aOehq0lrSf-FY_g0KTfopBkMqA)
抽象化程式 在 2_3 抽象化在日常生活的應用| By 運算思維 - Facebook 的推薦與評價
2_3 抽象化 在日常生活的應用. ... 抽象化 (Abstraction). Sep 25, 2017 ... 視覺 化程式 設計_數列加總. Jan 5, 2019 · 5K views. ... <看更多>
抽象化程式 在 我該用類別, 抽象類別還是介面? - Dream Maker 的推薦與評價
這樣的抽象化有賴於封裝、繼承、多型的落實。 封裝可以將概念相同的程式碼放在一起,這些程式碼做同一件事,所以他們代表同一個概念。 同時也 ... ... <看更多>
抽象化程式 在 【thunkable 抽象化與函式】EP1:抽象化(Abstraction) - YouTube 的推薦與評價
【thunkable 抽象化 與函式】EP1: 抽象化 (Abstraction) | 程式 設計的重要觀念. Watch later. Share. Copy link. Info. Shopping. Tap to unmute. ... <看更多>