回首下望尘寰处

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

侯捷 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++ 的沉迷與愛戀

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


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表