http://blog.donews.com/xzwenlan/archive/category/璇讳功绗旇/page/6
读者zhanghx6986有周六逛书店的习惯,这次书店之行依然收获颇丰,看看他品读《程序员修炼之道》之后有什么感悟吧。 |
|
[ 查看本指南所提及的书籍 ] 本人一向有周六逛书店的习惯,今天也不例外。今天高兴的是在看书的时候有一个漂亮MM坐在我旁边^_^,更兴奋的是今天发现的这本好书《 程序员修炼之道 》,这本书其实我早就听说过,但是碍于时间的关系,一直没有读该书的原版(《 程序员修炼之道(影印版) 》),今天发现了这本书的译本,着实让我高兴了一番! 忍着饥肠辘辘,在书店一口气读完了该书的第一章,读完后,只能用一个字形容我当时的心情,“爽”。对该书的两位作者产生了由衷的敬佩。 第一章中我认为最经典的就是下面这些句子了: 关于破窗户理论:一扇破窗户,只要有那么一段时间不修理,就会渐渐的给建筑的居民带来一种废弃感- -种职权部门不关心这座建筑的感觉。于是又一扇窗户破了。人们开始乱扔垃圾。出现了乱涂乱画。严重的结构损坏开始了。在相对较短的一段时间里,建筑的损毁得超出了业主愿意修理的程度,而废弃感变成了现实。 作者针对该理论引申出了软件中的“破窗户”,一个良好的软件系统,一旦出现了破窗户,如果不及时的修理,那么该软件系统就会迅速的腐烂、恶化。 关于这一点,我还是有一定的感触,我们部门的一个产品在持续到1.X版本的时候,已经到了无法维护的地步了,出了BUG,几乎无法在定位了,这就是“破窗户”效应。好在部门及时开发了该产品的2.X版本,该版本产品的设计和编码都是全新的,但是随着该版本在市场上将近一年半的摸爬滚打,面对客户无穷无尽的需求,该版本也开始出现了“破窗户”,曾几何时,我也产生了这样的想法“这些代码的其余部分也是垃圾,我只有照着做就行了”。多么可怕的想法,“破窗户”效应正发生在我的身上。我觉得是时候开始修复那些“破窗户”了,让我们的代码变得干净漂亮。就像该书里提到的那个“灭火”例子一样,一个干净、整洁的软件系统,你会格外注意不要把它弄脏。 在有就是书里提到的那个“石头汤”的例子,这个例子和我,还有我一个同事的想法不谋而和。当你觉得一个东西非常好,可以在项目里使用的时候,你向大家推荐这个东西,然而大家对待这个东西却是非常的木然,这个东西显然没有引起大家的兴趣,而我那个同事就会抱怨:“这群家伙怎么这样,和他们提出新东西,新想法简直浪费!”。后来,我们两个聊天一致认为,我们的方式本身有问题,我们应该先做出一个小的像样的东西,然后在向大家推荐这个东西,这样能激起大家足够的兴趣。就象该书里说得那样:让他们大吃一惊,然后说:“要是我们增加。。。。可能就会更好”。 我和那个同事,都有把自己掌握的知识分享给其他同事的习惯,经常在部门里组织一些培训。但是交流效果一直不是非常理想,我那个同事就会抱怨“其他同事对这个东西进行发问的时候,总是问不到点子上,接受新东西能力差”。但是,反过来,我们培训的方式本身是不是有问题那,我们有没有了解我们的听众。你想让他们学到什么?他们对你讲的什么感兴趣?他们有多富有经验?他们想要多少细节?你想要让谁拥有这些信息?你如何促使他们听你说话?这些个问号,我们在培训开始前确实没有认真考虑过,就象我前一段给部门做的一个《ACE和多线程技术》培训时候,参加这个培训有一些做JAVA的同事,当我培训的时候,一口一个POSIX标准的时候,我全然不知他们不太知道什么是POSIX标准,到后来终于一个同事问了什么是POSIX标准的时候,我才恍然大悟,原来这些东西他们不太了解,这就是培训方法的问题。培训、交流、演讲确实是一门学问,一个好的交流或培训,即使持续了好长时间,大家依然全神在听,否则很多人要不了一会就开始“神游”了;一个好的将军,在战斗打响前的演说成功与否,可能直接影响着这场战役的胜败! 在有就是E-mail交流问题,我们的一个女同事,由于工作上的职务关系,要经常给整个部门的同事群发邮件,但是几乎很少能得到回复,她因此很是伤心^_^,我为了开导她,给她讲了什么是“大众冷漠”现象,一个强盗在很多人的大街上打劫,但是大家没人去阻止这件事情,就是因为阻止这个强盗的责任平均分摊到了很多人头上,那么每个人都认为这不是我的责任。但是,能及时的回复其他人的邮件,确实是一种礼貌的行为,就象书里说得哪样,即使内容只是“我稍后回复你”。我也曾经因为其他人没有及时回复我的邮件,而大发脾气^_^。 今天,确实是收获颇丰的一天,《 |
旁征博引的方法是高效的学习手段。对待一个事物的看法不能仅仅站在一个角度去衡量,集思广益才可以更加深刻和全面。这里收集和整理大家的看法,希望可以激发更多的思考和探讨。 |
|
[ 查看本指南所提及的书籍 ] 在今天的环境下如何对待风险?作家、风险管理专家Bob Charette提出了一种全新的思路。他建议读者把自己的企业和竞争对手看成一组向下的自动扶梯,你必须奋力跑到扶梯的顶端,你的竞争对手也在他们各自的扶梯上做着同样的事。扶梯运转得越快,你就必须跑得越快,才能让自己保持在原来的位置。如果你停下脚步,哪怕只是一小会,就会落于下风。当然,如果你停得太久,就会掉到扶梯的底端,丧失竞争的资格。 在Chartte设想的扶梯世界里,新的竞争者是从扶梯中间进入的。也就是说,如果你下落,新到的竞争者就会出现在你的前面。 在每部扶梯的顶端有一个控制杆,可以用来控制所有扶梯的速度。如果你第一个到达控制杆那里,就说明你比所有竞争对手更优秀,所以你就可以提高扶梯运转的速度,使自己保持在顶端,而让竞争对手无法跟上你的脚步。 为扶梯加速的“控制杆”就是风险。如果不敢承担风险,竞争对手就会把你的势力范围看作唾手可得的美味佳馐。在这个时代,敢于承担风险的人才会赢得回报,逃避风险的企业只会成为竞争对手瓜分的战利品。 2004年3月18日,Waltzing with Bears喜获JOLT震撼大奖。2004年3月19日,中文版《
http://java.blogger.cn/leeseon/posts/1869.aspx http://www.csdn.net/Develop/article/26/26749.shtm http://www.sinobook.com.cn/book/newsdetail.cfm?iCntno=1895 http://www.china-pub.com/computers/bbs/addsubfollow.asp?boardid=1&rootid=2&subid=51655&topicid=28614 http://www.blogdriver.com/showBlog.do?diaryID=98239 http://www.blogdriver.com/showBlog.do?diaryID=87888 http://www.gmw.com.cn/01ds/2004-04/07/content_10869.htm http://www.dearbook.com.cn/book/viewbook.aspx?pno=TS0020992 http://www.dearbook.com.cn/book/viewbook.aspx?pno=TS0020992 |
透明:“学C++用哪本书入门”,这是被问得最多的一个问题。但是哪一本书是最好的入门书?似乎很难找到答案。《C++ Primer》太厚,《Effective C++》对读者要求比较高,《Essential C++》又常常被批评为“太浅”。 恶魔:很后悔当初买了《C++ Primer》。因为从我个人角度来看,它的功能效用基本是和《The C++ Programming Language》重合。当然对于入门来说,它还是很不错的。但是《C++ Primer》太厚,一来导致看书极其不方便,二来系统学习需要花比较长的时间。对于目前这个越来越快餐化的时代来说,的确有很多不适合的地方,不过可以作为初学者的参考书。现在我以一块K3 CPU的代价把它借给了别人,希望我那位同事能够从中得到一些益处。 梦魇:这个问题让我想起四五年前的情形。今天对于C++有一点认识的人,多半是从那几年就开始学C++了。那时根本没有品牌观念。从书店里找一本C++书,如果看着还算明白,就买下来。我记得那时候宛延闿、张国锋、麦中凡教授的书都受到很高的赞誉。我个人最早的一本C++书是Greg Perry的一本书,今天想起来,其实是一本打着C++旗号的C语言教程。对我作用最大的一本书是国防科技出版社出版的一本书,书名记不得了,作者叫斯蒂芬·布莱哈。 梦魇:整个90年代,其实大部分人对于C++的认识都似是而非。一开始是等同于Borland C++,后来是等同于Visual C++和MFC。所以一般来说,打着BC和VC旗号的书卖得很好,人们觉得这就是C++。而我比较幸运,布莱哈的那本书虽然从现在的眼光来看谈不上高超,但基本路子是对的。可能是因为原书是给UNIX程序员的培训教材,所以没有让我一开始就形成“C++ == VC++”的认识。 透明:我觉得一本书的价值有两方面:第一,教给你实用的技术;第二,促使你去思考。对于一本介绍VC(或者说MFC)使用方法的书,我根本不希望它能促使我有什么思考,所以我就一定要求它在技术上精益求精完美无瑕。我刚开始用VC的时候,买的第一本书就是潘爱民老师翻译的《VC技术内幕》(第四版),没有受到那些“三流货色”的误导,应该说是很幸运的。 梦魇:1999年机械工业出版社开始出版“计算机科学丛书”,其中的《Thinking in C++》第一版受到了广泛的欢迎。其实我一直不认为这本书很出色,虽然拿过一次大奖。然而我们都得承认,这本书在C++书籍领域里第一次建立了品牌观念,很多初学者开始知道,不是随便买哪一本都一样的。再往后就是2000年的《 透明:我同意你的观点。不管怎么说,编程是门实践性非常强的学问。要想对C++对象模型有深入的了解,最好的办法就是写一串程序去看结果;要想学会OOP,也只能从项目中学。对于初学者,最好的学习方法就是不停地写程序,写真正有用的程序,写到有问题的时候就去查书,于是自然就会知道哪本书好哪本书不好。不过我们的教育制度能不能让大学里的学生们有这样的学习机会,我表示怀疑。 恶魔:有两句十分有道理的话,一是我大学的C语言老师说的“写程序不如说是抄程序”,另一句是一网友说的“好的设计来自借鉴,天才的设计来自剽窃”。对于我这个理性批判主义者来说,这两句话的确不太适合。但是无论从哪个角度来讲,对于初学者来说,剽窃大师的作品是通向成功的最快捷径。 透明:你好象比较推崇国内教授写的书。现在社会上有种不好的风气:一捧就捧上天,一贬就贬下地。就好象对待谭教授的书,前几年是奉为经典,这几年又有很多人使劲批评。学C++更是有点“崇洋媚外”,总是觉得初学就应该看《Essential C++》。我看这种观点也是片面的。 恶魔:当然《Essential C++》也值得看看。但是我个人觉得这本书没有谭浩强的《C语言教程》来得好。主要原因是:第一,C++的所有特性都点到了,但是不深,看了以后会三心二意没有方向;第二,可以抄袭借鉴的例子太少。《C语言教程》中有很多有趣的问题,比如猴子吃桃、汉诺塔等等,这些例子对于刚刚涉及C/C++语言编程的人来说是学习编程很好的例子。《Essential C++》只能是前两本书看透以后,作为学习C++特性的一个过渡性的书籍。让读者真正领略到什么是C++的编程、和C编程的不同点在哪里。 透明:我发现一个很有趣的现象:初学者往往喜欢问“哪本书比较好”,这让我很是不解。这有点像一个刚学打篮球的人问“王治郅和科比谁比较厉害”。当然科比更厉害一些。但如果你是想学打篮球,这两个人都非常非常有资格教你,你跟谁学都能学得很强——关键不是在于你选哪个老师,而是在于你自己用多少功夫去学。 透明:回到原来话题。学会了C++的语法,能看懂C++代码之后,必须有些书来指导进阶(或者叫指点迷津)。我觉得《设计模式》很好,能够让读者看到一些精妙的用法。不过正如我经常说的,模式带来的麻烦和好处一样多,甚至麻烦还要更多。而且,C++本身的问题使得在C++中使用GoF模式愈加麻烦。 梦魇:《 透明:讲到重构,我顺便说说《Refactoring》这本书的影响。从工程本身的角度来说,你所谓的“重构型设计”是没有什么问题的。但中国的开发者(也包括我在内)往往比较冲动,比较容易相信银弹的存在。曾经有那么一段时间,我在Java中尝试过了重构的方法之后,又拿到C++中去尝试。结果发现,在Java中速度非常快的重构过程,到C++中就被减慢了。究其原因,就是因为C++和Java的约束条件不同。拿着Java中成功的案例直接套C++,不失败才怪。 梦魇:我还要就“试探型”的方法多说两句,我觉得对于个人发展来讲,“试探”也是必不可少的,撞墙不可怕,高水平的人不都是撞出来的吗?你失败了一次,就知道这个模式有什么潜在的问题,下次再用,就会多看几步,像下棋似的。撞的多了,路数就出来了。 透明:现在回头来看,我更欣赏myan推荐给我的《Designing Object-Oriented C++ Applications Using Booch Method》。这本书能够帮助C++程序员理清思路培养习惯,可惜国内没有引进。相比后来商业味浓厚的UML系列书籍,我觉得这本书对于面向对象的阐释精辟独到,至今未有能出其右者。 梦魇:刚才我们两人都说到Robert Martin,他可是我的榜样。那本1995年的《Designing Object Oriented C++ Application》,我觉得是每一个C++软件工程师都应该反复研读的书。可惜不仅国内没有引进,在国外的名气也不大。如果你觉得面向对象的那些道理你好像都明白,可就是一遇到实际问题就使不上劲,那这本书就是你的最佳导师。 透明:插一句话,谈谈“推荐书”的问题。入门书基本上是放之四海而皆准的,所以推荐的意义也不大。而入门后的发展方向,每个人不同,这个时候就需要“高人”的指点。举个例子:我学C++的时候,myan还不认识我,所以也没有给我推荐书,我还是学过来了,所以即使你当时向我推荐了《Essential C++》或者《C++ Primer》,我也不会太感谢你;但在我认真研究OO的时候,你推荐Robert Martin那本书给我,对我帮助就特别大,而且我从别的地方也很难找到类似的推荐,所以我就很感谢你。 梦魇:MFC和STL方面,我还是比较推崇侯先生的两本书《深入浅出MFC》和《STL源码解析》。 透明:是的。《VC技术内幕》会告诉你“DYNAMIC_CREATE这个宏怎么用”,《深入浅出MFC》则告诉你“DYNAMIC_CREATE这个宏是怎么实现的”。所以,如果你只需要在VC下写一些小应用程序,《深入浅出MFC》的价值并不太大;但是,如果你需要设计一个稍微大一点的东西(不一定是framework),MFC的设计思想就会有所帮助。 梦魇:另外,我觉得对于MFC也应该有一个公允的评价。过去是吹捧得天上有地下无,书店里铺天盖地都是MFC的书,搞得大家只知有MFC,不知有C++,甚至直到现在还有人问:“我是学MFC呢,还是学C++?VC++是不是比C++更高级的语言?”MFC成了一尊神像,阻碍了人们的视线。所以得把它从神坛上拉下来。这就是过去一两年有很多人,包括我在内批评MFC的一个目的。可是现在大家视野开阔了,.NET也出来了,MFC不再是神像了,少数人就开始以贬损MFC为乐了。我觉得这种态度是不对的。 透明:STL方面,我对于剖析它的源代码兴趣并不大,毕竟里面源代码多是算法问题。所以,《STL源码剖析》我也只是随便翻翻就束之高阁了。我觉得这本书用来做计算机系的数据结构和算法教材不错,不知道有没有老师乐意这样做。 梦魇:至于STL,除了《STL源码解析》之外,我举贤不避亲,强烈推荐侯先生与我合译的那本《The C++ Standard Library》。这本书质量之高是无需怀疑的。我现在手边常备此书,随时查阅,对我帮助很大。 透明:C++和Java相比,最大的优势就是它没有一个专门的公司来管它,最大的弱点也是它没有一个专门的公司来管它。Java程序员在学会简单的语法之后,立刻进入SUN提供的framework,一边用这个现成的framework做实际开发,一边在开发过程中继续学习Java一些幽深的特性。而这个时候,C++程序员恐怕还在问“VC和BCB哪个好”呢。这无疑是浪费时间。 梦魇:刚才你说Java和C++的优劣,这个话题已经成了我们这个年代永不消失的声波了。我也不想再谈这个。不过有一点我得说清楚:现在我们很多用C++的人吃了不少苦头,探过脖子去看看Java,觉得它真是太可爱了,这种印象是不准确的。另外,Java也不简单,而且会越来越庞大复杂。在很多场合,Java还不具有竞争力。至于将来如何,我看有些Java爱好者也过分乐观了,似乎计算机科学界几十年解决不了的问题都可以借着Java的东风解决掉,恐怕没那么容易。 透明:那当然。我再次强调:No Silver Bullet。读书很重要,但古人说“行万里路,读万卷书”,还是把“行路”放在“读书”前面。尤其对于技术书籍,如果它不能帮我解决问题、不能给我带来非常实际的利益,那么我是不会去读它的。恶魔说得对,我们这个社会很快餐,我们这个行业尤其很快餐,我们也只能努力适应它。 |
这篇向导简述了学习C++的全过程,对想成为C++程序员的朋友有所帮助,特别是为非科班的朋友展示了一条学习路线,限于本人水平限制,如果有什么不恰当的地方欢迎指正。 |
|
[ 查看本指南所提及的书籍 ] 这篇向导是为希望成为C++程序员的朋友写的,简述了学习C++的全过程。希望对编程的门外汉有所帮助:) |
介绍了UML、面向对象及契约式设计的学习过程 |
|
[ 查看本指南所提及的书籍 ] UML与面向对象编程 如果是想认真学UML,机械工业出版社的三本书《UML参考手册》、《 UML用户指南 》和《 UML和模式应用面向对象分析与设计导论 》就足够了。《 UML和模式应用面向对象分析与设计导论 》这本书,其实应该叫《UML实例分析》比较合适,很适合面向对象和UML的初学者练手用 是Craig Larman的Applying UML and Patterns使我对UML第一次有了亲切感,也在一定程度上认可了UML的价值。不过我现在还没有开始运用它,所以不想、也没这个能力就这个问题多说什么。 我的UML知识是用了一周从Rational的CD tutorial中学到的(可在Rational Suite的CD2中找到),另外就是我问Rational要到的Inside UML的CD-ROM。通过那些图文并茂的tutorial,我觉得学习的效果还是不错的。 对于OO,我曾经从china-pub上面拍卖到一本小书,叫Object Technology:A Manager’s Guide,觉得里面的叙述算是比较清楚的。薄薄的一本书(含index两百多页),内容涵盖了对象技术的基本思想、对象技术的重要概念、面向对象数据库、对象技术在企业中的实施等等方面。作为帮助初学者的入门手册、开发者的速查手册都不错。如果有机会,希望国内的出版社可以考虑引进该书。 我非常同意孟岩的说法。这让我想起维特根斯坦在《逻辑哲学论》里举的一个例子:我们可以在几何图象中描绘出不符合空间规律的情景,但无法在空间图象中描绘不符合空间规律的情景。或者换句话说:UML能画的,OO语言未必能实现,实现了也未必就很好。因为UML和C++、Java,毕竟是完全不同的语言 我对OOSC(Object-Oriented Software Construction, 2nd Edition,清华大学出版社1999年影印版)一直都赞美有加,不是因为它在OO书籍中的Bible地位(说实话,它太厚了,以至于我每次都没有信心把它看完——事实上我也没有看完它),而是它第一章就讲了Software Quality,让我对于程序的本质有了更多的了解。 我认为Bertrand Meyer以及他所代表的Eiffel流派对对象技术理解是最深刻的。十几年来,他们在整个OO技术界一直处于支流,这不能不说是一件令人遗憾的事情。我认为,如果Eiffel及其所倡导的 Design By Contract理念一开始就被人重视,那么整个90年代软件工程的发展格局可能都会不一样。另外,从语言本身来说,Eiffel也是非常出色的,我觉得无论将来想不想用这种语言开发项目,认真的学习一次是大有意义的。 OOSC我正在看,里面有不少令人耳目一新的观点,初读起来觉得诧异,细细想来却觉得本该如此。比如把command和query区别对待的观点,所谓访问形式一致性原则(Unified Access Principle),等等,都令人有拨云见日的感觉。 Eiffel的立足点是可扩展性、可复用性和可靠性。我记得前不久我们在一起讨论,这几个目标正是令我们困扰的东西。真的能编写可复用的组件吗?测试难道是保证软件质量的唯一手段吗?是不是面向对象发展到今天,都一直达不到这几个目标,最后只能给所谓的“面向组件”技术当垫脚石呢?读了OOSC,很多疑惑豁然开朗,信心又回来了。 契约式设计 《 Design by Contract原则与实践 》 第一次看到 Design by Contract,是在网上的一篇文章,觉不出有多大的价值;第二次看是在OOSC,觉得的确有价值,对于解决所谓“软件危机”大有帮助。我刚翻译的《 最后期限 》里面就有一句比较经典的话:软件模块很不容易出错,即使出错也会被程序员发现;软件的错误总是在模块与模块之间的交流上。而 Design by Contract很大地帮助了程序员之间、模块之间的交流。 按照裘教授那本书的理论,程序设计是一个规范逐步精化的过程。你首先必须确定一个规范是可行的,然后确定对这个规范的精化的过程是可行的,这样才能得到合法的程序。而在我们使用的OO语言(例如C++、Java)中,并没有证明一个规范是否合法,换句话说,我们并没有保证client以合法的方式来调用我们的模块、使用我们的返回值。我们只把这些要求写在文档里,天知道client会不会按照文档来做?恶魔前几天问我“如何证明面向对象的科学性”,我想他的迷惑也有这个原因。 差不多是这个意思。我看到的每本软件工程的书,都试图解答这个问题,有的说是因为软件太容易抽象了,有的说是人们对软件重要性的重视不够,各种观点都有。但是我认为,那些都是次要的,最重要的原因是,自顶向下的软件设计方法真正蕴藏的是一种集权的思想。 按面向对象的行话来说,在结构化程序中有那么一个god object,掌控一切,从你这个模块的生死大权,到你的生存行为模式,你的内部组织形式,这个god object无不了如指掌,它统揽一切,随时可以以至高无上的身份干涉各个模块的行为。也正因为如此,它承担了沉重的职责。 |
学习Windows编程是很复杂的事,大多数程序员使用C++进行Windows编程,可是如何把两者结合起来学习?本文试着给你一个答案 |
|
[ 查看本指南所提及的书籍 ] 一般计算机本科学生应该学过Pascal或C语言,如果你没接触过C++,推荐两本书,清华出版社钱能的《 C++程序设计教程 》,机械工业出版社Jesse Liberty的《 C++ 自学通 》,两本书都是先复习C语言语法再介绍C++面向对象的基本概念,国内一些大学本科采用前者作为教材,后者对C++各主要概念都有涉及,任选一本看看,总之入门最好不要选择比较难的书,如《 C++编程思想(英文版·第2版) 》,有可能会打击你的学习兴趣。 有了C++的基础,可以开始接触VC,入门的一本书是《 VISUAL C++6从入门到精通 》,该书简单介绍了VC对话框应用中基本控件的使用,书名夸大其辞,入门还行,精通是远远不够,但作为没接触过VC环境的程序员来说简单易懂。 前面推荐的是几本入门书,自己的印象已经有些模糊,也许很多人会不同意我的观点,但下面列出的书目反对的人应该会少很多,因为它们基本上都是经典之作。 第二本可以看经典的清华出版社的《 Visual C++技术内幕(第四版) 》,这本书质量不错,但有点被过度的推崇了,可能和作者的英年早逝有些许关系,这本书放在这个位置阅读可能会有一部分看不懂,没关系,跳过去,以后水平提高后再回头翻一翻。 第三本推荐看华中科技出版社侯捷的《 深入浅出MFC(第二版) 》,侯捷是台湾著名的技术专家,在国内有很高的声誉,这本书可以带你理解MFC程序的生与死,以及AppWizard生成的那些该死的宏到底是什么意思。 这时你应该对使用VC编程有比较明确的概念了,也许你需要对C++再做适当的充电,比如异常、模板等概念的了解,如果有人问你拷贝构造函数是什么意思,你能回答出来吗?Bruce Eckel的《 C++编程思想(英文版·第2版) 》也许在这个时候要容易看懂一些,这本书名气很大,值得一看,但个人认为也是有些言过其实,可能是翻译的原因。 如果需要解决MFC编程的一些疑惑,推荐一本书,《 MFC经典问答 》,看过之后你会后悔怎么没早点听说这本书,一些实际编程时常见的困难问题都得到了解释,这本书还可以作为日常编程的参考书。 如果感觉调试程序有些不够在行的话,建议你一定要去阅读John Robbins的《应用程序调试技术》,这本书对于调试技术讲的极好,特别有一章介绍了VC调试器的使用,如果你不知道VC调试器的Set Next Statement有何妙用的话,你应该好好读读那一章。我丝毫不吝惜对这本书的赞美之词,因为它的确很棒,我也读了两遍(当然不能连续读,又不是背书准备考试)。 编写WINDOWS程序如果不会用API还是很困难的,这里推荐大家阅读Charles Petzold的《 Windows 程序设计(第5版)(上、下册) 》,北大出版社出版,这是WINDOWS编程的圣经,应该是优秀程序员必读的书,而作者也是WINDOWS编程领域的大师,看书就应该看大师的书。 你对于C++的理解和专家对于C++的理解有什么差别吗?看看Scott Meyers的《 Effective C++中文版 》和《 More Effective C++中文版 》,你会明白什么叫做差距。另外还有一本Stanley Lippman的《 C++ Primer 中文版(第三版) 》,是和Stroustrup的《The C++ Programming Language》齐名的巨著,但1000多页的大砖头可以砸死人。 当你看了上面的书感觉不错的话,那么你应该更进一步,看一看机械工业出版社出版,Jeffrey Richter的《 Windows核心编程 》,这本书也被奉为至尊,无需多言,作者也是一位大师,现在在.NET下已经修成正果,出版了最负盛名的.NET书籍《 Microsoft.NET框架程序设计(英文版) 》,成为一代宗师。唯一遗憾《 Windows核心编程 》中文版翻译的不好,甚至有将肯定语气翻译为否定语气的情况,一本书有二十个译者,翻译质量也可想而知,所以最好对照英文的电子版看。巧合的是《 Microsoft.NET框架程序设计(英文版) 》中文版的翻译也广受批评,好在清华出版社还算负责,承诺近期将推出其修订版,不过至今未果。 书看到此处,你应该已经是WINDOWS编程的小高手了,技术方面已经没有什么太大的问题了,你已经有很多的实际编程经验,这时候需要补充一些设计方面的知识。 编程需要培养三方面的知识,技术、算法、设计,程序员一般很注重技术,而往往对算法和设计不太在意。在做较大型的项目时,设计是尤其重要的,因为常用的算法一般可以下载到源代码或库文件直接使用,而设计却是抄袭不来的。 提到设计不能不提近年来很热的一本书,Gof的《 设计模式–可复用面向对象软件的基础 》,的确是非常非常好的一本书,不过也许你会看得云里雾里的,没关系,先掌握一些概念,因为现在模式已经成为一门专业语言,和别人交流时直接说采用某某模式要比说一大堆话简单的多,看完后需要再补充别的一些参考书,再做些习题,设计不通过动手很难真正领悟和掌握的。 另一本与《 设计模式–可复用面向对象软件的基础 》并称“软工双雄”的书叫《 重构——改善既有代码的设计(中文版) 》,个人认为只要阅读前4章学习学习思想即可,当然这洗脑的作用还是值得的。还有一本网上评价很高的书,《 敏捷软件开发:原则、模式与实践 》,这本书获得SDMagazine第13届Jolt大奖,建议大家有空去读一读,本人正在学习中,感觉不错。 |
要精通VC,恐怕不是一年二年的事,VC的学习应该是一个循序渐近的过程,它包含了C、C++、SDK、MFC等各种语言和OO思想的学习,因此,只有多看、多想、多练,才是学习VC的最好方法! |
|
[ 查看本指南所提及的书籍 ] 要学好VC,个人以为没有捷径,必须一步一步,从最基本的C++语言基础开始;如果有C的基础,也许会开始很迷糊,但更深入后就会对C++有更好的认识,如果没有C的基础,或许会开始明白,但最终比较难理解!因此,建议有一定的语言基础,会对学习VC产生较大帮助。这里建议清华大学谭浩强教授的《C语言程序设计》。 有了C语言基础,建议一定要学习C++语言,推荐国内版教材钱能的 C++程序设计教程 或者是国外引进的 C++大学教程(第二版) ,这两本书都可以为入门C++打下良好的基础! 如果要想深入学习C++,不妨看一下 C++程序设计语言(特别版) 和 C++ Primer 中文版(第三版) ,这是C++提高的最好的书籍! 有了C++基础后,就要开始学习windows sdk编程,最好的当然推荐北京大学出版的 Windows 程序设计(第5版)(上、下册) ,这对于深入学习VC将打下一个良好的基础。 有了windows程序设计的基础,就要开始学习VC的知识了,学习VC最好的教材当然是 Visual C++技术内幕(第四版) ,这本书是经典书,实例丰富,例子详细,是很好的学习材料。 为了更好地理解VC的编程实现思想,候捷的这本 深入浅出MFC(第二版) 不容错过!它将带你领略MFC的奥秘。当然,由华中理工大学出版社出版的 MFC深入浅出–从MFC设计到MFC 编程 也是一本非常不错的书籍,可以说是国内教材的典范,但是该书可能市面上已经绝版了!如果有机会在书店看到的话,一定要毫不犹豫地买下来,因为该书料足价低!非常值得收藏! 如果以上书籍你都已经读过并且掌握的话,我相信你一定是一位资深的VC或windows程序设计工程师了! |
(感谢孟岩老师为大家提供这篇学习指南,本文发表于《程序员》11月上半月期)通常在某一个具体细分的技术领域,会自然而然地出现3-5本顶级著作,它们彼此互相配合,形成一个完整的体系。我乐于将这种现称为“四书五经现象”。本期就从Win32系统编程开始。 |
|
[ 查看本指南所提及的书籍 ] 几年前,台湾著名技术作家侯捷先生曾经写过一篇影响很大的书评文章,叫做《MFC四大天王》。文章的意思是说在MFC的浩瀚书海中,只要认真研读和学习其中四本,就可以“五岳归来不看山”。侯先生虽以MFC为例,但是这个道理却同样适合于MFC之外的很多具体技术领域,这不能不说是一个有趣的统计现象。通常在某一个具体细分的技术领域,会自然而然地出现3-5本顶级著作,它们彼此互相配合,形成一个完整的体系。对于学习者来说,只需要认真研读这几本书,就足以升堂入室。我乐于将这种现称为“四书五经现象”。对于读者来说,如果能够找到该领域中的“四书五经”,则无论在时间上还是金钱上都是最经济的选择。好书几本,胜过烂书几捆,这个体会想必大家都有。为此,《程序员》杂志开辟了这样一个新的书评专栏,帮助读者遴选各个技术领域里的“四书五经”。本期就从Win32系统编程开始。 所谓的Win32开发,就是在C语言的层面上,直接使用Win32 API开发Windows应用程序或者系统程序。虽说现在直接用Win32 API开发应用程序的人已经不多了,深入理解Windows系统程序设计原理,仍然是成为Windows开发高手的必经之路。所谓的Win32,其实是一个API规范,与UNIX系统编程接口标准POSIX是同一个性质的概念。从设计上讲,Win32绝对算不上是简洁优雅,因此学习Win32系统编程,相对来说是比较困难的。Win32来源于Win16,而Win16最初设计于1980年代中早期。设计Win16的时候,Microsoft还是一家小公司,应该说能力还有限。同时,Win16的主要目标是DOS之上GUI系统,设计上偏重GUI部分,在系统编程领域考虑不多。等到设计Win32时,微软能力增强了,有心要把Win32打造成第一流的操作系统API规范,但是已经背上了Win16的历史包袱。所以相对而言,Win32的设计实在赶不上POSIX那么简介优雅。微软在随后又先后进入了COM时代和.NET时代,每一次进步都需要继续背负以前的历史包袱,使得微软的技术体系越来越复杂。微软技术的复杂性,是微软与Java竞争中的最大弱势。而对我们程序员个人来说,无论你现在是在学习和使用最新的.NET技术,还是继续坚持COM开发模型,要克服微软技术的复杂性,必须上溯到Win32。那么Win32领域的“四书五经”是那些?我们一一道来: 1. Charles Petzold, 《 2. Jeffrey Richter, 《 Petzold Book和Richter的这本书,构成一个连冠一致的系列,一般Win32学习者精读并且基本掌握这两本书的主要思想和技术,就可以称得上是Win32系统开发的专家了。如果说这两本书的弱点,主要存在两个方面。其一是两本书写作时将Win9X的开发作为一个基本出发点,因此对于Win2000平台的新特性介绍不足。特别是对于Windows 2000服务端高性能软件的开发,基本上没有涉及,很多Win32特有的机制也没有覆盖到。因此,如果想在Win32方面再上一层楼,可以考虑Jeffrey Richter的另一本书。 3. Jeffrey Richter, Programming Server-side Application for Microsoft Windows(影印版)北京大学出版社 |
关于ACE的详细信息,可以查阅《程序员》2003年12期的ACE专题。本文得到《C++网络编程》两卷的译者马维达、於春景先生的大力支持,在此表示感谢! |
|
[ 查看本指南所提及的书籍 ] ACE是什么? ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework),在其中实现了许多用于并发通信软件的核心模式。ACE提供了一组丰富的可复用C++ Wrapper Facade(包装外观)和框架组件,可跨越多种平台完成通用的通信软件任务,其中包括:事件多路分离和事件处理器分派、信号处理、服务初始化、进程间通信、共享内存管理、消息路由、分布式服务动态(重)配置、并发执行和同步,等等。 ACE的目标用户是高性能和实时通信服务和应用的开发者。它简化了使用进程间通信、事件多路分离、显式动态链接和并发的OO网络应用和服务的开发。此外,通过服务在运行时与应用的动态链接,ACE还使系统的配置和重配置得以自动化。 ★★★★★《 关于ACE的更多中文信息可访问 |
本书为我们作了一个对产生式编程的精彩介绍,它注定会成为一部经典之作。作者精心讲述了领域特定语言和产生式编程之间通常为人所忽视的联系,并把这种联系作为未来开发的一个推动因素。广大的开发人员完全可以把书中丰富而且实用的方法当做可以立即应用的首要步骤。 |
|
[ 查看本指南所提及的书籍 ] 本书简介 《 产生式编程——方法、工具与应用 》是对这种正在浮现的规程的完整指导和参考。它提供了对以下这些关键技术和主题的深入探讨: ●领域工程 ●特征建模 ●泛型编程 ●面向方面的编程 ●使用C++的模板元程序设计 ●产生器 ●微软的意图编程 使用本书你将会学习到如何组合这些技术,以及(也是更加重要的)如何在实践中运用它们。书中包括来自三个不同领域的完整的案例研究:程序设计领域(容器数据结构)、业务领域(银行业务)以及科学计算(矩阵计算)。 但是这本书远远不止是技术的一个集合。 这本书围绕统一原则提出了强力的主题, 这些原则将把零散的东西捆绑在一起, 还提出了非常值得注意的领域工程和元程序设计。 作者用领域工程的概观好好地招待读者, 并引导读者鉴赏它的必要性。 领域工程可能超出了任何一种单独的思路, 提供了一个通用的思路或者主题, 读者可以使用这些来“解释”产生式编程。 但是, 更重要的是, 作者把其他程序设计的学派作为基础材料, 来描绘以一种广泛的。 恰到好处的视角, 称为产生式编程。 结果肯定超过了各个部分的总和:大多数这些部分都曾经存在了很久, 但是关于怎样把它们整合起来的想法刚刚涌现出来, 并得到了广泛的揭示。 原书Amazon信息:http://www.amazon.com/exec/obidos/tg/detail/-/0201309777/qid=1074413520/sr=1-1/ref=sr_1_1/104-4857035-4348769?v=glance&s=books |