基本信息
- 原书名:The Prictice of Programming

编辑推荐
Brian W.Kernig和Rob Pike奉献出他们的新作《程序设计实践》。可使程序员工作更有效,产出更丰厚。在这里可以看到和已成为经典之作的《Unix编程环境》同样的洞察力和权威性。
\t\t
\t\t
内容简介
作译者
Brian W.Kernighan和Rob Pike在朗讯科技贝尔实验室的计算机
目录
前言
第1章 风格\t
1.1 名字\t
1.2 表达式和语句\t
1.3 一致性和习惯用法\t
1.4 函数宏\t
1.5 神秘的数\t
1.6 注释\t
1.7 为何对此费心\t
第2章 算法与数据结构\t
2.1 检索\t
2.2 排序\t
2.3 库\t
2.4 一个Java快速排序\t
2.5 大O记法\t
2.6 可增长数组\t
2.7 表\t
2.8 树\t
2.9 散列表\t
译者序
程序设计是计算机专业领域中最核心的工作。在计算机领域中任何好的创意和设计,最终都需要通过高水平的程序设计实现,才能够真正成为有社会价值、市场价值的制成品和产品。有一件事使我非常感慨。在计算机领域走在世界最前列的美国,确实有那么一大批人,他们几十年如一日地奋斗在程序设计领域里。比如Tompson和Ritchie得了图灵奖之后仍在做程序设计工作,Kernighan和Pike也是这些人中的杰出代表。我觉得这些人是真正托起美国计算机业的脊梁。在中国何时能够有这样的一大批人,那么中国的计算机事业也就能在世界上占据一席之地了。中国的计算机事业要有真正的发展,必须造就一大批高水平的程序设计专家,这既是社会对于一批最优秀青年的召唤,也是历史对中国计算机教育界的挑战。
我认为,本书在这个方面是非常有价值的。它讨论的是程序设计中实际的、又是非常深刻、具有广泛意义的思想、技术和方法,它的翻译出版填补了国内目前这方面书籍的空白。这本书值得每个梦想并在努力使自己发展成为优秀程序员的人参考,值得每个计算机专业的学生和计算机工作者阅读,也可以作为程序设计高级课程的参考书或教材。我相信,任何在与计算机相关的领域中工作的人们,任何真正的计算机爱好者,都会在本书的阅读中有许多收获。这也正是我愿意来做这件事的原因。
近年来,程序设计环境确实取得了长足的进步。有人可能会提出疑问,既然许多程序似乎都能在一系列指指点点之中完成,在这种情况下程序设计难道还有多少花招好玩吗?实际情况并不是那么简单。任何一个有点价值的程序都不仅是一个图形界面外壳。虽然在最终的可执行代码里,界面外壳可能占据了相当大的比例,但一个程序的特点恰恰就在那些人们自己动手写出的代码中。而良好的设计、卓越的编码实现永远都是不可替代的,是不可能自动生成的,正是它们形成了一个软件的真正价值。实际上,所有程序设计环境中有价值的东西不过是在一些局部领域中优秀代码的浓缩和沉淀。
应该看到,功能强大的程序开发环境未必能造就出更优秀的程序员。在我自己的教学实践中,遇到了越来越多这样的学生,他们是玩编程环境的高手,但距离程序设计高手却差得太远。他们对算法和数据结构选择、程序的结构设计和良好编码的各种要素不太得要领,最熟悉的就是排错系统(debuger)和单步执行,最拿手的是在程序上打补丁。一个十行程序就能解决的问题,让他们来做,动辄就是几十上百行甚至更多,而到最后自己也不知道做得到底对不对,只知道试过一些例子,单步执行无数遍,打了数不清的补丁。可悲的是,以这类活动方式作为编程要义的不仅是这些学生,这种情况也不仅出现在校园里,不仅出现在我们周围,不仅出现在中国。这可能也是我们经常使用的系统规模庞大,而又不时崩溃的一个重要原因。无论是这些学生,或者是作为一般计算机工作者、作为教师的我们,都应该看看本书作者是如何对待编程和测试问题的,应该从中领略什么样的东西能称得上是真正的代码。
正如作者在书中反复强调的,程序设计并不就是编码。在程序设计工作中,既有工程也有科学。需要有对所面临的问题的科学分析;考虑各种设计可能性,在各种约束条件中寻找合理的平衡点;选择适当的技术、算法和数据结构,选择合适的语言和语言中合适的描述结构;编码和可能的代码调整;设法排除程序中的错误;通过系统化的测试,努力保证程序能够满足我们的需要,具有相当的可靠性和抵御外部意外事件的能力。这些都是本书中详细讨论了的题目。书中的内容还很多。在阅读本书的过程中,在每一章里,你都会发现许多新鲜生动、而又是非常深刻的东西,会发现一个又一个你确实应该知道,但至今还不知道的东西。这也是我自己在阅读和翻译这本书过程中的切身体会。
我(相信读者也会)非常感谢机械工业出版社华章公司的编辑人员,是他们的见识,使这本好书有可能较早地与中国读者见面。由于本书覆盖面广,翻译难度确实比较大,我虽然在翻译中下了不少功夫,但在译文中仍难免出现一些疏漏,这些当然都只能由我本人负责。我也真诚地希望认真的、有见识的同行和朋友们不吝赐教。纠正书中的错误也像是debug,可惜的是我们无法对书籍内容设计出一套系统的测试集,也不可能有功能强大的debuger系统。要排除这里的错误,只能靠人的眼睛、专业知识、逻辑思维和语言文字能力。而在所有这些方面,作为译者的我都还需要继续努力。
裘宗燕
2000年4月于北大
前言
浪费了许多时间去对一个错误算法做编码?
使用了一个过于复杂的数据结构?
测试一个程序而忽略了其中最简单的问题?
化了一整天功夫查找一个错误,实际上却应该在5分钟里就找到它?
需要让一个程序运行速度快3倍而且使用更少的存储?
费劲地把一个工作站上的程序移到PC上,或者相反?
试图对其他人写的某个程序做最简单的修改?
重写一个程序,原因是你根本无法理解它?
这些事都很有趣吗?
编程序的人每时每刻都会遇到这些事情。但在处理时发生的情况却很不令人满意,通常都比实际上应该的更糟。产生这种状况的原因是,常规的计算机科学和程序设计课程都不大关注那些程序设计实践方面的论题,如测试、排错、可移植性、性能、设计选择以及程序设计风格等等。许多程序员随着自己经验的增长慢慢地、毫无计划地学到了一些东西,也有些人始终都没有学好。
在这个庞大的世界里,人们面临的是错综复杂、相互联系和处于不断变化中的工具、语言和系统,以及对任何东西都提出更多要求的无情压力。在这种情况下,人们很容易忘掉那些最基本的原则——简单性、清晰性和普遍性——而正是这些东西,实际上是构成好软件的基石。人们也可能忽略工具和表示法的价值,实际上,利用它们可由计算机自动构造出某些软件,从而让计算机为其本身的程序设计做一些事情。
在这本书里,我们采用的方式是讨论一些基本的、互相关联的原则,它们可以用到计算的各个层次中。这些原则包括:简单性,它能使程序短而容易管理;清晰性,它保证程序容易理解,无论是对人还是对机器;普遍性,它意味着程序在很广泛的情形下都能工作得很好,也容易做修改以适应新出现的情况; 自动化,借助计算机帮助我们做一些工作,使人能够摆脱许多平凡琐碎的事项。通过考察各种不同语言中的一些程序设计例子,从算法和数据结构,到设计、调试、排错和性能改进;我们能展现出许多具有普遍意义的工程概念,它们是独立于具体语言、操作系统和编程规范的。
本书根植于我们多年来开发和维护的大量软件、多年讲授程序设计的课程以及多年与各种各样的程序员共同工作中的经历。我们希望与人共享这些关于程序设计实践问题的经验和教训,从我们的经验中传递一些见识,提出一些方法和建议,以帮助各个层次的程序员变得更加熟练,工作更有效率。
我们的书是为许多不同类型的读者写的。如果你是学生,已经上过一两门程序设计课程,希望成为一个更好的程序员,这本书将为你展开某些问题,而这些问题在你自己的课程里没有足够的时间讨论。如果你把写程序作为自己的一部分任务, 目的是为了完成其他工作而不是做程序本身,这里的信息将帮助你更有效地编写程序。如果你是职业程序员,在学校期间没有学过这些内容,或者希望重新温习一下,或者你是个软件管理者,希望指导你的工作人员向正确方向发展,这里的材料都会是很有价值的。
我们希望这里提出的建议能帮助人们写出更好的程序。读这本书的惟一先决条件,是你已经做过一些程序设计,最好是用C、C++或者Java语言编写。当然,已有的经验越多,有关内容对你来说就越容易。不可能有任何东西能帮你在21天内从新手变成专家。对于这里的某些例子,Unix和Linux程序员可能比经常用Windows和Macintosh的程序员更熟悉一点。但是我们相信,无论你来自哪个环境,都一定能在这里发现一些东西,它们可能使你的生活变得更容易些。
本书全部内容分为9章,每章集中讨论程序设计实践的一个重要方面。
第1章讨论程序设计风格。好的风格对于好的程序设计是如此重要,所以我们选择在最前面讨论它。书写良好的程序比胡乱写出的程序好——它们包含的错误更少,更容易排错、容易修改。所以,最重要的是从一开始就注意风格。在这一章里还提出了好程序设计的一个重要论点:应该尽量采用对所用语言最合适的习惯用法。
算法和数据结构是第2章的论题,这是计算机科学教育计划的核心,也是程序设计课程的重要组成部分。由于许多读者已经熟悉了这方面的情况,本书中的处理方式,是对那些几乎出现在每个程序里的算法和数据结构做一个简单的总结。更复杂的算法和数据结构通常都是由这些基本东西构建起来的,因此需要掌握这些最基本的东西。
第3章讨论一个小程序的设计,以便在实际工作中层示和讨论算法和数据结构的各种有关问题。这个程序用5种不同语言实现,通过对不同实现的比较,说明同样的数据结构如何在不同语言里处理以及语言之间在表达能力和性能方面的变化情况等。
媒体评论
机械工业出版社
进店逛逛
关注店铺
相关分类
编程语言与程序设计
软件工程及软件方法学
数据库
操作系统
网络与通信
办公软件
图形图像/多媒体
网页制作/Web技术
电子商务
IT人文/互联网
数码产品攻略
专用软件
考试认证
游戏开发