读者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://blogger.cn/wilson 寻找人生 今天终于把《 与熊共舞:软件项目风险管理 》看完了,除了对风险管理有了一个较为清晰的理解之外,给我留下深刻印象的就是那篇附录里面的《信仰的伦理学》。我们没有办法把信仰和思想放在阳光下审判,于是,不可避免的就会有了很多的问题被掩盖了。记得以前我曾经跟别人说绝对不骗她,但是总是会出现不能说的事情。通常采取的方法是强调非重点从而达到隐瞒的目的,这个在跟领导讲话的时候也被用来隐瞒问题。有的时候适当的隐瞒是有益的,但是更多的时候,尤其在处理问题的时候,我们需要坦诚。 http://java.blogger.cn/leeseon/posts/1869.aspx JAVA之不求甚解 今天去逛书店,正好赶上《 与熊共舞:软件项目风险管理 》在武汉上架,自然二话不说,挑了一本,领了回来! 正如gigix所说,纸张一点都不反光,感觉是一本畅销书的派头。书店直接就进了几十本回来堆在那儿,门口还有大大的宣传牌立着。 不过一样我不喜欢腰封,所有的有腰封的我都不用的,而且书装订的的确很松散,快是有可能脱页,所以挑了好几本,才选中了一本看上去结实一点的。 看来最近几天就要开始与熊节做一次与“熊”共舞了,只是不知道他是不真的那么凶悍? 每到这个时候总会觉得尤其开心,之前的辛苦都变成了愉悦的背景——就像钱钟书曾说的,仿佛从久不穿的上衣袋里掏出了钱。 http://www.csdn.net/Develop/article/26/26749.shtm bisonZhao 《 与熊共舞:软件项目风险管理 》这本书,提倡对项目风险进行量化估计,并给出了一种称为“风险图”的不确定性描述图形,来预测项目的可能完成时间。“风险图”比主观想象更直接、更科学地表明了风险的范围,使用这个工具,也更容易进行风险分析和防范。 书中,“进度安排的先天错误”被列为项目核心风险的第一条,需要引起足够重视。为了有效降低这个第一风险,我觉得有多种方法可以使用:尽量争取给项目一个比较好的外部环境,通过与用户的沟通及其他手段,为项目争取较充足的开发时间,不要一拍胸脯就把风险留给自己了;要科学估计项目执行中的风险,对人员变动、需求变更等容易引起项目延期的事情要有足够的警惕。如果时间余地比较小,要配置多一些资源,如果资源不够,可能要及早安排加班,避免犯前松后紧的毛病。软件开发过程中的问题层出不穷,你考虑多一点的风险都不一定够用,如果英雄主义情绪旺盛的话,受伤害的还是自己。项目中的其他一些风险和估计风险的办法在书里还有更多的阐述。 http://www.sinobook.com.cn/book/newsdetail.cfm?iCntno=1895 刘江 《 人件(第2版) 》作者的最新作品,中文版似乎也快要出来了。书很薄,100来页而已。但是已经受到了业界交口称赞,没办法,姜还是老的辣,虽然我估计DeMarco应该有很多年自己不直接从事项目开发了。Amazon上专业机构、ACM等集团购买排行榜,本书分别排在第2名和第1名。又是一本讲软件项目管理的书。Standish集团的软件项目报告都说成功率有了很大提高,为什么今年又评出这么多项目管理的书呢? http://www.china-pub.com/computers/bbs/addsubfollow.asp?boardid=1&rootid=2&subid=51655&topicid=28614 GIGIX 这是一本软件项目风险管理的入门小书。在DeMarco眼中,我们这些软件人压根还不到大谈“风险管理技术”的时候,我们需要的是重温“风险”的定义、建立基本的风险管理意识——看看俯拾皆是的“死亡之旅”项目,我们不难接受他略带讥刺的批评。最基本的思想和做法,这是《 与熊共舞:软件项目风险管理 》给我们带来的。 或许我们还能记起《最后期限》那有趣的故事,不过你是否注意到,DeMarco在那本小说里已经暗示了他后续的写作计划。《Slack》讲述了人本主义管理的思想,《 与熊共舞:软件项目风险管理 》则是风险管理。另外值得注意的是,DeMarco这次又把CMM狠狠涮了一把,这都变成他的一贯风格了。 应该提醒你——我潜在的读者——这本书最大的亮点位于它的“附录A”:《信仰的伦理学》。不,不是因为这篇文章能给你带来多大的收获,仅仅因为它的华美。出自刘天北先生的译笔,恢弘的气势令我叹位观止。如果你只愿意在书店里翻看10分钟,然后就把这本书扔开,那么我会请求你只看这篇附录,并对你表示衷心的感谢。 http://www.blogdriver.com/showBlog.do?diaryID=98239 GIGIX 黑色的封面,样子显得很畅销,是属于那种长相好的书。内文还是闻洁工作室一贯的风格,字体给人清新愉悦的感觉。这次的宋体字是正体,长宽一样的。相比之下我更喜欢《 人月神话 》用的变体字,略微宽一点,显得比较活泼。不过那种字体也只适合于散文。微微泛黄色的蒙肯纸,完全不会反光晃眼,而且很轻(7本样书拿在手上也不觉得沉)。应该是有很好的阅读体验,不过腰封不好看。我一向不喜欢打腰封,读温伯格的书之前会先把腰封扯下来。 一个好的出版者能够让读者在第一时间爱上手中的书,并宽容地忽略很多文字上的缺陷;一个糟糕的出版者懂得如何使读者的阅读体验“尽可能地糟糕”(Jacques语),然后吹毛求疵地挑出所有的小bug。 http://www.blogdriver.com/showBlog.do?diaryID=87888 GIGIX 《 与熊共舞:软件项目风险管理 》拿到了Jolt卓越大奖,有幸翻译这本书,非常开心。现在第一批书已经下印刷线,在dearbook可以买到了。 大家都知道的故事:风险如同凶猛的熊,现代企业的使命就是不断挑战风险,追逐高风险带来的高利润。凭着经验与智慧、勇敢与审慎,我们小心翼翼而又风度翩翩地与这只猛兽携手起舞,肩上的爪痕是我们荣耀的勋章。与熊共舞,这个源自圣经的故事代表了一种现代职业人的态度——勇于面对风险,又敏于控制风险。 http://www.gmw.com.cn/01ds/2004-04/07/content_10869.htm 熊节 风险越大,回报也越大——尤其是在软件行业里。逃避风险的企业将很快被竞争对手远远抛在身后。但是,由于管理者的不审慎,软件企业常常被置于一种尴尬的两难境地:要么承担风险而失败,要么回避风险而落后。实际上,如果不是因为风险管理的失位,大多数软件企业、大多数软件项目本来可以不必像现在这样窘迫。Tom DeMarco有一种特殊的本事,总能将大家都仿佛知道、却又感到模糊不清的道理讲得清楚明白,这当然得利于他在这个行业中浸淫数十年的经历。对于普遍缺乏风险意识的软件人来说,这本《 与熊共舞:软件项目风险管理 》无疑有醍醐灌顶之效。 http://www.dearbook.com.cn/book/viewbook.aspx?pno=TS0020992 liipb 这本书我看完了,此书越往后越精彩.而”项目”这个概念也可以扩展,其实我们完成生活中的一个目标也可以看做一个项目,这样的话,书中的观念也可以渗透到我们生活中,成为我们思想的一部分.是本好书 http://www.dearbook.com.cn/book/viewbook.aspx?pno=TS0020992 cnss 有些好书看了会受益终身,即使以后不从事计算机行业也大有裨益,这本书就是这样的。 其他网友对本书的评价 songma 风险管理(Risk Management)只是整个项目管理过程的一个环节,其实大多数稍微规范的公司项目经理人在写计划时都一定会有这一块的.没有? 这样的计划一定不会通过评审的. 当然,那种为了拉到资金,拉到”项目”而描述美好”钱”境隐瞒风险的计划书和项目经理人不在本文讨论之列. 各个软件公司对于项目风险区域,风险应急措施,风险等级的判断其实应根据自己的行业和自身产品,团队特点以及需求来定的.身位项目经理人一定要熟知这些.而这些东西,一般公司都会有成文或着不成文的记录.各个公司不同,这个环节的实施是很难相同的. 最后,现在的行业,比起1999-2000年的情景已经有很大的不同,那时大家更乐观些,的确是一片大干快上的样子,很多风险管理都没能很好的发挥作用,甚至包括那些在这方面有很好积累和传统的公司.中外都如此.现在其实大家还是比较谨慎,随着利润率的下降,对风险还是高度重视的. DeMarco的这本书也许是对4年前泡沫时代终结的一个省视,对与那些缺乏风险分析经验和数据的团队,这本书可以说是一个很好的指引.对Risk Management这一环节进行深入分析的书本不多. 撇开那些过头的广告和宣传(各大网上书店),如果公司没有这方面的传统或者项目计划书模版中没有这个标题的话,这本书还是朴实无华而有启发的一本书.我推荐给从事项目管理的同行.(不过不要理会那些夸张的广告:) 酒窝 我看过《重构》,觉得作者写得很好,译者也翻译得不错。我喜欢看gigix翻译的书,也愿意去购买。 citizen 拿到书了,从封面到纸张都不错,鼓励一下 cdxcoding 我也拿到书了,感觉不错。真的。内容也没有起先担心的那样,怕务虚的东西比较多。书里谈到了著名的丹佛国际机场项目的案例,分析的非常精彩,跟我们实际开发非常接近。我很快就读完了三分之一。 这个项目是这样的。科罗拉多州的丹佛市于1988年开始建造一个新的国际机场。新的丹佛国际机场计划于1993年10月31日投入使用。到那天了呢,这个巨大机场的其他各个部分都已经做好了准备,只有行包自动处理系统的软件还没到位,所以机场还不能投入使用!从1993年第一次延期,到1995年机场终于部分开放,项目延误的全部损失超过了50亿美元。 全书并没有仅仅分析这一个项目,实际上,这个项目之大,在我们日常工作中是罕见的。但是作者从这个项目入手(实际上从第三张才开始谈这个案例),就是呼唤我们对项目风险的重新认识。我觉得如果没有这种重新认识,是很难“坦然面对”风险的。前面的songma兄言过了。要知道,明白/知道/了解了风险管理是前提,连这个都做不到,就更谈不上如何应对我们几乎每天都可能面对的风险了。 tjuwayne 《最后期限》翻译得很好,术语准确,文笔流畅,想来是二人成功合作的结果。 Demarco的著作,翻译水平又有保证,值得买! |
[ 查看本指南所提及的书籍 ] |
这篇向导简述了学习C++的全过程,对想成为C++程序员的朋友有所帮助,特别是为非科班的朋友展示了一条学习路线,限于本人水平限制,如果有什么不恰当的地方欢迎指正。 | |
[ 查看本指南所提及的书籍 ] 这篇向导是为希望成为C++程序员的朋友写的,简述了学习C++的全过程。希望对编程的门外汉有所帮助:) 入门: 入门就是要初步对编程的思想有个了解,并且能编程解决一些小问题。入门一定要选好书,难度如果太低了会造成对读者的误导,以为编程就是这么回事;也不能太高深,免的打击读者的信心。既然编程的入门要求是编一些小程序解决小问题,那么就没必要直接学习C++,我觉得循环、判断、跳转、指针才是最基本的编程思想,学通了这些对以后学习C++很有帮助。 我建议应该先把C扎实地学好,不光要掌握C的语法,因为学习编程的最终目的是解决实际问题,所以还要适当掌握把实际问题与编程联系在一起的能力,我推荐《 C程序设计语言(第2版) 》,这本书是C语言之父写的,不仅详尽介绍了C的语法,还提供了很多实际的小问题作为实例,可以说看了这本书之后能为以后的编程学习打下一个扎实的基础! 提高: 学了《 C程序设计语言(第2版) 》后可以开始学习C++,一开始没必要钻很深的大部头书,《 Essential C++中文版 》非常适合初学,一个礼拜就可以看完,看了它可以快速对C++的全貌有个了解,虽然不会马上熟练掌握C++。 我们不能满足于解决“百钱买百鸡”,真正实现程序还有很多非功能上的问题,比如怎样做才能使用更少的内存?怎样做才能更快?在熟悉一门语言后,一定要认真学习的就是数据结构!数据结构保证了我们的程序能以高效的方式运行。《 数据结构算法与应用C++语言描述 》是本好书,它提供了很多实际的例子,比如火车站调度、走迷宫,相比于“百钱买百鸡”这种问题又提高了一个层次。 接下来专心提高C++的水平,可以选择《 C++编程思想 》,然后再看《 Effective C++中文版 》和《 More Effective C++中文版 》,这两本书介绍了高效使用C++的宝贵经验,语言很幽默。至此,你已经可以自称是C++程序员了,恭喜! 下面介绍几本书,有兴趣的朋友可以选读。如果想高效地使用C++开发软件,STL一定要学!《 C++标准程序库—自修教程与参考手册 》可以帮你学会STL的使用,而且开发时可以拿它做手册,有了前面数据结构的基础,学习STL的使用不会遇到什么困难。如果你还想知道STL的设计思想及原理,不妨看看《 泛型编程与STL 》。有些朋友可能会问,C++的面向对象机制是怎么实现的?《 深度探索C++对象模型 》给了你答案,它剖析了C++底层的实现。最后,如果想有一本C++大百科全书,那非《 C++程序设计语言(特别版) 》莫属!这本书是C++之父Bjarne Stroustrup的大作,算是书中权威。 再提高: 到现在为止,你已经熟练掌握C++语言了,现在需要提高的就是设计思想,面向对象(OO)的最大特点是把我们的注意力从系统的执行体系结构转移到概念体系结构,因此利用OO开发大型系统会更轻松。但是经常可以看到人们拿着C++用面向过程的思想解决问题,缺乏的就是面向对象的设计思想,也难怪,在这里之前看的书都没有教你怎样用面向对象的方法开发系统,顶多介绍了面向对象是什么,看了这么多书难免会先入为主,《C语言程序设计》(或者你看的第一本编程书)中的思路潜在的影响着我们。这条鸿沟就由《 设计模式–可复用面向对象软件的基础 》来补救吧!所谓模式就是前人总结出来的、经过千锤百炼的一种系统结构,设计模式展示了23个经典的模式,通过学习、理解,你可以看到什么是真正的面向对象。 看了《 设计模式–可复用面向对象软件的基础 》后,有时间不妨看看《 重构——改善既有代码的设计(中文版) 》,学了面向对象的设计思想后看它,可以站在一定高度重新审视一下自己的C++编程水平。 结束语: 在学习编程的过程中一定要注意多实践!学习时到CSDN论坛同大家讨论是个不错的办法,那里的高手如过江之鲫,你会找到许多热心的朋友与您一起学习,能通过学习编程交些朋友不是更好吗?最后,希望您能成为优秀的程序设计师,为中国软件的发展贡献一份力量! |
介绍了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及其所倡导的DesignBy 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, 《 Windows 程序设计(第5版)(上、下册) 》 北京大学出版社 这本是尽人皆知的Win32 API编程经典,也称为“Petzold Book”,学习Win32 API编程的人几乎都从这本书入手。这本书的优点是落墨细致,对基本概念和基本技巧的解释非常详尽,不厌其烦。同时,这本书篇幅虽然不小,但是包容的东西并不多,基本上把重点放在GUI编程上和常规编程任务上,所以能够把很多问题讲得非常透彻。通常第一次阅读这本书,都会觉得作者行文有一些罗嗦。但是日后在开发中,却会发现,这些当时觉得罗嗦的论述,都是实际工作中值得反复查阅咀嚼的宝贵资料。这就是所谓的Petzold风格,既可做tutorial,又可做reference。 几年前,人民邮电出版社出版过一本Charles Calvert的《 21天学通WINDOWS 95编程(上、下册) 》,那本书的定位与“Petzold Book”相似,而且写得也非常出色,在控件编程方面的阐述甚至超过了“Petzold Book”。可惜这本书完全被“Petzold Book”的光芒所覆盖。不仅国内没有再版过,而且原出版者也彻底打消了与“Petzold Book”对抗的念头。 现在仍然用Win32 API直接开发GUI的人,恐怕是少之又少,所以这本书的意义不及当年。更公允的说,Petzold Book现在最大的意义是作为Win32的入门教材。不经过它的洗礼,很难升堂入室。 2. Jeffrey Richter, 《 Windows核心编程 》第四版 机械工业出版社 这本书的前三版名为Advanced Windows,第四版改名为Programming Applications for Microsoft Windows。作者在前言里还特别讲了改名的原因。但是在我看来,这本书还是叫做Advanced Windows更贴切。因为这本书虽然同样是讲Win32 API,却几乎和Petzold Book没有任何重复。初级的内容完全略过不提,GUI部分也是一带而过,全书顷力与系统编程,一上来就讲Win32核心对象,从进程到线程,从DLL到SEH,从钩子到内存管理,可以说是不避艰险,迎难而上,将最复杂最微妙的细节完整展现出来,同时配备又大量精心准备的例子,代码质量非常高超。因此,这本书从问世之日起,就成为Win32系统编程方面的圣经,作者Jeff Richter也成了Win32编程方面的绝对权威。想要学习Win32核心编程,不读这本书是无法想象的。遗憾的是,这本书的中文版翻译配不上原书的高水平,可以说是大错不多,小错不少。如果有读者要认真研读此书,可以去寻找北京大学出版社出版的影印版。 这本书是Richter的代表作,也奠定了Richter世界顶级技术作家的地位。我本人非常喜欢读Richter的书,因为他的文字是写给专业人士看的,决不假装弱智,同时有相当体贴细致,非常符合我的习惯和胃口。所以通常在某个领域有了Richter的书,我就不会去看别人的书了。 对于某些读者来说,Marshall Brain的Win32: System Service 3/e(中文名《深入学习:Win32系统服务开发与实例》,电子工业出版社“深入学习”系列)和Johnson Hart的Win32 System Programming 2/e(中文名《 Win32系统编程—Windows 2000应用程序开发指南(第二版) 》,中国电力出版社)都是不错的选择。两本书的论述都不如Richter深入,但是例子精当,讲解恰到好处。Brain的书覆盖面很广,例子非常有启发性,而Hart的书最适合从UNIX转到Win32的朋友。我发现自己在有空闲的时候喜欢啃Richter的书,但是在实践中需要快速学习解决方案时,反而Brain和Hart的书对我更有帮助。所以这两本书虽然不象Richter那么必须,但是也是非常实用的补充。 Petzold Book和Richter的这本书,构成一个连冠一致的系列,一般Win32学习者精读并且基本掌握这两本书的主要思想和技术,就可以称得上是Win32系统开发的专家了。如果说这两本书的弱点,主要存在两个方面。其一是两本书写作时将Win9X的开发作为一个基本出发点,因此对于Win2000平台的新特性介绍不足。特别是对于Windows 2000服务端高性能软件的开发,基本上没有涉及,很多Win32特有的机制也没有覆盖到。因此,如果想在Win32方面再上一层楼,可以考虑Jeffrey Richter的另一本书。 3. Jeffrey Richter, Programming Server-side Application for Microsoft Windows(影印版)北京大学出版社 知道I/O Completion Port吗?知道如何在多CPU服务器上把机器的能力发挥到极至吗?知道如何利用Windows的logging service吗?知道如何利用WMI开发服务端程序吗?即使你是一个Win32开发高手,也许对上述问题也会感到困难。随着一般应用程序的开发逐渐转移到Java、.NET或者至少Delphi这样的RAD平台上,Win32能够完全发挥威力的最后一个角落,大概就是服务端高性能程序设计了。而如果你想在这个领域有所建树,Jeffrey Richter的这本书就不可不读。这本书几乎是这个领域里唯一的一本书,而Jeffrey Richter的实力又保证了这本书的水平达到了相当的高度。读这本书给人以震撼的快感,你会感叹,Jeffrey Richter对于Windows系统的理解竟能够达到如此深度! 这本书跟上面提到的Petzold Book和《 Windows核心编程 》几乎又是零重叠,所涉及的内容都是高级技术,特别是自Windows 2000以来出现的服务器软件开发新技术。与前两本配合起来,形成了一条从基础到专家的完整链条。在当今业界,仍然使用纯Win32开发程序的开发者,又不少是在金字塔顶端的“高手”级人物。如果说Petzold Book在今天的主要意义在于教育,《 Windows核心编程 》的主要意义在于深化你对系统的理解,那么这本书中教授的知识是实实在在吃饭的家伙。因此,对于高手和有志最终成为高手的程序员来说,这本书是一本难得的经典。 |
关于ACE的详细信息,可以查阅《程序员》2003年12期的ACE专题。本文得到《C++网络编程》两卷的译者马维达、於春景先生的大力支持,在此表示感谢! | |
[ 查看本指南所提及的书籍 ] ACE是什么? ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework),在其中实现了许多用于并发通信软件的核心模式。ACE提供了一组丰富的可复用C++ Wrapper Facade(包装外观)和框架组件,可跨越多种平台完成通用的通信软件任务,其中包括:事件多路分离和事件处理器分派、信号处理、服务初始化、进程间通信、共享内存管理、消息路由、分布式服务动态(重)配置、并发执行和同步,等等。 ACE的目标用户是高性能和实时通信服务和应用的开发者。它简化了使用进程间通信、事件多路分离、显式动态链接和并发的OO网络应用和服务的开发。此外,通过服务在运行时与应用的动态链接,ACE还使系统的配置和重配置得以自动化。 使用ACE的好处 ●增强可移植性:在ACE组件的帮助下,很容易在一种OS平台上编写并发网络应用,然后快速地将它们移植到各种其他的OS平台上。而且,因为ACE是开放源码的自由软件,你无需担心被锁定在特定的操作系统平台或编译器上。 ●更好的软件质量:ACE的设计使用了许多可提高软件质量的关键模式,这些质量因素包括通信软件灵活性、可扩展性、可复用性和模块性。 ●更高的效率和可预测性:ACE经仔细设计,支持广泛的应用服务质量(QoS)需求,包括延迟敏感应用的低响应等待时间、高带宽应用的高性能,以及实时应用的可预测性。 ●更容易转换到标准的高级中间件:TAO使用了ACE提供的可复用组件和模式。它是CORBA的开发源码、遵循标准的实现,并为高性能和实时系统作了优化。为此,ACE和TAO被设计为能良好地协同工作,以提供全面的中间件解决方案。 好书介绍 ★★★★★《 C++网络编程 卷1:运用ACE和模式消除复杂性 》 Douglas C. Schmidt, Stephen D. Huston 著, 於春景 译 华中科技大学出版社 出版时间:2004年1月 《C++网络编程》以一则概论开篇,介绍了撰写分布式并发应用程序时涉及的议题和工具。然后,针对开发灵活、高效的并发式网络应用程序的需要,本书提供了重要的设计空间、模式和原则。本书作者从专家角度向你展示,在运用C++和模式有效地开发面向对象网络应用时,应当如何提高你的设计技能。 有了这本书,C++开发者就有了一套最完整的、可以自如运用的工具包,从而能够方便、高效地开发成功的、多平台、并发式网络应用程序。 於春景先生个人主页及本书勘误 本书影印版 ★★★★★《 C++网络编程,卷2 基于ACE和框架的系统化复用 》 Douglas C.Schmidt, Stephen D.Huston 著, 马维达 译 电子工业出版社 出版时间:2003年12月 本书内容涵盖ACE中的各主要框架的基础概念、模式及使用规则。本书将向你描述这些框架的设计,以及它们可怎样帮助你克服较低级的本地操作系统API与较高级的分布式计算中间的各种局限,高效地开发出高质量、可移植的C++网络化应用。本书是继受到了高度赞誉的POSA2(Pattern-Oriented Software Architecture:Patterns for Concurrent and Networked Objects) 之后,Douglas C.Schmidt撰写的又一著作,通过学习本书,你将能更了解和掌握适用于网络化应用开发的各种设计模式。 马维达先生个人主页及本书勘误 本书影印版 孟岩推荐 这套书共两卷,篇幅都不大,主要内容是介绍ACE。在C++领域,由于这套书被Bjarne Stroustrup编入C++ In Depth系列,因此具有崇高的地位。而在网络编程领域,也有人称赞此书为Stevens之后最重要的网络编程著作。作者Douglas Schmidt是C++、网络程序设计和模式领域中国际公认的权威专家,潜心研究C++网络编程已经十多年。他发起的ACE开源项目是目前当之无愧的最优秀和最成功的C++网络编程环境,不仅具有非常出色的可移植性,而且性能卓越。美国国防部的ARPA已经支持这个项目好几年了,其最终目的是在ACE的基础上建立可用于现代战争的分布式实时嵌入式系统。毫无疑问,ACE无论在理论上还是在实践中,都是最值得程序员关注的网络编程典范项目,而这一套两卷对ACE的介绍性书籍,也毫无疑问是最值得网络程序员品读分析的经典。学习这两本书,你可以将经典的基于C API的网络编程知识与现代面向对象、模式和框架等最新技术思想结合起来,从而使你对网络编程的认识上升到一个新的高度。 附孟岩:《网络编程之四书五经》 关于ACE的更多中文信息可访问马维达先生的ACE站点 点击此浏览ACE的主页,在这里可免费获得最新版本的ACE以及其他相关资源。 |
本书为我们作了一个对产生式编程的精彩介绍,它注定会成为一部经典之作。作者精心讲述了领域特定语言和产生式编程之间通常为人所忽视的联系,并把这种联系作为未来开发的一个推动因素。广大的开发人员完全可以把书中丰富而且实用的方法当做可以立即应用的首要步骤。 | |
[ 查看本指南所提及的书籍 ] 本书简介 《 产生式编程——方法、工具与应用 》是对这种正在浮现的规程的完整指导和参考。它提供了对以下这些关键技术和主题的深入探讨: ●领域工程 ●特征建模 ●泛型编程 ●面向方面的编程 ●使用C++的模板元程序设计 ●产生器 ●微软的意图编程 使用本书你将会学习到如何组合这些技术,以及(也是更加重要的)如何在实践中运用它们。书中包括来自三个不同领域的完整的案例研究:程序设计领域(容器数据结构)、业务领域(银行业务)以及科学计算(矩阵计算)。 什么是产生式编程? 产生式编程(Generative Programming,GP)为应用程序开发人员提出了十分美妙的承诺。它使“从‘一种一个’的软件系统向自动制作软件的各不相同的变体发展”这种思路变得十分真实可信。简单地说,GP以“确定软件开发中自动化的好处”为中心。本书包括了将帮助你设计和实现一个系统族的“正确”组件,以及自动组合组件的方法和工具。这里提出的方法可以应用到所有的商用开发中——从类和过程的层次上的“微观编程”(programming in the small),到“宏观编程”(programming in the large),就是说开发大型系统的家族。 面向对象的泛滥 过去十年里, 面向对象方面的著作由于覆盖了很多明显不相关的思路, 可以说是已经到了汗牛充栋的地步, 这些思路包括从面向主题的程序设计到组件, 林林总总。 它们有一个共同点, 就是总有一些有关它们的东西肯定不是面向对象的, 虽然它们都在面向对象的光环里面花费了很多时间。 但是在过去的一年或者两年里, 这些零散的片段中有许多都发现了共同的基础, 并且围绕一个共同的主题联合起来:元对象协议(metaobject protocol)。 自省(reflection)。 意图(intentionality)。 一种见解深刻的对组件的解释。 跨结构的特征剪裁, 以及对简单模块性的经典模型的突破。 对我来说, 1999年度最精彩的场面之一是在德国的Erfurt举办的第一次国际产生式与基于组件的软件工程讨论会(GCSE’99), 会议上, 众多研究人员把许多这种想法联系起来, 交流对于它们的重要意义的感想。 但是, 这只是这些思路汇集起来的一个论坛:我们在论坛上看到了与许多会议讨论小组和某些新的文献中相同的东西。 我们要超越面向对象 在形成历史的某些事件中评估历史总是很困难的, 但是比起在事件发生后, 远离第一手资料来解释它, 可能不用负更多的责任, 也并不危险。 在这种思路之下, 看看周围, 可以认识到, 现在, 我们可能正处于计算机科学的一个关键的转折点, 特别是程序设计和设计技术领域。 业界已经挣扎着努力超出面向对象范型的局限。 模式是一个值得重视的尝试, 虽然它们非常有利于把注意力集中到程序设计中经验的价值和人的因素上, 但是, 计算机科学如果忽视亚力山大(《 建筑的永恒之道 》的作者)的观点或者系统思考, 就不可能取得什么进步。 软件很少能在Kuhnian的意义上取得一个真正的范型转变。 可能我们是一个保守团体, 而且我们对小说的迷恋使我们甚至不能进行最简单的学习:许多本国的组件运动的原则受到面向对象设计的早期原则的影响, 这些是经验建议应该在几年的应用后丢掉的东西。 新编程概念的萌生 但是现在有了一些改变的萌芽的印记。 可能业界不会很容易地进行革命, 但是, 它可以容忍向一个在现有状态之上构建的新技术迈进。 一直以来, 有一种强烈的。 连续不断的运动, 想要发现超出对象和概念与特征的范畴之外的编程和设计表达方式。 这就是意图编程的基本含义, 例如, 很大程度上, 也是类似领域工程的基本含义。 这种思想的脉络在整个业界。 在很多论坛上都很有市场。 我们在通俗(非亚力山大)模式运动中看到了它, 我们在面向方面的程序设计中看到了它, 我们在泛型编程和一些例如多范型设计中也看到了它。 由于一些会议例如OOPSLA的关注点越来越不集中于那些被称为对象的东西的基础, 而是越来越集中于概念性扩展, 所以我们开始对各个部分思考得越来越少, 而对系统和特征思考得越来越多。 并且由于OOPSLA影响力减弱了, 所以一些类似GCSE的会议正在越来越多, 越来越普遍。 今天, 就是一个基于广度的沿此方向的运动, 并且本书发现自己正好处于这个转变的中心。 我相信, 读者既不会低估这个转变的意义, 也不会低估本书在沟通和影响这个转变中的地位。 我们正处于演变的开端, 本书是这个新流派的早期标准化工作。 本书详细介绍 这本书可能反映了计算机科学成熟的一个程度, 就是说, 第一次, 尝试利用其自身的能力, 证明一种整合观点, 而不是通过与先驱区别开来颂扬一种技术。 所以, 这本书覆盖了很多领域, 并且应用了很多原则:组件。 对象。 方面。 自省。 意图程序设计和泛型程序设计(用于以技术为焦点的地方)和领域工程(用于系统的考虑)。 对于那些第一次遇到它们的人来说, 本书是一个很好的对于正在涌现和建立的技术的精彩介绍。 有人会误以为本书是一本已有实践的纲要, 当然是在领域工程的范围内, 但是, 在更远的范围内, 对于超出对象以外的那些东西, 本书也是适用的。 但是这本书远远不止是技术的一个集合。 这本书围绕统一原则提出了强力的主题, 这些原则将把零散的东西捆绑在一起, 还提出了非常值得注意的领域工程和元程序设计。 作者用领域工程的概观好好地招待读者, 并引导读者鉴赏它的必要性。 领域工程可能超出了任何一种单独的思路, 提供了一个通用的思路或者主题, 读者可以使用这些来“解释”产生式编程。 但是, 更重要的是, 作者把其他程序设计的学派作为基础材料, 来描绘以一种广泛的。 恰到好处的视角, 称为产生式编程。 结果肯定超过了各个部分的总和:大多数这些部分都曾经存在了很久, 但是关于怎样把它们整合起来的想法刚刚涌现出来, 并得到了广泛的揭示。 微软研究院总构架师推荐 “本书为我们作了一个对产生式编程的精彩介绍,它注定会成为一部经典之作。作者精心讲述了领域特定语言和产生式编程之间通常为人所忽视的联系,并把这种联系作为未来开发的一个推动因素。广大的开发人员完全可以把书中丰富而且实用的方法当做可以立即应用的首要步骤……而且,无论是使用现存系统,还是为正在出现的新产生式技术而做准备,它们都是价值不凡的。” ——CharlesSimonvi,微软研究院总构架师、意图编程的发明者 原书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 |