回首下望塵寰處

>>>  名人論史——近當代作家的史學觀點  >>> 簡體     傳統

侯捷 1999.01.14


●讀者來函

以下是 judy 的來信:

我在光華商場和資訊展分別購買了您所著的 和所譯的 ,心中真是感觸萬千,依稀記得以前念書的時候嚴謹與細致的心境,而今見到閣下的著作真是感動又有些許的感慨了 !!

AnyWay,請您教我如何在 C++ 領域漸至佳境以至到讀您的書可以心領神會 -- 心曠神怡的地步好嗎?

我近一年的工作是在工廠自動化的方面,Including物流,生管,與設備/PLC 連線 ,LAN 的架設,資料庫的建立維護...等,我會 VB/95(前端),Oracle/UNIX,
C for UNIX(設備/PLC 連線),就這些。企業文化的逼趕常讓我覺得無能無法完成理想的產品,能做到好用就不錯了┅,此無奈也,我一直很期待能用純物件導向的藝術重新架構我們的這一每案大同中異的程式核心。

我的求學背景可能與您有些相同,建中 => 交大機 => 臺大機控制組,或可能曾是學長學弟也不一定喔..^_^ 我的問題很很初步,請您給我多指導好嗎?

1.如何在較短時間內將 C++ 學好,步驟如何? 我想先了解其精神再進入實作對嗎 ?

2.我覺得 C++ 似乎很費時難寫但架構性完整擴充性佳,對嗎,值得嗎?

3.學了C++ 後要在 WINDOWS 上Program 可不夠,還得學 Visual C++ 用MFC 才行豈不是很費時 ??

4.那 Bolard C++ Builder 又如何呢? 直接用 BCB 不是最快嗎 ? C++,VC++,BCB...之間的學習相關性是如何呢?

5.在WINDOWS 上如何運用 C++ 呢,要作出像 Access,Excel 等表格式的畫面是否大工程呢 ?

6.我欠缺學習方向與指引,時間又有限走錯方向怕就沒得玩了玩完了,我得珍惜每一次可以改寫程式的機會。

請給我指導,期待您的回音 ┅┅
p.s NCTU,, what a wonderful place ...



●感動

或許因為次數的關系,或許因為文字深度的關系,我對於讀者來信簡單寫著「你出了一本好書」、「對我幫助很大」、「感謝你的用心」這類話語,漸漸只引來一抹微笑與5分鐘愉快的心情,便可回到現實。

但是收到像 judy 這樣蘊含深刻感情的信,即便只三言兩語,卻能觸發我的心弦,久久不已。

武漢讀友王凱先生,講了一句我很喜歡的話。他說:

銷售量可以表現一本書的價值;
讀者如何看待一本書,更可以表現它的價值。


很開心我的寫作與精心安排的學習歷程,得到讀者共鳴。1998/12 月份的 <資訊生活雜志> 中有一篇關於 <多型與虛擬> 的介紹,也很讓我感動。一看就知道該文作者把 <多型與虛擬> 讀得熟透。

靜下來想想,有人如此仔細地閱讀我的一字一句,我就簡直┅簡直是┅實在不知道該怎麼說!


●斑斑血淚話滄桑

在 C++ 和 MFC 的學習道路上,我接觸到太多人的斑斑血淚了。

我很平庸,和各位每天周遭都會接觸到的一大堆人一樣,所以我并不是一夜升天地頓悟了 C++ 的物件導向精神。我也并非一夜升天地接受了 MFC 的工作模式。我目前所擁有的心得,和絕大多數過來人一樣,是經過許多學習,許多思考,許多蘊釀,許多發酵,才得到的些許果實。

我講這話的意思是,朋友們在這條路上的學習挫折與困頓,我都非常了解。做為一個學生,在羽翼未豐階段遇到天才型老師,是最大的不幸。天才型老師不知人間疾苦,他完全不明白在他看來如此簡明的道理為什麼你不懂。天才適合投入研究,不適合投入教育。

我這個絕對平庸的老師,卻能夠知道眾生的困厄,知道你的惶恐與苦難。因為我都經歷過。

1.如何在較短時間內將 C++ 學好,步驟如何? 我想先 了解其精神再進入實作對嗎 ?

物件導向的精神,依我看,除了少數天賦異稟的高材之外,很難一蹴而及 -- 特別對已有其他電腦語言基礎的人而言。為什麼?因為你愈有傳統程式語言的基礎,你就愈知道「每件事情的發生,都該有人動手」的游戲規則,你就愈習慣尋求程式中那根應該要有且脈絡分明的動線。C++ 編譯器卻為我們做掉了太多事情,隱藏了太多動線;語言本身的彈性又太大了,大到一向在框框里循規蹈榘的我們不太容易體會與接受。

有一天你站在學成的山巔,回首下望塵寰處,會感概那些動線那些機制隱藏得多俐落,那些 operator overloading 和 virtual mechanism 多麼美妙,polymorphism 和 template 多麼神奇。但那是顧盼自雄回首前塵的時刻。學習階段中,這些美好性質卻成為前進的阻力。

你明明知道電腦是死的,它卻怎麼能擁有 polymorphism 這樣的能力呢?又怎麼做到 generalization 這樣的性質呢?

為什麼腦海里老有個疙瘩?

因為你未曾訪過一遍關鍵性的內部機制。

照說,本來不應該這樣子學習物件導向的。物件導向應該是讓人覺得「一切就那麼自然」的一種性質。可是太多人初學時總不自然,而訪 過一遍關鍵性內部機制,又帶給那麼多人美好的心得(從我的讀者來函獲知)。所以,我總是持這樣的論調。

Kraig Brockschmidt(Inside OLE 作者)在為 "Understanding ActiveX and OLE" 一書所寫的序文中有個比喻:

『粒子物理學家了解,物質宇宙是由基本粒子以及左右其行為的基本方程式構成,其他萬物都由這些基本元素衍生而來。這樣清澈的認識通常只在一小群受過訓練的門徒之間留傳,他們能夠接觸到這個領域的一些近乎秘傳的重要知識。至於一般大眾,由於未曾受到如此的啟蒙,只能看到從核心演化出來的炫目復雜度。由於缺乏基本的撟接,大部份人認為基礎物理令人費解而且不易親近。

對許多人而言,COM 有點像是基礎物理學的一個分支:令人費解而且不易親近。』


大家一定看得出來這段話的重點。導至許多人認為基礎物理令人費解而且不易親近的原因是:「未受啟蒙以至缺乏基本的撟接」。

我覺得用在任何一個技術領域,這個比喻都是合宜的。以 C++ 而言,基本的撟接知識就是物件模型、虛擬機制等等關鍵性內部架構。

我正在做一項實驗。我正在教小學六年級的 子 C/C++,看看他接受物件導向觀念的情況如何?這項實驗結果,可以對我之於 OOP 的教育看法帶來一些佐證或推翻。

其實個案并不具統計意義。目前具有統計意義的數據就是,我們看到太多光在 C++ syntax 和 C++ semantics 層面學習而成效不彰的例子;即使會寫程式了,會寫不小的程式了,心中的疙瘩仍在。我們又看到許多從 object model 切入而成效良好的例子。

C++ 該怎麼學?請叁考「C++ 的沉迷與愛戀」(侯捷/1998)一文。

我能夠給的最具體意見就是:找一本好書,和一位好老師。找一位好老師有實際上的困難,所以找一本好書就成為最可實踐而成本低廉的建議。
好書在哪里?請叁考「C++ 的沉迷與愛戀」或「主廚推薦 侯捷菜單」一文。里頭列出好幾本書,適合各種層次的人閱讀。

> 我想先了解其精神再進入實作對嗎 ?

因人而異。物件導向的抽象觀念與精神,日常生活中信手捻來俯拾皆是,但如果缺乏具象的實作手法,一旦你要把精神與實務融為一爐,卻發現它們像水和油一樣地涇渭分明。

所以 OO concept 和 OOP 一定要雙頭并進。你不能夠光說不練,你也不能夠光練不想。

judy 已是多年的工程師了,programming 經驗已有相當基礎,不妨多面向地做點嘗試。無論如何,隨時寫點小程式實驗一下自己的想法,是很重要的。

集中火力,在數個星期甚至數個月之內,讓自己全心處於 OO 思維模式之中,使 OO 思考成為一個烙印,我想也是很有幫助的。是嘛,要撞就撞點深刻痕跡出來,不要船過無痕,功夫全白費了,下次又重頭來過。

2.我覺得 C++ 似乎很費時難寫但架構性完整擴充性佳, 對嗎,值得嗎?

C++ 不甚好學,但學會後很好用,資源也很豐富。學習 C++ 是值得的,即使要轉到 Java 也快得很。至於你所謂的費時和難寫,我不很清楚你的意思。

C++/OOP 的哲學在於讓人寫出重復使用性高的 software components,也在於讓人使用別人寫好的重復使用性高的 software components。這其實互為表里。

3.學了 C++ 後要在 WINDOWS 上 programming 可不夠,還 得學 Visual C++ 用 MFC 才行,豈不是很費時 ??

這便是我剛剛說的,學習使用別人寫好的「重復使用性高的 software components」。MFC 就是一大套 C++ class library。MFC 有其復雜度,但學會它(最重要是它的組織架構),你便可輕松在 Windows 環境上開發應用程式。

說到費不費時,如果不使用現成的 MFC 或 OWL 或 VCL(都是用於Windows 環境上的 class library),鐵定更費時。

所以,先學 C++,然後學一套 C++ class library(規模大到可稱為 framework 者),已幾乎成為必趨之路。

4.那 Bolard C++ Builder 又如何呢?直接用 BCB 不是最快嗎 ? C++,VC++,BCB...之間的學習相關性是如何呢?

先學好 C++。然後在 VC++ 或 BCB 或(其他 framework 產品)之間挑一個。學 VC++ 主要是學如何運用 MFC,學 BCB 主要是學如何運用 VCL。

5.在WINDOWS 上如何運用 C++ 呢,要作出像 Access, Excel 等表格式的畫面是否大工程呢 ?

如果你使用 VC++(MFC)或 BCB(VCL),就不算大工程。

6.我欠缺學習方向與指引,時間又有限走錯方向怕就沒 得玩了玩完了,我得珍惜每一次可以改寫程式的機會。

慎選一本適合自己的好書,做為起點。這就是我對你的忠告。again,「C++ 的沉迷與愛戀/侯捷/1998」和「主廚推薦 侯捷菜單/1999」列出好幾本書,適合各種層次的人閱讀。

--- the end


我的朋友徐逸輝先生看到【回首下望塵寰處】一文後,提出了他的看法。

徐逸輝先生曾主持工研院電通所媒體大師計劃,如果你看過這個產品,你會驚訝國內的套裝軟體也有這麼好的品質。綜合 OO 領域的浸淫程度與實務經驗,他是我最佩服的人。

掌控過十數萬行的大型專案,擁有上市產品,在 C++/OO 領域浸淫10 年的專家,給我們的意見斬釘截鐵,毫不拖泥帶水。很值得叁考。

但是也很酷!初學者不要嚇跑了,究竟這是事實。

以下是徐逸輝先生的看法。

Dear Hou Sir,

這個主題我比較有興趣,以下簡單發表一下我的看法:


> 1.如何在較短時間內將 C++ 學好,步驟如何? 我想先
> 了解其精神再進入實作對嗎 ?


短時間內(3個月內)要從完全structure programming到心領神會oop是不太可能的,仔細看完3本書再寫上萬行程式,再重寫二次,或可登堂入室.

> 2.我覺得 C++ 似乎很費時難寫但架構性完整擴充性
> 佳,對嗎,值得嗎?


費時難寫是初學者必定會有的看法,架構性完整擴充性佳是稍具功力的人才寫得出來.學OO不是值不值得的問題,是一定要學的基本玩意.

> 3.學了C++ 後要在 WINDOWS 上Program 可不夠,還
> 得學 Visual C++ 用MFC 才行豈不是很費時 ??

> 4.那 Bolard C++ Builder 又如何呢? 直接用 BCB 不是最
> 快嗎 ? C++,VC++,BCB...之間的學習相關性是如何呢?


寫程式沒有不費時的,要在 UI上省時間請用VB/Delphi/C++Builder,但在寫function kernal上的時間是一樣的,用VC++,BCB都要精通C++,VB不具OO特性.

> 5.在WINDOWS 上如何運用 C++ 呢,要作出像 Access,
> Excel 等表格式的畫面是否大工程呢 ?


用SDK很難,VC++較容易,BCB則更容易.

> 6.我欠缺學習方向與指引,時間又有限走錯方向怕就沒
> 得玩了玩完了,我得珍惜每一次可以改寫程式的機會。


學習不一定得在工作時間,利用工作學習OO是一種冒險,沒有人第一次寫C++程式就有完整的OO在里面,若想在工作時一次就搞定(注:很難),請先完成第一項步驟.

祝所有想學OO的人都能真正OO,而非只是Oh!Oh!


--- the end


回首下望塵寰處 2010-07-15 08:32:44

[新一篇] C++ 的沉迷與愛戀

[舊一篇] 明月文錄(張居正、唐伯虎)
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表