这个程序一直运行得很好,但在离开现场之后的某一天,系统治理员打来电话,说大概因为网络故障等原因,有时这个网关程序会崩溃掉 — 它自己崩掉也就罢了,问题是它还会把Windows 2000 Advanced Server搞成“蓝屏”!坦白地说,我还从来没看过哪个非蓄意的程序有这个“能耐”。由于当时正忙于另外一个大项目,无法去现场调试,最后只有凭经验对内存库代码小心翼翼地封装以异常处理代码(同时也做了一些别的修改……)。这样,虽然没有彻底解决问题,但程序终究不再死得那么难看了。
在这儿讲这么一段花絮有什么意思呢(当初为那个可怕的bug朝思暮想时我可不认为这是一个“花絮”)?我想说的是,对于任何软件而言,离开强健,效率也就无从谈起。而对于C 程序员来说,也许编写一个高效的程序并不难,但要编写一个需要7 ⅹ 24小时持续运行的服务端软件就不是那么轻易了,需要考虑许多因素,有时这些因素甚至远远超出C 语言和开发工具的本身。作为一名开发实际项目软件的程序员,并非非得自己碰钉子才能积累经验,只要我们足够虚心,别人的经验往往都是我们很好的借鉴。鉴于此,我推荐以下几本书供你选读,它们可以让你从强健和效率两方面受益(当然了,它们涵盖的内容远不限于异常处理J)。
Scott Meyers, Effective C : 50 Specific Ways to Improve Your Programs and Design (2nd Edition)
Scott Meyers, More Effective C : 35 New Ways to Improve Your Programs and Designs
《Effective C 中文版》,华中科技大学出版社
《More Effective C 中文版》,中国电力出版社
《Effective C (影印版)》,中国电力出版社
假如说《Effective C 》主要讨论C 中一些相对基础的概念和技巧的话,那么《More Effective C 》则着重探讨了包括异常处理在内的一系列高级技术。与前者相比,后者具有两大主要区别:其一,它包含很多时新的标准C 的内容;第二,它讨论的主题倾向于“战略化”而非“战术化”,并且讨论得更深入、更彻底。尤其是对虚析构函数、智能指针、引用计数以及代理类(proxy classe)等技术和模式论述的深入程度,让人很难想象是出现于这样的一本小书之中。
游刃有余的技术,高超的写作技巧,Scott无疑是世界上最优秀的C 技术作家之一。在简洁、清楚、易读等方面,这两本书都卓尔不群。总之,Scott提供的这85个可以改善编程技术和设计思维的方法,都是中、高级C 程序员必备的技能。我强烈推荐这两本书(实际上还有一本,稍后就会看到)。
Herb Sutter, Exceptional C : 47 Engineering Puzzles, Programming Problems, and Solutions
Herb Sutter, More Exceptional C : 40 New Engineering Puzzles, Programming Problems, and Solutions
《Exceptional C 中文版》,中国电力出版社
《More Exceptional C 中文版》,华中科技大学出版社
你自认为是一名C 语言专家吗?读一读ISO C 标准委员会秘书长的这两本书再回答。在这两本书中,Herb采用了“问答”的方式指导你学习C 语言特性。对于每一个专题,Herb首先合理地设想出你的疑问和困惑,接着又猜测出你十有八九是错误的解答,然后给你以指点并提出最佳解决方案,最后还归纳出解决类似问题的普适性原则。
这两本书是典型的深究C 语言细节的著作,很薄,但内容密集,远远超过Scott的那两本书,读起来很费脑筋 — 我个人认为它们要比Scott的书难懂得多。若要研习这薄薄的两本书所包含的知识,至少需要花费数月的时间!(在Scott的荐序中,他坦陈不止一次陷入GotW问题的陷阱,你应该知道这意味着什么)对于语言细节的深究有什么好处呢?尽管在大多数情况下,我们不必关心C 代码幕后的动作,然而当我们不得不关心时,这两本书可以为我们提供很好的线索,因为它们揭示了C 语言中微妙而又至关重要的东西。
评论加载中…
![]() |