07、书评-编程-C/C++/C#语言
【热布克hbk】超经典(转):编程-让我欢喜 让我忧
========================================================
= =
= =
= 本文及更多出自:http://www.lmh2004.cn/ 【热布克】 =
= =
========================================================
侯俊杰
最近接连叁两件事情,让我情绪起伏颇大!
●让我欢喜
首先是几封读者来函。有一封 Shelly 的来信,大意如下:
------------------------------------------------↓
> 侯 Sir :
>
> 您好!又上门来打扰,在书局看到您多本的翻译书,
> 实在是忍不住想告诉您我的想法!
>
> 我是来谢谢您的。怎麽说呢?姑且不论英文能力,
> 看原文书总是没有看中文书来的直接啊!您也知晓,
> 许多翻译书,内容中的每个中文字都看得懂,但是整段落
> 就是不知他到底在说啥!
>
> 因此看到书的作者是您,感觉上就是一个品质的保证。
> 必定二话不说,抱回家罗!虽然眼前用不到,但是翻翻看,
> 大致上了解一下。待有空或是工作上需要,再好好的细读。
>
> 网路书局的盛行,让我也开始上网买些书,但是我只敢买
> 像您的书!有品质嘛!其他的可就不敢直接买罗,总是必
> 须到书局翻翻看,确定一下内容,才可能考虑。
-------------------------------------------------↑
另一封 Jedi 的来信,部份内容是:
-------------------------------------------------↓
> 你的书籍比市场上任何一本都好 100 倍。我不会想购买
> 任何一本中文电脑书籍,除非是你写的或是你译的。
-------------------------------------------------↑
我应该感到高兴,获得读者如此的信赖与赞美。而我也的确感到高兴!但随之而来的是悲伤。
●伤感
Jedi 任职国内一家极负盛名的软体公司,该公司的影像处理软体行销国际,获奖众多。在与我沟通的数封信之中,Jedi一再强调他是不看中文电脑书的,更不看电脑翻译书。他强调他的英文能力没有问题,他说「没有什麽比得上原文作品,所以一位数学博士必须通过英文、法文、俄文和拉丁文的考试」。
我猜他是一位数学博士。
我想起每一位大专学生可能有过的经验。老师对学生们说:『这学期的课本用的是 xxx。我对中文书没有什麽概念啦,我是不看中文书的...选这本书是因为同学们要求提一本中文书,所以我在书店中...』。言下之意就是「我声明在先...昭告天下...纯粹为了顺应同学的程度...勉为其难降格以求...并不是我认同这本书...」。
很容易你就可以在电脑圈(甚至是整个科技圈)的周遭朋友中听到、触到这样奇怪的优越感:「中文技术书籍我是不(肖)看的,我拢嘛看原文。」
虽然伤感,但我没有非难或菲薄那些人的意思。要叫人家舍弃牛排咖啡改吃烧饼豆浆,总是要给人家知道烧饼豆浆的营养在哪里,或者美味在哪里。中文书如果深度泛泛(没有营养),读来又龇牙裂嘴(没有美味),凭什麽叫人家看呢?凭民族主义吗?
●母语
不管任何人,只要是中国人,只要他的母语是中文,我不相信他的外文能力会比中文能力强。所以即使数学博士(我是指Jedi)也说:
『我读中文比读英文快!我有可能在2~3天内读完你的大奥秘,但我得花两个星期才能读完 Windows 95 System Programming SECRETS。喔,我不需要使用英文字典,但我的阅读常会被打断,在我回到原文书被打断的那一点时,你的中文书可以帮我快速重拾原来的思绪』。
他又说:『我想这是重点,你的书不能够取代原文本,但是我可以在短时间内获得多一些。』
我想起我在 Inside Visual C++ 1.5 和 4.0 的译序中说过的大话:
『让买了原文书的朋友後悔,是我的第一个目标;让买了原文书的朋友再掏一次腰包,是我的第二个目标;至於我的第叁个目标,呵呵,是让原文书滞销』。
过了好几年了,我还是以这样高远的目标来翻译书籍。凌云志,志凌云!年少轻狂语高傲,是对自己的期许。一位任职於知名软体公司(专做中文辨识、手写输入等相关软体)的朋友告诉我:『整个办公室原本都是 Windows 95 System Programming SECRETS原文本,後来静悄悄地都换上了「大奥秘」;至於「深入浅出 MFC」,本来就人手一册』。
啊,我相信我做到了年少轻狂高傲语中的第二点和第叁点。第一点嘛,对某些读者而言,我想我永远也达不到第一个目标。Jedi 的说法其实我是可以理解的,因为即使我自己,面对像侯俊杰这样的译作,我还是希望拥有一本原文本,至少在 index 上就价值不菲。
●电脑中译书
所以,不论是英文实力再好、英文阅读再没有问题、技术再专业的人,以各种角度综合评量,一本好的中译书对他还是有相当大的贡献。
可是我看到国内电脑中译书籍的整体品质,实在忧心忡忡。一本好译本淹没在 5000 本烂译本中,0.0002,以统计学的观点,那就是 zero!也难怪学有精专的人对於翻译书要弃如鄙屣,一脸不肖!美静是最有机会看到我发飙的人,常常看我边看中译本边唉声叹气,不时把出版社、译者、排版者统统痛骂一顿。再严重一点就把它们当垃圾处理掉(但是想到写笑话时派得上用场,又捡回来)!
诚如 Satan 网友所言:
> 目前市面上国内作者自己写的书深度大部分都不够,
> 这就是翻译书存在的必要性吧我想。
因为国内高阶技术书籍有严重的地中海型贫血(会致命的那种),以及因为国外有经典名作,所以,没有人会否定电脑翻译书的重要性。只不过,这个重要性读者以质来看,某些不肖出版社则以钱来看。
我真的不知道,出版社就不能够拨出一些些钱,做点累积形象的高阶技术书籍?公司的经济命脉有 DIY、Office使用秘笈、Win95 圣经宝典来扛就好了,就不能够在高阶技术书籍的中译上面多花一点点心意吗?就不能够给译者充份(或至少足够)的时间,就不能让所有用心译者的校稿心愿能够有那麽一丁点实现的机会吗?这样卑微的要求很奢侈吗?
对於不肖的出版社,这样卑微的要求真的很奢侈!
事实上高阶技术书籍,只要做得好,不但可以赚形象,也不会赔老本。软体工程师有多少?科学园区里的 juniors、seniors 有多少?大学生、研究生有多少?(老师、教授也要看的,但他们通常会获得赠书)。这麽庞大的 base 不能支撑出版社出高价请高人译出一本好书?我只能够说抢短的心理实在太低级、太没前瞻眼光、太侮辱读者。
我多次应邀到大学资讯系演讲,面对当前大学生打工翻译赚生活费的情况,总是以很严肃的态度告诉同学们不应该这麽做。重点不在「学生」这个身份上,网友 xxx 说的是:
> 找大学生来翻译我也听说确有其事,但有些大学生的程度
> 并不低於研究生喔,我们最好避免以学历看待一切。
但网友 Mave 说的更好:
> 这可不是以学历看待一切的问题,而是学生并不是专职
> 的翻译人员...,我的教授当学生时就干过这种事,他说
> 有时他也不知道原文的意思,还是硬着头皮给它翻下去,
> 所以现在他不要我们去看翻译书。一大讽刺!
真的,我不否认大学生之中有早慧优秀的例子,我自己在教学以及读者作者互动之中,就曾有过几次惊 。但这是极少数的。再就写作(含译作)而言,技术和文字表达是两码子事,没有必然关连。好吧,就算你技术好、充满热情、文笔又佳,最後一个重点来了:你的学生身份能够让你驾驭一部庞大的出版机器吗?你敢不敢说『这本书一个月完成是不可能的,我需要叁个月』?你敢不敢说『在我没有点头之前不可以付梓』?你敢不敢说『虽然已经校稿 n 次了,但这里排版不理想,请重做一次』?你敢不敢说『这里网点太疏了,读者眼睛会花,重做』?不,你不敢!我知道你不敢!出版社肯让你叁校,那叫做...哼哼...皇恩浩荡。这其实也有互动关系在,并非没有出版社愿意配合,但你敢不敢提要求呢?
网友 Mave 又说:
> 翻译的人或都有一定程度,但翻译的态度与投注的心力
> 才是书的精华所在。
我相信有一些学生有实力也有热诚,但如果你无法影响为你制作书籍的一群人(那真是一大群人)的态度,你的热诚反应到成品上也就化为 zero。
网友 DaNee 说:
> 我以前是个大学生,...基本上,个人不反对学生(尤其
> 是本科系学生)从事翻译工作,但是先决条件有二:
>
> 1. 译者必须有优於常人的文字表达能力
> 2. 译文内容必须是该学生的专长领域
>
> 我个人大学时,也从事翻译的工作,不过非我所长的东西我绝
> 对不翻,算是对自己良心负责吧!
很好,你择善固执,有所为有所不为。不过你控制得了书稿交出去後的流程吗?你控制得了因为奇怪的「市场因素」而做的莫名其妙的删减吗?或是书籍另半部的翻译品质吗?或是百般误谬的排版吗?或是莫名其妙的挂名吗?或是莫名其妙的出版序吗?或是莫名其妙的书後广告吗?你不能,面对不肖出版商,你只能固守你仅有的那 60 页交出去的样子(DaNee 说他所「包过的工程」中最大的一次只有 60 页),而且还不能保证它面世的样子!
校稿是很重要很重要的。最近我看 Advanced Windows 3rd edition 中译本,有不少让我痛心的地方,译名、排版、文字误谬...(注)。我相信是因为译者没有校稿(排版後的定稿),因为这本书的译者实力似乎不至於如此。我小心翼翼地批评这本书,不希望抹杀一位可能还有点潜力的译者。那些穷斯滥矣的中译本,我连看都懒得看,说都懒得说!
-------------------------------------------------↓
注:为了公平,我举几个 Advanced Windows 3rd edition
中译本的例子:
p.3-23 line 3 :
反之若不以此旗标建立新处理程序,则新型成会使用其父处理程序的视窗。<请问> : 「型成」是什麽?大概是行程(process)之误。但是书中绝大部份是把 process 注为「处理程序」。
p.3-25 line 27 :
如果此桌面存在,新型成将建立在此桌面上,如果...<请问> : 「型成」是什麽?大概是行程(process)之误。
p.4-23 line 1 :
如果不是从 Explorer 而是从命令列执处理程序式,则可...<请问> : 「从命令列执处理程序式」是什麽意思?大概是「从命令列执行处理程序」。
p.4-24 图4-1
原文 "Idle" 成了 "优先权",原文 "Normal" 则成了 "停顿"。
-------------------------------------------------↑
总结来讲,我不赞成学生做电脑书籍翻译。各位要打工赚生活费,很好,厚植你的实力,到学校电脑中心或外头软体公司接 case 来做。又得 programming 经验,又得team work 经验,又有钱赚。辛苦与否在其次,这样比较有意义。软体公司容不得烂东西流出去的,你的工作会在严格的监督与检验之下进行。我从没有看过哪一个行业像不肖电脑出版商那样重金钱如泰山,轻名誉若鸿毛!都已经在网路上被骂得臭头了,仍然遮着眼睛以为看不到,捂着耳朵以为听不到,我行我素干这等误人子弟的营生!
●让我忧
说到底,为什麽没有太多的专业人才进入资讯技术写作和翻译的领域呢?我们没有好人才吗?不会呀,我的好朋友在电通所,他的 OO 涵养以及多媒体大程式的掌控能力,足以写出掷地有声的书,起码叁本!我的另一位朋友,诸子百家无一不精(从 OWL、MFC、BCB、Delphi、Win32、System Kernel、VxD、pattern recognition),他的肚子里至少挖得出铿锵有声的书,五本!我在华邦、力捷、睿昱、宏 、蒙恬、友立...的朋友,哪一个不是身负绝技!要开发世界级软体,容或还需要技术方面的整合与管理;要在专长领域里制作一本书,这些人学养绰绰有馀。
我不是常常强调「技术与写作是两码子事」吗?我不是也说「技术容易写作难」吗?是的,但如果写作或翻译带来荣耀,带来经济上的安定,我相信他们愿意尝试,愿意努力。毕竟他们都同意,写(译)一本好书,意义大得不得了!
说到底,实在是因为电脑书籍的写作与翻译是一门社会地位不高的技艺。靠着不肖出版商和不肖作者的努力,电脑书籍带有一种「乌鸦鸦、骗钱啦、粗制滥造赶流行」的印象。如果是科班出身,进入这个领域会被视为「大材小用,学非所用」。
我身处这个领域,很伤心竟然有机会这麽贬低作贱自己。有一段时间,交换名片时我不知道怎麽介绍自己的工作。『我写书』,『写什麽书』?『电脑书』,『哦...』。资讯界外的人『哦』一声是二声...充满钦慕;资讯界内的人『哦』一声是四声...原来如此!自从在学校开3学分课程之後,我就统统以『我教书』一语带过尴尬时刻。
如果在 seniors 的眼中,电脑书籍作家和翻译家的社会地位不高,他们怎麽可能把生命投注在上头?
●大材小用?学非所用?
最近我终於说服了电通所的朋友,由我把他肚子里的东西挖出来。我不知道我这样劳碌命是干嘛,但我觉得好像为国内读者打了一场胜仗。平时我打败仗的时候居多!先前提的那位精通诸子百家的朋友最近要离职了,我竟留不住他花一点点时间驻足在一本他自己也非常心动的英文经典名着的翻译工作上。
科班出身者,进入这个领域常被视为「大材小用,学非所用」。奇怪咧,那麽多学音乐的人,有几个站上了国家音乐厅?又有多少人是在 Yamaha 教琴、在国中小教音乐班、在家里收学生?他们可没有把教学视为「脱离本行、学非所用」!
我真希望,每一位对於技术文字工作有热情、有期望、曾经因为看过一本好书而受到激汤鼓舞的 seniors,能在心中立一个志愿:我这一生要为我的工程师生涯留下一本掷地有声的着作或译作。
一本就好!一本就好!
Shyu、Weipo、Gauss、Xshadow、Wolfgang、ywhuang、Power、Lowrence、Mike...你们听到我的呼唤了吗?
●加油兼打气
有些朋友(通常是特别醉心於学术的朋友),有着「外文书写得那麽好了,我又不是第一本」的心结而打退堂鼓。从自我实现的角度来看,我们现在谈的是「留一份问心无愧的足迹」,不是学术论文,你管别人写过没;从知识的原创性来看,全世界 50 亿人口,知识的原创只是 only one,你的志向竟然大到要当那 No.1?你的书带给後进帮助,是因为你心得整理得好,不是因为你创造了什麽。Windows 各种技术,容我说,原创者只有一个,就是Microsoft 那群人。Matt Pietrek 的 Windows 95 System Programming SECRETS 中有许多 kernel 奥秘,J.J.Hou 的Dissecting MFC 中有许多 MFC 内部机制,Jeffrey Richter的 Advanced Windows 中有许多精良实例与解说,这些人都不能说是知识(技术)的原创者,但他们的作品有教育性的原创!他们的贡献当然是不容抹杀的。
写一本这种教育大众(也许是小众)的书,比的是技术深度,比的是文字深度,比的是心得整理,比的是动线顺畅,比的是编排悦目,比的是图解了然,比的是范例精良。唯一不必比的是「谁抢第一时间」。当你有一点点时间压力,你的出发点已经受到了一点点扭曲。时间压力是「商人」的事情,不是你「作家」的事情。
各位也不要说我陈义过高啦,不知疾苦啦!我要激发的是作家,不是商人。
●砂砺中的珍珠
有不肖出版商和不肖的作者译者,自然也有用心的出版商和用心的作者译者。我诚垦希望你们不会因为我的严厉批评而有所伤害。我没有指名说出肖与不肖,你们一定要相信,读者心中自有一把尺。
君子坦荡荡,小人长戚戚;
荣者日安安,辱者定碌碌。
我们互勉之
========================================================
= =
= =
= 本文及更多出自:http://www.lmh2004.cn/ 【热布克】 =
= =
========================================================
【热布克hbk】超经典(转):编程-观古今於须臾,抚四海於一瞬
========================================================
= =
= =
= 本文及更多出自:http://www.lmh2004.cn/ 【热布克】 =
= =
========================================================
【选义按部,考辞就班】
本文登於 RunPC 1997.06
侯俊杰
jjhou@ccca.nctu.edu.tw
----------------------------------------------------------------------------
●理解无穷,记忆有限
一位老读者写 mail 给我,信上说:『我发现一件事,自从在台大资讯周遇到您,直到 1997 Run!PC 5月号,您一直在安抚新鲜人。在发现自我方向之前,那些人(包括我)都曾相当迷惘。您的文字和温和的态度让这些人可以安心前进。感谢您!!』
写作六年,最初接触的年轻读者,有一些已经从高中进入了大学,甚至研究所。原本我的写作层面从未考虑学生,我是为工程人员写的。却没有想到慢慢地在学子之间有了一些影响。有一次元智开学,一位研究生来找我,告诉我因为我的鼓励,他发奋考上了研究所,并拿出当年我写给他的信。前述那位老读者也是,一年半载未联络,他已经从大同工学院考上清大资讯所。
看到这些朋友的精进,我真是高兴莫名。我自己当然也要更精进,不然拿什麽以对读者?现在学生们,厉害的,真的很厉害。这学期 Windows 作业系统课程,我给的期末作业是让同学们分组将 Matt Pietrek 的「Windows 95 系统程式设计大奥秘」各章程式仔细 trace,向大家做报告。有一组同学的表现就令我刮目相看,不仅自行研究书上未提到的 Callgate 技术和 Universal Thunk 技术,还找出原作者未交待清楚的一些细节。
人的理解力可以无穷,但人的记忆力有限。当本身实力发展到某个层次,实力不是靠「警敏强记」来判别或完成,而是要知道哪里可以找出正确而适用的资料。我对那一组同学最感兴趣的就是,他们参考了哪些书籍、哪些资料、以及他们是在什麽时候开始接触那些相关资讯的。
我还在业界任职的时候,就已经观察到,比较有发展潜力的同事,都很会整理资料。资料的整理方法言人人殊,但都有条不紊。要整理资料,先要有资料,所以这些同事也都是收集资料的高手,不论书籍、杂志、期刊、报纸、光碟、磁片、规格书,不论纸面的或电子的,收罗万象,检索迅速。要达到这种境界,你要有方法,有毅力。或许还要一点点财力。不过,除了书籍比较贵之外,其他资料都还算便宜,甚至从 Internet 上免费可得。
●为汝安心
能够在资讯世界里悠然自得,真令人羡慕(虽然那些人,包括我,其实也都是鸭子划水,水底下忙碌得很)。悠然自得的境界需要按部就班地训练才能到达。好多读者写给我的信中,问到 C 语言的学习方式、Assembly 语言的学习方式、MFC 的学习方式、Windows programming 的学习方式。一一回答而未能给大局观,犹如管中窥豹,未能得其全貌。我决定以一次较大的篇幅,为汝安心。我决定从一个语言初学者的立场出发,Windows programming 则是我设定的终极目标。我走的路线是 C/C++ 路线。这样的假设有几个考量因素:
1. Windows 是当今 PC 上最普及的作业系统,也是你就业时最可能面临的平台。
2. C/C++ 是计算机科学的主流语言,学术界与工业界通用。
3. 我的专长是这些,所以我能说的也只是这些。
我将在每一个阶段提出我的看法,并举出一些好书给你参考。我举出的书绝大部份是原文书,这并不代表国内没有相关好书(但它的反面也不一定就成立),而是因为我自己接触了许多原文书,资讯也多由彼而来。这些原文书大多有中译本,好坏就请自行评断了。
以下出现的出版社简名,其全名是:
A.W.:Addison Wesley
M.P.:Microsoft Press
IDG :IDG Books
M&T :M&T Books
R&D :R&D Publications
●先器後道:从 C/C++ 语言出发
程式语言没有练好,什麽都是空谈。现在的 C/C++ 编译器忒也庞然大物一个,初学者如果未经指点,常会以为买了一套 C++Builder 或 Visual C++或 Symantec C++ 或 Optima++...,就是要直接开始在整合环境底下写 Windows 程式。我当然不认为是他们野心过大,妄想一步登天;他们是因为不知道有简化的环境和简化的 Windows 程式。
在这个阶段,语言的练习应该独立於任何作业系统之外。也就是,你学习的应该是 ANSI(美国国家标准)C/C++,你写的程式拿到任何作业平台上应该皆能原始码相容。我建议,在 Win32 环境下,你要以 command line 方式编译联结程式,并使用 console mode。
所谓 command line 方式,就是在 Windows 环境下开一个 DOS 视窗,将工具环境以 PATH 和其他环境变数(如 LIB 和 INCLUDE) 设定好,然後在 DOS 提示号下直接编译联结你的程式;完全不使用开发工具提供的整合环境。以 Visual C++ 为例,假设你把它安装在 E:\MSDEV,於是你可以设计一个批次档(.bat)如下:
@echo off
set TOOLROOTDIR=E:\MSDEV
rem
set PATH=E:\MSDEV\BIN;D:\WIN95;D:\WIN95\COMMAND
set INCLUDE=E:\MSDEV\INCLUDE;E:\MSDEV\MFC\INCLUDE
set LIB=E:\MSDEV\LIB;E:\MSDEV\MFC\LIB
set INIT=E:\MSDEV
每当想要使用 command line 编译联结程式,就先在 DOS 视窗中执行上述批次档,将工具环境设定好。
然後,你可以开始练习写程式。使用任何文字编辑器输入你的原始码,存档,然後在 DOS 视窗中编译联结。以 Visual C++ 为例,你可以这麽做:
cl test.c <Enter>
或
cl test.cpp <Enter>
CL.EXE 是 Visual C++ 的编译器名称。它会在编译完成後自动呼叫联结器 LINK.EXE,将你的程式所需要的函式库(C runtime library)自动联结进来。
你所写的这些 C/C++ 程式,虽然是 ANSI 标准,但因为是在 Windows 环境下以 Windows 开发工具建造而成,所以它们的执行档是属於 PE 档案格式,也就是 Win32 可执行档格式,只不过它们没有用到任何 GUI(图形使用者介面)而已。这种 Win32 程式又称为 Win32 console 程式,也是一般所谓的 DOS-like 程式。
常常接到读者的 mail,希望我推荐 C/C++ 方面的好书。由於 C/C++ 的学习对我已经是遥远的回忆,当初自学以及朋友间互相讨论的成份比较多,阅读的经验比较少,而晚近的许多相关书籍我又没有完整看完过,所以没有办法给你推荐名单。有一些经典名着,出自大师之手,例如 K&R 的 "The C Programming Language"(有译本),Bjarne Stroustrup 的 "The C++ Programming Language"(A.W.,有译本),对初学者不见得是最佳选择。初学者需要详尽、亲切、范例多的导入书,大师的书却往往学术味重,言简意赅。当然,等你到达一定程度,还是应该把大师的书看一看。言简意赅之中,可能有许多微言大义。
●可直接学习 C++ 吗?
回答这个问题前,需要先做点里厘清。C++ 其实是 C 语言的超集(super set),所有 C 语言的关键字、指令、修饰词、特性、标准的 runtime 函式库,都应该相容到 C++ 之中。所以,基本上没有所谓「避开 C 语言,直接学习 C++」的可能。你看,很多时候 C/C++ 是写在一起的,形影不离。
倒是,你可以不学 C++,纯以 C 闯天下。在 Windows 程式设计领域中就是以所谓的 SDK 来撰写程式。也就是以纯粹的 raw Windows API 来写程式。不过,物件导向的观念与技术,历经数十年的验证,已经证明其价值,并且已被大家接受,蔚为主流,你若放弃 C++,会折损自己不少实力与工作机会。
To be or not to be,that is the question!(语出 莎士比亚/哈姆雷特)
呵呵,To C or not to C,that is the question too!
●OOA/OOD
C/C++ 语言的基础功夫完成之後,你面临第一个分岔点。是要继续在物件导向(OO)领域中精进,进入物件导向分析(OOA)和物件导向设计(OOD)领域?还是要开始选择一个特定的作业平台,学习其上的程式技术?这两者不是平行线,它们最终是要相互为用的。对 OOA/OOD 有愈多的了解,使用起 Windows 开发工具中的C++ 类别库(MFC 或 OWL 或 Open Class 或 VCL)自然愈能胸有成竹,而不是随波摆汤。但是,当然,你也可以先进入 Windows 程式设计领域,慢慢再回头接触 OOA/OOD。
我与同夥的几位老朋友曾经十分瞧不起 OOA/OOD,每次去听些课程,回来就彼此嘲讽:又浪费了一整天。一个原因是:台上的老师自己连 OOP(Programming)都不够实力,谈什麽 OOA/OOD?没有据以实现观念的载具,一切将只是魏晋玄谈。另一个原因是:台下的我们自己的 OO 基础也不够好,对於听来的观念,无法产生有效的具体意识。
我们瞧不起 OOA/OOD,是因为我们自己粗鄙,是因为我们自己的程度不到。如果自己程式写多了,也用心揣摩过 classes 该怎麽设计怎麽分类,自己有过一些想法,再来看 OOA/OOD 的书,收获就会大得多。
OOA/OOD 的流派不少,Booch 是相当有名的一个流派,他着有 "OO Analysis and Design with Application"(无译本),相当出名。
●SDK Programming
如果你不喜欢一下子进入太多的理论世界,你希望早点写出漂漂亮亮的 Windows 程式,激励自己一下,那麽在学会 C 语言之後,可以选择 SDK programming 做为下一步。
SDK 是个通称,任何环境都可以提供自己的 Software Development Kit(SDK)供程式员在其环境上开发应用程式。然而因为 Windows SDK 太有名了,一直被延用其名,竟成了一个专用术语。"SDK programming" 其实就是以未加包装的 Windows API 撰写 Windows 程式的意思。如果你在这个层面上写程式,可以在任何一套 Windows 开发工具中畅行。
这个领域我推荐两本好书:
1. Charles Petzold/M.P.:"Programming Windows 95"(有译本)
2. Jeffrey Richter & Jonathan Locke/M&T:"Windows 95 :A Developer's Guide"(前一版有译本,新版尚未见到)。
前者几乎是这个领域的圣经,有非常广泛的取材和很棒的内容。後者的技术层次定位更高,特别选择了 hooking、subclassing、window class...等一些稀有主题。
有些书评人对於 Petzold 书籍的 95 版没有太高评价,但是对於其前身(3.0 版和 3.1 版)却又推崇备致。噢,一本书怎麽可能在「组织结构不变,仅是做 16/32 位元移植」的改版情况下,落差如此大呢?不可能!书评人对於新版没有太高评价,是因为他们的期望太高,忘记了这是改版书。以看新书的角度去评论改版书,会有误差出现。
Jeffrey 的书籍名实不副 -- 内容很棒,其名不彰。这本书也是改版书,先前已有 3.0 和 3.1 两版。
在这个领域里钻研,或许你还需要一些 Windows API 手册。各家整合开发工具的线上手册固然是不错,但电子有电子的好处,书面有书面的优点。带着本手册,可以当小说随手翻翻,累积印象,就不会在大做苦工之後才发现,原来有现成的 API 可用。Waite Group 出版了好几本 Win32 API 手册,像是 "Win32 Programming API Bible"、"Windows 95 API How To" 等等(皆无译本),每个 API 并附使用范例,颇具参考价值。不过我发现其中颇有误谬,你必须和线上手册交叉使用才保险。
SDK programming 也可以使用 C++ 语言。我的意思是你自己为自己包装一些类别,也就是自己把 Windows API 包装得更高阶一些。早期 Borland 推出其C++ 2.0 版(市面上第一套可支援 Windows 的 C++ 编译器),就是诉求让程式员自己做这样的包装(彼时尚未有主流的类别库产品如 OWL 或 MFC或 VCL,只有一个小有名气的 "Zinc" 产品)。这样的训练或许实际用处不大,因为现在已有主流的类别库产品(不少人甚至是为了使用那些类别库才决定开始学习 C++)。然而,曾经历练过这样训练的人,OOA/OOD 的实力必有增长。
Paul Dilascia 有一本 "Windows++ : Writing Reusable Windows Code in C++"(A.W.,无译本),便是这个层面的着作。这位作者现今是非常知名的 MFC 技术专栏作家,我一直期待他出一本 MFC 书籍,苦候不至。
●Windows 作业系统/系统程式设计
学习 SDK Programming,最大好处是能够清楚看清 Windows 系统所谓的 "message based、event driven" 的观念。另一个好处是藉由 API 函式,你可以相当程度地了解作业系统的基层动作。当然,後者需要一些书籍来辅助,在 SDK programming 书籍上是不容易看到对此有太多介绍的。即便有,层面也不够广。
Windows 作业系统领域我推荐五本书:
1. Matt Pietrek/A.W.:"Windows Internals"(有译本)
2. Matt Pietrek/IDG :"Windows 95 System Programming SECRETS(有译本)
3. Jeffrey Richter/M.P.:"Advanced Windows 3rd edition"(前一版有译本,新版尚未见到)
4. Walter Oney/M.P.:"System Programming for Windows 95"(无译本)
5. Garen Hazzah/R&D:"Writing Windows VxDs and Device Drivers" 2nd edition(未进口)
第一和第二本书由同一位作者撰写,分别针对 Win31 和 Win95。两本书并没有太多重覆的地方,Win95 之中属於 16 位元的那一部份,凡是在第一本书中提过的,第二本书就不提了。Pietrek 的探讨是以叁种形式进行:内部资料结构、API 虚拟码、系统程式设计。叁种形式都非常重要,而以内部资料结构尤然。你要充份了解 Windows 作业系统,一定要好好看看这两本书。我正引领鹄望 Pietrek 有没有一本 "Windows NT Internals"或 "Windows NT System Programming SECRETS" 这样的书。书名不重要,要认就要认作者。
第叁本书站在比较高阶的层面,也就是 API 层面,来看系统。Jeffrey 并不挖掘系统内部资料结构,也不讲述 API 虚拟码,他只是非常详尽地告诉你一些与系统核心有关的 API 如何使用,并给你许多出色的范例程式。那些与核心有关的 APIs 并不太容易在没有详细解说的情况下无师自通,因为它们的参数通常都很多,牵扯的意义也很广。这本书的重要性不亚於第二本。
第四本书和第五本书主要诉求在虚拟机器和虚拟装置驱动程式(VxD)的层面。它们也可以归类为 DDK Programming 领域,稍後我再来介绍。放在这里主要是提醒你,它们和作业系统有非常密切的关联。
●以 Console 程式练习 system programming
进入作业系统层次,大概免不了就要接触到行程(process)、执行绪(thread)、模组(module)、位址空间、虚拟记忆体、档案等题目。这些属於作业系统基本教义派的题目都不牵扯图形介面,因而 console 是很理想的练习环境。我的意思是你可以在 console 程式中练习CreateProcess、CreateThread、VirtualQuery、CreateFile 等等Win32 API。若需要输出资料来观察,只要 printf() 就可以了,不必大费周章去处理视窗、对话窗、列示清单。
印象中很少书籍介绍 console 程式设计。其实的确也没有什麽好介绍的,console 程式就是 DOS-like 程式,并且允许你直接呼叫 Win32 API,如此而已。
举个例子:
// filename : test.c
// building : cl test.c
#include <windows.h>
void main(int argc, char *argv[])
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
GetStartupInfo(&si);
CreateProcess("D:\\WIN95\\NOTEPAD.EXE",
NULL, NULL, NULL,
FALSE, 0, NULL, NULL,
&si, &pi );
}
这个程式执行起来,会另产生一个 NOTEPAD 行程。你以 "cl test.c" 做编译联结动作,所有必要的函式库(包括 C runtime 函式库和 Windows DLLs 的import 函式库)都会自动被联结进来。
●Application Framework
SDK 的基础有了之後,你可以留在那个领域继续精进。但是看到别人叁两下子就做出一个自己一星期也做不出来的程式画面和功能,很少有人不痛心疾首,吁嗟呻吟,大叹身不逢时时不我予。汗水其实不会白流,不过看准时机也要赶快下车,换一班快速列车,让过去的汗水所植基的东西有更大的发挥。
有一些开发工具大厂,把 Windows API 及必要的资料包装在一个个的 C++ 类别之中,让使用者站在他们的肩膀上,看得更高更远。有没有在平面电扶梯上走路的经验?桃园机场出入境站内有一些平面电扶梯,在上面走路,每个人都好像神行太保,轻松漫步就比梯外的人满头大汗还要快。Application framework(一种凝聚性很强的 C++ 类别库)就像那电扶梯。
市面上的 application framework 产品有好几套,真正引领风骚的,当推 MFC 和 OWL 二者。前者是 Microsoft 产品,後者是 Borland 产品。由於这种产品中的 C++ 类别彼此关系密切,因此同一个产品的应用程式的「基本长像」也就十分类似。也因此这些产品都搭配程式码产生器,以及各式各样高度自动化的辅助工具。
这种产品功能强大,用起来很爽,但是要学得好不容易。我看过太多因为基础不稳而跌下马来摔得鼻青脸肿的例子。面对这种东西,学习者首先必须拥有不错的 C++ 基础,那自然是不消说的。此外,对於 C++ 虚拟函式的精义,必须彻底了解,才知道自己到底在干什麽。
通常,学习 VC++ & MFC(或 BC++ & OWL)的人,可分两类。第一类人只有 C 基础,一心希望赶快通往物件导向的圣堂,希望赶快做出又炫又酷的程式。他们以为 VC++ 或 BC++ 是一种新的 C++ 语言,或以为那是一种「Windows 程式语言」。他们迫不及待地把整合环境上的wizards(或 experts)玩个痛快,东拉西扯,却不知其实只是胡搞瞎搞,搞得自己一头雾水。他们东凑一个 class,西凑一个 class,有样学样,东施效颦。初期进展颇为惊人,把程式凑成一个怪物却浑然不觉。等到束手无策了,信心也全失了,於是自己给自己下了个结论:MFC(或 OWL)是全世界最烂的东西,大怪兽一个!
另一类人不太一样,他们或许也只有 C 的基础,但是愿意先把 C++ 的基础打好,尤其在虚拟函式痛下功夫。他们学习 MFC(或 OWL)的本体架构,企图了解那样一个 application framework 是如何建起来的。研究的主题包括 Message Mapping、Command Routing、Runtime Class、Persistence...。数百个 MFC(或 OWL)类别不熟悉?不会用?没关系,那只是手册查阅的功夫而已,架构弄懂才最重要。这种人初期进度缓慢,可能会被速食派人士嘲笑。但假以时日,谁笑谁就不知道了。
我自己对於 OWL 不熟,没有能力介绍好书给你。至於 MFC,我推荐四本书:
1. 侯俊杰/松岗:"深入浅出 MFC"(第2版)
2. David Kruglinski/M.P:"Inside Visual C++ 4th edition"(前一版有译本,新版未知)
3. Jeff Prosise/M.P.:"Programming Windows 95 with MFC"(有译本)
4. George Shepherd & Scot Wingo/A.W.:"MFC Internals"(无译本)
第一本书用来建立对 MFC 架构的通盘了解,涵盖上述我提到的所有重要主题。内容虽然很深,但因为循序渐进,示意图也多,并不难看。第二本书提供许多范例,并以 Visual C++ 工具大量辅助 MFC 程式设计。第叁本书也提供许多范例,MFC 架构方面的解释比第二本多,但比第一本书少得多。它完全不使用 Visual C++ 工具。第四本以挖掘 MFC 原始码的方式来介绍 MFC 架构,层面比第一本深且广,但比较难看。
我建议的阅读顺序亦如上排列。
●RAD(Rapid Application Development)
有资格被称为 RAD 产品的,当属 Visual Basic、Delphi、C++Builder 叁者了。Optima++ 好像也是,但我没有什麽接触。这里我要谈的是 C++Builder。
C++Builder 对程式开发的帮助层面,和 MFC(或 OWL)又不太一样。这个工具可说是 components software(以元件组成软体)的实践者。每一个元件有 properties、methods、events 叁个性质,分别代表其资料、可执行的行为、以及可反应的状态。你在整合环境中选拉一堆元件,很快就可以把一个应用程式的使用者介面兜起来。比较困难的地方在於如何让元件和元件之间产生关联,那需要写点程式码。程式码虽然简短,却也绝对需要 C++ 的良好基础,以及对 VCL 各元件的相当程度的了解。虽然 VCL 的架构和 MFC 或 OWL 都不相同,但如果你曾经用过 MFC 或 OWL,并且曾经在架构上面花功夫,再来看 VCL 自然是比较容易进入状况。触类旁通嘛!
C++Builder 是个好产品。它不但与 VC++ 和 BC++ 竞争,层次又比两者更高一层。至於你该选择 MFC 或 OWL,还是该选择 C++Builder?若以工具的优秀度考量,我投後者一票。但是关於就业市场,考量的因素还有许多;不论你的选择如何,似乎都是个赌注。
●DDK Programming
DDK 是微软的一套工具。DDK Programming 是个统称,意指撰写驱动程式(DRV),或虚拟装置驱动程式(VxD)。这个领域需对作业系统有比较多的了解,因为牵涉的技术层面比较低阶。
高阶语言如 C++ 在此领域较不管用,assembly 语言反而成为主流。再佐以 C 语言应该是最好。虽然,也有一些整合环境工具如 VToolsD 提供协助,允许你以 C/C++ 撰写虚拟装置驱动程式,但 assembly 语言仍然得精通,因为你常常需要处理堆叠、暂存器...,需要考虑机器码的长度、速度。这些都是学习 assembly 语言时获得的知识,高阶语言不管那个。
这个领域我推荐两本书。如果你对 DDK programming 没有兴趣,这两本书也可以归类在作业系统领域里,对你还是有帮助:
1. Walter Oney/M.P.:"System Programming for Windows 95"(无译本)
2. Garen Hazzah/R&D:"Writing Windows VxDs and Device Drivers" 2nd edition(未进口)
第一本书是学习 VxD programming 的极佳书籍,从最基础讲起,相当详细。第二本书提供许多设计精良的示意图,非常难得。事实上它也真的很「难得」,台湾没有进口。
●Java 程式设计
如果你有 C++ 基础,又用过 MFC(或 OWL),那麽老实讲,要进入 Java 殿堂,真是轻松。Java 的语法与 C++ 十分类似,Java 的 API(不以单纯的函式呈现,而是以类别库形式呈现)则活脱脱就是另一个 application framework。
我以图一总结我对这条学习路线的讨论。
+----------+------------------+------+--------------+
| | MFC(OWL) | | |
| OOA/OOD +---+ C++Builder | +--+ DDK |
| | | |programming|
+--------------+--+-----------+ Windows | |
| C++ (OOP) + SDK | O.S. | |
+-----------------+-----------+---------+-----------+
| C + Assembly |
+-----------------------------+---------------------+
图一
●读者来函
> 送件者: <b83140163@ntou66.ntou.edu.tw>
> 收件者: jjhou@ccca.nctu.edu.tw
> 主旨: 资讯人的生涯规划
> 日期: 1997年4月26日 PM 12:22
>
> 侯先生你好:
> 小弟经常在 RUN!PC 杂志上拜读您的大作,也深觉很有收获,尤其在读了「EQ 价更
> 高」一文後,产生了另一个想法,希望您能抽空为我回答。或许这也可能是
> 其他人心中的疑问。
>
> 小弟因联考的关系,目前就读非资讯相关科系,但是从国
> 中开始,便对电脑资讯产生了极大的兴趣。高中时候已多有涉猎,进
> 入大学之後,并未忘情於电脑,并尝试自我学习。但是自己跟资讯相关科系的同
> 学相比,在他们专注学习的情况下,有渐行渐远的感觉。
> 感到惶恐,也担心自己被资讯业
> 界快速变化的洪流所淹没。您作为资讯界的代表人物之一,不知有何想法或建议呢?
「作为资讯界的代表人物之一」,这一点我谈不上。我把自己定位在「高阶技术的导引者」。是的,导引者而已!在各个领域真正从事专案计划的工程师,都拥有比我更深入更实际的经验。我比较广,而他们比较精。说到广,其实我也不过是在 C/C++、SDK、MFC、Windows O.S 这一条线上而已。
真的,我不清楚,以现在资讯量这麽庞大,PC 软硬体进步这麽快速的情况下,有志在资讯领域实现人生抱负,却不是科班出身的年轻朋友,是否有太大的机会。「科班」所代表的文凭或身份,并不是考量重点,我所想的,亦即您所言,「在别人专注学习的情况下,彼此有渐行渐远的感觉」。
我本身是个自学案例,但我可是在大学时代看过、用过打卡机的A世代人唷。那个时代的复杂度与今日不可以道里计。即使我其实是在大学毕业服役之後回锅才对电脑引发兴趣,那时候电算环境的复杂度仍然与今日不可以道里计。当时一切因陋就简,PC 作业系统不过就是个 MS-DOS,可以完全摊在手掌心里;最炫的软体开发工具不过就是 Turbo Pascal,进入绘图模式画个简单的曲线图就开心得嘎嘎叫。没有选单、没有图形人机介面、没有物件导向、没有整合环境、没有 wizards、没有 experts...没有,什麽都没有!有的是记忆体 640K、硬体 20MB、Hercules 卡、单色萤幕、九针点矩阵印表机...。
我不知道,现在这麽大的资讯量,这麽多的技术和这麽多的工具需要同时学习的情况下,资讯科系以外的同学们,即使你们依然保持高度兴趣和高度自持力,头悬梁锥刺骨,「衣带渐宽终不悔」的感觉能够维持多久?
我真的不知道呀!
> 小弟有以下问题希望您能回答,谢谢!!
> 一、您喜欢在资讯界中工作,是因为哪些条件呢?
让自己永保朝气蓬勃。不会有「被新世界遗弃」的孤寂感。
> 二、一般资讯人对工作上会有哪些不满意的地方?或是工作上会遇到哪些困扰呢?
会在走出学校後走入资讯业,通常是因为本身的确对资讯感兴趣,不然可能校内早就转系走人,或离开学校後马上就表明心迹了。排除「没有兴趣」的因素後,我想资讯人对工作的最大不满意,大概是「永远有学不完的东西」。在我这个岁数,进入人生的这个位置,我清楚自己该掌握什麽,该舍弃什麽,所以庞大的资讯量对我威胁不那麽大(虽然也不小)。但是对於还没有事业基础的年轻朋友,他们必须(或自己认为必须)努力把十八般武艺起码也搞好十四般,那就得花很多很多的时间精力。
其他理工领域的进步没有这麽快,有些领域甚至学一套可以吃一辈子。没有「活到老学到老」的心理准备的朋友们,此行莫入!
至於普遍的困扰则是:「这麽辛苦,我能够做到几岁?」这是工程师们一个普遍的危机意识。我的工研院老同事就笑指我的光明顶(日渐光明的头顶)说:『看你能做到几时!』
> 叁、在准备从事资讯相关的职业前,应有甚麽样的自我准备或是训练?
您讲的是职业,而不是学业,那表示您已经完成了自我基本训练(不然就进不了职场罗)。我想,那麽,心理建设是最重要的。老话一句,活到老,学到老。其实,兴趣是最重要的,有了兴趣做後盾,吃苦当做进补。没有兴趣,再轻松的工作也是无聊,虚度人生而已。
我工作的时候,常常做到肉体和精神的负荷将至极限,才放下来,抒发一下。静一静,喝杯咖啡,回想刚刚完成的成绩,想着想着兴致又来了,又坐到电脑前面干活。出国旅游的时候,飞机上的漫长光阴就是我浏览整理MSJ、DDJ、WDJ 等期刊的最好机会(我总是带一袋子)。你要怎麽解释一个人疯狂的干劲儿呢?辛苦但是快乐,唯「兴趣」二字可以解释。
> 四、面对压力与挫折,您如何面对?在工作成果满意与不满意中如何取得协调?
这好像在做家庭访问了。年岁相差太远,心境与作法都不会相同,也不容易感染。此题免了吧。
> 五、您当初如何下定决心从事这一行的呢?当初做了甚麽样的自我准备?
我不知道「这一行」是指我进入资讯界,还是指我进入资讯写作界。如是前者,因为兴趣所在,就进去了。如是後者,因为觉得可以有比较大的贡献和发挥,就转过来了。至於自我准备,大约就是把本质学能的基础打好吧。「电脑技术专业作家」的头衔似乎还没有尊荣到可以让小朋友做为「我的志愿」,或年轻朋友做为「心目中理想的十大行业」,我自己是在...呃...写作之後才开始学习写作的。当然,每个人对文字的掌控能力与风格,即使没有刻意培养,也可能在从小环境或耳濡目染的情况下发展出不同的水准,而那会大大影响行文的顺畅与可读性。
如果有心在资讯工业界发展,最重要的「自我准备」就是把基本功(作业系统、语言能力、资料结构、演算分析...)学好。常常追逐哪一种开发工具的哪一个最新版本的哪一个很炫的功能,是舍本逐末。如果有心在资讯写作界,「自我准备」就还包括组织能力和文字能力。尤其是组织能力。有志於此的一些朋友告诉我,希望多做些翻译工作然後再开始创作,但是各位要知道,单纯的翻译,如果没有特别用心,对於组织能力没有丝毫帮助。
> 六、从事这一行有无充分的在职进修机会?
一般而言资讯公司主管都相当清楚这一行的一日千里,所以稍具规模者应该都会提供进修机会。如果你说的是「留职停薪修硕士博士」这种大 case,那恐怕要研究单位或很大很大的公司才有。一般的技术研讨会、新技术(产品)发表会、国外电脑大展等参加机会,应该是不少的。科学园区和工研院里头的这种机会就非常非常多。不过,您的表现是否足以膺此「种子」重任,则是後话。
> 七、您对於非资讯相关科系毕业,但有志从事资讯工作者,有什麽建议?
> 如何建立一个自我学习的方法,以免有闭门造车之憾?
唯有比别人更努力,才有机会。别忘了别人也非常努力,而且占尽优势。避免闭门造车之憾,应多培养大局观,最简单的方法就是多看杂志和期刊(国内国外都要)。对大学生而言,期刊似乎有点吓人,但多接触自然就有机会。No Touch,No Chance。
> 八、一个资讯人是否真的会忙得没有休闲娱乐的空闲?
很有可能。我住的这栋大楼 190 户里头有一半以上在交大、清大、工研院、科学园区工作,其中又有许多在资讯领域,所以基本上我满清楚我们这些人类的生活形态。年轻的朋友们忙着专案进度、还要抽空进修充实自己,未婚者以公司为家是很常见的事。同事们常常下班後相约吃个饭,再回办公室充电。年长的朋友们有了点事业基础,但还是要忙着主持计划、拨空进修充实自己(否则怎麽带个个头角峥嵘的弟兄们)。
要说能够固定时间看个电影,唱个卡拉OK,甚至周日去爬爬山,我真的很少遇过。
> 九、面对资讯日新月异快速更替的洪流下,您是否会有怕跟不上或是将来跟不上的焦
> 虑呢?如果有,您是如何克服的呢?
有啊。我常和同辈朋友们彼此消遣:『唷,还没被淘汰啊?杂志上的名词还跟得上吧?什麽时候转行呀』。吐吐苦水可以排遣情绪。但追根究底,怕跟不上,就加倍努力。
> 十、您认为一个资讯人应有怎样的生涯规划?
刚出校门,一定是做 programming 的工作。既然有兴趣做为後盾(没有的话就免谈了),请把十八般武艺好好学学。名门名校的身段放下来,高学历的身段放下来。实务经验都没有,又要摆身段,徒惹一顿笑而已。基本功扎实了,要开始注意专案怎麽规画、人力怎麽安排、规格书怎麽开、文件怎麽写,培养自己做为主管的能力。当然,此期间,表达能力、分析能力的培养一样也不能少。人际关系更不能因为技术的提升而降低。所谓千兵易得,一将难求,技术以外的能力,往往是决胜的关键。
我的好朋友,曾铭源先生(Run!PC 前「美东随笔」专栏作者),去美叁年,年薪从四万调整到...不可说的程度,被公司倚为「绝对不可或缺的人物」。他付出了许多许多,而成果丰硕。走这一行,前途完全在自己手里。
很多同学抱怨资讯界实在太辛苦。但我提醒各位一点,念资讯的人,自我掌握度非常高。其他科系的学生要怎麽样才能够自力做出点成绩?除了死K书,怎样才能够拥有实务经验?整个土木系四年我也不过就参观了北横荣华坝和台中港而已,要说实务经验那是半点没有。念机械的人怎样才能够设计一个机构并且自己把它做出来?念电子的人哪有机会自己 layout 一块板子?念生化的人,不上实验室哪有机会自己培养一只菌?
很多很多领域,都需要很大的旁助力,才有办法 do something。但资讯系学生,一台 PC 就可以把自己锻炼成百战金刚。一切都掌控在你自己手里,成也由你,败也由你。
========================================================
= =
= =
= 本文及更多出自:http://www.lmh2004.cn/ 【热布克】 =
= =
========================================================
【热布克hbk】超经典(转):编程-传统下的独白
========================================================
= =
= =
= 本文及更多出自:http://www.lmh2004.cn/ 【热布克】 =
= =
========================================================
侯捷 1998.01.22 第一次发表於
清大.枫桥驿站.电脑书讯 CompBook 版(140.114.87.5)
本文将发表於 RunPC 1998 叁月号(二月号来不及啦!)
●网路阅读
BBS 电脑书讯(CompBook)版有一封由 nojunkad 网友於1998/01/19 发出的信件,引起我颇大的兴趣:
> 以前满喜欢看书的,不过自从 Internet 风行後,就比
> 较少看书了。想请各位谈谈网际网路的兴起对电脑书籍
> 的影响有多少。各位接触 Internet 後,原本的阅读行
> 为有多大改变?又如何在两者之间取得平衡?谢谢。
就我而言,没有改变。我很不习惯在电脑萤幕上看长篇大论的东西 -- 要消耗脑细胞的那种更是没有办法。所以我还是喜欢舒舒服服地摊开一本书,由太座奉上香浓咖啡一杯,红蓝笔各一,再展开我的学习。这也是我目前唯一可以理直气壮地说「喂,来杯咖啡」的时候。开玩笑,读书多麽神圣,怎能没有咖啡。
我之不喜欢在萤幕上看长篇大论,除了保护眼睛,和英文阅读能力多少也有关系。不过侯捷阅读电脑技术方面的英文文字尚有一般水准,不会差一般人太多,对於萤幕阅读的态度应该能够代表为数不少的资讯人。
nojunkad 网友想问的,说不定是:「如果有一本书,有电子版在网际网路上流通,可免费下载,你会买书还是抓书?」唔,这本书如果万儿八千元,我会用抓的,如果千儿八百元,我会用买的。雷射印表机印出来的东西像「报告」,质感不够,会影响阅读时的氛围。
以我自己的作品来讲,我不但不介意它们在网路上流通,供自由阅读,而且我希望愈多人看愈好,因为看过所以不想花钱买印刷品也没有关系。我没有把我的作品制成网页,是因为我没有时间。谁要将我的作品做成网页放在他的网站上,我可是欢迎得很,不过你的网页制作水准要合我的意就是了。
所以,不必再有人问可不可以转载侯捷的文字。只要是在网路上流通,您随意吧。
●原文书进口标签
我不喜欢看到我想看的东西被我不想看的东西遮起来,甚至黏起来。
偏偏在我购买外文电脑书时常常发生这种事情。
我检视书房里的电脑书籍,有松岗、峰、天珑、微科、全华、旗标...各家进口的原文书,每一家都不约而同在书背最下端贴上一张邮票大小的贴纸。黏力超强,撕它千遍也撕不掉,抠它千遍也抠不净。除了去渍油,没人奈何得了这小小一方强力贴(绝对不是便利贴)。只有峰的贴纸还算好,勉力撕下後可以整张拉起来,不会支离破碎得更丑。我询问过峰的朋友,他们的确特别用心挑过贴纸,足证事在人为。
我记得曾经读过一篇文章,报导 3M 便利贴的发明故事:曾有一段时间,厂商比的是谁黏力强,後来觉得「有点黏又不太黏」有更大的市场。
我觉得我们这些外文电脑书进口商全都没有进化。
书背下端是什麽你知道吗?是出版公司名称耶!也有可能是作者姓名耶!如果有什麽金字招牌可以因为亮相而吸引读者购买,在商言商,我不反对把它贴在书背(把整个封面贴起来我也不反对)。可是我们不会因为谁进口这本书而买它,是不是?我们会因为作者或出版社去买一本书,而他们却被「永久地」贴起来了。
我不知道外文书进口商有什麽难言之隐没有。点货方便?藉此广告?广告效果应该是没有,反广告效果倒是有。不管他们有什麽困难啦,反正我就是不高兴这麽重要的地带被他们「永久性地」伤害了。换一种「有点黏又不太黏」的贴纸可不可以?
●书痴与「天下第一页」
曾经在报纸上看过一位自称影痴的读者投书。他说:『什麽人有资格叫作影痴呢?对摄影手法品头论足?对影星轶闻如数家珍?对导演思想融会贯通?不,都还不算!看完一出电影,愿意留到(并享受)最後一刻,看完工作人员谢幕表,才有资格说自己是影痴』。他又说:『在时间就是金钱的压力下,坚持完整播放谢幕表的电影院,好像只剩长春戏院一家了!』
那,什麽人有资格叫作书痴呢?侯捷曾经收到曾奎宪读友的一封来信,很有点意思。当时【无责任书评1】出版,书後放了一张由我精心设计的读者问卷,曾先生来信这麽写:『很抱歉我不用书後的回函卡报告,因为剪下书中的任何一页,甚至是空白页,对我而言,无异於焚书坑儒,是可忍孰不可忍?』这封长信被我收录於【无责任书评1】第二刷(旗标,1994/10)中。我从善如流,建议出版社将第二刷书籍的问卷做成完全相同的一式两份,这样子撕一页下来就比较不会有遗憾。结果呢,没人理我!
曾先生当时已赴美留学,现在应该早已学成。我很怀念几位在【无责任书评】初创年代,在 Internet 还不盛行的年代,曾经亲笔写满叁两张大纸给我的读友,包括曾奎宪先生、纪俊男先生、卢静秋老师...。
好,回到所谓的书痴。我和曾先生的理念相同,不愿意伤害心爱书籍的任何一页。有些人(很罕见)把「伤害」的定义又扩张到极大,连摺都舍不得摺,更别提在上面做笔记心得眉批了。他们看起书来小心翼翼双手捧着,像礼佛一般。你碰过这种人没有?我的大学室友就如此。你别以为他看的是佛经或圣经或什麽文学大师的作品呀,他看的是高等微积分,成绩还一级棒。怪哉!
这该算是「书洁癖」吧,和「书痴」之间应该不构成充要条件。
倒有一点和影痴先生的「工作人员谢幕表」异曲同功。如果你看书看到俗称的版权页(英文书多半在书前,中文书多半在书後),看看版次(注),看看刷次,看看有的没有的;看看文字编辑是谁、技术编辑是谁、封面设计是谁、排版是谁、美工是谁...,你,书痴一个!
★注:有一位读者就很注意侯捷书籍的刷次,曾写信来安慰我说『侯大哥你好可怜唷,书籍经年累月都只一刷』。呵呵,现在有进步啦!
对身为电脑书籍读者的我们而言,当书痴就难了。中文书嘛根本没有文字编辑、技术编辑。封面、版面、美工从来也不是 credit 的重点。至於英文书嘛,谁是谁和我们有什麽关系?除了因为天王级制作人 Andrew Schulman 的出现使我曾经注意过谁是电脑书籍的技术编辑,我自己也很少注意这「天下第一页」里头谁是谁。
书籍应该有制作人,制作人应该是技术编辑和文字编辑的总合。这个位置有多重要,看看 Matt Pietrek 在其名着Windows Internals 中的一段感言:
------------------------------------------------↓
首先我要谢谢的,当然是我的编辑 Andrew Schulman。没有他这本书几乎不可能完成。当我们开始为这本书筑梦时,它看起来是那麽令人畏缩可怖。只因为我知道他可以助我一臂之力我才有勇气进行下去。几乎我所写的每一笔资料他都有令人惊讶的丰富知识,而且他也注意不让太多细节扼杀了想像空间。每次当我认为我已经钜细靡遗地涵盖了一整章细部讨论,他会以数百个毫不夸张的意见把我推回原点,促使我完成更详细的讨论。我不能够想像是否还有更好的编辑如他了。
-------------------------------------------------↑
以下则是我在 1994.01 评介 Windows Internals 时,发表的看法:
------------------------------------------------↓
我把上面这段文字翻译出来,用在提醒国内电脑书籍出版业者,一本技术书籍影响学子之甚超乎想像,出书不能不慎,建立 peer review(同僚覆审)制度有其必要。我所知道的国内电脑书籍出书过程,许多会让读者骇然。电影有制片人,唱片有制作人,为什麽电脑书籍没有?
我多麽期盼国内出现审稿制度以及群力制作单位,期盼像Schulman 这样的专家编辑。少年当立凌云志,我虽不再年少却也多麽期许自己的学养能够成为那样的编辑。但是话说回来,技术编辑可不是挂名领钱尸位素餐,如果只为了图某人某人的知名度,拉来助长声势,那真真是再没意义的事了。
------------------------------------------------↑
最近我看到一本 O'reilly 出版的 Inside Windows 95 File System,举棋不定,後来翻看「天下第一页」列出来的编辑是 Andrew Schulman,才吃了定心丸。说来可怜,古今中外电脑技术书籍的第一号制作人 Andrew Schulman,名字都还没能够排上书籍封面。这是一种...唔...出版界还不够成熟的徵象,我这麽认为。Addison Wesley 曾经有一个 The Andrew Schulman Programming Series,算是出版公司对这个位置最大的尊荣了。
国内有些书籍是以工作室、研究室的名义产出。其中一些只为壮大声势,一堆人就是一个人;而在某些严谨的工作团队里,我知道的确有着类似制作人的型态存在。集体创作没什麽不好,有强而有力的总舵手就没问题。哪一天能够把「天下第一页」做得毫不含糊:谁负责技术、谁负责文字、谁负责版面、谁负责封面...,则又是台湾电脑出版界的一大进步了。
「没有声音」是我们前副总统的写照,「没有名字」是我们某些电脑书籍工作者的写照。很佩服那些长期隐姓埋名在巨大光环下的人,我就没办法!
●正确的选书方法
听说有人看书不看序,为数且不少,令我骇然。
早些年是没什麽好骇然的。早期中文电脑书,要不没序,要不八股一堆,不看也罢!作者自序最後总要来上一句「本书仓促付梓,误谬在所难免」,大约就是我们国小国中高中写作文时活死人肉白骨(至少加 3 分)的那最後一掷:「反攻大陆,以慰国父蒋公在天之灵」。喔,你说对了,「误谬在所难免」之後通常都还会有「尚祈各界先进不吝指正」。各界先进是给他指正了,新刷新版却也未见更正。
都是屁话!
另一种 style 就是请一堆名人写序。这种情况今不能免,昔不及今。上星期一位任职大公司的好朋友告诉我他的第一本新书要出版了,他说:『上面说得好好打点一下,於是请到一位中研院的研究员写序;自己公司的大头当然也要趁机露个脸。嘿,开玩笑,一本书咧!本来想请台湾区的总经理来写,後来看看不如请大中华地区的老板来写』。我说:『好哇,未出师先气势!他们写得怎麽样!中不中肯?』朋友撇撇嘴:『还不是尽讲些官话,书根本没看。大中华那个的序还是我代写的。她一直没时间看,最後我们不管了,代她放一个 signature 就印啦』。我这同学非常无奈,但是人在江湖身不由己。怪的是,这只是一本翻译书,序也忒多了些吧!更怪的是我同学说:明明是翻译,为什麽出版社在封面写「编组著」?
同学,你涉世未深矣!
近年来电脑书序比较有看头了。什麽山高月小、什麽访仙得书、什麽鬼斧神工、什麽奇穴探险...;又是「一字之差 五百世轮回」,又是「身毁形灭 唯舌不灰」,煞有看头。尤其这访仙得书记(Visual C++ 5 视窗程式设计经典/林俊杰/峰)非常有趣,侯捷不及也。林先生以古文为体,将该书内容做一画龙点睛式的描述,生动活泼,极为出色。
序如果写得好,就是读者认识一本书及其作者的最佳窗口。我曾经在书店仔细观察过一般人把书拿下架後的动作,有不少是这样子:
1 随手掰开(通常在书本 1/2),前前後後翻个两页;
2 再随手掰开(这一次大约在书本 2/3),前後看个一页;
3 再随手掰开(这一次大约在书本 1/3), 看个半页;
4 把右手大拇指搭在封面右缘中央处,左手握住书的左侧,两手向下压,右手大拇指缓慢向右滑动,让书页呈飞舞状(这可能是一种人类进化过程的神秘习性);
5 把书本 上,翻转封底看定价;
6 皱个眉,口中嘀咕两声(抱歉,听不清楚说什麽);
7 放回原位;
8 重复 1~7 的动作。
我很惊讶他们不但不看序,连目录也没看!
朋友,选择一本书时,序和章节目录很重要!如果第一章(或第0章)有导读或架构说明更是好。如果对於这个主题你是完全的门外汉,大概选书的仪轨只能进行到这里了。如果对於主题你已有点功力,这时候就应该找个座位,翻到你最熟悉的条目,看看作者怎麽解释;再翻到似懂非懂的条目,看看作者怎麽解释。然後才决定要不要和这本书长相左右。
在书店「找个座位」?喔,书店里头有座位吗?有,松岗门市(敦化南路和信义路交叉口)有各大电脑出版社的中文书籍和杂志,也有为数众多的原文电脑书,还有舒服宽敞的座位,侯捷最喜欢去那儿选书。新骅书局(罗斯福路台大校门口附近,专营电脑书)也有座位(两年前的印象)。
●电脑书籍的排版艺术
现今的排版软体功能很强、很花、很眩。排版人员,不管是作者自己,或是出版公司的排版部门,或是独立的排版工作者,虽然受过排版训练,却没有受过版面布局训练。所以我们读者就常常被迫欣赏「杂菜面式」的排版。那就是说,什麽功能都给它露一下。反映到字形上来,你会在一本书中同时看到明体、黑体、圆体、宋体、颜体、POP 体、隶书、行书、楷书、魏碑、古篆、勘亭流,呵呵,历代书法大展!反映到颜色上来,则像打翻一缸染料 --反正四色和全彩价钱相同,不给它多上点颜色可惜。此外如页眉啦、网底啦、斜体啦、底线啦、页码啦,也都极尽变化之能事。
拜托!这些全都是兵家大忌。
侯捷排过几本书,读者的反应是「清爽乾净」(只有我爸嫌字太小)!那就不能怪我说话宏声了,让侯捷来给电脑书籍从业人员上一课排版:
1. 松紧:阅读的舒服程度,和字体大小没有绝对的关系(只要字体大过 9 号),和字距以及行距的关系比较密切。字的大小和间距如果没有和谐搭配,眼睛绝对不会舒服。
2. 颜色:不要像村姑上大街,每一种胭脂都要往脸上抹。有的颜色配在一起有肮脏的效果,绝对不能用。我看过那种全彩书籍(现在最流行了),页眉一个颜色、页码一个颜色,内文叁两个颜色,网底五六个颜色(外加渐层),有够丰富的。五色令人目盲,我总觉得素雅比俗 来得高级。
3. 字形:简明 实为要,千万别开书法大展。会让眼睛疲劳的安排,统统应该避免。我以为,一本书 3~4 种字形已是上限。
4. 斜体:仓颉造字以来,5000 年中华文化,方块字从来没有以斜体表现过,斜体中文字在我看来真是不对劲儿。如果要强化文字效果,应该利用不同的字形,不应该用斜体。
5. 留白:留白绝对有必要,一来给读者做笔记,二来让版面更雅致,增加阅读效果。只要书籍内容有料,读者绝不会误将留白视为灌水。
6. Index:技术性书籍的 index(索引)不可少,遗憾的是中文书绝少做到。我很惭愧地说我也不太会这项技术。各出版公司当然不会不知道 index 的重要,五年十年过去了,可曾要求排版部门或协力厂商好好研究研究制作 index的技术?印象中只有「资讯人」出版社对此很用心。
排版效果影响阅读效果甚巨,千万不可忽视!
●急就章 -- 线上回覆
Internet 的兴起,带来很多新的社会议题和文化冲击,其中一个就是,各位是否发现,BBS 或 News 的信件文字品质十分粗糙?错别字一大落,语句不通一大落,断章取义也是一大落。我看呐,都是「线上回覆」惹出来的祸。
你在线上的心情如何?常常急如星火吧!何必呢?离线阅读不是很好吗?离线回覆不是很好吗?什麽东西都要速成、速食,东西怎麽会精致?人生又怎麽会精致?你说离线会多占硬碟空间?硬碟空间算什麽嘛,你甘愿以不知不觉养成的坏习性来换取不值钱的硬碟空间吗?2GB 才 6000 元不是?嘎,又降价了 ?!
●九指禅
前一篇文章「给作者的一封信」发表後,paulchn 网友针对我的「九指禅」给了一些建议:
> 1. 试试手写输入法
> 2. 试试语音输入法
william 网友则做了一些回应:
> 呵,连敲键盘都有困难了,还能「执笔」吗? :)
> 除非是用「握」的... :p
真的是,不能敲键盘,写字更困难。这一篇又是九指禅下的产物。我忍不住请美静来看看我的移指大法:凡要用右手中指的键,如 i、k、8,都以右手食指取代之。这麽艰困的情况下还能够一天内完成这篇文章,我有点洋洋得意。美静於是说了个故事给我听:
『我有位学姐,主修钢琴,有一次大考前一个星期伤了右手大拇指。她准备的曲目是布拉姆斯狂想曲,难度很高。怎麽办呢?凡需要用到右手大拇指的地方,她都以右手食指代替。』
我请美静当场弹一段布拉姆斯的狂想曲,从此...呃...绝口不再提我的移指大法。
--- the end
========================================================
= =
= =
= 本文及更多出自:http://www.lmh2004.cn/ 【热布克】 =
= =
========================================================
【热布克hbk】超经典(转):Windows编程书评
========================================================
= =
= =
= 本文及更多出自:http://www.lmh2004.cn/ 【热布克】 =
= =
========================================================
“前言”
大约八、九年前我开始学习程序设计时,编程方面的书籍十分缺乏,只要有一点内容的书大家都会掏钱购买,如果有了一本好书象Ray Duncan的中《Advanced Dos Progamming》, 那就被大家都当成宝贝一样人手一册珍藏。现在各家出版社都争相出版各种电脑丛书,书目让人眼花撩乱,书本价格也越来越高,难免鱼龙混杂,读者想购买书籍时不免左挑右选:难于决定哪些是真正的“经典大片”, 是值得你付出银子、精力的真经。哪些是虚有其表的作品。如有专家指点,读者就能不用费神思量了。笔者不揣浅陋,抛砖引玉,介绍一些Windows编程方面的书籍,仅供参考。
“Windows程序设计的圣经:Petzold”
C/C++语言是主流程序设计语言,Windows是当今最流行的操作系统,只要你想加入计算机软件行业,你就必须掌握这两项本领。可惜至今我们国家很多学校计算机软件专业都还没有开设Windows程序设计的课,可能用的课本还是我们10年前的课本,相当于国外20年前的水平,大部分刚走出校门的毕业生还得从头学起,这种落后情况何时才能改变。
对于已经基本掌握C/C++语言,想学习Windows编程的读者, 《Programming Windows95》是最合适的教材。这本书大名鼎鼎,是最著名,最受好评,最为畅销的Windows编程经典著作,被誉为Windows程序设计的“圣经”。作者是Charles Petzold, 国内由清华大学出版社出版,书名《Windows95程序设计》,定价98元。
Charels Petzold是自由专栏作家,是第一个在杂志上介绍Windows编程的作者,通过对微软Windows编程资料近半年的研究学习,他掌握了Windows编程,他发现自己能比微软更好地解释如何学习Windows 编程,于是1988年他出版了〈Progamming Windows〉一书,开始介绍的是Windows 2.0编程,现在这个版本是第四版,介绍Windows95编程,其它两个版本是windows 3.0,3.1。虽然Windows经过了将近10年的发展但这本书的大多数程序看起来没有太大变化,实际上Windows的设计原理所谓事件驱动方式本质上基本没有变化。
Charels采用的是传统的C语言,直接调用Windows API(Appliction Progamming Interface应用程序接口),而不是流行的C++和MFC。这看来有点陈旧和过时,但实际上这种SDK编程即直接使用Windows API编程是最基础、最本质、用途最广的Windows编程方式,只有这样才能清楚体验Windows程序设计的原理:"基于消息,事件驱动方式",而且通过调用API可以深入了解Windows操作系统的基本部分。对于采用Visual Basic或者Delphi等快速程序开发工具(Rapid Appliction Development ,RAD)的程序员来说,掌握SDK编程可以进一步提高实力,设计出更高质量的程序。
这本书取材全面丰富,涵盖了Windows编程的主要领域:消息驱动,GDI,窗口控制,资源,内存,打印,DDE等,每一方面都举出短小精悍的例子说明,新版内容也覆盖了Windows95的新概念:如多线程,增强GDI,抢先多任务,新的Win95界面控件和增强OLE等。不过很多人认为3.1版本的书是最有价值的,相比起来针对Win95版本增加的内容和深度都还差一点。但对于全面掌握Windows编程的基本概念,特别是从Dos编程转移到Windows编程,这是最好的教科书。
这是一本大部头著作,中文版有875页,附有磁盘,英文版有1100页,书中的程序代码非常清晰,有很多注释,注释也非常清蔟,是如何进行程序编码的优秀样板,阅读别人的优秀代码是学习编程最好的方法。这本书属于典型技术派风格,文字简炼,平铺直叙,没有象通常的美国书籍有笑话,趣闻,故事来调节一下,读起来很是有点累,不过这是值得的。
由于Charles Petzold对Windows编程推广的巨大贡献,(对于整整一代程序员来说,"到 Petzold"的书里查一下"早已成了解决Windows程序设计的法宝.),. !994年微软公司和Windows杂志给他授予了Windows先驱奖,其他六个同时获奖的人都是微软公司的Windows主要设计人员和市场人员,这也充分证明了这本书的价值.
“其它书籍”
另外还有一本非常不错,也是介绍SDK编程的著作,Jeffery Rithter和Jonathan Locke 的《Windows编程指南》,也由清华大学出版,但实际上名字和内容有点不符,技术层次比Petzold的书要高,特别是介绍了一些高级主题如钩子函数(Hooking),子类化 (Sub Classing)等,是进一步提高实力的书籍。
真正进行Windows程序设计,还需要有Windows API手册可供查找,虽然开发工具象Visual C++和Boland C++都有Windows API的电子文档的帮助文件,但书本也有书本的好处:可以随时翻阅。这方面的书籍有清华大学出版6本一套的《Win32编程手册》,机械工业出版社的,每个API都附有使用范例,颇具参考价值,不过有些内容不够准确,必须参照最新电子文档才能可靠使用。
"MFC领域的Petzold书籍?"
掌握了SDK编程,你也就掌握了Windows程序设计的基础和核心。但使用SDK进行大量的程序设计也是十分痛苦的经历,好在现在有了MFC(Microsoft Foundation Class), MFC无疑是目前最重要的开发工具,大部分的商业软件最新版都是用MFC编写的。事实上很多人跳过SDK直接学习MFC编程,这样当然无可厚非,但循序渐进打下坚实的基础实际上更有好处。下一期我将介绍MFC编程方面的书籍,每一个编写Windows程序设计都希望能取得象Petzold那样的成就,MFC领域的作者也都是这样, 谁是MFC领域的Petzold书籍,请看下期。
========================================================
= =
= =
= 本文及更多出自:http://www.lmh2004.cn/ 【热布克】 =
= =
========================================================
【热布克hbk】超经典(转):Visual C++编程书评
========================================================
= =
= =
= 本文及更多出自:http://www.lmh2004.cn/ 【热布克】 =
= =
========================================================
“MFC的前言”
曾经辉煌一时的编程语言工具开发软件商Borland公司在今年4月份更名为Inprise公司,对于广大忠实的Borland追随者来说,这可不是一个好消息。在Dos编程时代Turbo Pascal,Borland C++是最好的开发工具,Borland公司也曾名列美国五大软件公司之列,可到了Windows时代,微软凭借操作系统的优势终于占了统治地位,Borland的大批人员也跳槽加入了微软(Borland Delphi的主设计师成了Microsoft Visual J++的项目负责人),所以不用奇怪Microsoft的Visual C++汲取了各家技术之长,包括Borland,Phar-lap等著名公司,Visual C++成了Windows时代最流行的商用开发语言。
Windows的开发也走向成熟,早期Windows编程只能用C语言,需要一段一段地重复调用复杂的Windows API,写冗长的消息处理Switch语句,现在大部分开发人员都使用C++进行Windows编程,工具开发商也将Windows API和必要的资料封装到一个个C++类库之中,构成所谓“应用程序框架”(Application Framework),开发人员可以使用它更高效地进行编程,这好比登高楼时用上了电梯,而原来只能辛辛苦苦一步一步慢慢爬,现在用电梯可以上得更快,上得更高,上得更轻松。
Visual C++的“应用程序框架”类库是MFC(Microsoft Foundation Class),Borland公司提供的是OWL(Object Windows Library),OWL和MFC孰优孰劣,笔者不敢妄加评论,但现实是Borland的C++到5.02版就改出C++ Builder,类库改用Delphi的VCL(Visual Component Library)。
MFC功能十分强大,但要学好不容易。Visual C++提供了各种Wizard和上千种C++类,如果不掌握面向对象编程OOP(Object Oriented Progamming)的技术,了解MFC的结构,很难设计出良好的程序。很可惜,国内关于这方面有内容和深度的书籍出版太少,而国外的技术书籍在国内又不容易买到,不知道有没有这样的书店可以提供购买国外原版技术书籍的服务,最好还能再打一些折扣,技术书籍的版本更新太快,国外一般书籍较早版本的技术书折扣都很低。
“绝版〈Visual C++内幕〉”
是一本关于MFC编程很不错的书籍,国外最新版是第五版,介绍Visual C++ 5.0版,国内中文版由清华大学出版社翻译出版,目前是第二版,介绍Visual C++ 2.0。作者是David Kruglinski.
这本书面向的读者是有C和C++基础,对Visual C++较为陌生的程序员,通过一个一个范例逐步深入介绍MFC编程的方法,而且对于编程中如何使用各种工具作了详细说明,包括按下哪个按钮,从列表框选择哪一项等,对于VC的新用户来说很方便的。但这绝不是说这本书是一本入门手册,作者只是在需要的时候介绍,毕竟现在的软件使用越来越复杂了。对于水平较高的读者这本书也有足够多的高级内容可供参考学习。
书中分了四个部分,首先快速介绍“应用程序框架”基本概念和各种工具如调试器,AppWizard,ClassWizard等,接着开始进入MFC编程话题,主要是视类(CView)的用法,通过一些简单程序如绘图,消息响应,图形滚动,对话框控制和OCX使用初步展示MFC编程的方法。
第三部分介绍文档-视结构(Document-View),这也是MFC的核心内容,当你掌握了如何联结文档和视结构后,你会发现相比以前现在实现文件操作和打印多么方便,MFC内部使用了几千行代码支持打印预览和各种打印机,Charles Petzold的著名的〈Windows程序设计〉一书花了60页的篇幅介绍如何支持各种打印机,但使用MFC实现只有几十行代码。这部分还介绍了各种界面工具,窗口切分,帮助系统,多文档接口(MDI),动态连接库DLL等。最后部分是高级话题,介绍OLE和资料库管理ODBC,不像一般书籍关于这个内容只是蜻蜓点水,这部分内容非常丰富而且有实用价值.
新的英文版主要增加内容大致有三个方面,首先是介绍了VC 5.0的一些新特性,其次对OLE进行了更为深入全面的介绍,包括结构化存储,组件对象模式(COM),OLE自动化等,最后是关于目前最热门的Internet技术,TCP/IP协议,Winsock,WinInet API等,关于Internet的内容只是一个快速介绍,新版内容更充实,不知道清华出版社有没有计划出本书的新版。
英文书第五版的最后还刊登了一张作者的巨幅照片和一则令人伤感的消息,“David是一个作家,程序员,老师和户外活动者(Outdoorsman),热爱徒步旅行,爬山,滑翔伞.1997年4月17日David 死于一次跳伞意外,终年49岁。” 到VC 5.0成为绝唱,但David的书籍影响了几十万程序员,而且他活得自由自在,人生至此,也就够了。
“VC书籍和MFC书籍”
全面介绍MFC的书籍国内出版太少,但关于Visual C++的书籍却不少,真不知道这些人是如何选材的,MFC才是Visual C++的核心,不掌握好MFC ,怎么设计出好的VC程序。
机械工业出版社的一书介绍了很多MFC的应用实例,其实英文名是〈Visual C++ How TO〉,程序员进行编程时会碰到很多问题,这本书提供了很多技术解决方法,对于VC程序员颇具参考价值。
国外关于MFC的好书还有Jeff Prosise的,Alan R. Feuer的〈MFC Programming〉,Addison Wesley公司出版的以及台湾候俊杰的〈深入浅出MFC>. Jeff和Alan的书都是全面介绍MFC编程,风格内容稍有不同,Jeff讲解更为详细精确.
属于Addison Wesley公司的“未公开核心”系列丛书,是一本高级技术书籍,面向有Windows SDK 和MFC基础的较高水平程序员,讲解MFC的实现原理和核心技术,如何将Windows SDK和API包装,对于想成为VC高手的人来说这是一本必备书,可惜现在还没有中文版.
候俊杰是台湾著名的技术专栏作家,写过很多畅销的Windows编程书籍,也翻译过很多著名的英文技术书籍。他技术水平很高,同时文字功夫很好,又能把握读者需求,这本书在台湾很受欢迎也就理所当然了。这本书介于和之间,既介绍了MFC的应用,又介绍了MFC的核心技术。前一半介绍Win32,C++,MFC设计基本概念,后一半从VC的演示程序Scribble出发,挖掘MFC的实现机制,书中有很多精心插图,作者把握技术脉络十分清晰,是一本值得大力推荐的好书。
“感想”
很多国内编著的技术书号称“高级编程”,实际上只相当于是入门手册,没有多少技术含量。选择书最重要的是看作者,看他是否具有真正的水平,是否能将技术阐释清楚.国内一些编书或者翻译的人自己只是一知半解,只追求速度和效益,结果只能是误人子弟。但水平很高的人如果选材过于艰深,晦涩难懂,也很难为读者接受。台湾在这方面做得很不错,一方面好的英文版的技术书籍他们能很快翻译出版,同时自己水平提高后也能写出较好的书籍。国内应该向他们学习,技术书籍市场需求量应该很大,出版社花精力出一些精品书籍对于整个软件行业水平的提高应该有很大帮助。软件评论家总在呼吁国产精品软件,但技术水平上不去,又何来精品呢?
后记:本文写于98年7月,发表在计算机报编程栏目。
令人高兴的是从98年8月开始,计算机技术书籍数量和质量都有很大提高,不知道是不是看了我的文章,一笑。
清华终于出版了Inside Visual C++,不过却是第四版,而不是最新的第五版。
MFC的书籍也有了不少,但是好象各大出版社喜欢撞车(选同样的题材),另外候俊杰的〈深入浅出MFC>也有了中文大陆版,又华中理工大学出版社出版。
========================================================
= =
= =
= 本文及更多出自:http://www.lmh2004.cn/ 【热布克】 =
= =
========================================================
【热布克hbk】超经典(转):C++的沉迷与爱恋
========================================================
= =
= =
= 本文及更多出自:http://www.lmh2004.cn/ 【热布克】 =
= =
========================================================
作者:侯捷
每年的 09/28 於我都是一个特殊的日子 -- 不只是因为教师节。今年很特殊地没有普天同庆,那麽我就写篇文章自己庆祝一下好了。
我於今年七月发表了一本着作 <多型与虚拟> 和一本译作 <深度探索 C++ 物件模型> ,获得很大的回响。这些作品都不是针对 C++ 的完全初学者所写,但从初阶到高阶为数众多的 C++ guy,热情地表达了他们对这些主题的喜悦。
在许多来信中,我看到一些有趣的现象,也感受到一些值得整理下来的想法。所以,根据我个人的学习过往、我的教学经验、以及周遭朋友的心得交流,写下这篇文章,或可为後学者戒。
●<多型与虚拟> 序言节录
首先让我节录 <多型与虚拟> 一书序言:
<多型与虚拟> 序 节录(侯俊杰/松岗/1998/07)
一般而言,C++ 是一个难学易用的语言。
C++ 的难学,初始在於其重重的布幕,布幕之中编译器对我们的程式码做了太多的手脚,使我们惯於循序思考的工程脑袋一无所措。及长,又面临新的思维模式,使我们必须扭转惯常的思考习惯。
C++ 的易用则在於其巨大的弹性,能够以多型(polymorphism)、虚拟(virtual)、模板(template)、泛型(generalization)等种种型式,让既有的码去处理未知的、未来的资料型态。
当然,易用必须先能用。用不好或不能用的话,「写 C++ 程式」最後就成了只是「使用 C++ 编译器」,这是大家常拿来彼此调侃的笑话。
在「难学」的背景下,「易用」是使我们依然前仆後继的动力。愈来愈多的大学资讯科系把 C++ 开在大一课程,这虽然说明 C++ 是多麽地重要,可也苦了资讯新兵们。
其实「难学」的最大症结在於,很难得有一本书,能够一针见血地指出多型与虚拟的重要性;在我们粗具语法基础之後,直接把我们导引到最核心最重要的思想,并且在建立这个思想的过程中,提供足够的必要基础。
●困难度之一
「C++ 是个难学易用的语言」,这句话相信很多人心有戚戚。C++ 的学习难度,一在於语言本身太多的「幕」,一在於 "paradigm shift" (思考模式的移转)。
传统循序语言如 C, Pascal, Basic, Fortran...,除了模样看起来稍有不同,基本上都是函式 call 来 call 去,大同小异,很容易掌握。你想做的动作,在 code 中都看得一清二楚。你所看不到的,荦荦大者也不过就是编译器为你的函式加上用以处理堆叠的一小段码(prologue 和 epilogue),这一小段码基本上做的是 housekeeping 工作,你没看到也没有关系(更好),并不影响你对程式逻辑的思考。
C++ 不一样,C++ 有太多和程式逻辑息息相关的动作是编译器为我们加上去的。换句话说 C++ 编译器为我们「加码」。如果不识清这一节,学习C++ 有如雾里看花,雾非雾,花非花。
编译器为我们的 C++ 程式加了什麽码呢?很多!物件诞生时 ctor 会被唤起,物件死亡时 dtor 会被唤起,这都是加码的结果。ctor 中设定vtpr 和 vtbl,这也是加码的结果。new 单一物件时会产生 memory block cookie,new 物件阵列时会产生一个内部结构记录着 object size 和 class ctor...,这也都是布幕後的工作。可以说,程式码中看不到而却必须完成的所有与程式逻辑有关的动作,统统都是 C++ 编译器加码後的结果。
当「继承」发生,整个情况变得稍微复杂起来。「多重继承」又更复杂一些,「虚拟继承」再更复杂一些。
这些布幕後的主题,统可归类为所谓的 C++ object model(物件模型)。如果不知道这些底层机制,你就只能够把 "make destructors virtual in base classes"(<Effective C++>, item14)或 "never treat arrays polymorphically" (<More Effective C++>, item 3)这类规则硬背下来,却不明白它的道理。
用一样东西,却不明白它的道理,林语堂如是说:『不高明』。只知道 how,不知道 why,侯捷如是说:『不高明』。
●困难度之二
C++ 的第二个学习难度在於 "paradigm shift"(思考模式的移转)。别说自己设计 classes 了,光使用别人的 classes,就都是一种思考模式和行为模式的移转。MFC(或 OWL 或 VCL)programmer 必然甚能够领略并体会我的意思。
使用所谓的 application framework(一种大型的、凝聚性强的、有着物件导向公共基础建设的 class library),你的码和 framework 之间究竟是怎样的关系呢?framework 提供的一大堆可改写的虚拟函式的意义与价值究竟在哪里呢?为什麽 framework 所设计的种种美好性质以及各式各样的演算法竟然可以施行於我们自己设计的 class types 身上呢?framework 被设计时,并不知道我们的存在呀!
这正是物件导向中的多型(polymorphism)的威力。
稍早所说的 C++ 物件模型,偏属程式设计的低层面;这里所说的思考模式移转,则是程式设计的高层面。能够把新思维模式的威力发挥得最淋漓尽致的,当推物件导向的 polymorphism(多型)和 generalization(泛型)。如果