討論串【拋磚引玉】

WeiPo

侯捷註:本文是 WeiPo 先生在 BBS 上的發表
轉載於此以饗讀者,非常感謝。
文後有一些對話。


作者 WeiPo.bbs@csie.nctu.edu.tw (Weber), 看板 programming
標題 我的 DDK 學習經驗
時間 交大資工鳳凰城資訊站 (Fri Oct 3 13:02:58 1997)
───────────────────────────────────

自從 97 年 1 月 我在 Program 版 Post 鼓勵有心網友學習 Windows Device Driver 以來, 陸續收到一些人詢問如何下手. 現在我已沒時間玩 BBS, 因除了 3D 顯示卡 Driver 要 tune 外, 還被派去做一些雜七雜八的事情. 趁教師節比較有空, 寫下這封我學習 DDK 的經驗, 如果哪站的站主覺得對網友有幫助, 就儘管利用, 不用客氣. 但需注明出處, 並嚴禁有任何謀利舉動(如剽竊修改後, 來賺取稿費), 曾對一些網友提出如何在MFC 中用 I/O Port Function 的問題, 回答了 6 次, 讓我覺得很煩煩煩煩煩煩. 希望這種情況不再發生.

本文供分 3 段:

(1) 為何我要學 DDK
(2) 學習 DDK 的過程
(3)未來可能的發展.

(1) 為何我要學 DDK

我是資訊科班出身, 就讀過交大計工, 清大資研. 歷經 78,79 股市狂飆, 退伍後, 認為寫程式沒什麼前途, 也無法撐到 38 歲. 但 MBA 卻是越老人脈越多, 收入也越多, 所以進資策會, 一面工作 一面準備 GMAT, 但沒申請到理想的學校, 而考外貿協會的人才培訓班, 在複試時也被刷下來. 最後認命乖乖學 Windows 3.1,

第一年做多媒體資料庫專案, 當時連 VC++ 1.0 都還沒出現. 就用 Borland C++ 3.0 以純 SDK 方式 coding,(因不知道有 OWL 這種東西) 事後想起來真是因禍得福, 讓我更了解 Window 底層的運作 (不過當時真的覺得很幹).

第二年做 Video Editor 是我比較快樂的時光, VC++ 1.0 剛出來, 但市面沒一本相關書籍, 連 MSDN 也一樣. 怎麼辦? 到處找不到資料. 最後用最笨的方法: 用 Debuger trace MFC source code! 然後搭配 Video for Window 1.1 版 SDK 來coding, 當時傻傻得, 以為可以做個 Video Editor 跟友立拼, 所以常常加班到 10 點, 但後來 Video Editor 結案後就放到儲藏室, 而 Aldus 被 Adobe 併購, 友立也把 PhotoStyle 賣給 Adobe. 這件事件讓我得到個教訓: 套裝軟體不好做, 更難與國際大廠同類型產品競爭.

因有時 Video Editor 會利用 MCI Command 來控制 AVI/FLI 播放, 但覺得很奇怪, 那MCI Driver 到底在搞什麼鬼? 在好奇心驅使下, 翻 MSDN 的 MultiMedia Device Driver 來看, 才搞懂 MCI Driver 如何與底層的 Video/Audio Driver 溝通.

第三年是最黑暗的時期, Team Leader 包個 Multimedia Title 來做(還曾打算向敦煌科技包 Game 來做). 美工, 企劃, 全和在一起, 而要我用 Director 3.0 的 Lingo 語言來寫Title 的 Program. 我便開始消極抵抗, 同時自己偷偷用 MFC + WinG + 32 Bit Assembly 在 Win 3.1 上寫個類似 Director 3.0 的 Engine. UI 及繪圖引擎都完成, 而且播放速度比 Director 3.0 還快. 但卡在不知道如何設計 Script 及 Interpreter. 最後只好做罷. 然而轉捩點就發生在這一年: 應台北電腦工會之邀, 開門 "Windows 影音驅動程式剖析" 課程而與童子賢先生有一面之緣(當副總的他竟跑來上我這無名小卒的課), 也保留他一張名片. 另外幫別人寫 Motion Control Card 的 Dos Driver 來用在 CNC 上, 對 Driver 開始發生興趣, 原來寫 Driver 的利潤頗豐.

第四年, 黑暗的日子終於過去. 參與 IBM VisualAge for Basic 的 Visual Component 開發, 用 VisualAge for C++ 3.0 來 coding, 過了一段無任何相關資料的日子, 還好從李維那拿到 OpenClass source code, 發揮 tracing 的精神, 終於順利結案. 這年在某電腦展中遇上任職 IBM 的大學同學, 被他譏笑還在米倉中當米蟲, 讓我心理不好受. 也使我思考, 只會 coding 的我未來要何去何從, 難道要過著一年換一個專案的日子嗎? 然後 40 歲時會變成怎樣 ?( PetShop Boy 的 " Being Borning" 在我腦中響起...)

幸好碰上一個影響我很大的同事, 他那時也剛幫人寫完一個 Window 95 的 VxD, 於是向他討教, 並學得如何收集相關資料, 練好後就接個 A/D D/A 卡的 Win31/95 Driver CASE 來做, 寫完 Win95 覺得不過癮, 便拿 NT 4.0 DDK 來看. 另外他有事沒事拿 ASIS 電子周刊給我看, 當時正報導 PC97 的 specification: ACPI, AGP, OnNow等新技術, 我看完就知道大好機會來了. 憑做 A/D D/A 卡 Window Driver 的經驗, 我知道隨著 Win95 的普及, 這些硬體卡沒有 Win95 Driver 根本很難賣到歐美. PC97 規定了 Intel 的硬體設計如何跟 Microsoft 的 Window 做結合, 而介面就是Window Driver! 加上主機板廠養的軟體工程師只會寫 BIOS or 8051, 對 Window Driver 根本是聽都沒聽過, 但 PC97, 98 是必走的道路, 所以一定要找到會的人來做.而這時候我又要換另一資料庫相關的專案(我最討厭做 MIS, 成天與數據, 報表奮戰, 有夠無聊). 於是上網路找工作, 想到手頭的童子賢名片, 就試投華碩看看. 沒想到一試便上, (不過在面試時被嫌在資策會待太久, 恐染上不良習性).

進華碩後, 感覺到是Right Man in Right Place. 終於可以一展抱負, 有明確的目標, 不再虛度時光, 也不會被別人嘲笑是米蟲. 更重要的是有成就感, 想想做的專案, 是要賣到全世界的產品, 而且是與一些國際大廠競爭產品上市時間. 再也不是作完往倉庫一擺的東西. 再者華碩目前員工人數少, 業務擴展迅速, 加上公司高級領導階層非常重視研發實力, 只要有能力的人, 不怕沒遷機會. 不像宏基已有太多員工, 沒什麼表現能力的機會, 且昇遷管道太擠了.

(2) 學習 DDK 的過程

要學 DDK 首先要把 Window 的底層基礎練的扎實. 但一般人對學 Window SDK 都視為畏途, 更何況是底層的東西. 從 Win31 到 Win95 變化比較多得, 我個人認為是: Multitasking, Plug&Play, Memory Addressing. 有人問我說, Memphis 都快出來, 還要花功夫看 Win95 or Win31 嗎? 我認為還是要! 原因是:

a. Memphis 不是完全重新改寫, 理面的一些觀念還是沿用 Win95.

b. 目前市面上尚未有大師級的 Memphis 相關書籍, 如果有也只是趁火打劫類型的書, 而台灣的書商, 作者最會搞這種把戲來 A 錢. 如 Win31/95 方面已有一些大師的書籍, 如 Andrew Scrullman, Patt Metrick, Richard Jeffery, Walter O'ney, Charle Patzold 等大師. 你不去看大師級的書, 反而去看 "快快樂樂學 Memphis", "教你 21 天學會 Memphis" 這類垃圾書, 真是在浪費你的時間及金錢.

學 DDK 的第一步準備功夫是把英文閱讀能力練好, 你別指望書商會出中譯本. 因這類書的賣相太差, 比不上 VB, Delphi, JAVA這類較大眾化的書. 再者要找到夠格的譯者很難. 要譯好是要花相當時間, 那還到不如去寫些輕鬆的書, 稿費也賺得多.

接下來就要練基礎工夫, 如同張無忌花了 6 年時間練好九陽真經, 等到練乾崑大挪時只花數個時辰就 OK. 要如何練底層基礎呢 ? 勤看書, 勤 coding 及 Trace 別人寫得sample code而已.

即使是天才型的 Programmer 也是要看書, 因 Windows 不是他設計的, 必須了解Windows 才有辦法下手.. 而非像寫 Algorithm 方面的論文般, 自己定 assumption, Lemma, 導出 Theme, 下 conclusion 就完成. 所以一些剛入社會的研究生最好先調整自己的心態.

以往我是讀一些大師級的書, 如:

"Window Programing" 的 Charles Petzold
"Undocumented Window" 系列的 Andrew Schulman,
"Win95 system Programming Secrets" 的 Matt Pietrek,
"Advanced Windows" 的 Jeffery Richter

期刊的話是:

Microsoft Systems Journal,
Doctor Dobb's Journal,
Windows Developer Journal. 這本期刊是我認為學 DDK 的人必要訂閱的! 幾乎過個 1, 2 期就會刊登 Window Device Driver 相關的文章, 而且理面有位 Paula 女士主持的 NT 專欄, 寫的很深入, 不是市面一些標榜 NT "大剖析" 之類的書籍所能比擬. 在 Andrew Schulman 的 "Undocumented NT" 尚未問世之前, 它是我覺得最有深度的專欄.

接下來就談與 Driver 有直接關係的資料:

Device Driver 的書籍, 我從 Win31 開始說起: "Writing Windows Device Driver and VxD", Karen Hazzen, 第 1,2 版 是最適合寫Win31 Driver 的參考書籍. 也有一本白皮的 "Writing Window Device Driver", 我認為它的參考性很低, 因它光抄 Win31 DDK Function Description 就花了 50 ~ 60 幾頁, 有 A 錢之嫌.

Win95: 那當然是首推 "System Programing for Win95", Walter Oney 這本鉅作. 我曾因翻Chapter 11 ~ 13 翻到書頁掉落, 而重新再買一本. Walter Oney 既出, 誰與爭鋒. 有這本就夠了! 也沒有人有膽來挑戰他.

WinNT: 唯一的一本: "The NT Device Driver Book", Art Baker. 很有系統的一步一步介紹如何寫 NT Kernal mode driver. 先看這本書然後再看 MS 的 NT DDK on Help 會讓你較容易了解. 當初沒這本書時, 我剛開始看 DDK Help 是看得滿頭霧水. 最好搭配 "Inside Windows NT", Helen Custer 一起看, 因為 NT 底層已經導入Object Oriented 觀念(WDM 是將 NT Kernel mode driver 加裝 Plug&Play 及 Bus handle 等新功能), 與 Win95 的 Virtual Machine 觀念 相差甚遠. 這本書雖是 1992 年出版, 但有對 NT 的核心運作加以介紹, 也是一本難得的好書.

NewGroup and Web Site:
1. Win95 是 comp.os.ms-windows.programmer.vxd
2. NT 的話是 comp.os.ms-windows.programmer.nt.kernel-mode
3. Window Device Driver Web Site: http://www.albany.net/~danorton/ddk
http://www.vireo.com

發展工具:

1. 如何要讓你日子好過, 一定要有套 SoftIce for Win95/NT. 千萬不要用 MS 的 WinDebug, 它根本是無山曉路用. SoftIce 可讓你用 source code level debuging, 對有 assembly 恐懼症的人是一大福音.(但我還是勸有心學 DDK 的人還是要摸 assembly).

2. VToolsD(for Win31/95), DriverWork (for NT/WDM) Vireo 公司出的 DDK Tool 讓你完全用 C 來寫 Driver, 我只能說寫 Driver 時, 我已經不能沒有它. 由其它還免費附 Class Library source code, 讓我 Trace 的 很高興.

領域知識 (Domain Knowledge)

寫 Driver 需了解你要控制的硬體, 如 Driver 有用到 DMA/Interrupt, 建議你看一下 8259, 8237A 的資料. 在這方面, "微電腦界面技術與實作" 是本不錯的參考書. Programmer 總有一天會 coding 不動的時候. 但人老成精, 只要你的 Domain Knowledge 夠強的話, 還是會有許多公司請你去當技術經理. 而這也是你能剋死年輕力壯 Programmer 最大的本錢. 多多看些其他雜誌, 接觸一些非 Programming 方面的知識來培養你的 Domain Knowledge 吧!

最後最重要的是: 親自動手做做做做做做做做做! 看資料是一回事, 知道是一回事, 做的出來又是另外一回事. 公司請你來不是要聽你長篇大論, 或是發表多少篇論文. 是要你做個會動, 能商品化的東西. 等你做下去, 踢到鐵板, 又找不到別人問, 也沒有任何資料可幫助. 再加上硬體沒你寫的 Driver 而無法出貨時, 那種滋味可是人間煉獄. 我就遇上一次, 東西都出到俄羅斯, 德國的經銷商時, 結果發現 Driver 有 Bug, 無法順利安裝. 老大放話說一星期內沒解決, 俄羅斯經銷商就要取消訂單(天呀! 幾百萬美金的交易), 我在想, 如果到時解不掉就準備辭職. 後來真是狗屎運, 用一個非常另類的做法(騎摩托車在半路上想到的), 解決這個 Bug, 保住訂單也保住職務. 說這則例子主要是奉勸一些自視甚高的在學研究生, 不要以為頂著高學歷, 就可以在社會上一帆風順(除非窩到學校或財團法人, 政府機構內), 也鼓勵一些沒有傲人學歷的網友, 只要有實力發揮黑手精神, 照樣可以當主管來管一群碩士工程師.

(3)未來可能的發展

看看 WinTel PC98 的規格, 就知道以後會寫 Driver 的人比較吃香 但目前會用 C, SDK 寫程式的人不多, 更何況是寫 Driver, 其實 Driver 並不難寫, 只是 Learning curve 很長, 現在大多初學者怕難沒耐心, 都用 VB, Delphi 這類 RAID Tool 來寫程式, 都快不知道 SDK 是何物更不用說 Window 內部的運作. 除非是走 MIS 路線, 否則以後日子會很難過. 就現實面來看: 用 VB, Delphi 的人太多, 老闆要找個人來取代你的職務是很容易得. 就盈餘而論, 國內做 MIS 的公司比不上做 PC 硬體, Chip set 的公司, 而且也沒有股票可分,何苦去擠到經濟規模小又人數眾多的領域內. (但 Year 2000 對 MIS 工程師可是個大利多,只不過你還要會一些非常古老的程式語言, 而不是懂 VB, Delphi 就沒事)

就我觀察的結果: 目前主機板的軟體工程師大都只會 BIOS, 8051. 根本都不懂 Windows Driver. 不要以為寫個 softmenu 的 BIOS 就揚揚得意. 等 PC98 正式上場就有好戲看. 所以在這些公司中有有太多機會來讓你表現自己的能力.

感想:

國內一些電腦作家實在是太好混日子, 可以從 VB 寫到 VC, 然後還可以 "深入探討" 3D 加速卡. 流行 VB 就出 VB 的書, 一本號稱 VC++/Borland C++ 聖經的書, 竟然都沒提到 MFC/OWL. 而 Windows95 一出來, 書攤又是一堆 Win95 聖經寶典之類的中文書. 等著看吧, 明年 Memphis 出來時又將舊事重演. 不只如此, 還故意標榜有博士學歷或具有寫作 10 幾年的經驗來烘抬自己的身價. 有時我看了就一肚子火. 不過這些人還不是照樣繼續 A 錢. 真是......, 國內一些電腦雜誌的水準, 大家心理有數, 不用我多講. 我佩服的, 大概只有侯俊傑, 不過最近一年他好像都只寫 MFC 相關的文章書籍, 沒寫些Windows 內部運作的文章, 不知這是否跟上次 Matt Pietrek 來台有關.

總歸一句話: 讀者要自己小心, 少碰一些 "聖經, 寶典".


■拋玉引磚 (jjhou)

親愛的 WeiPo,您好:

我是侯俊傑。我在 Programming 版讀到您的文章「我的 DDK 學習經驗」(1997.10.03) 。很開心在 BBS 上看到這麼好的文章,對 programmer 大有助益。

我相信您一定很忙碌。願意花時間把經驗寫出來,分享給大家,真是難得。您的文筆佳,閱讀起來十分有趣,想必此文也花了您不少時間。

您所推薦的書籍期刊,我深表贊同。果真是下過功夫的人,把最經典的作品都推薦出來了。文章最後對國內書籍的感想,我亦深表贊同。

我自己因為強烈興趣的關係(也因為一些使命感),不論是 OS 或 Programming(SDK、MFC),一直浸淫在核心層面。吾道甚孤,感嘆國內高階技術寫作人才甚缺(或許不是沒有人才,而是吸引力不足)。事實上我早體認,在現有的電腦技術寫作生態內, 不可能讓我們再對 advanced 技術書籍有多少期望。禮失求諸野,唯有請經驗豐富的,真正的技術人員來參與寫作,才可能出現鏗鏘有聲的硬貨。

我的領域在中高階軟體技術,即使碰觸過低階的 VxD,也都是以軟體的角度來看它寫它。然而我知道 device driver 是很重要的一個主題,應該要有好的中文書。看過您的文章後,我覺得您是非常合適的人選,不論在技術上、文筆上、熱誠上。

我深深知道,要把滿肚子的學問,化為條理分明,甚至帶有閱讀樂趣的文字,是專業技術以外另一門十分不容易的「技術」。要完成一本厚達 5,6 百頁的書,對於沒有寫作經驗的人,談何容易。但是看過您的文章,我覺得您有這份能力。做這種事情,已經算是進入教育領域並為人師表,最重要的是有沒有一份強烈意願。我認為,以個人心得啟迪成千上萬的學子和 junior engineers,實是功德無量,對於臺灣資訊界的貢獻,不低於接單千萬美元。

如果您有意願也有時間,也有這份文字功力,最後能將一本書獨力完成,自是我所最樂意見到的事。如果您有意願但囿於時間沒有辦法獨力完成,或是對於書籍組織和文字能力,不是那麼有把握,我也很樂意和您一起完成。至於出版社那邊的一切庶務,我都可以出面協助處理。不特定哪一家出版社,您喜歡就好。

我因為在力捷、華邦、睿昱、電通所、宏...等單位開過不少課程,因此認識不少工程師朋友。我一直努力說服這些朋友,對深具意義的教育事業提供力量。幾乎每個人都認為非常有意義,也有些人開始動手,但最後力有未逮就放棄了。我於是慢慢知道,寫書(寫好書)不是每一個人想做就做得來的事情。我不去想像這一次的邀請會有什麼結果,不過無論如何,能夠認識您也令人開心。我可以感覺您也是熱情洋溢的人。

請給我您的通訊地址,我想敬贈「Windows 95 系統程式設計大奧秘」(Windows 95 System Programming Secrets 中譯本)一書給您。寶劍英雄使,好書識者讀,最令我開心。

您文中最後提到關於 Matt Pietrek 一事,我簡略地這樣說:我兩年前識人不深,遭誣陷,被指有侵犯 Matt Pietrek 智慧財產之嫌。復因有新聞價值,遭周刊性媒體以頭版消息處理。捕風捉影,毀人名譽,莫此為甚。此事讓我非常傷心,曾決定不再寫文章。後來覺得不必親痛仇快,才再有動筆念頭。Matt 於 1995 年底來台,其得意作品 Windows 95 System Programming Secrets 於 1996 年底請我翻譯,此略可說明一二。

我們每一個人都是從別人手中口中獲得知識(絕對原創性工作者,極少),重要的是有沒有把獲得的知識化為自己的東西。我有沒有把知識消化為自己的東西後以侯俊傑的思想與組織呈現出來,讀者知之甚詳。

您對我的抬舉,我非常感動。您謂我久未再寫 Windows 內部原理,若這是期盼之音,我要告訴您,我正著手一本以 Windows 作業系統原理為主軸的書籍,再加上hooking, subclassing, superclassing, VxD, how the dynamic links work, NE/PE, separate address space, how the memory context switch, copy on write... 等主題,以大量圖解做為表現方式。可能於 1998 一月底問世。好書還需識者讀,屆時我將贈您一觀。

期待我的磚能引出你的玉。

P.S. 所有看到此 post 之工程師,如果您亦有將心得分享他人的熱誠(包括寫作或翻譯),我也歡迎您與我聯絡。我並沒有要做出版事業,我只是希望協助有心之人走出第一步。我們的電腦技術書籍,在 advanced 層級方面,實在太貧血了!改善的第一步也許是先建立一個人才庫。為了地緣關係,我只接受新竹地區工程界朋友的聯絡(因為我其實是非常非常忙碌的,地緣關係可以使聯絡溝通事宜方便些)。我希望與我聯絡的朋友,著眼的是行事意義與留名,不是賺錢 -- 這種書賺不了幾個錢。

P.S. 我也要呼籲大家不要歧視初階書以及初階書的作者。任何一本書,不論是技術書或使用手冊,初階或進階,都有其目的與意義。只要是好書,就值得我們尊敬,只要是不好的書,就該受我們批評。

--- 侯俊傑 1997.10.05


作者 TonyLab.bbs@vlsi1.iie.ncku.edu.tw ?? 看板 programming
標題 知識的迷思 -- 張東瀛
時間 成大資訊所_BBS (Mon Oct 6 01:15:18 1997)
─────────────────────────────────
引言: 錄自 拋磚引玉 -- 侯俊傑發信站: 清華資訊(楓橋驛站) (Sun Oct 5 19:02:57 1997)

我們每個人都是從別人手中口中獲得知識(絕對原創性工作者,極少),重要的是有沒有把獲得的知識化為自己的東西。我有沒有把知識消化為自己的東西後以侯俊傑的思想與組織方式呈現出來,我的讀者必然知之甚詳。

我以為這段消化知識的話有點 ambiguous ,不太了解它所要表達的真正意涵. 我認為獲得知識的方法不外學習和研究, 學習必定經由知識的累積和傳承,很多人一輩子都在學習過程中獲取並消化知識. 研究則是觀察,認知和創造的過程. 消化知識和創造知識是不同的;方法不同,過程不同, 結果也不同.

如果我的說法不差,那麼,我們學習或消化的知識應該都是別人的原創性產物.學習到的知識,不論是否經過消化, 重新組織,或包裝,都不應該當成自己的原創性產物,否則便構成剽竊(plagiarism)行為.

寫文章的人,對於自己的作品內容有無原創物,有時很難確定, 但是對於學習或消化得來的知識來源,理應清楚明白,因此在文章中註明出處或參考資料乃是對於知識的尊重.讀者不但可以從參考資料裡獲益,同時也能給作者應得的成績和評價.

寫研究論文時通常有一章專門討論和研究主題相關的文獻(Review of Related Literature),從這一章就可看出寫作者消化和組織知識的功力,引述原文或用自己的話敘述都可以, 但是內容必須是別人或自己發表過的. 沒有人會把這一章的內容誤認為是作者的原創物.

我不清楚 Matt Pietrek 一事,也無意評論,只是針對這段引言提出個人看法.有經驗的工程師如侯先生和 WeiPo 先生能貢獻所學,提昇電腦教育水準,相信都是大家所期待的.


張東瀛先生,您好:

> 我認為獲得知識的方法不外學習和
> 研究, 學習必定經由知識的累積和傳承,很多人一輩子都在
> 學習過程中獲取並消化知識. 研究則是觀察,認知和創造的
> 過程. 消化知識和創造知識是不同的;方法不同,過程不同,
> 結果也不同.
> 如果我的說法不差,那麼,我們學習或消化的知識應該都是
> 別人的原創性產物.學習到的知識,不論是否經過消化,
> 重新組織,或包裝,都不應該當成自己的原創性產物,否則便構
> 成剽竊(plagiarism)行為.
>
> 寫文章的人,對於自己的作品內容有無原創物,有時很難確定,
> 但是對於學習或消化得來的知識來源,理應清楚明白,因此在
> 文章中註明出處或參考資料乃是對於知識的尊重.讀者不但
> 可以從參考資料裡獲益,同時也能給作者應得的成績和評價.


非常同意。

如果您是對我說的「絕對原創性工作者極少」感到困惑,我想是我的表達不足。我應該說「比例極少」,更完備地說是「在工程界比例極少」。至於在學術界,當然大家都在努力做原創性的工作。

請容我更詳細地說明我的意思。以 Windows 作業系統或是 MFC 而言,我所謂的原創性是指,微軟才具有技術上的原創性,因為這是一個人工品,微軟才是創造它的人。書籍或文章去解釋一個軟體產品的內部動作、資料結構...,都不是一種「電腦技術」上的原創。

但是從另一面(教育面)來講,一本書(或文章)如果有很棒的插圖,非常特別的 samples,很好的教育流程,那麼它們具有「教育意義」上的原創性。

我非常尊重一本有著作者自己的教育理念的好書。我所謂作者自己的教育理念,是指作者認真去想「我要怎麼寫,怎麼設計章節,怎麼設計插圖,怎麼設計範例,才能讓我的讀者有最好的學習效果」。

謝謝您的意見。


作者 WeiPo.bbs@csie.nctu.edu.tw (), 看板 programming
標題 To 侯俊傑, 拋玉引磚 -- WeiPo
時間 交大資工鳳凰城資訊站 (Thu Oct 9 22:30:36 1997)
───────────────────────────────

親愛的侯師兄,您好:

最近參加 AGP Plugfest 大會, 沒時間回你信. 趁雙十國慶前夕回你這封.嚴格說起來, 你是我的同門師兄.當你就讀清大動力機研所研二時, 曾跑到資研所找我的老闆張隆紋教授當指導教授, 也曾在實驗室見過你幾面,只是那時候你並不出名, 沒特意留神. 記得你的論文題目好像是用電腦搭配切割機, 將塑膠壓克力雕成一件物品,我有在老闆的桌上看見這件物品. 聽說你現在在元智開VC++ 的課. 而以前元智林基成教授(他是清大資研博士畢業)曾找我幫他開門 VC++ Programming 的課程(那時我剛用VC ++ 1.0 做完 Video Editor 的專案, 有實作經驗).但考慮到從台北往返內壢, 而且是早上 8 點的課, 加上口才不好, 又要花時間準備教材. 恐怕誤人子弟,故婉拒這項教職工作. 不然今天可能變成你的同事.

前一封文章被我老大看到後, 竟然想可能是我的工作份量不夠,考慮再給我一些東西做, 真是 @#$%!.... 所以要我寫一本有關DDK 的中文書, 那豈不是要我的命. 不過我推薦一個合適人選:hangarfield, 他也常在這個板上出沒, 而且比我更有經驗,
時間也比我更多.

你翻譯的 Windows 95 System Programming Secrets 中文書我早已購買, 能不能保留 Book Option, 換你寫作中的以Windows 作業系統原理為主軸的書籍. :)

遭誣陷一事經你一說, 那我大概知道是誰在搞鬼. 因 Matt Pietrek是由 松X 的老闆邀請來台. 而近來 X格 出了一大堆中文翻譯書.但看起來總覺得是 "硬翻" 過來得, 沒經過一番好好消化. 還是你的書最有味道. 讀者的眼睛是雪亮的, 不要氣餒, 撐久了, 是你的還是你的, 我期待你的新作上市.

就我在軟體界混了 5 年和其他軟體工程師聊天所得的印象是:
就寫應用程式的軟體工程師而言, 的確到 33,34 歲就要面臨轉型的壓力, 在加上 Tools 改版(VC++ 1.0->1.5->1.52->2.0->4.0->4.1->4.2->5.0), 技術進步(DirectX, Java)太快. 寫程式終究會拼不過剛退伍的年輕人. 薪水比新人多, 效能又比新人差, 如果不是公司的台柱, 碰上公司營運差時就得當心老闆會炒你尤魚. 偏偏國內純軟體公司大部份還在奮鬥階段, 能有高盈餘的不多.

如果走 MIS 路線, 到銀行, IC 公司是不錯的路. 而這些公司的系統通常包給 IBM, HP 來 maintain, 不會出大錯, 但也沒表現機會. 職務升遷通常是靠年資要慢慢等, 即使能力強也一樣(根本沒有機會讓你展現能力), 除非找剛成立的銀行提前卡
位, 但新銀行已飽和, 除非到新設的晶圓廠(台積電, 聯電,旺宏, 茂矽).

看起來軟體工程師的Programming Life 只約 10 年, 而約每 1年就要學新技術, 熟悉改版的 Tool. 然而 " 生命總是會找到出路的",就我個人認為, 在 DDK 領域中是可以擺脫這種宿命是的結局.Win31 的 Device Driver 多加 Plug&Play, Dynamic loading 等功能就成了 Win95 Device Driver. 在 5 年內, Win31/95 的Device Driver 才只改版一次! 接下來 Win98/NT 5.0 的 WDM(Win32 Driver Model) 是延伸自 NT Kernel mode driver. 也可以撐很久. 打個比喻: 應用程式就像大樓的房間可經常依辦公室,
餐廳, 住家等用途來裝潢, 至於地基般的 Device Driver 是不會去動它. 除非要重蓋另一棟大樓(Memphis, NT 5.0).

現在學 VB, Delphi, Java 的人滿街都是, 有 DDK 經驗的很少.以前我接 Case 時, 對方嫌價格偏高, 要找其他人來比價, 我說沒關係慢慢找. 結果找了一個多月後, 對方回過頭來找我. 就連我進華碩後, 還有某家公司(蠻大的, 在它的領域中是排第一名)竟然想私下請我當 Driver 方面的顧問. 我鼓勵後起之秀趁年輕學習力強時, 把 SDK/DDK 基礎打好, 雖然看到其他人用 VB/Delphi兩三下就做好程式, 會懷疑自己是不是太傻, 花許多工夫只做出一個簡陋的程式. 相信我, 學 SDK/DDK 的人, "氣" 會比學VB/DELPHI 的長許多.


親愛的 WeiPo,您好:

沒想到在網路上認了同門師兄弟。是的,當年我在學校以Utah teapot model 306 個控制點,結合機械的車床、銑床,做出猶它茶壺實品。這玩意兒現在就擺在我的書桌上 -- 心血作品無論如何要拿回來做一輩子的紀念!

> 前一封文章被我老大看到後, 竟然想可能是我的工作份量不夠,
> 考慮再給我一些東西做, 真是 @#$%!.... 所以要我寫一本有關
> DDK 的中文書, 那豈不是要我的命. 不過我推薦一個合適人選:


我很惋息。吸引我的,不只是你的工作經驗,更重的是文筆與風格。你也知道,技術高手很多,但是能寫文章的人卻很少,能寫好文章的人更少。我看中文電腦雜誌書籍,常能習得忍耐的功夫。

> 你翻譯的 Windows 95 System Programming Secrets 中文書
> 我早已購買, 能不能保留 Book Option, 換你寫作中的以
> Windows 作業系統原理為主軸的書籍. :)


寶劍就是要給英雄使的。請給我你的通訊址。

> 就我在軟體界混了 5 年和其他軟體工程師聊天所得的印象是:
> 就寫應用程式的軟體工程師而言, 的確到 33,34 歲就要面臨
> 轉型的壓力,


我和朋友們也常常討論這個題目。轉型是必然的,junior 有junior 的幹勁兒與狂熱,senior 有 senior 的任務與身價。Coding 是太耗腦力的工作,但是programming 的範圍就廣了,規劃、設計、定規格、分工、排時程、訓練、都是 senior 的舞台。

> 看起來軟體工程師的 Programming Life 只約 10 年, 而約每 1
> 年就要學新技術, 熟悉改版的 Tool. ...
> 就我個人認為, 在 DDK 領域中是可以擺脫這種宿命是的結局.


話是不錯,不過大家被你一鼓舞,都去學寫 device driver,可就不妙 :)。Driver 之為大用,是因為臺灣的資訊產業目前極度偏重硬體,而我總是希望有朝一日臺灣的軟體也能出頭。雖然這是比較困難的 -- 臺灣的教育方式壓縮了學生的創造力和想像力。哎,臺灣的所有問題,我都認為病灶在教育。

> 我鼓勵後起之秀趁年輕
> 學習力強時, 把 SDK/DDK 基礎打好, 雖然看到其他人用 VB/Delphi
> 兩三下就做好程式, 會懷疑自己是不是太傻, 花許多工夫只做出一
> 個簡陋的程式. 相信我, 學 SDK/DDK 的人, "氣" 會比學
> VB/DELPHI 的長許多.


有網友來信給我,說 WeiPo 大哥輕視 VB/Delphi programmer。我知你沒有那個意思。讓我代你說明一下,我想你強調的是紮實的基礎。有了穩固的基礎,稱手的 RAD 工具也是要用的。就像你說,你現在也不能夠沒有 VToolsD,對不對?

的確是有那種把 SDK 搞爛熟,再把 Delphi 玩成精(但人沒老 :-))的人。

成千上萬人看我倆對話,所以我把意思說得清楚一些。

我一向喜做旁觀,觀眾聲喧譁,想不到今天跳上來做了一些對話,也是有趣的經驗。

--- 侯俊傑 1997.10.12