Total Pageviews

2020/05/09

[閱讀筆記] 真確:扭轉十大直覺偏誤,發現事情比你想的美好 (2/3)

  1. 2016 年,總計 4000 萬個商業航班安全降落在目的地,僅僅 10 個航班遇到致死事故,出事率僅 0.000025%,是航空史上第二安全的年份,但是沒有任何報導價值,所以你不會知道這種新聞。
  2. 有時推動法規進步的不是死亡率,而是恐懼,但在福島與 DTT 的例子,看不見的物質本身沒那麼有害,反而是失控的恐懼造成較大的危害。全球許多地方的環境在惡化,然而就像大地震比腹瀉更吸引媒體報導,可怕的化學污染也比較長登上新聞,不起眼卻更有害的環境惡化現象比較少獲得報導,例如海床死亡或迫切的過度捕撈問題。
  3. 恐懼可以有益,前提是得針對對的事物。恐懼型直覺很容易導致對世界的錯誤認知,我們把注意力放在最害怕卻其實不甚危險的事物上,忽略真正危險的事物。新聞常報導的天災 (0.1%)、空難 (0.001%)、命案 (0.7%)、核外洩 (0%) 與恐攻 (0.05%),沒有一項佔每年總死亡人口的 1% 以上,卻備受媒體關注。不要讓恐懼型直覺,扭曲你對世界的認知。我們該壓下恐懼型直覺,真正檢視各種死因的人數。
  4. 「恐懼」與「危險」是兩件事。可怕的事物令人感覺危險,危險的事物才會真正帶來危害。如果我們把太多注意力放在可怕而非危險的事物上(也就是太過關注恐懼),等於是往錯誤方向白費力氣。大眾關切地震、空難與看不見的化學物質,卻不知道數百萬個兒童正死於腹瀉,海床正論為海底沙漠。我們要把恐懼放在現今的重大威脅上,而不是過往演化本能所關注的事物上。
  5. 如何扭轉「恐懼型直覺偏誤」
方法
說明
❶ 恐懼 vs 現實
世界顯得比實際上更可怕,原因是新聞媒體和你的注意力過濾器把資訊篩選過了,留下恐怖的消息
❷ 風險 = 危險 ✖ 暴露
風險程度不是取決你感覺多害怕,而是關乎兩件事:有多危險?你暴露在多少危險中?
❸ 先冷靜再做決定
你害怕時看見的世界會不一樣。在驚恐消退前,盡量少做決定。


  1. 在最貧窮的地方,你絕對不該追求完美,否則等於竊佔了原本能夠運用得更好的資源。如果我們把太多的注意力擺在眼前看得到的患者,卻沒注意背後更大的數字 (例如,很大部分死亡的患者,並未去醫院),那麼我們可能會把所有資源花在解決一小部分的問題,少就很多條人命。這原則適用於任何資源有限,故須用在刀口的地方
  2. 失真型直覺讓我們把有限的注意力與資源放在個案上,放在特定受害者上,放在眼前的具體事物上。例如第一、第二級國家,需要的不是建造豪華體面的大醫院,而是將金錢投入小學、護理教育與疫苗,例如,讓小孩接種疫苗、有足夠的食物、父母懂得保持環境乾淨、周圍的人懂得洗手、父母看得懂藥罐上的字、助產士都有受過良好訓練等,就能大幅降低孩童死亡率。
  3. 如何避免「失真型直覺」:你但比例認知事物,如果看到某個單獨的數字顯得很驚人(數字很大或很小),不房是著拿來跟相關數字比對或相除,也許會有截然不同的感受。
方法
說明
❶ 比對
巨大的數字總是很驚人。單獨出現的數字會造成誤導,你該審慎看待,永遠要找相關數字互相比對,最好還要某個數字相除
❷ 80 / 20 法則
你是否曾經需要檢視一大堆項目?不妨找少數最大的項目,優先處理,那些往往比其他全部夾起來重要
❸ 除法
數字與比例可能透露天差地別的資訊。比例較有意義,在比較不同大小的群體時尤其是這樣。在比較國家或地區時,特別得看人均比例。


  1. 人總是下意識地自動把事物分類與概括。這不是偏見或高明,而是對頭腦運作實屬必要,讓種種想法有個架構。但是概括型直覺可能會讓我們誤把多個事物、人或國家歸為一類,但他們其實大不同,誤以為幾個特例,就套用在整個分類上。
  2. 透過 dollar street 網站,你也可以認識這個世界的真實面貌 https://www.gapminder.org/dollar-street/matrix
  3. 你應該時時假定自己的分類會誤導,有五個方法可以用來質疑你所偏好的分類,避免「概括型直覺」所犯的錯誤:
方法
說明
❶ 尋找同一個類別裡的相異之處,不同類別裡的相似之處
影響人們生活模式的主要原因,不是他們的宗教、文化或所居住的國家,而是他們的收入。奈及利亞和中國第二級家庭的燒開水的鍋子很像。這是第二級常見的燒水方式,全球都一樣,這跟所得有關。在中國和其他地方,人們也會用許多其他方式燒水,取決於所得等級而非「文化」。

❷ 當心多數
多數只代表超過一半,可以是 51%,也可以是 99%,如果可能的話,把百分比問清楚
❸ 當心特例
  • 當心別把特例當通則
  • 鮮明的例子容易回想,卻可能是特例而非通則
❹ 假定你不是「正常」,而別人不是笨蛋
  • 你的經驗也許不代表「正常」,別把第四級國家的經驗貿然套用在其他國家,尤其你會覺得別人是笨蛋的時候
  • 當某件事情看起來怪怪的,你要抱持好奇與謙虛
❺ 當心從一個群體套用到另一個群體的做法
我們都得努力避免把不可比較的群體概括套用,都得努力找出自身邏輯裡暗藏的不當套用。這類套用甚難發現,但當新證據出現時,我們務必樂於質疑先前的假定,重新恆量,如果確實錯了則勇於承認。


  1. 宿命型直覺,假定在瞭解事物的運作之後,就假定不會再有變動。宣稱自己所屬族群有某個特定的命運是一種很好用的做法,有助於讓大家團結於一個大概永不改變的目標,還激發對其他族群的優越感,這對部落、國家和帝國取得力量非常重要。但是,宿命型直覺會讓我們沒有妥善更新知識,看不見周遭社會的巨大變化。
  2. 如何扭轉宿命型直覺偏誤
方法
說明
❶ 世界在緩慢改變,不是沒有改變
  • 社會與文化始終在變動,即使只是很小的改變,也能慢慢滴水穿石。每年 2% 的經濟成長率,看似緩慢,在 35 年後會翻倍。
  • 別把緩慢改變當成沒有改變,別對每年的微小改變嗤之以鼻 (即使只有 1%的改變)
❷ 樂於更新知識
  • 在數學、物理與藝術等領域,知識不會過期, 2 + 2 永遠等於 4。然而,在社會科學領域,最基本的智就像牛奶和蔬菜無法長期保鮮,一切都會變。
  • 對於新知識應該抱持開放態度,樂於更新腦中的知識。
❸ 跟爺爺聊聊
  • 若你很想宣稱價值觀不會改變,是看看把你的價值觀跟父母、祖父母做比較,你就會看到巨大的改變
❹ 搜集文化改變的例子
  • 質疑今天的文化不會跟昨天相同,也不會跟明天一樣


  1. 常見的單一觀點直覺:
  2. 你最好時常檢驗你所喜愛的概念是否有漏洞,對自身侷限保持虛心,對不符想像的知識抱持好奇,對其他領域的知識抱持好奇,別只跟同意你的人講話,別只看符合認知的例子,而是接觸不同意你的人,接觸反駁你的人,把不同見解當成有助理解世界的寶貴資源。如此一來,你才能改善單一觀點直覺謬誤。
  3. 西方有句諺語:「給孩子一個槌子,什麼都像釘子。」猶如你有寶貴的專業,你會想好好拿來使用。有時專家會四處設法讓得來不易的知識與技能有用武之地,連其實派不上用場的地方都想插手。數學高手老是對數字念念不忘,關注氣候變遷的社運人士到處大談太陽能,醫師在日常預防較佳的情況下人提倡事後治療。專業知識可能反倒讓專家看不清何者真正有效。所有解方都能解決某些問題,卻無法解決一切問題。最好是能從各式各樣的角度觀看世界
  4. 如何檢驗單一觀點直覺偏誤
方法
說明
❶ 檢驗你的想法
  • 別只看支持自身觀點的正面佐證,而是請不同意你的人檢驗你的想法,並找出漏洞。
❷ 專業侷限
  • 別對專業以外的領域撈過界,對不同的事物要虛心。此外,別人的專業有局限,你同樣也是。
❸ 槌子與釘子
  • 如果你擅長使用某個工具,你會太常想去用它。沒有哪個工具處處適用,如果你喜愛的點子是槌子,記得找其他有螺絲起子、扳手和捲尺的同事,對其他領域的想法保持開放態度
❹ 看數據,但別「只」看數據
  • 不靠數據不能了解世界,單靠數據同樣不能了解世界,要看到數字背後的真實世界
❺ 當心簡單的想法與解法
  • 你要歡迎複雜的思考,對照不同的想法,尋找折衷,是情況決定怎樣解決問題。


  1. 怪罪型直覺是替某件壞事找出一個簡單清楚的元兇。在出狀況時,我們似乎很自然會認為是某個可惡的傢伙做的。我們愛認為是出必有因,是某個有權有勢的惡人在搞鬼,否則世界會無從預料,令人困惑與膽寒。但是這種過於簡單的指控與怪罪,只會讓你無法看出複雜的真相,無法解決問題,防止壞事重演。好事同樣會觸發這個直覺。當好事發生,我們會很快歸功於某個人或某個原因,雖然事情通常更為複雜,成功絕非靠非單一個人或因素
  2. 我們的媒體也許自由、也許專業、也許追求真相,但是獨立報導不代表能呈現真相,即使每篇報導本身完全真實,我們仍可能因記者對報導的選擇而產生錯誤認知。媒體不是不中立、無法中立,我們也不該期待媒體中立。記者與你我一樣,是有著誇大直覺的人類,他們若產出無法吸引消費者注意就得回家吃自己
  3. 要求媒體改變報導方式根本不切實際,也不公平。我們不能期待媒體反映現實。你不該期待媒體給你一個基於現實的世界觀,就像你不會拿幾張柏林的街景就當成有了導航系統

2020/05/08

[閱讀筆記] 真確:扭轉十大直覺偏誤,發現事情比你想的美好 (1/3)

  1. 如果政治人物與政府高層對世界抱持錯誤認知,豈有辦法妥善解決問題?如果公司主管完全搞錯狀況,如何替公司作出合理決定?一般人又如何知道自己平時該關切哪些議題?
  2. 社會大眾並非「缺乏知識」,而是出於「錯誤的知識」,問題其實在於「翻新認知」。大部分人的知識往往是過時數十年的知識,大家對於世界的認知來自老師,而老師的知識是建立於他們在學校讀書那時候。
  3. 與其區分窮人與富人、開發中國家與已開發國家,你反倒應該用這四個所得等級來看世界
  1. 任何對資訊的簡化,都可能造成誤導,以平均值為例,其問題在於只提一個數字,卻未反映整個範圍。上圖會讓我們以為,男性與女性的平均分數,男性優於女性。下圖可以發現,其實男性與女性的數學分數大多重疊,多數女性都有另一個男性跟他考出相同的分數;美國人與墨西哥人收入同樣有所重疊,雖然只有一小部分。
  2. 如果我們能探討更深入一點,不要只看平均數,而是檢視分布狀況,不把群體綁在一起,而是檢視所有個體,那麼我們幾乎都能獲得更準確的認知,發覺乍看迥異的群體其實多所重疊
  3. 為了扭轉窮人與富人、開發中國家與已開發國家,這種二分法直覺偏誤,你要尋找多數是落在哪裡。懂得察覺我們遇到一些將事情區分成兩類的說法,中間隔著一條鴻溝。但真實世界往往不是斷然二分,多數人通常落在中間,鴻溝並不存在
  4. 如何避免二分法直覺偏誤
注意事項
說明
留意對平均值的比較
如果你能檢視分布狀況,大概會發現群體間有所重疊,鴻溝並不存在。
留意對極端值的比較
無論任何國家或群體,總有上層與下層,有時涉及高度不公,但即使如此,多數通常仍然是落在中間。
留意自己的上層眼光
由上層俯瞰的目光不準確,底下其他東西看起來都一樣矮,但其實不然。


  1. 我們很容易留意到世上種種糟糕壞事,卻不容易留意到好事,千千萬萬個進步從未獲報導。許多改變世界的事物,只是進展得太緩慢、太分散、太各自顯得微小,所以無法登上新聞,吸引你的目光。
  2. 赤貧人口的比例,僅僅 20 年前,全球 29% 的人類處於赤貧,現在降為 9%。幾乎人人脫離的地獄,人類苦難的根源將不復在。但是在所得第四級的社會,我們打開電視看到的是水深火熱,世人過著赤貧的生活。但實際上,數十億人已經脫離不幸,成為全球市場的消費者與生產者,從第一級往上爬到第二、第三級,只是第四級的人們一無所知。
  3. 你覺得世界越來越糟嗎?以下是 16 間日益減少的壞事。你很難憑往窗外一望,看見全球的這些改變。改變是在地平線外的遠方,如果你小心留意,仍能發現蛛絲馬跡。
  4. 提高所得的目的不只是金山銀山,延長壽命的目的不只是擁有更多時間,終極目的其實是有自由去做想做的事情
  5. 媒體越來越自由,科技日新月異,結果我們接收到更多災害的新聞,超乎過往時代。數世紀前,歐洲人在美洲大陸屠殺印地安人,消息卻沒在舊大陸傳播;當中國中央政府的政策導致偏鄉爆發大規模飢荒與千萬人餓死,歐洲的年輕人還舉著共產主義的小紅旗,對慘劇毫不知情。儘管大趨勢是世界在變好,社運人士與遊說團體很懂得怎麼把一點風吹草動渲染成世界末日。
  6. 如何扭轉負面型直覺偏誤
方法
說明
既是糟糕,也在變好
  • 練習區分狀態(例如糟糕)與改變的趨勢(例如變好),明白事情可已既是糟糕也在變好
預期壞消息會被渲染
  • 好消息絕少會被報導;逐漸進步無法成為新聞
  • 壞新聞多,有時只代表各界對壞事的監控度有所提升,不代表世界正在變糟
  • 負面消息比中性或正面消息更引人注目,在一個透明公開且資訊暢通的世界,災害消息比過往更容易散播。
別美化過去
  • 沈浸在美化的過去,會讓我們看不清事實。


  1. 「拯救窮口小孩只會讓人口繼續增加」,這個說法乍聽正確,其實說反了。脫貧進展越慢只會導致人口繼續增加。一個世代處於赤貧,就會生下更龐大的下一個世代 (因為預期嬰兒死亡率高,要多生一點)。目前唯一經證實可以有效抑制人口增加的方法就是消除赤貧,給民眾更好的生活,包括提供教育與避孕用品。在全球各地,只要改善生活、提升醫療水準、降低嬰兒死亡率,父母就會選擇生下更少小孩,追求更好的生活品質、提供小孩更多教育機會
  2. 想要扭轉直線型直覺偏誤,你就要明白,一條線有各種走向,任何兩點連起來都像直線,但是只要有第三點,我們就能分辨線的走向
線的走向
例子
直線
隨著生活水準改善,受教育時間會越長、結婚年齡越晚、在娛樂的花費就會越多
S 型
識字率到第三、第四級就會趨緩
溜滑梯型
隨著生活改善,每名婦女生下的小孩數就會逐漸減少
駝峰型
如蛀牙率,在第一級的小孩滿口爛牙,在第三級的表現最好,第四級因為可支配金額提高,會吃很多甜食,反而蛀牙率提升
倍增型曲線
隨著生活改善,每人每年的平均交通里程數就會倍增


  1. 冷靜思考一向不容易,在害怕時更是難如登天。當大腦滿是恐懼時,容不下對實情的判斷。
  2. 人腦有個注意力過濾器,注意力過濾器能保護我們,少了它,我們會不斷受及多資訊疲勞轟炸,陷入過載與麻痺。過濾器有數十個直覺小洞:鴻溝型、負面型和直線型等。多數資訊無法通過,但迎合誇大直覺的資訊能通過,所以我們就會把注意力放在這類資訊,忽略其他資訊。也因為如此,對於報章媒體來說,平凡日常不值得說 (ex. 瘧疾病例持續逐漸減少),稀有事物才值得報導,而種種稀有事件的報導成為腦中對世界的印象。如果我們不格外小心,往往會把反成當成平常,以為世界就是這樣。由於人腦偏好誇大刺激的直覺,媒體就得靠聳動新聞標題吸引注意力,所以我們一再接收到過度誇大的世界觀。綜觀各種直覺,大概就屬恐懼型直覺最影響到媒體對新聞題材的選擇。
  3. 災難新聞空前常見,偏偏現在的世界空前安全,這兩者互相矛盾。恐懼曾有助於我們保住性命 (尤其是生活在第一級、第二級的人類),現在卻是替記者保住飯碗。這不是記者的錯,我們也不該期待他們改變。與其說這現象是源於新聞記者的「媒體邏輯」,不如果是源自於消費者腦中的「注意力邏輯」。如果我們看見聳動的新聞標題後的實情,自然就會明白恐懼型直覺是如何處處扭曲對世界的認知。
  4. 宏觀視野與大趨勢得等到危機結束,屆時我們務必敢於重建一個基於事實的認知,不要被恐懼型直覺牽著鼻子走。冷靜下來,比對數據,確保日後能善用資源、有效救災。這才是當務之急,不該受恐懼掩蓋。例如 2015 年的尼泊爾大地震,歸功於成功的國際合作,如今我們害怕的災害其實通常沒這麼有害。 2015 年的尼泊爾大地震後,全球有 10 天左右都在觀看災情畫面,關切這場奪走 9000 條人命的悲劇;然而,在同樣在這 10 天中,飲水污染導致的腹瀉,卻也在全球悄悄奪走 9000 個孩童的性命,他們沒有媒體報導、沒有直升機幫忙、需要的只是幾條塑膠水管、幫浦、肥皂與基礎排水系統,遠比直升機便宜。

2020/05/07

[Java] [SonarLint] Remove this hard-coded path-delimiter

Problem
After I run SonarLint check, it complain the following code has problem (Remove this hard-coded path-delimiter):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
    try (Writer file
            = new java.io.FileWriter(new File(testDir.toAbsolutePath() + "\\" + ftlFileName + ".java"));) {
        Template template = cfg.getTemplate("testcase.ftl");
    
        Map<String, Object> data = new HashMap<>();
        data.put("ftlFileName", ftlFileName);
    
        template.process(data, file);
    } catch (IOException | TemplateException e) {
        throw new FtlFileException("fail to generate file from ftl file : " + e.getMessage(), e);
    }


How-To
Using File.separator instead of hard code

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
    try (Writer file
            = new java.io.FileWriter(new File(testDir.toAbsolutePath() + File.separator + ftlFileName + ".java"));) {
        Template template = cfg.getTemplate("testcase.ftl");
    
        Map<String, Object> data = new HashMap<>();
        data.put("ftlFileName", ftlFileName);
    
        template.process(data, file);
    } catch (IOException | TemplateException e) {
        throw new FtlFileException("fail to generate file from ftl file : " + e.getMessage(), e);
    }


2020/05/06

[Apache Freemarker] How to load freemarker template

Scenario 1: Set freemarker template from classpath


code snippet:
    // Set freemarker template from classpath
    Configuration cfg = new Configuration();
    cfg.setClassForTemplateLoading(this.getClass(), "/");


Scenario 2: Set freemarker template from directory


code snippet:
    // Set freemarker template from directory
    Configuration cfg = new Configuration();
    File ftlDir = new File("deliverable/ftl/");
    cfg.setDirectoryForTemplateLoading(ftlDir);