2013/12/30

DSL(Domain Specific language) vs GPL(General Purpose Language)

DSL 不是 Digital Subscriber Line,也跟家裡面 ADSL 沒有關係,而是 Domain Specific language 的縮寫。GPL 也不是 General Public License,而是 General Purpose Language 的縮寫。

專有名詞的縮寫

學習專業知識,一開始都會被專業的縮寫搞亂,也要能將這些專有名詞縮寫脫口而出,才能嚇唬人,突顯自己的專業。DSL 不是比較常聽到的 Digital Subscriber Line,而是 Domain-specific language 中文有些人翻譯為領域特定語言,但依照中文的習慣,要念成特定領域語言,為了遵循英文原文的順序,還是應該改成「領域專用語言」比較順口。

跟 DSL 對應的語言為 GPL,GPL 也不是常常聽到的 General Public License ,而是 General Purpose Language 的縮寫,舉個簡單的例子來說,Java、C 都屬於 GPL,而 HTML、SQL、MathML、Unix Shell Script、groovy 等等語言都算是 DSL。

其實大家最常遇到的,最常見的,會是各式各樣的 DSL,而不是 GPL,嚴格地來說,沒有一種語言會是 GPL,形成某一種語言之後,就會馬上變成是 DSL了,因為總會有某一些應用,是無法簡單地用 Java、C 這樣的 GPL 所描述的,那究竟怎麼判斷,那一種語言是屬於 GPL 呢?

GPL 如何分類?

開發人員的逆襲: Domain-Specific Languages 裡面提到:Karl Frank 認為,DSL泛指任何特定領域的語言,甚至連 C#、Java 都算是特定領域的語言,因為它們都是針對特定目的(軟體開發),用於特定場合的語言。就軟體開發這塊領域而言,C#、Java 可運用於各類型的軟體開發,所以我們通常將它們視為GPL。

但其實在分辨 GPL 的時候,必須還要再加上子分類,必須先知道是那一種類別的 GPL,從 Is UML a domain specific language (DSL)? 的討論得知,當我們在討論 Programming Language 的時候,C、Java 就是一種 General Purpsose Programming Language,而討論 Modeling Langage 的時候,UML就是一種 General Purpose Modeling Language,而 XML 是一種 General Purpose Markup Language。

Java 跟 Groovy 的關係,就像是 Erlang 跟 Erlang OTP 的關係一樣,Erlang 可類比 Java,而 OTP 並不屬於 GPL,他是一種 DSL,適用的領域是 high concurrency 與 distributed 的伺服器運算環境。

Compiler

講到程式語言,就馬上會回想起十幾年前學習的 Compiler,當時老師教的是 Lex(Lexical Analyzar) 與 Yacc(Yet Another Compiler Compiler) ,雖然是有學過,也可以很順口地落出 lex and yacc,但也僅只於此,再深入的東西也都忘光沒有了。你可以自行參閱 Lex 與 Yacc 介紹以lex/yacc實作算式計算機

如果想要做個新的語言編譯器,a list of compiler books — 汗牛充棟的編譯器參考資料 列出了一堆相關書籍,但我想我應該不會跳進那個大坑洞裡。

在 Java 領域中,就必須要認識 ANTLR,ANTLR 是 ANother Tool for Language Recognition 的縮寫,從 使用 Antlr 開發領域語言 得知,ANTLR 是用來開發一種 DSL 的工具。

大概的過程就是先撰寫語法定義 Compiler.g,定義好語法之後,用 ANTLR 產生詞法分析器和語法分析器,使用這個分析器,就可以用來驗證,我們輸入的語言expression,到底有沒有符合這個語言的定義規則,ANTLR支援,可以將分析器生成為 Java,C#,C,Python,JavaScript 等多種語言。

另外還有個工具 Antlrworks,可將 .g 的語法定義檔案,用視覺化的方式呈現出來。

為什麼要了解 DSL?

當你進入 IT 的領域,想要學習使用關聯式資料庫時,別人就會建議你去學SQL,想要當個 SE,就會建議你要學習 shell script,想要學習網頁程式設計,就會建議要學習 Javascript、HTML、CSS 等等東西,每一種語言都是一種工具,是前人為了特定的目的,而定義出來的一種特殊的語言。

重要的是,當我們學習某一種語言的時候,要很清楚的知道,這個語言的使用範圍跟目的。雖然也會有意外的創新發生,例如原本設定在網頁上使用的 JavaScript,轉身一變,成了運作在 nodejs 之下的一種熱門的 Server Side 語言。

DSL 的目標是要為了解決商務業務邏輯與特殊應用領域,跟GPL之間的距離,對於系統設計者來說,先了解 DSL 的理念與技術,才能以最適當的方式,設計出一套最適合的 DSL 語言,當然,所有的設計,都必須符合「恰當」的要求,不能為了設計而設計,以免變成了畫蛇添足,甚至是增加負擔的 DSL。

2013/12/25

DSL - Domain Specific Language 簡介

Martin Fowler 針對 DSL 的主題,寫了一本書 Domain Specific Language(有篇文章提供了讀後心得:領域特定語言,被忽視多年的編程利器),另外也有一篇短文 Language Workbenches: The Killer-App for Domain Specific Languages?,根據這篇文章,在 InfoQ 還有一個演講影片 Introduction to Domain Specific Languages

以下以自己的理解,來解釋 Martin Fowler 想要說明的東西。

Language Oriented Programming

DSL 並不一種嶄新的概念,Martin Fowler 認為的新趨勢是 Language Oriented Programming,也就是要用設計一個新的 DSL 的想法,嘗試去做一個更具有彈性的程式實作,他先以一個例子來說明 DSL 的發展過程。

  1. 一開始因為有一份 Evet Data 純文字文件,它有特定的格式,因此產生了撰寫程式處理這個文字資料的需求。

    SVCLFOWLER 10101MS0120050313.........................
    SVCLHOHPE  10201DX0320050315........................
  2. 接下來他用了一個 class diagram,strategy pattern 說明他寫的Java處理程式,基本的想法,就是根據 Data 前面四個字元的識別 keyword,來判斷要使用那一種 strategy,以處理某種特定的Event。

    public void Configure(Reader target) {
     target.AddStrategy(ConfigureServiceCall());
     target.AddStrategy(ConfigureUsage());
    }
    private ReaderStrategy ConfigureServiceCall() {
     ReaderStrategy result = new ReaderStrategy("SVCL", typeof (ServiceCall));
     result.AddFieldExtractor(4, 18, "CustomerName");
     result.AddFieldExtractor(19, 23, "CustomerID");
     result.AddFieldExtractor(24, 27, "CallTypeCode");
     result.AddFieldExtractor(28, 35, "DateOfCallString");
     return result;
    }
  3. 後來他發現,可以將程式抽象化,拆分成兩個部份,就是用固定的程式碼,搭配一個 XML 設定檔。可以用某個 XML Reader 將設定讀進來,然後再對應到上面那個步驟的 strategy class,這樣的好處是,不需要重新編譯程式碼,改寫設定,就可以直接執行。

    <ReaderConfiguration>
     <Mapping Code = "SVCL" TargetClass = "dsl.ServiceCall">
         <Field name = "CustomerName" start = "4" end = "18"/>
         <Field name = "CustomerID" start = "19" end = "23"/>
         <Field name = "CallTypeCode" start = "24" end = "27"/>
         <Field name = "DateOfCallString" start = "28" end = "35"/>
     </Mapping>
    </ReaderConfiguration>
  4. XML 的標籤看起來太礙眼了,可以用另一種更簡潔的語法,來描述這個設定。

    mapping SVCL dsl.ServiceCall
     4-18: CustomerName
     19-23: CustomerID
     24-27: CallTypeCode
     28-35: DateOfCallString
  5. 最後,我們可用另一種自訂的 syntax 語法來改寫,因為要是一種語言,就必須要符合 EBNF 的定義規則。

    mapping('SVCL', ServiceCall) do
     extract 4..18, 'customer_name'
     extract 19..23, 'customer_ID'
     extract 24..27, 'call_type_code'
     extract 28..35, 'date_of_call_string'
    end

Language Oriented Programming 就是一種開發模式,嘗試用創造與使用 DSL 的方式,來完成一個軟體系統。基本上,所有用 DSL 設計的系統,都可以用 GSL 的方式完成。

Internal vs External DSL

接下來,Martin Fowler 說明了 Internal 跟 External DSL 的差異。

他問了一個問題:以下這個設定的程式碼,是不是一種 DSL?

public void Configure(Reader target) {
    target.AddStrategy(ConfigureServiceCall());
    target.AddStrategy(ConfigureUsage());
}
private ReaderStrategy ConfigureServiceCall() {
    ReaderStrategy result = new ReaderStrategy("SVCL", typeof (ServiceCall));
    result.AddFieldExtractor(4, 18, "CustomerName");
    result.AddFieldExtractor(19, 23, "CustomerID");
    result.AddFieldExtractor(24, 27, "CallTypeCode");
    result.AddFieldExtractor(28, 35, "DateOfCallString");
    return result;
}

答案要根據你在那一種 GSL 上運作,上面這些 code ,如果放到 Ruby,那就是 DSL,但如果在 Java,就不是 DSL,因為 Java 本身並沒有提供任何語言的擴充工具,讓我們可以直接處理這樣的 Configuration Code。

External DSL

  1. 跟運行環境的程式語言完全不同
  2. 需要有 compiler/interpreter 才能運作

缺點:

  1. 缺少IDE
  2. parser/generator 技術太複雜
  3. 自創的語法,產生了很多語言,會出現學習上的困擾及 gap,雖然用Inernal的方式,不需要學很多語言,但還是要學習使用特定的 API

Internal DSL

  1. 以運行環境的程式語言撰寫
  2. 直接使用該程式語言的 syntax

缺點:

  1. 跟運行環境的程式語言緊密結合在一起,例如 因為 ruby 語法的限制 4..18 就不能寫成 4-18
  2. Java, C# 這種 mainstream languages,很難做出 Ineternal DSL,因為當初設計時,就不支援 (不過Java7已經支援 scripting 了)

跳脫 XML,將視野放在 DSL

Martin Fowler 提醒我們,多數的 Java Programmer 會使用 XML,會知道怎麼製作設定檔,但是不知道其實設定檔,也可以再往前推進,形成一種 DSL,下一次當我們面對這麼多繁雜的設定檔時,或許該換個角度想想,是不是能用某種 script,設計出一種領域專用的 DSL 來解決問題。

2013/12/13

奇峰異石傳 - 鄭丰

奇峰異石傳回到雙主角的設定,應該是天觀雙俠的故事太成功了,奇峰異石傳依照這種雙主角的方式,也成了一部還算不錯的武俠小說。還有另一個特別的地方,就是請李阿寬先生畫的插畫,插畫的品質看來是很高的,但可能受限於小說版面大小的限制,畫面上有些細節就看不清楚。

不知道是不是印刷的問題,墨色的深淺差異沒有很大,黑色的地方乍看就一團一團的,是不是要讓這些插畫,用印漫畫的方式處理才能突顯出價值?不過這樣可能會讓成本上升不少。

讀小說,通常都是把自己投射到某個主角身上,去想像故事情節跟畫面,插畫讓讀者更明確地描繪出主角跟人物的形象,雖沒有了想像自己就是主角的樂趣,但卻能幫助讀者以第三者的角度,去看這個故事。

說還算不錯的意思是,還是覺得有些不滿意的地方。

奇峰異石傳的配角群,沒有天觀雙俠那麼精彩,趙觀的情人們就有好幾個,光是跟這些不同的人相處,就能寫出很多對手戲。韓峰跟小石頭宇文還玉之間,很從頭到尾兩個人都連在一起,中間只一段時間出現過通雲。

小石頭從男變女,就像是梁山泊與祝英台一樣,也真難為男主角了,他跟小石頭互動那麼融洽,就算是經過通雲那一段,最後還是發現怎麼自己還是一直在想著跟小石頭在一起的時光。如果真發生在自己身上,首先就要先想想自己的性別跟性向的問題。從朋友變情人已經很不一樣了,自己的小老弟變成情人,韓峰還是經歷了一段時間才能適應,並確認自己的感情,不然總以為自己只是在照顧他,沒有別的私情。

可能是商業的考量,文末的地方,作者自己說有刻意想要縮短篇幅,結果最後還是變成三本。故事的長短應該不需要刻意為之,而是長短要恰到好處,長篇小說,讀起來要不讓人覺得疲倦(最近讀的死亡之門,就讓人有這種感覺,看完的時間只能一直推遲),想要一本接著一本趕快讀完,就成功了。短篇也有短篇的趣味,因言簡意賅而讓人意猶未盡,更有想像空間。

應該也沒幾個人能像布蘭登·山德森那麼神,點子那麼多,又能同時進行多個長篇故事,長篇故事不需要一次寫完,一本一本推出,而我們這些讀者就會自動一本接著一本買了。

奇峰異石傳讀來沒有讓人覺得疲累,從剛開始閱讀,只花了不到一週的時間,就把三本讀完了。

專訪鄭丰:隋唐亂世的奇峰異石,說一個相知相惜的武俠故事

十八分鐘 《奇峰異石傳》

[心得] 奇峰異石傳心得

奇峰異石傳

2013/12/9

陣學師:亞米帝斯學院 - 布蘭登.山德森

你能徒手在黑板上畫個完美的圓形嗎?陣學師可以,或者應該說,一個厲害的陣學師,必須要能徒手畫出多個完美的圓形,完成一個陣形,越複雜的陣形,就需要越多完美的圖形,更多能在正確位置的完美圖形。除了理性的陣形外,另外一部份,就是帶著感性的、藝術性的粉筆精,要能同時專精這兩項的陣形師似乎不多。

陣形師的戰鬥畫面,比不上迷霧之子系列,因為主角受限於地面與粉筆,並不會有身體上的接觸,就像是遊戲王卡牌一樣,出牌然後,等著現形的怪物攻擊對方的陣形。沒有對手間的身體互動,就失去了很多刺激的戰鬥畫面,再加上只能在原地,在地上畫畫,又再度失去了場景變換的趣味。

故事背景設定造成了戰鬥畫面的限制,就有點先天不良的感覺,也許就因為是這個原因,作者把發生故事的地點設定在學校,再加上懸疑的學生失蹤事件,聽起來,又產生了哈利波特跟科南的印象。

小時候上數學課,總是會遇到幾位能徒手在黑板上畫個完美的圓形的數學老師,通常都是教學上有獨到之處的老師,以手肘為虛擬的圓心,一瞬間就能畫出一個大圓,一下子就能讓底下的孩子驚呼並懷疑,這樣的圓到底是怎麼畫出來的,陣學師的陣形圖,除了圓形,有些還搭配了三角形,疊合出一些特定的交點,這是圖形幾何。

防禦線是簡單的直線切割,而攻擊線可以看作是sin正弦圖形,但更應該想是直線傳遞的橫波圖形,這能將能量直線傳遞出去的能量波形。如果我猜對了,也許能在續集看到縱波,單就形狀帶給人的感受,縱波感覺起來比橫波力量更集中,傳遞速度更快,問題是縱波比較不容易用粉筆表現出來。

陣學師並不像迷霧之子有那麼多原創的創新元素,故事更像是個可以在其他有名的故事中看到,整合許多元素,而混裝出的一個全新故事。

讀書心得:陣學師:亞米帝斯學院 The Rithmatist

完美九點圈

2013/11/18

如何在 android app 裡面產生 PDF 檔案

最近測試了如何在 android app 裡面產生 PDF 檔案,我們的需求是:

  1. 不透過app server,直接產生PDF,並寫入到 SD Card
  2. 必須要能顯示 繁體中文 簡體中文 及英文
  3. 必須要能繪製文件表格

我們選擇了兩種 pdf library,測試在 android 產生 pdf 的能力


  1. iText:這是最有名氣,處理pdf的library,但因為要在 android 上使用,我們不能直接使用原本的 itext library,要到 http://sourceforge.net/projects/itextg/ 下載 可在 android 平台運作的 itextg


  2. Android PDF Writer:http://sourceforge.net/projects/apwlibrary/ 這是個簡單的 PDF library

解決問題的想法有兩種

  1. 直接產生有文字、圖片等內容的 PDF,但必須要解決中文字型的問題
  2. 先將內文資料用圖片的方式,以 Android Graphic Library 將文字、線條等資料,先畫在一張圖片上,然後再將圖片貼到 PDF 檔案中

測試結果如下:


  1. iText 可直接用程式產生 文字 tables images 等東西
    最大的問題是 中文字型。


  2. 如果要使用外部字型,例如 Truetype 的字型,會因為字型檔案過大,而造成 android 程式 out of memory


  3. 最好的方式是使用 iTextAsian.jar (參考 iText中文問題的解決之道)

    此檔案可在 itext 的 extrajars 裡面取得 http://sourceforge.net/projects/itext/files/extrajars/

    在程式中,可用以下的方式指定文字的字型

    Font textfont = new Font(BaseFont.createFont("MHei-Medium", "UniCNS-UCS2-H", BaseFont.EMBEDDED));


  4. 需要搭配 android 及 pc 的 pdf reader 測試,必須確認產生出來的檔案 可以被 兩個平台的 pdf reader 讀取,尤其是繁體與簡體中文字型的部份


  5. 使用 apwlibrary 以畫圖的方式處理,在 ASUS 平板測試 PDF 正常,但是以 Samsun Galaxy-S 測試時,內建的PDF Reader 顯示出來的圖片卻都是 X

版權問題


  1. iText 採行 Affero GPL ,以我們的專案來說,沒有問題,可以一併遵循 AGPL的規範,公開 source code


  2. Android PDF Writer 採行 BSD,可以很自由地使用它

2013/10/10

種族滅絕 - 高野和明

在30年前,美國智庫就有一份赫茲曼報告,提出了五點人類五大存亡危機。

  1. 【宇宙規模的災害】巨大隕石撞擊‧釀成毀滅性的連鎖災害
  2. 【地球規模的環境變動】地球磁場逐步弱化,當失去磁場有害宇宙射線將侵入地表,滅絕所有生物
  3. 【核子戰爭】輻射塵覆蓋地球表面,食物資源遭到毀滅性破壞,地球將不再適合人類居住
  4. 【病毒及生化兵器】人類濫用生化兵器,造成蔓延感染,人類將面臨嚴重的存亡危機。
  5. 【新種生物】人類再次進化,擁有超越人類智慧的新種生物誕生,我們將如同北京原人般就此消失

其中前幾個項目,經過時間的驗證,問題都已經慢慢浮現,曾經觀察過有巨大的隕石撞擊危機,磁場南北交換慢慢地一點一點地發生,核子戰爭依舊是核武武裝對抗下恐怖平衡的夢靨,HIV病毒與超級細菌的發現,而進化後人類的新種生物,也在剛果民主共和國被發現。

面對人類存亡的威脅,自居為老大的美國,依舊先一步掌握了情報主動出擊,而處理的方法,也是一貫清除與毀滅對方的方法。但是在智力超前進化的新人類面前,不但可以輕易進行PKI質因數分解,還能掌握地球的自然現狀,為了求生存,他們兩人一步一步地創造出自己的生存空間。他們不求和解,但也不反噬,而選擇以最聰明的方式,安穩地生存下去。

在確認自己生存的威脅下,除了美國選擇以對抗及消滅的處理方式,還有日本的古賀父子、皮亞斯這種接納並尋求共生的方式,但也有可能在掌握了權力與力量後,一切都會有變化。亞齊里與惠麻這兩人,從一開始就知道,在利用了古賀父子、皮亞斯等人之後,就要毀滅GIFT以及其他的工具,因為這樣才能避免人類反噬的狀況發生,不會破壞共生的條件。

這的確是一本從頭到尾就很精彩的科幻故事,最終新舊人類之間,還是選擇井水不犯河水,各自以自己的理念生活下去,這是另一種的恐怖平衡。

《種族滅絕》新書預告第一彈:「赫茲曼報告篇」

《種族滅絕》新書預告第二彈:「東京-研人篇」

[試讀心得]種族滅絕

種族滅絕:神、人與黑猩猩

閱讀/試讀226《種族滅絕》身為人類該有的省思 讀後心得

讀《種族滅絕》

種族滅絕

銀河鐵道之夜 by 宮澤賢治

每一個到了另一個世界的的人,都會幻化為天上的一顆星星,每天在高空中看著我們,照顧我們。銀河鐵道是這些人前往星星的專屬列車,同時也連接了現實跟另一個世界。

宮澤賢治詩作《不怕風雨》 讓人直接感受到的,就是一個人的堅強、自足、包容、關懷、堅持。堅強地面對風雨冰雪,自足於簞食瓢飲,不受貪慾,不改其樂,包容異己,關懷周遭社會,堅持面對自我。

作者宮澤賢治在自序中,雖然也自嘲:「在這些故事中,也許有些對您有益處,有的沒有,關於這一點,我自己也無法分辨其中差別。其中有些部份,或許您讀了會覺得一頭霧水,其實我也不知道為什麼會寫出這些內容。」

或許我們也該順應這樣的想法,把宮澤賢治的故事,當成從未知的異世界代理而來的作品集,就這樣自然地接受這些字句,然後再未來的某一天,回想起故事中人物的遭遇。

沒有艱澀的文字,但每一個字句都讓人有著深刻體會,也因為這樣,才能造就這百年的經典文學。更令人讚賞的,是能推廣並影響到每一個小學生,成就日本的文化根基。

在我現在能想出來的印象中,經典的華人童話故事,似乎都是一些神話故事,例如封神榜,還有一些節日相關的故事,例如中秋節的嫦娥、年獸、老鼠娶親等等。想不出來有類似宮澤賢治這樣淺白但又發人深省的故事或文章,中小學的課文文章中,小學課文都是一些很奇怪的短文,一直到了中學,才開始有一些文言文的賞析。

看了小朋友國語課文學習的東西,除了最基本的識字、寫字、認詞之外,有一部分成語,有一部分我最不能接受的,就是要學習十幾種修辭法,那些單純是文學研究者整理出來的一些修辭專有名詞。

對小朋友來說,從文字裡面去思考作者背後的隱喻,或是引申出來的含意,才是文學賞析的重點,也是讓文化內化影響至每一個人的方式,但是考試引導教學的結果,就是得被迫接受一些學者包裝出來的一些知識。

用童詩去搜尋得到的結果,最知名的作者是林良老爺爺,例如:我喜歡:林良x貝果,孩子的第一本詩歌繪本日記,詩文也一樣淺白,但卻感覺是白描日常的生活,少了一些引導人們思考的空間。

宮澤賢治 wiki

銀河鐵道之夜

久石讓- 銀河鐵道之夜.wmv

久石讓非主流專輯之一:銀河鐵道之夜

2013/10/9

Markdown

Markdown 是簡化的 html 語法,主要目的是用來作為一種網路內容的寫作語言。

曾經看過 Zen Coding ,他的目的是簡化Programmer撰寫 html code。Mardown是類似的概念,但目的是讓網頁撰寫更直觀。

html 是遵循了 xml 的格式的一份純文字文件,但因為 well-formated 的格式規範,直接用文字編輯器撰寫時,需要很辛苦地鍵入很多 tag 標籤,還要 close 標籤,整份文件也全被 tag code 搞亂了,不能很直接快速地看到內容。

一份簡化的撰寫規則,不但能減少打字的effort,還能在檢閱文字內容時,更容易發現一些錯字或語意的問題。

常用的語法

#  這是標題 H1  
## 這是次一層的標題 H2  
>  這是引言 blockquote  

[網址的標題](網址) 這是網址 href   
<網址>  這是沒有標題的網址 href  
![圖片替代文字](圖片網址)  

* 沒有排序清單第一項  
* 沒有排序清單第二項  
* 沒有排序清單第三項  

- 沒有排序清單第一項  
- 沒有排序清單第二項  
- 沒有排序清單第三項  

1. 有順序的清單第一項  
2. 有順序的清單第二項  
3. 有順序的清單第三項

_斜體字_  
**粗體字**  

[^1]  註腳

行末加上兩個空白就會換行
一個空白行,就視為一個新段落
縮排 4 個空白或是 1 個 tab 就可以變成程式區塊  
*******  三個或以上的星號、減號、底線來建立一個分隔線

支援的工具

Emeditor 有支援 Markdown 的語法高亮顯示,可以到 http://www.emeditor.com/files/markdown-esy/ 下載 markdown.esy,然後根據下列步驟匯入資料。

1. 點擊 Tools -> Select Configuration -> Define Configurations

2. 點 New,然後直接點 OK

3. 修改 "New Configuration" 為 "Markdown"

4. 選擇 "Markdown",點擊右邊的 Properties

5. 點擊 "Hightlight(1)"

6. 點擊下方的 "Import",選擇 markdown.esy

編輯文件時,只要選擇 Markdown 的 configuration,就可以看到 markdown 語法的高亮顯示。

Windows 有另一個工具 MarkdownPad,可以直接在左邊編輯 markdown文件,右邊就看到 html 結果。但是,我在使用右鍵裡面的 Copy HTML 功能一直發生 Open ClipBoard 的錯誤,把Markdown文字框起來,直接點選單 Edit, Copy Document as HTML 就可以避掉這個問題。

其他參考文件

相關的語法說明文件也可以參閱

Markdown 文件

Markdown

簡單易學的Markdown文字標記語法

Markdown 语法精简版

2013/9/10

史上最強哲學入門:解答你人生的疑惑 & 東方哲人 by 飲茶

「哲學」對大家來說,並不是一門得以自然地親近的學問,沒有重複不斷地反省思考的習慣,就很難體會為什麼會產生這些哲學理論。以哲學入門為出發點的這兩本東西方哲學書,最重要的是作者「飲茶」把枯燥的哲學理論跟說法,換到了生死格鬥的舞台,在哲學思想的對抗舞台上,以個人的得意格鬥技來一較高下。

內文雖然寫得還蠻精彩的,把每一個人的名言,重要的中心思想都交代地很清楚,可惜的是,就哲學格鬥這個主題來看,僅僅到了人物介紹這個階段,整本書就結束了。既然要格鬥,如果能在最後一章,看到所有出場人物在同一個場景或是故事下,互相較勁,那就更完美了。不過光這一章,可能就得花一段很長的時間才有辦法寫出來。

作者的哲學格鬥概念是從漫畫刃牙得來的,但中文版並沒有把這個部份翻譯出來,史上最強哲學入門 這篇文章提到了:作者飲茶表示,唯一小小的遺憾,便是藏在書封下「最想傳達給讀者的訊息」,卻沒有出現在中文版,所以另外做了翻譯。

哲學格鬥的概念很有趣,但實際上寫出來,卻好像是好幾個哲學家在那邊打嘴砲而已。這也沒辦法,哲學思想只能用文字或語言表達出來,這是沒辦法形於外,轉換成武打動作或是行為的。換個角度來看,或許用 Liar Game、賭博默示錄 這種,用個人的人生去下賭注,在過程中體悟出必殺技,心理戰格鬥系比較適合哲學格鬥的題材。

作者說「飲茶」這個筆名是隨手拈來的,但也應該沒那麼隨便,飲茶這個動作,背後代表著這個拿起茶杯的人,正在思考與消化接收到的資訊或問題,拿起茶杯喝下一口,緩和了對答的緊張氣氛,創造出一些思考的時間,最後才能放下茶杯,給出一個說法或答案。

《刃牙》~暴力美學極致的漫畫

史上最強哲學入門──東方哲人
書名:『 史上最強哲學入門:東方哲人』
書名:『 史上最強哲學入門:解答你人生的疑惑』
史上最強哲學入門讀書心得
光憑飲茶解讀「方便法門」這一點,你就不該錯過《史上最強哲學入門~東方哲人篇》
史上最強哲學入門:西方哲學家VS.東方哲人大集合

2013/8/20

來自程式的試煉 Cracking The Coding Interview by Gayle Laakmann McDowell

作者以她自身第一手與數百位求職者的面試經驗,加上由求職者與面試人員提供的數千個問題,整理出一套 Programmer 的求職攻略本,正如作者在前言中一開始就提到的,即使擁有一份完整的履歷,完整第複習了CLRS,如果不熟悉現場面試時可能會發生的狀況,也會在面試中敗北。

這樣的狀況體現出學校教科書的教育,跟職場中實用的技能與規則,的確有不少落差,換句話說,學校的教授自己也只是一直在學術界打滾,怎麼能期待能從教授那邊學到什麼實用的技能?怎麼會知道,屏除了教科書的限制之後,在實務上,最常遇到的問題與狀況是什麼。最重要的原因就是,面試人員只會問他最常用,也認定最一定要會的東西,先反過來瞭解面試人員的生態與狀況,就能掌握一部分求職的最佳技巧。

作者明顯是把求職這件事作到某個極致,除了出一本書持續改版之外,還開立了一個專門收集與討論所有求職相關問題的網站CareerCup,包含了面試會遇到的問題、薪水、履歷表。但最受大家關注的,還是指標科技公司 Apple、Amazon、Facebook、Google、MicroSoft、Yahoo 的面試內容。

從這本書的內容可得知,在求職的過程中,最在意的是首要是履歷,再來是要準備回答行為式問題,然後是技術問題,最後則是工作條件的評估與協商。

對我們公司來說,面試的時候會分先區分為兩種求職者,第一是有經驗的轉職人員,第二種是沒有經驗的畢業生,在履歷中很快就可以得知這方面的資訊,接下來,就是行為式問題的部份,有經驗的轉職人員可快速根據他履歷中披露的專案經驗,來設定一些問題的內容,沒有經驗的畢業生就比較麻煩,因為沒有經驗,如果再加上在學校中沒有做過什麼專題研究,就很難形成一些行為式的問題。

接下來,通常我們就會詢問求職者,興趣、社團活動等等活動的內容,藉此取代專案的項目進行行為式問題的問答,在問答的過程,我們通常會觀察求職者的個性與習慣動作,藉此判斷究竟他適不適合進入這個團隊中。最重要的一點,就是要問自己,願不願意跟這位求職者一起工作,這部份在問答的過程中,就能很明顯地感受到,彼此之間的溝通與互動有沒有障礙。但或許是目前公司還不大,其實能夠容忍的成員個性與範圍就比較狹窄,如果公司大一些,相信這個部份的考量,接受度會高一些。

行為式問題的內容,通常是根據不同的專案,再搭配以下這些最常會被問到的問題項目:
  1. 最大的挑戰
  2. 獲得什麼、學習到什麼
  3. 最有趣的部份
  4. 最困難的程式錯誤
  5. 最享受的部份
  6. 與團隊成員間的衝突
  7. 你的缺點是什麼,如何克服它

書本提到了 Situation Action Result(SAR)環境、行動、結果 法則,來判斷求職者的表現,求職者必須在回答問題時,能夠很明確地,思慮與邏輯清晰的狀態下,把自己的答案與意見表達出來。

這些行為式問題,對我們來說,影響的範圍佔了一大部分,甚至比求職者的技能高低還重要。不過。

轉換角色,假設我現在是求職者的身份,當面試者要評斷我的職能等級時,當然得準備基本必備的 programmer 常識問題,關於架構、Pattern方面的問題,看了很多,但或許我應該要花些時間,重新的去review關於資料結構、概念與演算法的東西,即使是 Java 某些時候,也該盡可能地去節省資源,不過還得先判斷 OO 設計跟資源節省之間的得失,在書本裡提到四類技術方面的面試考題:
資料結構、概念與演算法、知識型、其他

資料結構方面,必備常識列表為
  1. Linked List
  2. Binary Tree
  3. Tries
  4. Stack
  5. Queue
  6. Vector/ArrayList
  7. Hash Table

演算法方面,必備常識列表為
  1. Breadth First Search
  2. Depth First Search
  3. Binary Search
  4. Merge Sort
  5. Quick Sort
  6. Tree Insert/Find/etc.

觀念方面,必備常識列表為
  1. Bit Manipulation
  2. Singleton Desgin Pattern
  3. Factory Design Pattern
  4. Memory [Stack vs. Heap]
  5. Recursion
  6. Big-O Time


對應到實際上的工作內容,我們實務上會遇到很多邏輯上的先後與條件判斷的問題,但是卻比較少遇到特別的演算法問題,資料結構的部份就常常遇到,因為總是得思考,在該功能開發的過程中,應該怎麼在記憶體中存放足以描述問題的資料,得選擇並決定要使用什麼樣的資料結構,這時候,就會需要有 Collections Framework 的知識,在 Server Side 的程式設計考量中,還得加上要判斷會不會有多個 Thread 來存取這個資料,當遇到 multi-thread 的狀況時,判斷什麼時候要同步處理就很重要了。

Design Pattern 跟 Refacting 我們視為是 Software Design 的基本常識,我不需要也沒辦法記得所有 Pattern 的名字跟 Refacting 的方法,但是必要時,我會查到應該使用什麼 Pattern,在什麼時機,應該適時地進行 Refacting。

2013/8/11

主管不說,但你一定要懂的50件事 by 濱田秀彥

這本書是作者在做教育訓練時,交叉比對收集自主管以及員工的問券,所整理出來的一份資料,讀得時候感覺文字與內容並不艱澀,也常發現心有慼慼焉的一些看法,但在搜尋網路資料時,並沒有找到部落格,談到關於這本書的讀後感。

整本書非常顧及讀者的感受,很貼心地把重點的文字都用粗體字標記出來了。作者在前言中,就根據問券結果提出了一個讓他想完成這本書的重點,有97%以上的下屬沒能正確解讀主管對自己的要求。不在其位,不謀其政,主管跟下屬之間認知的落差,員工跟老闆之間的隔閡,老師跟學生的對壘,在所有上跟下的關係之間,總是存在著矛盾、對立,總感覺會有一道難以跨越的鴻溝,橫亙在人與人的關係之間,這也是最難處理與解決的事情。

每一個人都是一個獨立個體,自然會有不同的想法,不同的意見,但是在公司、部門或是小組團體內,一定存在著領導者與跟隨者的角色,就像是蜘蛛人的叔叔所說的,能力越高責任越重,通常有著較佳工作能力的人,會逐漸晉升至中間主管的角色,權力放大了,責任加重了,腦袋也跟著不一樣了。

這本書是專門寫給下屬看的,完全由下屬的角度,去解讀在上位者的一些行為與話語,但其實中間主管也同時是更上位者的下屬,在角色變換的時候,想法跟作法是不是就跟著不一樣了呢?還是讓自己變得錯亂而覺得心有餘而力不足呢?就像前言中的一句話「主管們最希望他的下屬能夠主動察覺主管的心思、主動去達成期望。」這是多麼完美的一個狀態,但實際上卻是非常難以實現的一件事,不過作者還是鼓勵下屬們盡力去掌握主管的要求,畢竟積極地活躍在職場中,總比每天像拖死狗般,帶著沈重的腳步去上班,真的走到這步田地的話,不是主管放棄你,就是下屬準備要離職才能解決了。

回想自己在工作中的一些做事方法,總是很任性地完全依照自己的想法在做事,雖然也遇過幾次失敗跌跤的專案,所幸大致上得到的成果還不錯,雖然現實的狀況,並不盡如人意,但還能怎麼辦呢?只能一直不斷地想辦法解決遇到的問題,看看結果會不會變好。在我下面幫忙的同事們應該並不好過,因為他們得要忍受一個不常說話,一講話又常常講不清楚的人。但我也知道我唯一的優點,就是腦袋還可以清楚地掌握專案跟大家的工作狀態。

這本書是建議公司買來給每一個人看的,包含我自己,其實都需要瞭解,自己常常要求別人做到的工作態度與技術兩個方面的問題,得從主管跟從下屬兩個角度去看,究竟該怎麼做,才能化解人與人之間的矛盾,形成一個超高戰鬥力的團隊。

要一個人改變自己長久以來的個性跟做事的方法,是非常困難的事情,幾乎是不可能的,就算是要改變自己,總得是遇到了某個生命或經歷中的痛之後,才會發生。不管如何,如果這是個值得期待的職場,公司有著值得一起努力的工作目標,那就勸大家盡力去找到最合適的方法吧。遇到了問題,或是遭遇了失敗,那就是要用力去調整自己的想法與作法的最佳時機。


以下節錄一些書本的重點,有些地方會加上自己的註解。

書本的大綱是分成四大段落:掌握主管對下屬的4大期待:
(1)公事上的溝通──做好「報連相」
(2)認可你的言行舉止──養成「成熟力」
(3)期待你擁有高度自主性──養成「執行力」
(4)期待你能夠自我要求,有所成長──養成「成長力」


目的是要解除雙方溝通不良的3大危機:
(1)績效考核不理想
(2)主管與下屬雙方關係惡化
(3)雙方無信任關係,工作難以進行


第1章 讓主管放心把工作交代給你——做好「報連相」
01 希望你在被關切狀況之前便主動報告

不要覺得「報連相」是對主管應盡的義務,而是要告訴自己:「報連相」是用來影響主管的方法。
在主管會報會議的三天前,向主管報告業績可能有影響的工作進度。

02 希望你交代現況

報告時要分清楚「現況」與「個人建議」
要先讓主管瞭解「現況」,然後再提出「個人建議」
報告時把形容詞跟副詞都換成數字

03 希望你發言時以「我」開頭

用「我」開頭,說話時會讓人覺得發言更明確且有力量

comment: 這個有另一層意義,就是你對你自己的發言負責任,不是隨便亂講的。

04 希望你講實話

拉起防線,只是會妨礙主管掌握狀況
道歉 -> 報告目前的狀況 -> 解釋發生經過

05 希望你壞消息要早點講

經營高層講求的是 bad news first
壞消息會越拖越糟

comment: 這個問題牽涉到識別專案風險的技巧,有時候在接觸到的合作夥伴、客戶等人的反應,要識別到一些可能會發生問題的危險信號,雖然不要小題大作,即使是誤判,發現危險的信號是每一個專案成員都必須具備的技能

06 希望你做到「中途回報」

對主管而言,比起趕不上進度,無法掌握下屬目前的工作進度更令人憂心
回報不需長篇大論,不用花太多時間

07 希望你講重點

跨越「對重點的認知」與「統整能力」的難關
講重點
透過習慣性「統整文書內容」與常說「簡單講就是...」

comment: 寫程式的人大都是惜字如金的,要一個人會「講重點」同時兼具「喇低賽」的能力,應該只有雙面人才做得到。

08 希望你先講結論

口頭報告時,以一句「我先講結論」開頭

comment: 冗長的簡報與說明會讓人失去耐心與注意力,簡報的重點要放最前面,要儘快破題,引起聽者的興趣。

09 希望你不要擅自下決策

劃清「可自行判斷」與「必須問過主管」的界線
站在風險管理的立場,遇到緊急狀況時,一定要找主管商量對策
依照重要程度(影響利潤與利害關係),把狀況分為三種(1)一定要問過主管(2)姑且通知主管一聲即可(3)可自行下決策

10 希望你和我商量過的事,能讓我知道後續

給過你建議的人,會一直掛心後續
如果事情尚未得到結果,記得要給對方中途回報
如果結果不如預期,應該委婉告知對方,讓對方願意日後繼續給你建議

11 希望你的電子郵件主旨明確,重要的事寫在最前面

讓日收萬信的主管留意到你的電子郵件
把處理期限等重要訊息,在內文開頭的前五行內交代完
信件主旨盡量使用專有名詞,並加上特殊符號

comment: 這跟講重點很像,我也用過這個方法,在信件的主旨把[專案]括號起來,且在主旨就寫出信件內容的重點摘要,我應該再把這個方法拿出來用

12 希望你CC過來的電子郵件副本,偶爾能夠加上一、兩句自己的意見

全郵件CC機制的陷阱
主管期待得到的訊息不是來自郵件,而是想知道你對於負責的案子有什麼建設性的構想
偶爾向主管口頭報告CC郵件沒提到的構想或期望,讓雙方隨時擁有共識,降低風險

comment: 這應該該資訊分享類似,現在在FB大多看到分享的連結,都只是連結,適當地加上個人的註解,會讓收到資訊的人,比較快能夠判斷,該連結的資料內容,而可以很快地決定要不要點進去看,這一點也跟email主旨的功能很像。

13 希望你同在辦公室裡就多用口頭溝通,不要都透過電子郵件

商量或討論公事,第一選擇是口頭溝通

comment: 這跟遠端辦公室的理想似乎有差距,但也沒錯,如果大家都可以透過網路線上溝通,不用見面,那就不需要辦公室這個空間了。面對面地談,總是會讓人有不一樣的感受。但相同的是,面對面地談,所得到的衝擊也比較直接且嚴重。

第2章 讓主管認可你是成熟的工作者——養成「成熟力」

14 希望你講話時看著我的眼睛,把每句話都講得清楚且完整

「看著眼睛說話」和「把話講完整」,主管就是根據這兩點,來判斷下屬對自己說話的內容是否有自信
講到最後的時候,務必看著對方的眼睛

15 希望你把我的話聽到最後

要以退為進
欲加快談話進度,應該採取總結對方的話語之後,向對方確認的方式

comment: 講話沒耐心的我,常常會打斷別人講話 #@%^#@ ...

16 希望你直率地聽命行事

能夠照做的事情,就直接回答「好的,我馬上處理。」
如果當下礙難從命,就先以一句「好的」答應下來,再提出轉圜方法

17 希望你多用點腦子

把「拜託你多用點腦子」封印起來
不做空洞的回答
如果無法回應主管的期待,請直接提出積極的替代方案,讓主管說不出那句話

18 希望你上班時總是精神飽滿

大多數常在嘆氣或嘀咕自己很累的人,都是在不自覺的狀況下做出這些舉動

19 希望你的穿著打扮能夠合乎職場禮儀

comment: 這一點我不及格,但也沒想過要改善,真糟糕 ...

20 希望你的辦公桌桌面能夠整齊乾淨

紊亂的辦公桌會使你的工作能力遭到主管質疑
下班時,把桌面上的東西豎起來,收在一定的位置

comment: 我的桌子超亂的,書都一直往上堆 ...

21 希望你幫忙帶新人

帶新人會讓你自己有所提升
不要拿後輩和自己比較

22 希望你被罵的時候要有被罵的樣子

被主管罵時,用心聆聽指教,勇敢地反省,最後向主管道謝

comment: 這一點好像是日本人才應該有的要求,我不大同意,我覺得重點是,要得到教訓,不要再犯(就是下一點)

23 希望你同樣的事不要讓我講兩次

重點在於遠見,認知有落差時,務必討論得到共識
精進技術,避免犯同樣的錯誤,不要讓主管一再交代同樣的事情

24 希望你偶爾和我聊聊公事以外的事

午休時間就是磨練社交手腕的最佳場合
在職能技巧中,透過閒聊與他人建立人際關係,是相當高段的社交技巧

comment: [何飛鵬專欄]一對一午餐何飛鵬社長也說過一樣的事,這個方法我用過一次,但沒有持續執行,應該要這樣持續做嗎?

25 希望你能機伶地察覺我的心思

多一些服務精神,主動察覺主管的需求而後動
即使只是一點點微不足道的支援,主管都會非常感謝你

第3章 讓你成為主管眼中積極自主的中堅員工——養成「執行力」

26 希望你主動攬工作、主動舉手發言

這是個沒有人主動舉手的時代
主動舉手,攬下不會增加自己太大負擔的案子

27 希望你視自己為要角,身先士卒帶領其他同事

真正的「領導能力」,指的是為達成目標,所能夠發揮的影響力
找出得以發揮自己影響力的最佳方式

28 希望你交出亮眼成績

如果你現在的工作內容,只能讓主管看到你有多賣命,請留意,你在這場生存遊戲中,正處於非常危險的狀況

29 希望你不要跟我解釋為什麼辦不到,而是趕快思考怎樣才辦得到

當你面對棘手的案子或工作上出現狀況,要是每一次都立刻把心態切換到否定模式,久而久之思考對策的腦力會衰退
當主管丟給你棘手的案子,試著壓下第一時間湧上腦子的所有辦不到的理由,為了迴避風險,記得同時向主管提出附帶條件

comment: 總是要試試看才知道做不做得到,這是個好習慣

30 希望你馬上辦

對主管而言,交待下屬的那件事,不知道處理得如何了?自己掛心在這一點的時間越短越好

31 希望你做事有計畫性,按部就班來

短期的案子就馬上辦,長期的案子就做預想練習
做事沒計畫的人共通的問題點是:對時間的估計過度樂觀,導致事前準備不足
盡早著手,就能盡早發現那個部份有狀況

32 希望你能和其他部門合作,一同創造業績

主管期待看到的是,願意挑戰超越自己能力範圍的案子,主動跨部門把其他同事也拉進來一起打拼的積極下屬
至少半年一次,試著挑戰跨部門合作,邀約時以這句話開頭:不好意思,關於某某案子,有些事想請教您

33 希望你減少加班

工作上有三種時間小偷:重做、電子郵件、會議,只要改善這三點,就能夠有效利用時間
一接下工作,便在十五分鐘內做好「整體架構圖」
在工作效率最高的時間帶,不要處理電子郵件

34 希望你不只是報告現況,也加上自己的意見

報告時務必加上自己對於接下來的計畫或想法
找主管商量時,先準備好腹案再開口

35 希望你的提案至少有三款

以經營者的觀點出發,衡量風險與收益,交出三款提案
(1) 高風險、高收益
(2) 中風險、中收益
(3) 低風險、低收益

36 希望你回話要有回話的樣子

工作者類型分佈:擅長下指令的駕馭型、兼具直覺與行動力的表現型、喜好協商的平易型、慣於思考的分析型
分析型的人,很不擅長立刻回話
透過重複對方的問話,爭取思考時間,以一句話簡短回答

37 希望你的書面報告能夠好好寫

書面報告的「內容」、「架構」、「表現能力」都很重要
主要可能發生的問題:塞了過多的內容、不讀到最後不曉得結論為何、許多錯漏字、文體不統一
透過問與答的整理,快速寫出井井有條的優秀報告
把自己切換到校對者模式,先自行校對一次

38 希望你多勤第一線,多與工作關係者連絡

工作上的業務,不要只透過電子郵件或電話解決

comment: 資訊系統問題方面,應該不是這樣處理,盡可能地遠端處理,以免耗費交通與時間的成本


第4章 讓主管認為你是具有發展潛力的重要員工——養成「成長力」


39 希望你站在高一層職位的立場思考公事

搶主管的工作來做,訓練自己擁有主管階級的遠見

40 希望你總觀職場整體

透過協助他人的業務,培養總觀整體的宏觀眼光

comment: 記憶力也很重要,做的事情很多,但每一個細節都能記得,能做到這樣才可以得到成效

41 希望你拓展自己的業務範圍

接下身邊那些三不管地帶的業務,有助於提高你的市場價值

42 希望你擁有高遠的目標

設定成功與失敗機率各半的目標,最能夠激發個人力量

43 希望你從不滿足於現狀,擁有更大的野心


沒有必要迎合主管,把金錢、物慾當作工作的動力
沒有上進心的人,讓主管得知自己對升官沒有興趣,會被認為是窩在公司混吃等死的米蟲

44 希望你朝專業領域邁進

不想當主管的人,就必須朝專業領域邁進
所有公司需要的人才,只有主管或是專業人員
專業人員的定義:
(1) 能獨立思考與行動,並交出成績,對結果能擔起責任的人
(2) 在專業領域有壓倒性實力之人
(3) 擁有優秀解決問題能力之人
(4) 除了專業技能,人際技能也相當優秀之人
(5) 周圍的人一致認可是專家之人

comment: 夠專業,就是在公司內擁有不可取代的能力的人


45 希望你讓我看到絕不輕言放棄的毅力

讓你深受挫折到想放棄的工作,正是能夠讓你有所成長的機會,不要在意結果如何,展現你的毅力,堅持到最後

46 希望你自動自發精進知識與能力


工作技能不是學來的,是偷來的
積極地吸收在身邊的知識與know-how
擁有寶貴know-how的人,通常有著職人脾氣,給人感覺不易親近

47 希望你不要攬下工作獨自苦幹,要多多善用後輩

善用後輩的方法,分為三個漸進階段:挑選 -> 指導 -> 監督到最後
指導的重點是,你說明時,必須使用對方腦中字典所存在的字彙

48 希望你虛心接納他人的意見,讓我見識你的度量

以嚴厲眼光觀察著你的,正是你的後輩們
認定你是不是各有度量的人,比起主管,後輩的視線要更為嚴格
聽到刺耳意見時,不要找藉口正當化,坦率地接納,成為主管與後輩都認可的成熟工作者

49 希望你主動挑戰風險,全力一決勝負

聰明地管理風險,自己打造能夠冒險的工作環境
擺脫「公司規範過敏症」

50 希望你拿出幹勁來

找到不受外在因素左右的幹勁
找出自己的火柴,自行劃亮火柴,點燃工作的熱情


博客來 主管不說,但你一定要懂的50件事
掌握溝通3技巧, 了解主管期望、提升工作效能

2013/7/14

皇帝魂 by 布蘭登.山德森

這本精選集,收集了布蘭登.山德森五則短篇小說,但如同最後面的專文介紹所說的,確實只有第一篇皇帝魂內容最為精彩。

我覺得長嫡也很好看,但是軍團跟保衛幸福之地,我就有點看不懂的感覺,也許是因為故事有點亂,沒辦法讓我專心把它看懂,第十一種金屬就只是超短的一小段凱西爾前傳的故事,好像是吊人胃口一樣,拿出來充數而已。

在得知皇帝魂是作者來台灣參訪故宮之後的作品之後,我就有點好奇,到底故宮哪一個部份引起了作者的興趣,讀完後,才知道是文學作品裡的個性印章,東方的印章會因為作者的個性而展現不同的內容,西方也有印章,但好像是出現在信封的封蠟上。

仿師是將印章視為作者靈魂的展現,但並不是每一個人都能夠刻劃出靈魂印章,必須藉由仿師的工藝,才能將一個人某個時間的個性與體驗刻劃並記錄在印章裡面,如果把印章師父視為一個藝術家,工藝技巧高超的藝術家做出來的作品,某一方面來說,就是他所認識的那個人當時的樣子,其實也算是在刻劃另一個人的靈魂,並具象在印章當中。

單純地把皇帝魂的設定要發展成長篇故事確實有些單薄,但我覺得如果把這樣的技巧,跟各種類型的刺客結合在一起,或是說把仿師設定成,除了印章之外還有各種不同的呈現方式,或是有仿師跟鑑定師的對抗,增加一些故事設定,應該會更充實。

長嫡在故事一開始,單純描寫弟弟丹尼森跟不上哥哥法瑞恩成就的心理狀態,唯一不解的是為什麼高官依然不顧一切持續地訓練並投資在弟弟的身上,到了故事中後段,讀者也跟著主角得知揭曉的謎底,原來是一個複製人的計畫,在某個基因調整下,讓複製品沒有變成跟法瑞恩一樣的獨裁者,並成為打擊法瑞恩的好棋子。

不過刻意去複製法瑞恩的理由有點牽強,丹尼森只是接受法瑞恩的戰役歷史的教育,才得出攻擊法瑞恩的方法,這應該不需要複製法瑞恩,找很多人去研究法瑞恩的心理也一樣,何必要刻意複製,還花很多時間去教育他,太不合理了。

2013/7/1

戰爭遊戲 Ender's Game by Orson Scott Card

說真的,一開始會去買這本書來看,是因為偶然的機會看到了這篇文章:【戰爭遊戲】啟發我兒子閱讀興趣的一本好書 作者:洪蘭,買回來之後,卻也因為在讀不大好讀的死亡之門第二集,而放了好一陣子,兩天前拿出來看,一下子就讀完了。

這本書的來頭不小,28年前(1985年)發表的當時,就馬上拿到了星雲獎及雨果獎。但說真的,讀完的當下,我並沒能瞭解到,為什麼這本小說,會有這麼高的評價,甚至一篇以訓練戰爭機器為主調的故事,還能成為學校指定閱讀的小說,真的覺得很奇怪。

後來想想,發現故事的主線副線情節交錯,而且在過程中,帶出了很多開放且有爭議的問題,讓每一個讀者去思考各自的答案。這個故事這樣的篇幅下,描述了很多不同的關係與狀況,父母跟孩子、弟弟跟哥哥姊姊、學弟跟學長、教官跟學生、人類跟蟲族的對抗、指揮官跟小隊長、隊長跟隊員。安德慢慢長大的時候,身份從孩子、三弟、學弟,轉變成學長、小隊長、指揮官,轉變之後,他才發現原先憎恨與抗拒別人對待他的方式,到了自己轉換成他們的角色的時候,卻也不由自主地跟隨這些方式進行溝通與訓練。

安德在受到孤立與打壓時,選擇正面迎擊,因為只要沒有完全解決挑臖的同儕的問題,他就沒辦法在自己的意志下繼續生存下去。這樣的作法根據洪蘭文章中撰述兒子的說法,證實在他們的環境下的確必須要如此,但在台灣應該比較不會發生這樣的事情,因為老師的權威普遍都還存在,孩子在學校發生衝突,大部分都可以找老師解決。就這一個角度來看,並不能類比到台灣的狀況。

科技方面,在當時Internet還正在發展與普及的時代,就能夠想到網路論壇的虛擬化人物,能夠不斷地透過網路文章的互動與交流,進行一系列的政治活動。學習與記錄的電子書桌。跟著玩家心理狀態不斷變化的網路遊戲。透過網路連結的電玩遊戲,能讓遠端的指揮官,跟各地的小隊長連線,就可以遠距離指揮軍隊作戰。不得不佩服,這完全是一個能夠領先真實科技的科幻小說。

在故事的尾聲,安德回頭反省自己的作為,反省自己一身罪孽,甚至反過來從蟲族女王的眼睛,面對人類前來摧毀他們的狀況,他感受到女王的哀傷與認命,安德決定帶著已經受精的女王蛹,不斷地在宇宙中,尋找適合的地方讓女王復活。

新版《戰爭遊戲》(Ender's Game)倒毒
戰爭遊戲-Ender's Game
旭日之丘/讀書心得:戰爭遊戲(Ender's Game)
改編經典暢銷科幻小說 《戰爭遊戲Ender's Game》集結重量級卡司11月1日上映!
movie: 戰爭遊戲
【電影預告】戰爭遊戲 (Ender's Game, 2013) (繁體中文字幕)

《致命兒戲》(舊名:戰爭遊戲)(Ender's Game)
戰爭遊戲/致命兒戲(Ender's Game) by Orson Scott Card

2013/4/27

get the minimum element in list using erlang

Erlang Programming Exercises 給了一個要找出 lists1:min(L) 的習題

Erlang Example: Min and Max Element of a List 給出了一個超簡單的答案
-module(mylists).
-export([max/1]).
max([H|T]) ->
    max(H, T).
max(M, []) ->
    M;
max(M, [H|L]) when M > H ->
    max(M, L);
max(_M, [H|L]) ->
    max(H,L).

簡單地說,就是把 List 拆成 M|T,然後再把 T 分成 H|L,也就是 M,H,L,如果M>H,就繼續計算 max(M,L),如果是其他狀況,就計算 max(H,L)

一開始,我沒辦法想出這個樣子的解法。

不過後來參考了 qsort

qsort([]) -> [];
qsort([Pivot|T]) ->
 qsort([X || X <- T, X < Pivot])
 ++ [Pivot] ++
 qsort([X || X <- T, X >= Pivot]).



想出了另一種解法


max([]) -> [];
max([H|[]]) -> H;
max([Pivot|T]) ->
    L = [X || X <- T, X >= Pivot],
    case length(L)>0 of
        true -> max(L);
        false -> Pivot
    end.
 


重點是 L = [X || X <- T, X >= Pivot] 可以取得所有比 Pivot還大的 list,但如果得到的結果是空的 list,那就代表,最大的元素是 Pivot。


Programming exercises 也給了兩個答案

list1.erl 是比較直覺,看得懂的例子,但缺點是min_max 必須traverse list 兩次
-module(list1).
-export([min/1,max/1,min_max/1]).

min([H | T]) -> min(T, H).

min([], CurrentMin) -> CurrentMin; 
min([H | T], CurrentMin) -> 
  if   
       H < CurrentMin -> min(T, H); 
       true -> min(T,CurrentMin) 
    end.          

max([H | T]) -> max(T, H).

max([], CurrentMax) -> CurrentMax; 
max([H | T], CurrentMax) -> 
  if 
      H > CurrentMax -> max(T, H); 
        true -> max(T,CurrentMax) 
    end.          

min_max(L) -> {min(L), max(L)}.


list2是改進的版本,裡面使用了這個list的函數,min_max 只traverse list 一次,就同時把 min, max 的兩個元素都找出來

foldl(Fun, Acc0, List) -> Acc1
Fun這個函數有兩個參數
第一個參數是List中的元素,第二個參數是Fun函數執行完後的返回值,這個參數第一次執行時
就是Acc0
例子:對[1,2,3,4,5]求和
lists:foldl(fun(X, Sum) -> X + Sum end, 0, [1,2,3,4,5]).
結果:15
執行過程:首先,Fun第一次執行時,X的值取列表List的第一個元素1,Sum取0,
  Fun第二次執行時,X的值取列表List的第二個元素2,Sum取Fun第一次的返回值
  依次輪推,直到List中每個元素執行完,最後foldl返回最後一次的結果。


%%% Code: list2.erl


-module(list2).
-export([min/1,max/1,min_max/1]).

min([H | T]) -> lists:foldl(
  fun(X,Acc)->if X X; true->Acc end end, H, T).

max([H | T]) -> lists:foldl(
  fun(X,Acc)->if X>Acc -> X; true->Acc end end, H, T).

min_max([H | T]) -> lists:foldl(
  fun(X,{MinAcc,MaxAcc}) -> 
    if 
      X < MinAcc, X < MaxAcc -> {X, MaxAcc};
      X > MinAcc, X < MaxAcc -> {MinAcc, MaxAcc};
      X > MinAcc, X > MaxAcc -> {MinAcc, X}
    end
  end, {H,H}, T).

2013/3/12

精實創業 by 艾瑞克‧萊斯 Eric Ries

有很多書會以這樣的方式來教育讀者,如何在24hrs學會Java,或是如何成功致富,這些正向思考的書教大家如何成功,但是卻省略了最重要的「失敗」的部份,雖然「成功」的媽媽帶來了一句名言「失敗為成功之母」,這句話大家耳熟能詳,然而從小到大,我們在教科書裡讀到的,學到的,都已經是無數前輩經歷過許多失敗才得來的結果,幾乎不會有人教大家怎麼「體驗失敗」。

這本書的作者艾瑞克‧萊斯 Eric Ries以他個人創業的經驗,告訴大家因為他曾經經歷過幾次失敗,因此他得到了很多寶貴的經驗,並以這本書來告訴大家,要怎麼避免一定會導致失敗的想法與作法,希望讀者能以他為借鏡,避開可能的創業地雷,減少損失。

大多數的創業都是以失敗告終,成功並不是想當然耳,指日可待的定律。正因為如此,作者更提出一套創業所要遵循的法則與學問,避開地雷,這本書的具體目標就是,「提高全球各地新產品的成功率。」簡短的一句話,正是所有初創創業該要尋找與訂定的一個長期目標。

創業的五大法則為:一、人人都是創業家。二、創業即管理。三、驗證後的學習心得。四、「開發、評估、學習」五、創新審核法

本書分為三大部份:「願景」「駕馭」「加速」,以下把書本內容一些重要的話紀錄起來,提醒自己要常常回想書本的內容。

第一部份:「願景」

精實創業一詞來自大野耐一在豐田汽車提出的革命性主張 - 精實製造,他的主要原則為:讓每位員工充分貢獻所學,並負起應付的責任,縮減每批工作的生產數量,在市場有需求時及時進行生產並控制庫存,加快生產線循環的速度。

一個完整的創業管理法,要能在極度不確定未來的情況下,提供評估公司發展的方法,必須能明確地指導創業人士,如何做出合適的交易決定,是否與何時在發展過程中加碼投資,如何制定計畫與興建公司基礎建設,何時該選擇獨資發展,何時該與人合資,何時該對意見做出回應,何時該堅定公司立場,如何及何時該進一步投資壯大事業,讓創業者做出可接受檢驗的預測。

精實創業是以願景為基礎,透過各種中間的策略方法,進行評估與學習,最終得到一個產品,並持續進行優化的過程。

創業可能發生在車庫,也可能在一個公司裡面,創業指得是一個整體的初創生態系統,不需要考慮公司規模、部門或發展階段等因素。但通常在大公司裡面,不會遇到各種極度不確定的狀況。

一個由人組成、專事新產品或新服務的開發、未來發展具有高度不確定性的機構,稱之為初創事業。任何可迎合顧客需求的價值來源,都可稱為產品。

初創事業用來測量成效的方法:驗證後的學習心得,這是一個利用實際經驗來證明創業團隊已經找到公司現時與未來發展潛力的過程,它比市場預測和商業企劃來得更實際、精確且快速。學習是初創事業成長的重要元素,那些與瞭解顧客真正需求毫不相干的工作,可以完全捨棄。

改變策略,將產品提早送交給顧客使用,推出劣質的雛型產品,即使是非常不完美的作品,第一天就向顧客收費,以低額的業績目標作為鞭策自己的方法。經過第一手顧客的使用之後,取得來自顧客的使用數據,提交給下一個階段的行動判斷作為依據。避免長時間經過「零」的階段,延遲確認數據,會產生不良的效果,例如:提高工作浪費量、流失重要顧客回應、大幅提高產品無人聞問的危險性。

精實創業法將初創事業的作法,當作一連串的實驗,每一個實驗的目的,都是為了找出一個以願景為藍圖,讓企業永續經營的方法。藉由測試的策略,找出哪些是可行的,哪些又是不著邊際的,一個真正的實驗是依循科學方法進行的。要有個清楚的假設,預測將會發生什麼事情,然後對這些假設進行實際的測試。

創業家最重要的兩個假設:價值假設與成長假設。價值假設要測試的是,產品或服務是否能帶給使用者價值。成長假設要測試的是,新顧客如何發現一項產品或服務。提出一個親自服務式最小可行產品(concierge minimum viable product),根據初步獲得的回應與實驗結果,發展出更多的實驗。以最短的時間,持續進行實驗,並同步地調整策略企劃。

深入產品優化之前,都要先確認風險、擬定主要假設,然後進行實驗驗證。不斷地推出測試版本,不斷地學習,當先行使用的顧客玩得興高采烈時,持續透過網路調查工具,進行更深一步的需求確認,解決真實顧客所反應的問題。

第二部份:「駕馭」

「開發、評估、學習」的回應循環機制:構想->開發->產品->評估->數據->學習,然後不斷地循環,並致力把給一次循環所需要的總時間減到最低。適用於初創事業的精實製造理念:MVP小量生產的效力,這個最小產品,必須是可以接受測量的。

進入評估階段後,最大的挑戰是確定產品開發的努力,是否讓公司有所成長。使用用來評估成效的創新審核的度量法,可以用來設定學習里程碑,並取代傳統界定的產品里程碑。

走完「開發、評估、學習」的回應循環機制之後,就會面臨創業家最難決定的問題:「選擇Pivot或是堅持原來的方向。」如果發現有一項假設是錯誤的,就應該快刀斬亂麻,重新設定一個新的策略假設。

策略立足於假設之上,策略可幫助創業家找出對的問題來回答,而策略的決定,必須建基在對顧客的第一手瞭解上。每一個商業企劃都是從假設出發的,列出的策略都把假設當成已知的事實,然後直接提出如何達成公司的願景。但由於假設未經過驗證,其實很多都是錯誤的,初創公司初期目標,應該是儘快對假設進行測試。

這些假設備稱為「絕對信念」,因為整個企業的成敗完全操在它們的手裡。成功的創業家,都擁有遠見、能力及有用的輔助工具,這些工具是用來發現,計畫中哪些部份發展出色、哪些策略被誤導必須予以修正。

從辦公室出走,拿起電話簿隨意撥打電話,詢問民眾的需求。以抽樣調查的方式,直接進行客戶訪談,確認需求的真實性。與客戶作初步接觸,用以釐清我們是否對潛在顧客遇到的問題,有了粗淺的基本認識。基於這個認識,就能打造一個顧客原型 customer parchetype:一個把目標顧客擬人化的簡單描述。顧客原型只是一個假設,不是一項事實。

做了再說創業派一般沒有耐性花時間分析策略,通常只會隨便找幾個顧客交談,就迫不及待地開始製造產品。很不幸地,顧客並不知道自己到底想要什麼,這一派創業家會因此被蒙蔽。另一類創業家是「分析性癱瘓」受害者,他們無止盡地分析商業計畫,無論訪問顧客、研讀研究報告或白板作戰,對他們都沒有幫助,最大的問題是,他們倚賴的事實基礎是錯誤的。很不幸地,這個錯誤無法在白板上被發現,只能在顧客與產品互動時被偵查到。

「最小可行產品」與雛型產品或產品概念測試不同,它不是用來回答設計或技術上的問題,而是為了要測試重要的商業假設。「最小可行產品」是可以讓「開發、評估、學習」循環的時間減到最低、又不費功夫製作的一個產品。

「最小可行產品」的重點是:一項產品功能就算再重要,只要它超出了足夠開始學習的基本需要,即屬浪費。創業家必須要抗拒過度製造與過度承諾的誘惑。

案例:「影片式」dropbox、「親自服務式」Food on the table

MVP挑戰傳統觀念對品質的要求,如果已經掌握消費者,就可以使用品質論,但初創事業根本連顧客是誰都不確定,自然在一開始要忽略對品質的要求。

製造「最小可行產品」的風險是實際與想像兩種,最常見的減速丘是法律問題、對競爭者的恐懼、道德影響力、以及品牌塑造的風險。

初創事業的任務是:一、積極評估自己現在所處的位置,然後勇敢面對評估出來的殘忍事實。二、設計可以學習如何將實際數字推向目標的實驗。

創新審核法步驟:一、用MVP將公司現狀的數據建立起來。二、從基準線出發,朝理想的方向去調整引擎,當初創事業做好細節修改和產品美化工作,準備從基準線朝理想出發時,它會來到一個決策點,就是步驟三、軸轉或堅持。

「群組研究」是分析初創事業最重要的工具之一,它不考慮總收入或客戶總人數之類的累積總數,只看個別使用過產品的客戶群的表現,每一組客戶稱為一個「群組」。案例:將客戶分為(1)登記卻未曾登入(2)曾登入(3)進行過一次對話(4)進行過五次對話(5)付費,以漏斗式分析法,查看客戶的比例。有數據時,會極力去探討,為什麼顧客對產品的改良沒有反應?為什麼努力都沒有回報。很快地就能找到答案,對客戶有了真正的瞭解。

工程師、設計師與行銷人都擅長將事物優質化,但如果是一個錯誤的產品,不管如何優化,都得不到好的結果。

提防「虛榮指數」可能帶來的危險。案例:即使總收入增加,但付費客戶在所有客戶中所佔的比例始終沒有改變。

「分組測試」,在同一時間對顧客進行不同版本的測試,藉由觀察兩組客戶行為的差異,對不同變數造成的影響得出結論。這可以幫助團隊更瞭解,什麼是顧客的真正需求。

一份報告必須要有(1)可行性actionable:必須展示出明確的因果關係,否則只是一個虛榮指數,例如要明確地說出,要採取哪些行動,才能複製出相同的結果。(2)易理解性accessible:報告要讓大家一目了然。要提高員工取得資訊的方便性,每個員工都可隨時登入,取得實驗報告,依據此摘要報告作為排解產品開發歧見的標準。(3)可檢視性auditable:當報告不利於主管、開發工程師或某些人時,就會被質疑報告的正確性。要讓數據能夠以人工的方式進行測試,也就是實際訪問顧客,確認數據是否屬實。另外要降低報告的複雜性。

決定Pivot的時機,軸轉需要勇氣。軸轉後,要取得軸轉前後的創新審核數據結果。

十大軸轉類型

1. 推近軸轉 zoom-in pivot:將焦點從過去一個大範圍,縮小到其中一個點。

2. 拉遠軸轉 zoom-out pivot:將舊產品轉變為另一個產品的一項功能。

3. 顧客區隔軸轉 customer segment pivot:維持產品功能,但改變目標對象。

4. 顧客需求軸轉 customer need pivot:調整原本產品設定要解決的問題。

5. 平台軸轉 platform pivot:改變一次針對一個顧客銷售的方式,利用信用卡進行自助式銷售的平台。

6. 企業架構軸轉 business architecture pivot:一般企業是高利潤、低貨量(常見於B2B)或是低利潤、高貨量(常見於消費性產品)。

7. 價值擷取軸轉 value capture pivot:改變擷取價值的方法,通常會對公司其他部份、產品及行銷策略產生十分深遠的影響

8. 成長引擎軸轉 engine of growth pivot:加快公司的成長速度或創造更高的利潤

9. 通路軸轉 channel pivot:改變銷售通路

10. 科技軸轉 technology pivot:用一項完全不同的科技,達到同樣的效果。

軸轉是一種策略假設,即使轉錯彎,也要有輔助工具,可以幫助我們瞭解錯誤,並快速地找到下一個出路。


第三部份:「加速」

當初創事業成長成大企業時,仍然可以使用「開發、評估、學習」的方法。

精實創業採用即時可擴展性的方法,進行產品實驗,以避免事先企劃與設計上,花費大量的金錢與心力。

如果要裝一百封信,你會一次裝好一封信,還是先摺好一百封信,再裝入一百個信封袋?答案是,一開始要作小量生產,就可以馬上發現問題。避免進入大量生產的死胡同。

成長引擎,是初創公司用來建立永續經營事業的機制。每一個引擎都跟一群特定的顧客及習慣、喜好、廣告接觸媒介、與他人相互聯絡的方式息息相關。

舊客戶帶動企業成長的途徑有四種
1. 口耳相傳
2. 使用產品的附加價值
3. 廣告刺激
4. 重複購買或使用

有三種成長引擎
1. 黏著式成長引擎:維持高顧客保留率,長期使用。
2. 病毒式成長引擎:人與人之間的訊息交換,藉由人的互動,在無意識下扮演了傳播者的角色。
3. 付費式成長引擎:從每一個顧客身上獲得更多收益,或是降低爭取一個新顧客的成本。每一位顧客在其生命中,支付若干費用在產品,扣除變動成本後,剩下的數目就是顧客的終身價值。

創造一個高適應性企業adaptive organization,一個能夠因應情況自動調整流程與工作表現的機構。

如何培育破壞性創新思維:稀有卻穩固的資源、發展事業的獨立自主權、以及提供專屬個人的戰利品

對於最初的願景,我們應該儘快測試它,而不是捨棄它,我們應該追求杜絕浪費,而不是建造高不可攀的品質標準,應該利用敏捷法來達成,並突破現有的事業結果。

以下列出,書本裡特別指出的「錯誤」想法
1. 透過堅持、才華、好時機、一個好產品,就能成功地致富:有一個對的產品,並不是就能成功,過程中還需要注意很多東西,也就是本書提供的管理法。

2. 創業要有一個完善的創業計畫:因為初創事業的不確定性太高,未來的不確定性,無法使用舊有的管理策略與方式,紮實的經營策略與看似聰明的市場調查是行不通的。

3. 做了再說:當使用傳統的管理方式時,無法解決很多問題,索性就不管了,直接做了再說。然而一個分裂、創新又混亂的初創公司是必須被管理的,而且是使用另一套管理的邏輯。

4. 跨功能工作團隊會影響生產力,應該把依功能分成多個專職部門:對習慣在小範圍內評估自己生產力的人來說,工作一整天不被打斷,代表當天生產力很高。但其實精實創業希望大家用不同的角度來評估生產力,由於初創事業常會意外製造出沒有人要用的產品,在這個狀況下,工作是否準時完成、是否超出預算都已經不重要了。重要的是要儘快想出值得創造的產品,也就是客戶願意付錢買的產品。

5. 將自認的顧客需求當作是真正的顧客需求,很容易去學習到一些與成長無關的事物:使用驗證後的學習心得這個方法,取得來自真實顧客的實際數據作為依據。

6. 這個產品做得出來嗎?比較恰當的問題應該是:「我們應該製造這個產品嗎?」「我們可以透過這個產品或服務,創造一個可以永續經營的事業嗎?」

7. 產品開發部最常發生的問題是,不會去確認消費者到底存不存在這個預先定義,需要去解決的問題。而直接跳到我們有辦法解決這個問題嗎?做事之前應該要問自己(1)消費者知道自己有這個你想幫他們解決的問題嗎?(2)如果這個問題有辦法解決,他們會想買這個產品嗎?(3)他們會向我們購買嗎?(4)我們有辦法解決這個問題嗎?

8. 問題:你們的產品有比較好嗎?回答:是。問題:你們怎麼知道的?回答:我們是工程師,上個月做了幾項修改,客戶好像蠻喜歡的,而且整體銷售數字在這個月也提高了。  實際上要確定這個結果跟我們所做的修改有關。

9. 虛榮指數瞄準人性的弱點,要探究數字改變的原因,是一件相當花錢的事情,因此大部分的企業管理人,都選擇憑自己的經驗和參加會議者的集思做出判斷,然後儘快進行其他的工作。

總結來說,這本書的用意是告訴大家,創業不光是要有一個好的想法,還得搭配一個適當的創業管理法。

2013/1/5

破戰者 by 布蘭登.山德森

又看了一部布蘭登.山德森的作品,破戰者這次所設定的奇幻世界,是運用顏色。

每一個人都有一道駐氣,這個駐氣可以送給別人,失去駐氣雖然不會死亡,只會失去顏色,全身變成晦暗的色彩。得到多餘駐氣的人可以利用這些駐氣行使識喚術,駐氣越多,就能作很多事情。哈蘭隼充滿了各種鮮艷色彩崇拜虹譜,死而復生的復歸者被視為神明。

身體的色彩,讓我回想起很久以前新聞裡面的騙子,我記得應該是宋七力,他們就是用照片去拍攝宋七力,然後看到照片裡面的人,身邊多了一些奇怪的色彩,就說這是神蹟,利用這個方式來行騙。

不知道布蘭登.山德森是從哪裡得來的靈感,竟然跟造神的宋七力一樣,有了顏色就有了神的力量,唯一的差別應該是布蘭登.山德森是拿這個想法合法地寫書吸金。人的身上出現的顏色,衍生成一道精神力量,可以化形改變其他物體的形狀或硬度,可以修補死魂兵,收放之間,就成為特殊的武器。

希麗與維溫娜兩個姊妹,一個臨陣受命,為了不讓義卓司跟哈蘭隼戰爭,臨時代替姊姊維溫娜跟神君結婚,到了神君身邊,發覺神君雖然繼承了強大的駐氣,全身充滿了華麗的色彩,但卻離奇地沒有舌頭,而且還不識字,希麗的行動,為了神君,也為了義卓司的人民,原先對抗的祭司,沒想到最後成了自己的幫手。

維溫娜從小就接受訓練,希望她能從容地面對神君,保護義卓司的人民,沒想到因為父親的轉念,一瞬間失去了生活目標,而獨自前往哈蘭隼希望能解救希麗。原先認為自己利用了傭兵,想不到卻是反過來被利用,只能怪罪自己的單純。

萊聲的部份,就比較獨立,跟其他幾線的情節沒關係,他復歸的二次人生,一直在想盡辦法找回過去的自己。在最後,為了解救法謝而用掉了全身的駐氣,結束了自己身為復歸者的唯一一次任務。

一開始就出現的法榭,總是在殺人,或是做一些地下工作,感覺上跟其他主角的劇情都沒關係,一直到了最後,才點明這才是神君背後的大哥,這樣特殊的關係與結局,讓人非常意外。

這部作品的情節發展,跟布蘭登.山德森其他的作品一樣,同樣是令人覺得每一個階段都有驚喜。不過很多驚喜都在故事的中、後段才發生,看得時候,得要有多一點的耐心,讀者完全沒辦法在讀完前面的時候,就猜到故事的結局。

讀書心得:破戰者(WARBREAKER)
【破戰者導讀文】布蘭登.山德森— 當今奇幻界的說故事天才
破戰者