程序设计实践(评注版) 评注者序

评注者序

程序员的一生(武林大侠的人生貌似也是如此)往往都是在激情和 迷惘两种状态之间来回切换。当我们接触到一些新的东西(新的编程语 言、新的语法特性、新的协议工具,等等)时,就会急切地想去了解它、 掌握它,会坐在心爱的计算机前,废寝忘食、夜以继日地反复实践。可是 当我们的实践达到一定的程度时,往往又会陷入另外一种状态——觉得很 迷惘。一方面感觉自己学习的那点编程技巧已经足够,足以应付一些实际 的项目。但另一方面又会在实战过程中隐隐地感觉到有些问题存在:代码 写得总是有点丑陋、运行效率总是比想象中的要慢一些、和其他程序模块 交互起来总是存在着一些别扭、一些莫名其妙的错误总是会在一些不恰 当的时候出现,你无法自信地告诉用户你的程序真的很棒,如果将它从Windows下移植到Linux下,你甚至不知道会有什么问题……你明明意识到 了这些问题,却苦于无法去改进,教科书中的每一句话早已烂熟于心,却 丝毫找不到问题的答案,和程序员前辈讨论的时候,也只会得到一些只言 片语,总不 能找到一套系统的修炼之道——针对这种情况,你要做的就是 寻找一些能针对实际问题对症下药的读本,而ThePractice of Programming 就是这样的一本书。

ThePractice of Programming 由Kernighan和Pike编著,成书于上个世纪

(1999年)。年代看似有些久远,但该书讨论的是一些很难过时的话题, 就像我们今天还在讨论2000多年前“孔孟之道”和“孙子兵法”一样,12年后的今天,我们再次读起The Practice of Programming ,仍没有感觉到一 丝腐朽的气味。从内容上看,该书几乎囊括了程序员深有感触的各种问题,对于很多彷徨的程序员来说,这绝对是一贴切中要害的良药。全书主 要采用C++/Java作为范例语言,但丝毫不影响其他语言的爱好者以此作为 升级读本。

全书分成9章,分别是:

Chapter1: Style(风格)

指导你如何写出优雅的代码,而不是乱写一气。

Chapter2: Algorithms and Data Structures(算法与数据结构) 总结一下各种基本的算法和数据结构。

Chapter3: Design and Implementation(设计与实现) 紧接第2章,用5种不同的语言讨论具体的程序实现。

Chapter4: Interfaces(界面) 展示了用户和程序之间、程序模块之间应有的界面设计。

Chapter5: Debugging(除错) 系统地讨论了除错的各种策略和技巧。

Chapter6: Testing(测试) 指导如何手动地、自动地进行程序的测试,以保证程序能正常工作。

Chapter7: Performance(性能) 循序渐进,演示如何通过不断的重构优化程序的性能。

Chapter8: Portability(可移植性) 讨论提高程序的可移植性所关注的地方和可用的技巧。

Chapter9: Notation(记法) 讨论如何采用一些有用的记法简化程序,将数据和逻辑用合适的记法表达出来。

很 多 程 序 员 很 享 受 阅 读 英 文 原 著 , 从 某 种 角 度 来 说 , 英 文 更 能 确 切表达计算机世界的概念,如同样是“注解”、“注释”,comment和a n n o t a t i o n 在程序设计世界中就具有不同的含义。有些词汇一旦做了翻 译,如object、list、map、foreach等,反倒会让国内读者感受到莫名的障 碍,程序员彼此交流时,有的时候就干脆直接采用英文说法。再如一些 缩写,如CSV格式,它来源于Comma-SeparatedValues(“以逗号分隔的 值”),原义极其朴素,但缩写成CSV就显得太过高深。同样的例子还有internationalization和localization,它们常被缩写成I18N和L10N,如果抛开英文原词,就会多一些神秘感。再如:“Abort,Retry, Fail?”这是操作系统 中常常打印出来的一句原话,如果再翻译成中文,就失去了原有上下文的 意味。阅读英文原版的另外一个好处,还在于当我们看到memset()函数时 就会联想到memoryset,看到strcpy()函数时就会联想到stringcopy。

ThePractice of Programming 用语浅显易懂,深入浅出,但由于文化的 差异,在为避免读者理解上的困难,有些地方我们在保留原汁原味的同 时,还增加了一些本地化的注解。注解的比例大概为20%左右,通过附上 些亲切的中文用以强调、扩展作者提出的某些概念和观点,以避免读者迷 失在英文词句的汪洋大海中,一去不复返。

在评注过程中,由于学识有限,为避免一面之辞,评注者大量参考了

C++ISO标准、互联网资料与国内的一些计算机教材,也包括裘宗燕老师

2007年针对ThePractice of Programming 的译本,力求在术语使用和观点解 释上,不会给国内程序员造成任何误解。最后感谢电子工业出版社的张春

雨先生及其他同事,是你们的辛勤劳动促成了这本评注版得以与广大程序 员见面。

正如作者所强调的,程序设计并没有编码那么简单,它是一项高技巧 的脑力劳动。悲惨的是,程序设计被很多的人“演绎”成、也被更多的人“曲解”成毫无技巧乐趣可言的体力劳动!我们看到千千万万的准“程序 员”,进入某个软件工厂,仅仅通过几个月的培训,就被制造成能够“胜 任”的程序员,在这里,他们被灌输的仅仅是规则的遵守和他人代码的机 械模仿,留给他们的思考和设计的空间极其有限。失去了思维的权利的程 序员,在随后的人生中不得不在各种各样的岗位上按照他人的意愿做着一 次又一次的重复的机械式的工作,很多的程序员也因为兴趣问题放弃了程 序设计,转向其他的职业生涯。殊不知,程序设计的世界是其乐无穷的, 是无止境的,它需要永久的激情 和持续的实践积累。评注者真心期望读者 朋友们能从阅读本书的过程中得到收获,得到心灵上的升华。唯有那些有 思想的程序员,方能写出有灵魂的代码。

2011.4北京

程序设计实践(评注版) 评注者序相关推荐

  1. 重构:改善既有代码的设计(评注版) 评注者序

    重构:改善既有代码的设计(评注版) 评注者序   评注者序 近十年来,若要讨论如何改进代码的质量,很难绕过Martin Fowler的这本经典著作.这本书已经影响了几代程序员,或许会持续不断地影响未来 ...

  2. C++ Primer(第4版)(评注版)

    <C++ Primer(第4版)(评注版)> 基本信息 原书名: C++ Primer (4th Edition) 原出版社: Addison-Wesley Professional; 4 ...

  3. Java编程思想(第4版)(评注版)

    传世经典书丛  Java编程思想(第4版)(评注版)  (美)埃克尔(Eckel, B.)著 刘中兵评注 ISBN 978-7-121-13521-7 2011年6月出版 定    价:108.00元 ...

  4. 重构:改善既有代码的设计(评注版)

    传世经典书丛  重构:改善既有代码的设计(评注版)  MartinFowler,Kent Beck,John Brant,William Opdyke,Don Roberts(马丁.福勒,肯特.贝克, ...

  5. C++程序设计实践里面石头剪刀布版王者农药实例

    C++里面程序设计实践里面石头剪刀布版的王者农药实例: 算法分析: 我们需要构造一个英雄类,里面包含英雄的名字,使用次数以及血量(由于第一次使用,所以暂时没有血量)` class Hero {priv ...

  6. 基于mpi的奇偶排序_并行程序设计(第2版)pdf

    并行程序设计(第2版) 内容简介 本书系统介绍并行程序设计原理及应用.除介绍常用的一些算法范例,包括分治.流水.同步计算.主从及工作池,还介绍了一些常用的经典数值和非数值算法,如排序.矩阵相乘.线性方 ...

  7. 何钦铭c语言程序设计第八章,c语言程序设计(第3版)何钦铭-颜-晖-第8章--指针

    1.第8章 指针[练习8-1]如果有定义"int m, n = 5, *p = &m;"与m = n等价的语句是 B .A m = *p; B. *p = *&n; ...

  8. 敏捷软件开发:原则、模式与实践(C#版)

    刚才在china-pub看到<敏捷软件开发:原则.模式与实践(C#版)>已经出版了.这本书是以前那本<敏捷软件开发:原则.模式与实践>的C#版,这是不是说明C#程序员的数量已经 ...

  9. python语言程序设计实践教程答案实验六_Python程序设计实践教程

    书名:Python程序设计实践教程 定价:29.8 ISBN:9787115532602 作者:储岳中 薛希玲 版次:*1版 出版时间:2020-04 内容提要: 本书是Python语言程序设计的配套 ...

  10. c语言做一个小程序报告,《C语言程序设计实践》课程报告30个小程序组合成一个大程序.doc...

    北方民族大学 课 程 报 告 课 程 名 称: 程序设计实践 专 业 班 级 : 软件工程(2)班 学 生 姓 名 : 李思良 学 号 : 任 课 教 师 : 王晓锋 学 期 : 2015-2016学 ...

最新文章

  1. 为什么Python发展这么快,有哪些优势?
  2. BinaryTree with C#
  3. WindowsServer2012史记4-重复数据删除的魅力
  4. python语言必背代码-好用到哭!请记住这20段Python代码
  5. python turtle画圣诞树-Python画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
  6. JQuery获取元素本身HTML
  7. ClientScript.RegisterClientScriptBlock 不执行
  8. HashSet存储自定义对象保证元素唯一性图解原理及代码优化
  9. 自定义编程移植的加密芯片
  10. selenium无法调用chrome或者firefox的原因
  11. JavaFX屏幕截图工具ScreenCapture
  12. 小游戏《堆木头》开发
  13. c语言实现 三角函数,小型嵌入式系统的三角函数C实现
  14. apiclod 上传图片_apicloud图片上传
  15. 计算机网络密码凭据,电脑无法上网时总是提示需要输入网络密码如何解决
  16. AI崛起,阿里的科技孵化力|甲子光年
  17. Chrome浏览器安装本地插件
  18. 没有sln文件怎么打开
  19. jenkins从节点问题-windows重启导致从节点失联
  20. 地理信息系统比较牛的网站(原创)---之可以丰富你的GIS知识

热门文章

  1. 数据库设计时设计标识字段的一些思考
  2. 白鹭引擎 - 事件机制 ( Event, addEventListener, dispatchEvent )
  3. Cocos Creator下删除AnySDK步骤
  4. 20155238 2016-2017-2 《Java程序设计》第六周学习总结
  5. JSP中乱码问题,你真的理解了么?
  6. java:高速排序算法与冒泡排序算法
  7. Attributes(2): Displaying attributes for a class.(显示类属性)
  8. C#中获去一个字符串中的汉字的个数 C#获取字符串全角的个数
  9. 如何在页面显示json数据
  10. Keyboard项目中观察者模式解析