Category Archives: 書評

知識看過很容易忘記﹐要寫出來才會留下深刻印象。我希望能夠把知識與讀者分享﹐刺激他們閱讀那些書的興趣。

Formal Verification – Erik Seligman, Tom Schubert

這篇不是書評,這本書亦不是一般自學程式設計的電腦書,是一本涉及非常專門的知識,只有設計晶片才會用得上的技術課本。非行內人完全看不明白,這篇只是我學習formal verification(形式化驗證)的心得和筆記,所以我亦不期望有什麼讀者。

什麼是Formal Verification?首先要講什麼是dynamic verification,設計晶片不同寫程式,寫程式有bug很簡單,除錯出patch沒有什麼大不了。晶片有bug就很大件事,因為要更正問題,就要重新tape-out多一次,去做一個全新的mask。可以想像製造晶片好印黑膠碟,先要整有一張母碟,然後才可以覆印,mask就是silicon的母碟。傳統上測式晶片設件主力用simulation(即dynamic verification),要花很多人力物力寫個testbench出來,然後模疑晶片所有的input同output。這是一個非常嚴格的工序,因為一個bug也不可以走漏。晶片出了街之後,fix一個bug的成本是幾百萬美元。寫testbench同寫普通software沒有太大分別,只不過測試硬件比測試軟件嚴格很多。Formal Verification則是用另一個方法去測試硬件,不用寫code,寫formal specification,再用數學邏輯理論,去證明硬件的設件必定等於那個specification。完全不同的思考方法,完全不同的用途。Formal Verification可以測試出simulation找不出來的bug,始終simulation並不是exhaustive,不過formal有很多限制,設計不能太大不能太深,始終formal proof係一個NP-complete problem。

多年來formal一直只是學術研究,真正的商業應用,大約五六年前才開始。早期的formal tool非常難用,常常被戲說要博士才懂用,很多designer聽見便敬而遠之。直至JasperGold的推出,formal才開始普及化,這些年來JasperGold手執牛耳,一枝獨秀差不多等同於formal的代名詞。早兩年我也嘗試過學formal,不過當年JasperGold的license太貴,我們細公司買不起,只好用了一個很差很難用的IFV,結果學師未成不了了之。去年我公司被一個大公司收購了,economy of scale讓我們有多好多tools用,今個project終於有機會用到JasperGold,同IFV相比簡直是天堂和地獄,「工欲善其善,必先利其器」,其實formal一點也不難,我花了兩星期便滿師,可以學懂簡單的formal specify,去proof我個design不會有dead lock。如果要用simulation作同樣測試,因為太多corner cases,是一件非常痛苦的差事。現在用formal去做,幾行code寫完,是一件很好玩的玩意。

我一直都有follow開formal的paper和tutorial,雖然沒有實戰經驗但formal理論大至明白,用新tool不過是學syntax,很快上手。我公司的formal expert介紹我看這本《Formal Verification》課本,這本書是三位Intel工程師編寫的,由淺入深講解很有系統地如何應用formal verification,真正的hard-core技術含量不多(技術東西可以自已看document),反而更像是過來人分享心得和經驗。這本書九成是老生常談,平時睇tutorial睇paper都學過聽過,不過餘下的一成非常有用,讓我茅塞頓開,很多看已paper不明白人家為什麼一定要這樣做的地方,經他一解釋完全明白,一理通,百理明。這本書可以說是我formal的啟蒙老師,任何一個初學formal者必定要看。市面上formal的textbook一隻手數得完,因為formal是太專門的技術,譎想想學就要交很貴學費請consultant去教,不過我認為這本書比consultant教得更好,因為作者有真正的實戰經歷,不似consultant般大多紙上談兵。

以下是我認為書中有用的formal「心法」:

  1. cover和assert是同一塊鏡子的兩面。同一個property,cover就是not左個property的assert的counter example。assert就係not左個cover既unreachable proof
  2. Formal engine係一個breath-first咁去行所有的state space。assume同assert就係cut細個state space,cut走左illegal state,如果行到去specification果個state,咪就proof度囉。
  3. 一開波不要立即寫full proof,先由cover開始玩。唔用assume,剩係寫你想睇乜output,睇下formal engine可不可以back trace你想要的input,然後再慢慢fine-tune那些assume
  4. 用cover整好晒assume,就可以上去bug hunting,專心搵assert的counter example,最後才整full proof。用之前兩個steps的assume
  5. 唔好load太多code,太多assert同cover,要divide and conquer。有些tricks可以用,如cutpoint,abstraction,free variable等等

Stories of Your Life and Others – Ted Chiang

看完電影《Arrival》,被故事的內容深深吸引,找來原著短篇小說《Stories of Your Life》細閱,一開之下加驚為天人,其意念比起電影版的表達更深入,電影版只拍出原著三分之一的精髓。原著收錄在Ted Chiang的短篇小說集內,恕我孤陋寡聞,初次接觸Ted Chaing的大名。此君只兼職寫科幻短篇,產量不多,但慢功出細貨,每篇均是精品。他是星雲獎和雨果獎的常客,一本小說集裏頭十二篇故事,分別有九篇提名六篇奪獎,絕對稱得上當代最有影響力的科幻作家。

Ted Chiang的科幻短篇故事性不強,不像傳統長篇科幻小說般以橋段吸引讀者追看,反而是他的故事內創新的意念,不斷衝擊著讀者的思維和慨有觀念,為讀者帶來知性上的滿足感。他的小說可以粗略分為兩類,第一類是與傳統科幻小說相近,探討未來科技帶來的可能性。他的故事有一個特色,就是主線本身並不是故事的核心,只那科幻題目哲學討論的載體。他是故事更似是一篇哲學論文,只不過以故事形式表達出來。第二類是復古科幻,故事中的世界並不遵從現實世界的物理法則,而是假若古代人對世界的錯誤理解為真,那會如何演化出一套合理的世界觀呢。讀者會讚嘆其世界心思細密的設定,發展出一套自成一角自圓其說的科學觀。在其他奇幻故事(如哈李波特,魔戒,冰與火),世界觀只是說故事的舞台,但他的故事舞台本透才是的主角,故事中的人物角色,只不過是讓舞台不至於太過空洞單調矣爾。

以下是書中我特別喜歡的故事,在此誠意推介給讀者

《Tower of Babylon》是他的成名作,若果地球就如聖經記載一樣是平,若果上帝不干涉人類起巴比倫塔,塔頂接觸天堂的底部。從一個石匠受聘花數月時間爬上通天塔去開鑿天堂之門,看那會是一個個世界

《Understand》是電影《Lucy》的硬科幻完全進化版,能使用腦袋百份百能力的超人,而若果同時有兩個這樣的人,一個外向想把世界改造成完美,一個內向想探求世界萬物的真理,兩雄相遇的結局會如何呢。

《Story of Your Life》相信不用多介紹了,《Arrival》的原著,從時間並非單向的物理悖論開始,一個語言學家從外星人學習外星文字後,從而打開了雙向時間之門,「記得」未來將會發生的事情。

《Hell is the Absence of God》是對聖經約伯記中苦難題的更深入探討,在一個神與天使經常向人顯現並行神蹟的世界,一切發生在人身上的好事和壞事都沒有解釋,那人如何保持對無常的神的信心呢?此故事同時榮獲星雲獎和雨果獎

《Liking What You See: A Documentary》如果有中文譯名,我會把它譯作《你的樣子如何,你的日子也必如何》。外貌歧視算不算歧視?如果未來科技可以改寫人腦神經,讓人只能客觀地分辨外貌,沒有愛美惡醜的主觀感覺,會如何呢?這故事是一套偽記錄片,記錄支持外貌平等的壓力團體,要求立法強制所有人都不辨美醜的一場社會運動。故事從多個不同支持和反對的角度,全面檢視美醜申延出的政治哲學,自由vs平權,社運vs美容業,分辨美醜有用vs沒有用,美醜是客觀vs主觀等等的議題。整本書我最喜觀這個故事,不過作者竟然以故事還未如理想,自動提出放棄星雲獎的提名。

《The Merchant and the Alchemist’s Gate》是另一個同時奪取星雲獎和雨果獎的故事,在中世紀回教文明黃金年代的巴格達,有一道能夠時光倒流二十年的時空門,在歷史不能改變的大前提下,說出一個戲中戲中戲的感人故事。即使歷史不能夠改變,回到過去還是有價值,可以讓看清楚當年錯過了的另一面,從而學懂纖悔,學懂寬恕,學慬放下。

《Exhalation》是我最喜歡的第二類故事,作者用一個以氣壓運作的宇宙,以活塞和槓桿發動的機械宇宙人,來作比喻我們宇宙中熵的消逝。

《The Lifecycle of Software Objects》探討AI的人權和社會關係,教養一個AI好比教養一個孩子,一個橫跨十多年的故事,不過結尾有點不了了之。故事中提出很多有趣的觀點,當我們研發出一個真正懂得學習懂得思考的AI時,將會如故事中一樣,改寫我們的法律和人倫關係。其中一個有趣的提案,雖然AI不是人,沒有人權的保障,但通過成立一個公司,為AI取得法人地位,AI自已當CEO自已當董事,AI可以擁有財產可以簽合約,基本上就擁有與人類等同的社會地位。

我寫這篇書評時,看了紐約客和他的訪問。原來Ted Chiang的正職都是以文字搵食,編寫電腦軟件的使用者手冊。很難想像同一個人,一邊寫味如嚼蠟的使用者手冊,另一邊寫獲獎無數的科幻小說。

陌事錄

等到頸到長,終於收到我那本有容總和Can姐親筆簽名(為什麼巴塔沒有簽?哼),非常珍貴初版限量發行的《陌事錄》畫集。輔仁媒體第一次出書不是支持理由,反正文章都在網上都看過了,不用花錢去買書吧。不過這本書不是純文字的散文集,而是一本以香港昔日風貌作為主題的畫集。文字在電腦看還是書裏看沒有大分別,但圖畫在屏幕上看感覺總是差了點,要印在紙上捧在手裏細意欣賞,才有味道。

不知是出於懷舊心態,還是人老了就愛想舊事,看見Can姐的畫,一份親切的感覺油然而生,回想起那個只存在於記憶中美好的香港。畫集中圖畫當然是主菜,文字大慨是隨書附送的配菜吧。大慨是容總諗縮數想慳墨水,美其名172頁全彩畫集,全書只有約六十幅Can姐的水彩畫,Facebook《畫舊時》專頁中還有很多精美的畫未能收錄,特別是我最喜歡那張飛機在九龍城上低空飛過的畫,有點兒叫人失望。若果是因為篇幅所限,那也沒有法子。可是文字排版留下甚多空白,若果可以用更佳的字型排版,把文章整齊的印在一頁或兩頁中,不會多出數行字白白浪費一頁紙,至少可以收錄多七八張圖畫。

Can姐的水彩畫,有讚冇彈,彈只有嫌不夠。至於巴塔的文字呢~ 巴塔貴為高登名人,別名文字生成器,我批評他寫的東西,恐怕會開罪不少人。不過身為一個負責任的書評人,我有義務說出事實的真相。平時看巴塔的文章,逐篇逐篇分開看,不覺得他的行文風格有問題,甚至愛看他那嬉笑怒罵的處世態度。不過當一口氣連續看他的文章,點與點連成線,才發現其實他的想法都幾負面。不知是否預期與現實的落差,原本我期望書中的文字,會是販賣懷舊溫情,第一章「日常」便寫得十分好看。然後中段開始(消費那篇是轉捩點),忽然變成港事評論,讓我看得很不爽。若果文章是用舊日的美好,對照現今的景況(如打字機,太古城那幾篇),那是沒有問題的。但好些文章只是借題發題,完全沒有講舊時,感覺上寫離題了。反而清君,Can姐和容總親自執筆那幾篇文章,雖然文字沒有巴塔的老練,但勝在回憶真摯,讓我等老餅有所共嗚,我認為那才是《陌事錄》文章的理想形態。

不知道容總還有沒有存貨,若果你還未買的話,單是Can姐的水彩畫,就是足夠的購買理由。文章免費隨書附送,不喜歡離題萬丈的那幾篇,只要跳過不讀就好了,這樣便不會拉低全書的平均分。《畫舊時》專頁還有不少存貨,如果容總今次不用蝕本的話,我很期待會出版《陌事錄(二)》。

科幻文學解構 – 黃海

我自幼熱愛科幻小說,當年街口的公共圖書館,所有科幻小說差不多都借閱了。除了衛斯理和翻譯作品,便到以張系國為首的台灣科幻作家。其中一個我十分喜歡的作家是黃海,他的《銀河迷航記》我更反覆看了數遍。某天我從網絡上不記得那兒看到,黃海出版一本論述科幻小說的新書《科幻文學解構》。若果只是他新寫的科幻小說,我未必有興趣看,畢竟我那份計劃要看的星雲獎書單已經非常長。不過專題探討科幻小說的書,就算是英文書也是非常冷門,中文就我只記得很多年前李逆熵寫的那本,於是我想也不想便上網郵訂寄過來。

這本書可謂一本關於科幻的散文集,內容不單止講述科幻小說的歷史,探討不同類型科幻作品的異同,講解軟科幻硬科幻奇幻的分類,科學在科幻中的地位,以科幻題材才分類推介經典名著,講解不同時代科幻的寫作背景,還有分析科幻小說寫作的方法,主要科幻小說說故事的法則等等。書中提及的外國科幻作家我比較熟悉,而書中回顧中港台三地的科幻發展,介紹以憑《三體》榮獲星雲獎劉慈欣為首的近代大陸科幻作家,正好彌補我所知的不足。大陸近年科幻熱潮爆發,衝出國際揚威海外,反觀港台科幻發展則是一潭死水,科幻被歸類為童書,實在令人不勝希噓。

黃海書中多次感慨科幻文學地位的低落,自從荷里活掛名科幻的電腦特技片當道後,在一般人心中科幻與通俗娛樂畫上等號,被排除在嚴肅的主流文學之外。不知道是黃海身為作家的情意結,還是港台缺乏科幻和科學文化的土壤,我身處北美以矽谷為中心的geek文化圈中,科幻文學一直都被受推崇,地位甚至超越主流文學。我們理科人或多或少總是輕視文學和藝術,認為那些是曲高與寡的小眾玩兒,是沒有用沒有人看的悶東西。反而講求創意思維前膽的科幻小說,成為不少人努力的夢想和目標,要把科幻中的描述化為現實,才會從一個普通人進化成geek。

科幻小說的愛好者,必定會很喜歡這本書。此書雖然好看,但不適合手不釋卷地一次過閱讀。誠如作者在自序中所言,此書是他多年來關於科幻文章的結集,文章之間有不少內容重疊,若一口氣看會有點沉悶,怎樣同一點子不停出現。不過如果分開閱讀,有空時才拿出來讀一章,每篇文章的中心有所不同,那些重覆點例子只是旁枝,細節隔幾天也記不得清楚,便不會覺作者長氣沉悶了。

最後例出書中一些關於科幻小說的金句,與大家分享一下,十分意思。科幻愛好者,讀來這些金句,想必會心微笑,彷如他鄉遇知音人。

  • 科幻小說就是如果的藝術 – 黃海
  • 合理化超現實的想像,是科幻小說的最大公約數 – 黃海
  • 所有超常的事物,都必須有合理的解釋 – Edgar Allany說明科幻小說的規則
  • 科幻愛好者傾向視無睹書中對科學正統的越界(比如超光速飛行),而又對小紕漏的合理性吹毛求疪。- Adam Roberts
  • 科學在科幻小說中的位置,類似於掛小說的釘子 – 黃海
  • 科幻小說裏的科學多半是偽科學,是藉以擴充幻想範圍的工具 – 張系國
  • 科幻小說企圖佔有主流文學的位置是科幻小說的「墮落」。由次文化「墮落」回主文化去,對次文化本身的成員講,這是一種倒退,其至是種離「經」叛「道」的現像 – 張系國
  • 科幻小說基本上是世界性的,在科幻小說裏民旅身份的特點並不重要 – 小池山野
  • 科幻小說的威脅並非來自其他通俗小說,而是和科幻小說爭食科幻大餅的科幻電影 – 紀大偉
  • 他從末長大,也沒有停止長大 – Arthur C. Clark的墓誌銘(我認為也是科幻迷的寫照)

Introduction to Computer Theory – Daniel I.A. Cohen

9788126513345_1

在很多大學中,電腦系不是附屬於工程學院,便是附屬於科學院。我以前讀的大學很奇怪,電腦系是附屬於數學院,當年我不明白原因,電腦可以用來計數,但電腦和數學有什麼關係呢?我是讀電腦工程系出身的硬件人,當年與電腦科學的同學談起,聽他們說電腦理論很難明高呼救命,天真的我以為讀電腦科學不就是學寫程式嘛,有多難?直至很多年以後,某次去印度工幹買了這本《電腦理論入門》,丟在書架上又過了幾年,然後某天心血來潮打開來看看,前後繼繼續續花了兩年多才看完,終於我明白原來電腦理論不等於電腦,而是數學上如何械械式解答問題的定律。

這本Daniel I.A. Cohen的《Introduction to Computer Theory》,是電腦理論的經典課本。某種意義上,這本書非常沉悶,全本書就好似中學讀數學不停學proof。從最簡單的regular expression開始proof,一路到finite automata,到context-free grammer和pushdown automata,最後就是頂頂大名的萬能電腦原形Turing Machine。證明什麼類形的電腦可以接受什麼類形的language,某notation又可以如何與某graph等同互換。最精彩的章節是詳細解釋Turing Machine,以前上堂聽過這個term,記得教授說過TM是萬能電腦,看完這本書後,終於明白為什麼TM可以計到任何可以計得到的數,即可以解答任何能找出答案的問題。再一次佩服Alan Turing的天材,TM的構造極其簡單,可是沒有任何機械能超越TM的解題能力。

最初開始讀這本書時,我不明白language同電腦有什麼關係,不就是一串串不同的string,起個state machine去判斷一個input是否屬於language之內,程序上是有點麻煩不過也不是很複雜,要用咪call library囉。去到context-free grammer開始看到有點關係,至少寫compiler的第一步就是要parse個syntax tree。一直以無比的耐心閱讀著,逐步逐步follow書中的proof,然後有一天開竅了,忽然間看到language和solve problem之間的關係,任何能夠解答的問題都是一個數學題,電腦就只是從機械化地處理input,然後給一個output的系統,output可以是答案,但更多時間只是一個yes/no answer,又或者更基本的halting problem。找出一個問題的答案,只是最表面那層,找出一問題有沒有可能有答案,如果有答案的話,有限時間內能否找到,那些bounding的meta問題,才是電腦理論的核心。至於如何寫個行得快些慳位些的algorithm去解題,已經是應用層面上技術性的次要問題。

若果不打算理會那些proof,這張圖表大慨是全書內容的總結。老實說那些proof讀完大部份都忘記了,能夠記得大慨就只有這圖表的內容。不過讀proof的最大得著,是讀proof會潛移默化你腦袋的思路,看完知道的東西和未看差不多,但再遇同類問題時會有一份直覺。

初版pdf下載,我看的是第二版實體書。