Total Pageviews

2018/11/08

[Java] Using Java's Future and ExecutorService

Before

After

Example.
An enumeration class to store each product's price:
package test.albert.multithread;

import lombok.AllArgsConstructor;
import lombok.Getter;

@AllArgsConstructor
@Getter
public enum ProductEnum {
    P01("iPhone X  64G", 35900), 
    P02("iPhone X  256G", 41500), 
    P03("iPhone 8  64G", 25500), 
    P04("iPhone 8  256G", 30900), 
    P05("iPhone 8+ 64G", 28900), 
    P06("iPhone 8+ 256G", 34500);

    private String productName;
    private Integer amount;
}


An receipt class to store calculation result:

package test.albert.multithread;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Receipt {

    private String invoiceId;
    private ProductEnum product;
    private Integer unit;
    private Integer amount;
    private String recipient;

}


Callable is an interface that stands for a task that returns a result after some computations. This CalculationTask class contains our business logic, and every time a task starts, the call() method is executed.
package test.albert.multithread;

import java.util.UUID;
import java.util.concurrent.Callable;

public class CalculationTask implements Callable<Receipt> {

    private ProductEnum product;
    private Integer unit;
    private String recipient;

    public CalculationTask(ProductEnum product, Integer unit, String recipient) {
        this.product = product;
        this.unit = unit;
        this.recipient = recipient;
    }

    @Override
    public Receipt call() throws Exception {
        String invoiceId = UUID.randomUUID().toString();
        Integer amount = product.getAmount() * unit;
        
        return new Receipt(invoiceId, product, unit, amount, recipient);
    }

}


This is the CalculationTaskClient where we create an Executor service with a fixed number of threads. A separate task is created for every element in a list and is submitted it to the executor. Then, we get the result of computation with the help of the returned Future object in order to operate with it as we need it.
package test.albert.multithread;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class CalculationTaskClient {

    private static final Integer THREADS_COUNT = 5;
    private static List<Order> orders = createDummyData();

    public static void main(String[] args) throws Exception {
        // Used to store calculation result.
        List<Receipt> receipts = new ArrayList<Receipt>();

        // Creates a thread pool that reuses a fixed number of threads operating off a
        // shared unbounded queue.
        ExecutorService executor = Executors.newFixedThreadPool(THREADS_COUNT);

        // Creates multiple callable tasks
        List<Callable<Receipt>> callables = new ArrayList<>();
        for (Order order : orders) {
            Callable<Receipt> task = new CalculationTask(order.getProduct(), order.getQuantity(), order.getBuyer());
            callables.add(task);
        }

        try {
            // Executes the given tasks, returning a list of Futures holding their status
            // and results when all complete.
            List<Future<Receipt>> results = executor.invokeAll(callables);
            
            // Get execution result.
            for (Future<Receipt> result : results) {
                receipts.add(result.get());
            }
        } catch (InterruptedException | ExecutionException e) {
            throw e;
        }

        executor.shutdown();

        receipts.forEach(r -> log.debug(r.toString()));
    }

    private static List<Order> createDummyData() {
        Order o1 = new Order(ProductEnum.P01, 2, "三澄美琴");
        Order o2 = new Order(ProductEnum.P02, 1, "中堂系");
        Order o3 = new Order(ProductEnum.P03, 1, "久部六郎");
        Order o4 = new Order(ProductEnum.P04, 4, "東海林夕子 ");
        Order o5 = new Order(ProductEnum.P05, 3, "三澄夏代");
        Order o6 = new Order(ProductEnum.P06, 10, "神倉保夫");
        Order o7 = new Order(ProductEnum.P01, 1, "糀谷夕希子");

        return Arrays.asList(o1, o2, o3, o4, o5, o6, o7);
    }

    @AllArgsConstructor
    @Data
    private static class Order {
        private ProductEnum product;
        private Integer quantity;
        private String buyer;
    }

}

2018/11/07

[Neo4j] Example for using unwind and shortestPath in Cypher

Scenario
以下是 Neo4j graph database 中的資料,假設我想:
(1) 找出某段時間,看診次數超過 3 次的 patients
(2) 找出 patients 間,關係長度為 2 的 patients


How-To
// 找出某段時間,看診次數超過 3 次的 patients
match (pat:Patient)-[r:VISIT]->(doc:Doctor)
where r.date >= "20180401" and r.date <= "20180430"
with pat, count(r.date) as count
where count >= 3

// 將 patient collection UNWIND 成一筆一筆資料
with collect(pat) as ps
unwind ps as p1
unwind ps as p2

// 找出 patients 間,關係長度為 2 的 patients
match  p = shortestPath((p1)-[*]-(p2))
where p1.name <> p2.name
with p1.name as patient1, p2.name as patient2, length(p) as length
where length = 2
return patient1, patient2, length


2018/11/06

[閱讀筆記] Value Investing: From Graham to Buffett and Beyond (2/7)


  1. Value of assets 的主要目的是透過公司資產的鑑價來看其資產價值與股票價格之間的落差,這之間的落差就是買賣的機會
  2. 存貨的入帳價值:主要有購貨價格、購貨費用、稅金等,其發出存貨的價值由以下方法確定:
先進先出法
(FIFO)
就是當發生銷貨,結轉銷貨成本時,採用的存貨成本順序。以先進先出為原則,亦即愈早買入存貨的愈先結轉。
後進先出法
(FILO)
以較晚買入的(最近期買入)的存貨成本先結轉。
加權平均法
一般是用在永續盤存制,每次進價及數量可能都不相同, 因此在每次進貨後都要重新計算帳上存貨的單位平均成本。
移動加權平均法
每一期期末 (例如月底或年底) 才計算進貨的成本及數量多少, 再來計算當期每單位存貨平均成本,以該單位成本計算銷貨成本等數字。 一般是定期盤存制下使用。
個別計價法
是以每次()收入存貨的實際成本作為計算各該次()發出存貨成本的依據。即:每次()存貨發出成本=該次()存貨發出數量X該次()存貨實際收入的單位成本除上述計價法外,還有計劃成本法、毛利率法、售價金額核演算法等,但前五種方法屬於企業按實際成本計價的存貨發出的計價方法。存貨期末計價通常是以實際成本確定。但是.除了這種方法外.還有一較為廣泛的方法——成本(實際成本)與可變現凈值兩者之中較低者計價的方法。

  1. 在通貨膨脹環境中,採用先進先出法,主營成本中的原材料成本是較早時間採購的價格較低的原材料,如果公司產品價格也因通脹因素上漲,就會推高公司利潤。相反,如果採用後進先出法,損益表中的成本和毛利就更為真實,公司利潤不會因通脹因素出現虛增。目前大多數公司都採取先進先出法,而且一般不會頻繁改變存貨會計政策。如果一旦改變,通常會令當期業績出現較大變動,這也是公司管理層操縱業績的手段之一,對此投資者需要有所辨別。在缺乏遊戲規則的情形下,企業將有機會利用高低存貨成本的結轉,輕易地操縱企業的獲利數字,導致財務報表無法真實表達企業的經營狀況,所以會計上針對存貨成本的運用有一定的規範。
  2. Goodwill (商譽)一詞也算是會計中最彆扭的了。在大部份上市公司的資產負責表你會見到這個項目。你懂會計的話,你會知道這一個字便暴露了會計這個系統的其中一個重大漏洞。收購另一間公司都有溢價,因為如果被收購公司只值其資產總和,那收購方不如在市場分開買那些資產,不用麻煩。所以公司一經歷收購,便會有一定的Goodwill 千秋萬世永留在資產負債表上。有很多國際級企業的Goodwill 可達總資產的20%不等,那是因為它真的很有「商譽」﹗如迪士尼、微軟級數的公司,它真的有很多無形資產是用Goodwill 去涵蓋的,它的賺錢能力遠比它的有形資產所代表的多。如果你買起迪士尼的所有有形資產,不代表你可以有迪士尼的賺錢能力。因為你買不到它的企業文化、它的員工、它的創意和最重要迪士尼這個品牌。 真正要小心的,是名不經傳的小上市公司,有著佔資產50%Goodwill。記著Goodwill是空氣,這些公司碰也不能碰
  3. EBITDA (Earnings before Interest, Taxes, Depreciation, and Amortization) 是從1980年代的槓桿收購 (LBO) 熱潮期間開始廣為人知,當時它主要用來評估企業的償債能力。雖然名稱看起來很複雜,用簡單一點的話來說就是不包含"稅、利息、折舊&攤銷費用"的盈餘。後來,這項指標在某些資本密集型產業很流行,這些業者擁有昂貴的固定資產,必須分多年攤提折舊費用。目前,許多企業都會公布EBITDA,科技業尤其喜歡強調這項指標,雖然EBITDA對分析這些公司的表現,未必有多大的意義。許多人誤以為 EBITDA 代表公司的現金盈利,但其實這項指標雖然能反映公司的盈利能力,但並不是評估公司現金流的好指標。EBITDA 並末考慮公司維持營運資金與汰換老舊設備的現金需求,這兩者都可能不容小覷。EBITDA 往往成了企業美化盈利表現的會計花招,投資人不應該只看這項數據,應綜合分析公司的績效指標,發掘可能遭 EBITDA 掩蓋的真相
  4. 當你所提供的商品或服務,進入門檻低,大家都可以模仿與生產,消費者也難以辨識不同廠牌的商品或服務時,就會陷入價格競爭,企業的利潤就會下滑,earning power 就會降低,因為消費者只會選擇便宜的商品或服務。為了避免陷入此種命運,你只能與其他競爭對手差異化 (differentiate) 你的商品或服務
  5. 若你的產品或服務陷入紅海競爭,你會發現,銷售量減少了,但是固定成本 (fixed costs) 並未下降 (如產品發展、包裝設計與廣告費用等),有時候甚至為了強打廣告反而增加更多的成本,導致淨利率(profit margin) 下滑
  6. 光看盈利數字,難以看出公司的盈利能力,因為盈利增長,不代表公司的淨利率 (profit margin) 也一定上升。例如,當公司的成本上升速度快過營收時,淨利率會下滑,意味著公司或許應加強控制成本。舉例來說,某公司上年度營收1億元,淨利1000萬元,淨利率即為10%(1000/1億元)。若本年度營收及淨利分別增至2億元與1500萬元,則其淨利率已跌至7.5%。公司盈利雖大幅成長,但代價是淨利率下滑。
  7. 維持 earning power 的主要來源
        9.1.     特許經營權 (franchises)
        9.2.     進入障礙 (barriers to entry)
        9.3.     現有的競爭優勢 (incumbent competitive advantages)
  1. 取得特許經營權 (franchises) 優勢,最簡單的方式是取得政府的授權 (license),也就是經營執照,例如有線電視、廣播、電視、電力設施等,沒有取得經營執照的廠商是無法進入此市場
  2. 若能夠在生產產品的流程擁有優於當前市場的成本優勢 (cost advantages) ,且讓潛在進入者無法跟上,就能杜絕潛在的競爭者進入你現在擁有的市場
  3. 轉換成本 (switching costs) 也是常見的、有力的綁住客戶的競爭優勢,如軟體產業的 Microsoft,當大部分的使用者都已經熟悉 Microsoft 的軟體使用,很少使用者願意投入額外的學習成本來嘗試替代品。同樣的道理也發生在律師、銀行、提供醫療服務的醫療院所等,這些人已經熟悉現有的系統、醫療保險計畫與藥物等,若要醫生開新的治療藥物,他就必須學習新的療法的成效與潛在的風險
  4. 為了要綁住客戶,企業常用的手段有:
提高轉換成本
(raising switching costs)
在現有的產品與服務不斷增加新的功能、特色與服務,Microsoft 就是採用此種策略
強化使用者習慣
(reinforcing habits)
提昇消費者購買頻率,建立起定期消費的習慣
提高搜尋成本
(raising searching costs)
增加與複雜化所提供的服務範圍,強化現有客戶滿意度

  1. 對於市場新的進入者來說,則是要做與上述相反的手段,將搜尋與轉換成本最小化。例如信用卡公司提供轉換者 (switcher) 預先核定的信用額度 (credit balances),並提供獎勵給轉換者;又如電信公司提供快速 NP 的服務,並給予購機折扣
  2. 對於那些基於規模經濟 (economies of scale) 所建立起競爭優勢的公司,其首要之務是保護市佔率 (market share),因為規模經濟的優勢就是擁有較低的平均成本,賺得較佳的營收。一旦市佔率開始被侵蝕,基於規模經濟所建立起的成本優勢 (cost advantages) 就會開始萎縮。
  3. 特許經營權 (franchises) 只存在於擁有進入障礙 (barriers to entry) 的企業,將潛在的競爭者隔絕在外,或者是一旦有新的進入者,確保他們的產品或服務處於競爭劣勢 (competitive disadvantage)
  4. 好的管理的確是一個優勢,但是若沒有建立起實質的競爭優勢,企業是無法永續經營的
  5. 實質的競爭優勢包含:
      18.1.     獨家的政府授權
      18.2.     消費者偏好 (需求面)
      18.3.     基於長久的專利保護或其他持久的優異性所取得的成本優勢 (供給面)
      18.4.     由於領先的市佔率與消費者偏好所組成的規模經濟
  1. 品牌價值 (brand value) 或許是察覺產品價值的一個重要元素,但是品牌價值無法建立進入障礙 (barriers to entry) 或競爭優勢。只有提高轉換成本 (raising switching costs)、強化使用者習慣 (reinforcing habits) 與提高搜尋成本 (raising searching costs) 才能綁住顧客
  2. 品牌價值要靠規模經濟來強化。僅在每台個人電腦貼上 Intel Inside 貼紙是無法建立起強大的品牌,還需要伴隨著在晶片設計與生產擁有強大的規模經濟
  3. 資本成本 (Cost of Capital),是企業進行財務決策時的重要的指標。開設公司若錢不夠,就需要對外借錢,如銀行、股東等等。當企業借錢的時候,需要付出一定的代價,主要有兩方面:其一是「籌資費用」,也就是銀行手續費、股票債券發行費、律師費、廣告費、審計費等等。另一方面就是「占用成本」,也就是付給股東的股利、股息,還有給債權人的利息等等。 
  4. 對於企業來說,希望資本成本  (cost of capital) 越低越好,用最小的代價,借到最多的錢。在企業決定借錢的時候,往往會面臨許多選擇,在單次籌集資金數量等同的前提下,多半會選擇資本成本較低的籌資方式。資本成本越低,就越接近企業價值最大化的經營目標。
  5. 資本成本 (cost of capital) 的高低取決於市場對這個公司的風險預期。風險越高,投資者要求的回報率越高,公司的資本成本也就越高。因此,資本成本也可以定義為投資者所要求的最低收益率。也可以說,資本成本對投資者而言,是一種使用經濟資源的機會成本。如果投資回報率低於資本成本,也就是風險預期,就不該進行投資
  6. 就稅前的角度來看,負債的資金成本其實就是利息,所以如果以百分比表達的話,應該就是利率。 但是, 股東關心的是公司的稅後現金流量,所以資金成本應該採用稅後的資金成本的觀念。資金成本就要依公司稅率調整。
  7. 利息是一種費用,可以抵稅,所以等於是政府幫忙負擔公司利息費用的一部份。所以,公司的實際負擔利率較低,因此,負債資金成本就是 : 利率×(1-稅率) 。至於股息,不管是普通股或特別股股息都是稅後盈餘的分配,無法抵稅,所以權益資金成本無法像利息一般乘上(1-稅率)

2018/11/05

[閱讀筆記] Antifragile: Things That Gain from Disorder (6/10)

  1. Barbell strategy 對於風險採取兩面的態度,一是在某些領域採取保守、安全的作法 (robust to negative Black Swans),另一是在某些領域冒一些小風險 (open to positive Black Swans),藉此達到 antifragile。Barbell strategy 只是調適不確定性,而非消滅不確定性
  2. 遇到風險很高的事情,我寧可不要飛機上所有的工作人員都「審慎樂觀」,或者表現處於中段的某種態度,而希望他們極為樂觀,駕駛員則非常悲觀,甚至偏執更好。
  3. 人總是需要一些傷害與壓力因子作為刺激的工具,讓人產生過度補償 (overcompensation) 。例如讓小孩自行玩耍,若摸到滾燙的茶壺就會因此受傷,但之後就知道滾燙的茶壺不可接近,這也是為了小孩未來的安全著想。但是,這類的嘗試僅限小傷害,你應該避免小孩發生大意外。這與社福制度很像,忽略小風險,將所有資金投注於保護避免受到重大風險的危害
  4. 不需要透過市場調查訪談來詢問別人想要什麼,跟著自己的想像力走。Steve Jobs 曾說過:人們不知道自己想要什麼,直到你提供給他們
  5. 假如某件事物遇到變動時,好處大於壞處,就是具有反脆弱性質。選擇權(Optionality)有這種特性。生活中有許多類似選擇權的東西。損失的代價很低,但可能獲利很高。人要懂得把握。譬如試誤 (Trial and Error) 的做法,就是選擇權。錯了,你沒什麼太大的損失。對了,那是大大有用。人不要怕錯,應多多嘗試。
  6. 不確定性永遠存在,建立正確的生活方式,是為了盡可能把握好事發生;然後在壞事發生的時候,把傷害減到最低
  7. 人生中到處都有這種損失有限,但收穫無限的契機 (a limited loss and large possible outcome);但是一般人很容易忽略這種事。例如出社會後繼續學習:出社會以後要繼續學習並不簡單,但是追根究柢,學習需要花費的時間與金錢都是可知可控制的,但帶來的樂趣與新能力,卻可以是無限。
  8. 如果你「有可選擇性」,就不是很需要一般說的智慧、知識、洞見、技能,以及我們的腦細胞中發生的那些複雜事情。因為你不必常做對。你只需要有智慧,不要做出不聰明的事而傷害自己(也就是某些無做為),並在有利的結果出現時,察覺它們的存在就行了(箇中關鍵是你不需要事先評估,等結果出來再評估)
  9. 即使在子宮內,大自然也知道如何選擇;大約半數的胚胎會自發性流產,這件事比起依照藍圖設計完美的嬰兒,做起來還要容易。大自然只做一件簡單的事,就是留住符合標準的事物,或執行加州式的「要失敗就快」(fail fast) -它有選擇權,而且真的去使用。大自然遠比人類更了解可選擇性
  10. 選擇權 (option) = 不對稱性 (asymmetry) + 理性 (rationality)。理性的部份在於去蕪存菁,知道如何獲取利潤。 如同前面的例子,大自然懂得如何過濾、留下好的胚胎,淘汰壞的胚胎。反脆弱和脆弱差別就在這裡。脆弱 (壞的胚胎) 沒選擇權,但反脆弱需要選擇最好的,最好的選擇權。 反脆弱性 = 得多於失 = 上檔利益多於下檔損失 = (有利的)不對稱性 = 喜歡波動性
  11. 常識和有組織的教育不是同一回事。文憑頂多是種智力證明文件,但不代表是智慧。
  12. 若你在家裡找不到錢包,在 trial and error 模式下,你不會一個地方重複找了兩次、三次。每次的嘗試與失敗都會提供額外資訊給你 ( 如哪種方法無效或哪個地方找過了皮包不在那邊)。每一次的嘗試與失敗都會讓你更接近標的,也會讓你更清楚下一步要怎麼走
  13. 熊彼德的「創造性毀滅」或「創新性破壞」理論 (creative destruction),簡單說就是創新與毀滅是同源的,當一個創新商品的產生,也代表著毀滅一項舊的商品或產業,相同的,當一個創新出現後,也注定有一天會被後來的創新所毀滅」
  14. 確認偏誤(Confirmation bias) 是心理學上的一種現象,簡單的說,就是人們都會傾向於尋找能支持自己理論或假設的證據,而對於不能支持自己理論或假設的證據,則會被忽略。因為這種選擇性的注意、收集信息,同時按照支持自己想法的角度解讀獲取的信息,會不斷使人強化自己理論或假設,從而產生的認知偏誤 。這種選擇性的擷取資訊的現象,幾乎在每個人身上都看得到,但能意識到的人卻很稀少,更不要說能去盡力避免了。
  15. 貪婪與疏忽是人類的本性,這兩個是人類常犯的問題與錯誤,一點也不是新聞,也不容易被治癒,這都是人性的一部分,因此把問題怪罪到貪婪與疏忽,其實沒有意義,因為也無法根治。例如,疏忽並不是造成黑手黨成員死亡的原因,製造敵人才是死亡的成因,解決之道是廣交朋友而非樹立敵人
  16. 財富來自於實作的膽識與學識,而學識不是學歷或學校包裝的課程,而是來自於自己對世界樣貌的體悟與獨立思考
  17. 隨機偏差(randomness bias): 人們常自以為看到兩個事件之間的關聯,事實上這兩者並不存在的相同點。其實有些問題的發生是隨機(randomness)發生,沒有任何相互關聯。例如,不是教育能夠帶來國家財富與經濟成長;而是國家因為經濟成長 (經濟得力於天然礦產或人民勤奮工作) 而 (行有餘力) 重視教育。教育其實和國家的生產力關係不大,教育頂多讓民知書達禮、有禮貌
  18. 直升機父母(helicopter parent)是指過份介入兒女生活,保護或是干預其生活的父母,因為類似直升機一樣的盤旋在兒女身邊,故稱為直升機父母。直升機父母不是不好的父母,也不是有偏差價值觀的可憐父母,直升機父母不一定是荒謬的、不快樂的、充滿控制欲的父母。直升機父母可能是出於好意,只是因為父母本能性的懼怕,導致好意走錯了方向。也有人將《虎媽戰歌》中提到的華人教養方式和西方的直升機父母比較。Nancy Gibbs在《時代雜誌》中認為這二種都是「極端的教養方式」,並且列出了二者的不同點。Gibbs認為虎媽是著重在特定領域(如音樂或數學)上的成功,而直升機父母是「懼伯失敗,因此不惜一切代價的避免失敗」。另一個不同點是虎媽強調努力,對兒女的態度是極端、權威和獨裁的,而直升機父母是「妥善安放他們的孩子,渴望和他們建立友誼」
  19. 「月暈效應(Hallo Effect)」與「尖角效應(Horns Effect)」,在觀賞月圓時,你所注目的不僅僅只有月亮大小,還包括了周遭的暈輪景象,亦即當一個人的表現不錯時,眾人多會加諸好的評價於該人身上,就像是資優生「一定」很用功,或是好學生「一定」不會抽煙,而壞學生「必然」調皮搗蛋一般;月暈指的是心理學中「好的以偏概全」,尖角則指的是「壞印象的加深」。
  20. 綠色木材謬誤 (green lumber fallacy):一個做綠色木材生意頗為成功的木材專家,竟然不知道綠色木材是指剛砍下的木材 (因為還沒乾),一直以為是漆成綠色的木材。不需要懂得太多植物學知識也可以從木材生意中掙到錢,而植物學家的知識在木材生意中其實作用並不大。有很多我們認為重要的學問可能並不重要,甚至無用,這就是理論的脆弱。
  21. 國外退役的運動員、退休的體育名人或希望賺取外快的體育記者會在報紙、網絡上開設情報專欄,充當博彩分析專家或預測專業人士。投注者們看到這些內容的時候,應當警醒的是足球和博彩、記者與博彩、解說員與博彩……完完全全是相互獨立的領域 (domain independence),他們的觀點需要謹慎採納,不可盲從。你該注意的是
    1. 如某人具有體育運動的豐富知識或經驗,這並不意味著他們也擁有在體育博彩中成功所需要的知識;
    2. 專家、記者、解說員們通常是在比賽結束後才繪聲繪色的描述某支球隊狀態不佳,或者發表他們在賽前就預料到的馬後炮;
    3. 投注前,你應該問一下自己,你認為了解足球運動就意味著可以有信心從足球投注中獲利嗎?
  22. 教小鳥飛翔:我們以為學術與實踐的關系是這樣,學術—應用科學和技術—實踐。其實在大多數領域中這就像教小鳥飛翔,實際情況正好相反。
  23. 副現象:當我們看到 A 時通常看到 B,於是以為 A 引起 B,或者 B 導致 A。教小鳥飛翔就是個副現象。教育促進財富和經濟增長也是個副現象。
  24. 掌握少即是多 (less is more) 的原則,研究做的越多,基本但是根本的東西就會變得比較不明顯,容易被忽略。活動,會將事物抽絲剝繭,剩下最簡單的基本模型。例如在科威特戰爭,很多人「正確」預測戰爭爆發,但「誤判」油價會大漲,由於戰爭預期心理、囤貨太多,反而油價重跌,一堆人投資專家大虧、慘敗
  25. 在不透明的世界,我們應該仰賴 trial and error 的方法,並以槓鈴的形式,在下檔損失較低的時候才去承受風險
  26. 敘述知識與反脆弱的差異
敘述知識
反脆弱
討厭不確定性
調適不確定性
回顧過去
展望未來
脆弱、天真的理性
強固的理性
容易受火雞問題影響,成為冤大頭
可以從火雞問題與冤大頭中得利
容易受綠木謬論、副現象影響
不易受綠木謬論、副現象影響
需要了解事物的邏輯
不需深度了解,只要保持理性,去比較兩個結果(履行比較好的選擇權)
凹性(可以見到已知的利得,但錯誤未知)
凸性(convex, 已知的錯誤小,可能的利得大)


  1. 當你自認為懂得比自己實際的要多,你(面對錯誤)就會顯得脆弱
  2. 過度的自信會使人依賴預測,而預測會使人去借錢,然後顯露出槓桿的脆弱性
  3. 我們相當肯定羅馬人是令人讚嘆的工程師,靠著 trial and error 與經驗累積,不用數學就開通了渠道。因為數學的一個副作用,是使人過度優化和偷工減料,因而造成脆弱
  4. 17世紀的工業革命,來自於一群沒受過教育的人,他們運用實務上的 trial and error,解決令人困擾的機械問題,帶來了社會整體經濟的進展,並不是科技進步與科學技術造成經濟繁榮。科學技術造成經濟繁榮的說法,往往源自於學術界與科技界 (意圖詐騙政府機構的經費補助)。