2014年3月15日 星期六

侯捷的無責任書評三本小書

這 3 本小書把我帶回開始學習電腦的日子, 那是個人電腦蓬勃發展的一個時代。



無責任書評
出版社: 旗標
出版日: 1994/7/11
無責任書評2
出版社: 資訊人文化
出版日: 1993/1/1
無責任書評3
出版社: 松崗電腦圖書
出版日: 1997-12-01

我沒有實體書, 連圖書館也借不到, 所以只能放上網路上找來的照片, 若有人能提供書籍封面照片給我, 我會很感謝。這 3 本小書的銷售量聽起來不是很好, 原來是由 3 家不同出版社出版, 我想說如果不賣座, 那出版社也太佛心了, 怎麼可能一次出 3 集。

呼! 終於看完了, 真過癮! 竟然過了 20 年才看完這三本小書。我不是沒拜訪過侯老師的網站, 只是這些長文章實在不容易在電腦上看, 印出來不算是個好辦法, 在 20 年後的今天, 高科技的電子閱讀器幫了個大忙。文章真的很長, 我相信能在電腦上看完的人應該不多, 我將這三本書的文章轉成 epub, 在我的 sony prs-t1 (它鮮少有發揮功能的時候) 上閱讀, 效果很好, 讀來輕鬆愉快, 可從這裡下載, {1,2,3}.epub 那就是了。

我想我比苦苦等待書籍的讀友幸運, 我一次閱讀完這三本, 不需要苦苦等待續集, 等待的心情是很磨人的。這三本書當然已經絕版, 實在不好買到, 侯老師的絕版書一向是天價, 我在拍賣網站看到有人賣到 800 nt, 這個人大概只知道一半行情, 侯老師的書雖好, 但要以 800 nt 買下無責任書評實在令人難以下手, 能原價賣出已屬萬幸。而且網站已經有了這三本書的內容, 抓下來慢慢看即可, 我想我轉成的 epub 格式可以幫點小忙。



20 年前的內容, 談的技術書籍也許過時, 不過文筆依然精彩, 電腦技術作家竟然有這樣的文字能力。201310 的我忍不住一篇接著一篇讀下去, 我最近被中國簡體中文書籍搞得渾身上下不舒服, 技術主題很好, 不過書中文句讀來詰屈聱牙 (這詞真好), 實在是不痛快。看完這 3 本小書後彷如舒體暢通, 全身經脈皆被貫通, 程式功力當然 ... 沒增加半分; 閱讀過程好像在回憶著 dos/windows 3.1/95 時代的電腦史 (pc), 我從那個時代開始接觸 pc, 那時的我只會用些 dos 應用程式, norton utility, pc tools, pe2, he5, et3 ... 對於程式設計還一竅不通, 電動倒是打了不少, 看看第三波雜誌的病毒專欄, 對於遊戲的破解到是自不量力, 以為靠些工具, 就能破解, 無知的少年阿!

這三本小書提到的電腦技術有: extend dos, ole, vxd, dde, ocx, mfc, active x, c++, application framework, rad ...

當時 (1992) 的 windows 誰與爭峰, 有很多的新技術/名詞一一冒出來, 而 pc 上似乎也沒有其他的 os 能與之抗行 (IBM 的 os2 都無法與之競爭, 還有誰能呢?), linux 成熟已經是很久以後的事情了。ms 說什麼都是對的, 只差屁不是香的, 軟體開發人員只能賣力在後面追趕, 真是要命。從 dos 轉到 windows 可是痛苦的一役, 轉移 windows 的過程, ms 趁機幹掉不少 dos 時代的霸主, clipper, lotus-123, WordPerfect, dbase ... borland 也剩半條命了, 很多沒跟上腳步的 dos 程式員, 也陣亡在 windows 平台上, 競爭程度當然不像現在這樣, 但也很慘烈。

vxd, ocx, ole, vc++, dos extend 這些技術, 我幾乎都很陌生, 就算現在我對於程式設計有所涉獵, 這也不是我研究的範圍, 閱讀這些文章除了欣賞侯老師的文筆, 也順便懷舊這些技術。這些技術一代換過一代, 你認真學習的心血可能很快就白費苦心, 但當時 ms 平台就是一切, 要寫軟體賺錢, 非得在 ms 平台不可, 而要在 ms 平台開發程式, 自然得追上這些技術。Microsoft press 應該也從書籍上撈了不少, 華彩拿到 microsoft press 的中文代理權, 可惜自己卻搞砸了。

我這本 programming windows 第五版就是華彩翻譯的, 沒寄錯應該是以 450 買到; 目前販售的版本則是文魁重新出版的, 有著漂亮的圓弧造型。

寄件者 我的藏書

大一學習 pascal 是我程式設計的學習起點 (高中時期不自量力自學 x86 組合語言, 結果搞得一事無成, 我嫌 basic 太簡單, 此為無知二), 我大二從 turbo c 開始學習 c/dos 程式, 而 windows 程式呢? 那時候運氣好, 不用靠 mfc, owl (owl 早掛了) 寫 windows 95 視窗程式, 我用的是 bcb 1.0, 當時若認真學習 mfc, 恐怕也是浪費其投資了 (當初只是純粹不喜歡 ms, 不想學他的東西, 比較喜歡 borland, 不過學習 bcb 現在也是浪費掉了), bcb 在 2013 推出了新版本 - xe 系列, 希望能為這個威力強大的產品延續新生命。我倒是看了侯老師的深入淺出 MFC (其實只看到第三章), 雖然我不學習 mfc, 但是 mfc 其中的實作講解卻很精彩, 可以用在自己的 c++ 程式上。Dynamic Creation 動態生成讓我大為震驚, 好威阿!印象深刻。

用 bcb 1.0/delphi 寫了學校作業後, 大四開始, 我轉向 linux 平台, 開始學習 unix programming, 這時候買的書籍都是 linux/unix 相關, 我急著想把 vi 學好, 搞懂 makefile 的寫法以及 gcc 的命令列參數, 我永遠不會忘記使用 vi 的痛苦, 還得真要有決心才能學成, 因為 linux 也有類似 pe2 的 qe2 可用, 但我就是要學 vi。在當時 ms 如日中天, 不可一世的盛世下, 同班同學們還擔心我以後要靠什麼吃飯呢! 不過我還真的靠 linux 一路吃過來。

本校的資訊系很奇怪, 竟然沒有教 unix 系統與程式設計, 我認為這是本科生和業餘愛好的重要分野之一 (就像是系統程式、編譯器與作業系統, 這在業餘同好下是比較少能接觸的項目), 在那時候, 還有那個科系可以接觸 unix 系統呢? unix 可不像 dos 般, 隨便就能裝在 pc 上, 是有安裝/學習的門檻。

不過 c 語言課程的程式得上 unix 編譯成功才行, 不能使用那時候流行的 turbo c, 很多人到了 unix 主機上開始狂改程式, 但由於沒什麼 unix 教學課程, 連要在 unix 系統上使用 c compiler, editor 都是一大難題。

現在當然不同, linux/bsd, 甚至 mac osX, 已經很容易接觸 unix like os 了。我還記得老師教我們 vi 時的慘狀, 老師學問很好, 不過教學能力似乎沒跟上他的學問, 50 分鐘的課程, 完全把 vi 難用難學的精神發揮到極致, 老師上完課後, 我感覺 vi 更難了, 應該不是我個人資質的問題, 全班會的人五隻手指頭數的出來。果然印證之前難學的傳聞, 這也是為什麼我用 linux 後, 想把 vi 學好的原因。不過我後來才知道有個更難學的 emacs。

在向 linux 靠攏後, 我不再使用 ide, 這讓我學習到程式的本質, 而不是按個鈕下去通通搞定, 我們是造車的人, 一定要從輪子造起, 現在我偶爾寫寫 windows 程式, 也是使用 command line 方式, 不是和自己過不去, 而是已經習慣了, 我想知道整個編譯/連結流程, 這是寫程式最基本的認識。我並不排斥使用 ide/rad 這些工具。侯老師也是這樣建議初學 c/c++, 不自己下 command, 怎麼知道整個編譯過程, ide 的選單為什麼設計成這樣?

雖然我沒跟上 dos/windows3.1/windows 95 這個 programming 風潮, 但我走的另外一條路卻經歷了另外一個盛世, opensource 的興盛, 使用 linux 很自然地就融入 opensource 環境, 我從這裡認識了 gnu, linux 上各式各樣的 opensource 軟體, samba, qt/kde, gtk/gnome, apache, opensource 界真是軟體人的寶藏, 原始碼面前沒有秘密, 除了培養自己看文件找文件的能力, 還能閱讀各式各樣的的原始碼, 只要喊一聲「芝麻, 開門!」, 就進入 opensource 的寶藏庫房。我到很久之後才知道有 msdn 這樣的東西, 是比自己胡亂的找文件、看 source code 方便, 各有其優缺點。

那時候的 ms 世界流行著事件驅動程式設計, c++ 大軍壓境, application framewrok (mfc, owl), rad (delphi, bcb), 充斥在 ms 平台上, 我也在這時愛上了 c++, 不過 linux 這邊的世界還是以 c 為主要開發語言, 但我仍然鍾情於 c++, framework 我沒缺席, 我捨棄了 c 的 gtk, 學習 c++ 的 qt framework, 從 qt 2.0 算起, 到 2013 的 qt 5.2, 還是能用, owl 呢? mfc, delphi, bcb 似乎沒當年神勇, ms 平台流行的開發環境主流變成 .net, c#, java, qt 也慢慢佔有一席之地, 甚至向 mobile 平台進軍, 支援android, ios, 繼續擴大其支援的範圍, 我心理想道:「好險阿! 沒挑錯!」mfc 有 mfc internals, 深入淺出 mfc, 兩本介紹其實作的書籍, 我也想看本 qt internal 的書 (QtInternals 勉強解解渴)。

2013 的 ms, 影響力沒這麼大了, 資訊領域變化真快, 掌控作業系統平台的廠商竟然也吃鱉, 看看浪潮之顛第二版 (下), 你可以知道 ms 因為作業系統的壟斷, 幹掉 netscape, realplayer ... 一堆有來歷的公司, 實力之強無需懷疑。 那為什麼呢? 因為另外更大的平台出現了, 手機、平版、網路, 手機被 apple, google 掌控, 網路服務則是 google, facebook, amazon 的天下, 誰要寫 windows 程式阿, 難道又要被你 ms 綁架, 很多程式以 web 方式執行在 windows ... 扼 ... 應該說是瀏覽器上, 免得你 ms 一改, 我就要跟著改; 遊戲世界倒是沒變, 依然是 ms 天下 (當然手機、網頁平台也很蓬勃), 不過 linux 也有所成長。還有很熱的嵌入式領域, ms 在這方面, 力道上並不如桌面平台那麼強勢, mcu, arm 平台非常熱門, linux 在這裡可是蓬勃地發展著。當年 windows 95 的測試版本可還要自己花錢買, 現在的 windows 8.0 呢? 微軟還怕你不用呢? 我認為侯老師後來研究的主題大多和 os 平台無關, 多少也有點關係, 誰希望自己辛苦所學付之一炬呢?



看了書中介紹的 ole, 其實我還是不知道 ole 到底是幹嘛用的, 因為後來又冒出 ATL, ActiveX。

這幾篇文章稍微讓我對 COM, OLE, ATL, COM, ActiveX 有點概念。
http://bbs.csdn.net/topics/330130853
http://bbs.csdn.net/topics/30173297
http://bbs.csdn.net/topics/340083590

From COM to COM 這篇的書評有介紹以上的東西。



這篇侯老師提到的 processes、threads、modules、address space、executable file format (我還真的去找相關的書來看, 懷舊一下舊技術, 上圖那本 windows 作業系統就有介紹這些技術), 在 linux 裡頭對應有, process, thread, modules (elf 在記憶體的樣子), kernel/user space(??), pe vs elf, 我從好幾個地方也學習到這些, 但我對 gui programming 還沒深刻的體會, X 博大精深, 資料難詢, 使用 qt 就好些。平台不同, 學習到的基本知識倒是一樣, linux 上這些東西比較容易學習, 不需要和 gui 打交道, 可以簡化不少程式碼。侯老師書中也提到可以使用 win32 console 來學習著些基本東西, 不過在 unix 上這是很自然的東西就是, 幾乎每本 unix programming 都會提到。而我在經過 os 學習之旅的洗禮後, 可以自己寫出 system call, context switch, setjmp/longjmp 這些功能, 了解這些東西, 真是讓我開心不已, 學習本身就是一種樂趣。

『application framework 用來幫助我們提昇開發生產力, rad 則是個極致表現。』在那這年代就已經有這樣的討論, 那我們是不是還需要了解其中的黑盒子呢? 到了 2013 年的現在, 這樣的情形更嚴重了, 這是個停車場管理員程式設計師的時代, 巨匠的廣告資訊人皆知, 停車場管理員都能變成程式設計師, 現在的開發工具已經把門檻降的更低了, 不過軟體品質似乎沒有提昇的跡象。台灣老闆要的似乎是便宜的工程師, 而不是厲害的工程師, 所以在職訓局/資策會訓練過幾個月課程的人, 就足以取代 4 年班科的學生, 除了便宜, 我實在想不到有什麼理由這些老闆會用這樣訓練出來的人, 是 4 年大學教育比不上職訓局/資策會嗎? 是 4 年教育太糟糕, 還是職訓局/資策會的課程太優秀了? 我沒小看職訓局/資策會的課程, 我知道有些課程是很硬很紮實的, 真能學成, 到底也有了一招半式可在江湖闖蕩。

我去職訓局學做菜 (我並非開玩笑, 我是真想學做菜或是麵包), 別說大飯店, 有機會到小館子當廚師嗎?能把雞排炸好就不容易了。

這 3 本小書提到不少電腦書出版環境、文化, 我心有戚戚焉, 自己也很注意這方面的資訊, 最近我已經慢慢將中文圖書的購買方向轉移到簡體中文電腦圖書, 我看著那些豐富的主題, 實在令我羨慕, 更痛恨那些把簡體中文做的很糟糕的出版社, 看看 Orange's 一個作業系統的實現我所提到的錯誤, 我很喜歡這本書, 結果被做成這個樣子, 好在我還是把他讀懂了, 沒有浪費作者的心血。過了 20 年, 電腦圖書界似乎沒有什麼變化, 好在優秀的出版社也是存在的, 碁峰程式設計師的自我修養 - 連結、載入、程式庫就很好, 用心做還是可以的。

苦澀後的甘甜 - Windows 系統深耕一文提到
練習 system programming, 當然痛苦。但是歷鍊過後, 那種掌握來龍去脈、洞悉系統奧秘的感覺, 又讓我們苦後回甘,如溽夏苦茶。
在我經歷過 simple os 的修煉之後, 我也有一樣的心得, 整天反組譯, single step, dump 記憶體位址/暫存器, 盯著那些 16 進位數字, 按下計算機做計算, 只為了找出哪裡搞錯了, 這可真不輕鬆。換來得回報是 ... 「朕 ... 知道了。」就為了這個知道, 付出巨大心血, 值得嗎? 當然值得!不像侯老師鑽研 windows/dos 系列, 我之前傾向以 linux 來學習, 不過成效不章, 直到 Orange's 一個作業系統的實現這本書出現, 終於讓我進入 os 大門, 經過一年修煉, 方得善果, 固中滋味, 只有同樣經歷的人才能體會吧!有了 vm 環境, 不像前人的學習般那麼苦澀, vm 帶來的便性, 加上使用除錯器, 不用因為程式寫錯重新開機, 時代的進步能幫助我們更容易學習這些技術, 而這些工具軟體還全部都是 opensource。

看到 Matt Pietrek 失業那段, 我真的嚇了一跳, 這樣的人也會失業 (被裁員), 他寫了以下書籍:

  • Pietrek, Matt (November 1, 1995). Windows 95 System Programming Secrets. John Wiley & Sons. ISBN 1-56884-318-6.
  • Pietrek, Matt (May 31, 1993). Windows Internals. Addison-Wesley Professional. ISBN 0-201-62217-3.
  • Schulman, Andrew; David Maxey, Matt Pietrek (August 1, 1992). Undocumented Windows. Addison-Wesley. ISBN 0-201-60834-0.

應該可以讓你瞭解他的能耐, 所以一時的失意難免, 記得站起來就好。他曾經在 borland, microsoft 工作過。他的書籍在探討 windows 系統的一些實作, 類似講解 linux source code 的那些書籍, 不過當然是 Pietrek 厲害多了, 他可沒有原始碼呢!都是靠著反組譯來猜測 windows 的設計/行為。現在這些書籍多了一點, ms 適度的開放原始碼給學術單位, linux 上類似的書籍相對較多, 畢竟有 source code, 沒有秘密的存在。

書價是個有趣的話題, 我也曾經抱怨過很貴很好的書, 很貴很爛的書就別談了, 應該沒什麼市場, 我抱怨歸抱怨, 還是老實的從錢包把新臺幣掏出來, 好書難求, 而且很奇怪, 當我知道一本好書時, 它通常都絕版了, 我總是得到二手市場費盡千辛萬苦才有機會尋穫, 不是每次都有這樣的好運氣, 難道好書不長命, 出版社不能評斷哪些書和潮流/時代是沒有關係的嗎? 像是 design pattern, 深度探索 C++ 物件模型 (繁體絕版了, 好可惜) ... 這些談的都是基本的知識, 不會被技術潮流所淹沒, 是能長賣的, 我現在寄望於電子書, 希望能讓絕版書重新藉由電子化而復活; 反正出版社也都不賣了, 以電子書形式存在, 賣的算是多賺的吧! 現在我很害怕好書絕版, 只要看到, 我便出手買下, 不管我是不是用得到, 可憐我家書櫃, 擺上一堆火力展示用書籍, 它苦我也苦。現在已經不嫌書貴了, 能看到想要的主題還得感謝作者/出版社, 願意作出自殺的行為, 懷著感念的心購買, 順便幫忙推銷給親朋好友, 別讓好書叫好不叫座, 好書難求阿!買書不是買紙, 價錢當然是不一樣的。

文章中探討很多出版界/中譯本的現象, 看得我心驚膽顫, 怕侯老師真的把出版社都得罪光了, 以後沒人出版他的書怎麼辦? 敢說出這樣的批評還是要有相當實力, 要不然被封殺是意料之中的事情。最近洪蘭的翻譯也被提出來檢討, 本人也沒特別說明翻譯錯誤的部份要怎麼處理, (出版社也是一個樣), 如果連這樣的學者招牌都不是品質保證, 那台灣讀者真得自求多福。

國內還有一本類似的書籍: 爪哇夜未眠



竟然有第2版: http://book.douban.com/subject/1168545/
讀來也是有趣, 看看書中談的程式員生態, 從枯燥乏味的技術書籍中轉換心情, 真實世界就是這樣。

本篇文章有些照片是我蒐集的書籍, 在這三本小書上都有提到, 我的當然是中文本, 無責任書評大部份提到的書籍是原文書, 要看原文本我可沒這樣的能力。

我實在很猶豫到底要不要找尋二手版本, 以我的 sony t1 閱讀這類文章, 非常適合, 購入這 3 本小書勢必又苦了我的書架, 而且又不好找, 價錢高的話也不考慮, 我可不想有了二沒有一, 有了三一卻無二, 你知道蒐書人最討厭缺了幾本書了。

2 則留言:

  1. 侯捷的書都很有質量,我以前在想他的書都很有深度會想看的人應該不多才對,不過看他絕版書網路賣價都是幾倍起跳感覺收藏的人應該不少,有些書我也都只有“白皮”版本,我最近也在找 記憶體受限系統之程式開發 這本書。

    回覆刪除
  2. 記憶體受限系統之程式開發 有簡體中文版本, 退而求其次是個不錯的主意。

    回覆刪除

使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。

我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。