《编程珠玑》

所需积分/C币:0 2015-03-11 16:25:43 13.14MB PDF
3
收藏 收藏
举报

不看不知道,一看吓一跳,编程的细节,编程的注意事项
TP311.1 大师鉴名爵列 20 Programming Pearls Second edition 编程珠玑 (第二版) [美] Jon Bentley著 谢君荬石朝江谭 北方工业大学围书馆 U0544579 才电力出照社 www.intopower.com.cn Prograluriny Pearls 2n Edition(ISBN 0-201-65788-0) Jon Bentley Authorized translation from the English language edition, entitled Programming Pearls, published by Addisua Wesley, Copyrighte20C0 All rights reserved No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical chiding photocopying, recording or by any information storage retrieval system, without permission from the CHINESE SIMPLIFIED language edition published by China Electric Power Press Copyrighto2004 本书由美国培生集团授权出版。 北京市版权局著作权合同度记号图字:01200308号 图书在版编目(CI)数据 编程珠圳(美)本特利著;谢君英,丕朝江译.北京:中国电力出板社,2003 (大师签名系列 书名源文: Programming Pearls ISBN75083-1914-1 ].编.Ⅱ①本②谢.石加程序设计Ⅳ1 中国版本图书馆C数据核字(200第15737号 丛书名:大师签名系列 书名:编程珠玑 编著:(美〕 Jon bentley 评:谢君英石朝江 贲任编料:高竿朱恩从 出版发行:中国电力出版社 地址:北京市三里河路6号邮政编码:10044 电话:(010)88515918 传真:(00)85]8169 印刷:汇畿印务有限公司 开4:787×109216 印张:145 字数:276千宁 饭款:200年4月北京第版 204午4月第1次印剧 定价280元 饭权所有翻印必究 前言 计算机程序设计涉及诸多方面。 Fred Brooks在 Mythical Man Month》中描述了一幅 广阔的画卷;他的作品铡重于讲述管理在大型软件项目中所扮演的关键角色。更为具体 点的是 Steve mcconnel在《 Code comp!et中介绍的优美的程序设计风格。书中涉及的 那些主题对于优秀的软件和程序员来说都是至关重要的。但不幸的是,合理软件工程源则 指导下的精巧的应用程序并非总是可以打动人心—除非软件按时全部完成并运转正常。 关于本书 本书涉及的主题是计算机专业领域中更为迷人的一个方面:这是一些超出了可靠工 程学范畴、位于涧察力和创造力王国中的程序设计珍珠。如同珍珠来自于曾经折磨牡蛎 的沙粒,程序设计的珍珠也来自于曾经折磨程序员的实际问题。书中这些有趣的程序将 会教给您重要的程序设计技巧和基本的设计原则。 书中的内容大多出自发表在《Com硎 nications of the ACM》上的 Programming Pearls 专题,它们被整理、修订,并于1986年作为本书的第一版出版。本书对第一版十三章中 的十二章做了大量的编辑更动,并加入了三个新的主题。 阅读本书的惟一要求是读者有过使用高级语言进行程序设计的经验。一些高级的技 术(比如C+棋板)在书中也会偶尔出现,对这些主题不熟悉的读者可以直接跳到于一 章节,而不会造成阅读障碍。 尽管书中的每一章都可以自成体系,但在整体上仍然存在逻辑上的分組。第1部分 的第1~5章回顾了程序设计的基础矧识:问题定义、算法、数据结构,以及程序验证和 测试。第2部分内容主要围绕效率问题展开,效率间题不仅本身十分重要,而巨常常是 进入有趣的程序设计问题的最好跳板。第3部分将会把这些技巧应用到几个关于排序 查找和字符串处理的基本问题中。 给读者的提示:不要读得太快。请仔绌阅读,并尝试解决书中提到的问题一某些 问题看似容易,但可能需要您花费一到两个小时的精力才能解决。然后,请认真解答每 章末尾提出的问题:通过思考并得出解决方案,您从本书学到的大部分知识将得以巩面。 如果可能的话,在翻看书后给出的提示和解决方案之前最好和朋友或同事讨论您的观点。 每章末尾给出的附加阅读材料并不是代表学术界观点的参考资料列表;我霍荐了一些优 秀的参考书目,它们也是我个人书库中重要的组成部分。 本书是为程序员所写。我希望这些甸题、提示、解决方案和附加阅读材料将会给程 序员带来帮助。事实上,本书已经在多门课程中发挥了它的作用,其中包括算法、程序 验证和软件工程。附录1中的算法目录是给职业程序员的一个参考,同时说明了如何将 本书应用于算法和数据结构方面的课程。 代码 本书第“版中的伪码程序其实已全部实现了,但只有我一个人可以看到这些真正的代 冯。在第二版中,我重新编写了原有的程序并编写了同样数量的新代码。您可以从本书的 网站(Www.programmingpearls.com)上获得这些程序。代码中包含了许多用于测试、谴试 和对函数计时的基本框架。网站上也提供一些其他相关资料。因为现在程序员可以从网上 获得十分多的软件,所以这一版本的一个新主题就是介绍如何评价和使用软件组件 木书的程序采用了简洁的代码风格:短变量名、较少的空行、少数或没有错误检查。 性大型软件项目中这是不合适的,但它有利表达算法的关键思想。答案5给出了关 于这种风格的更详细的背景 书中包含了一些真正的C和C++程序,但大多数函数都表示成伪码的风格:这样就 可以使用较少的篇幅并避免不优雅的语法。符号fri=[0,将i从0迭代到a-1。在这 种风格的for循环中,左右圆括号表示开放的范围(其中不包含边界值),而左右方括号 则表示封闭的范围(其中包含边界值)。表达式 function(i,仍然表示调用一个带有参数 i和j的函数,aray[ij也仍然会访问一个数组元素。 书中列出了许多程序在“我的机器”上的运行情况,该机器的配置是奔腾I40MHz 处理器、128MB内存、 Windows NT4操作系统。我还记录了程序在其他几台机器上的 运行情况,书中给出了我所观察到的些根本区别。所有实验都采用了最大程度的編译 器优化。我建议您在自己的机器上进行计时,并打赌您将会找出类似的运行时间比例。 致第一版读者 我希望你翻阅木书的第一反应是“看起来的确与第一版很像,”几分钟之后,我希望 你将会发觉“我从未看过此书。” 这·版与第一版关注的问题相同,但它被置于更大的背景之中。计算机技术已经在关 键领域(如数据库、阿络、用户界面)发生了根本的变化,大多数程序员都应该熟悉这些 技术。但在各个领域的中心,编程间题依然是核心。第一版的程序所关注的主题在本书中 仍然得以保留。但与第一版相比,本书镖是一个更大池塘中的一条更大的鱼 原书第4章中关于实现二进制查找的一节现在被放到了介绍测试、调试和计时的第 5章中。原来的第1章得到了扩展并被拆分为新的第12章(关J原来的问题冫和第l3 章(关于集合表示)原来的第13章介绍了一种运行在64KB地址空间上的拼写检查; 现在它已经被去掉了,但它的恩想仍然存在于第138节中。新的第15章是关于字符忠 问题的。许多新节被添加到原来的章中,另外一些节则被删掉了。由于引入了新的间题、 新的解决方案以及四个新的附录,本书比上一版本在长度上增加了25%。 许多旧的案例研究在这一版本中没有发生变化,但也有一坐老故事根据现在的情况 被重新改写。 第一版致谢 我要感谢许多人对我的支持。在《 Communications of the ACM》上设立专题的想法 最初来自 Peter Denning和 Stuart Lynna Peter i勤奇地为ACM工作,他使这个专题成为可 能并录用我从事此项工作。ACM总部的成员,尤其是 Roz Steier. Nancy adriance给了 我许多支持,他们让这些专题文章能以原有的形式发表。我尤其要感谢ACM的是:它 鼓励专题以原有的形式发表;同时感谢许多CACM的读者,是你们对专题的热心评论使 这个扩充版本变得必要并有可能完成 Al Aho, Peter Denning, Mike Garey, David Johnson, Brian Kernighan, John Linderman Doug melroy和 Don stant在百忙中描出时间仔细阅读了本书的每一个章节。我还要感 谢以下诸位提出的宝贵意见: Rery baird、 Bill Cleveland、 Dayid gries, Eric gr, Lynn Jelinski、 Steve Johnson、 Bob Melville, bob martin、 Amo penzias、 Marilyn Hoper、 Chris van Wyk、 c Vyssotsky和 Pamela zave。另外, Al Aho、 Andrew hume、 brian Kernighan、 Ravi sethi、 Laura stinger和 Bjarne Stroustrup在成书过程中提供了巨大的帮 助:西点军校EF485基地的学员测试了本书手稿的倒数第二个草稿。感谢所有人。 第二版致谢 Dan Bentley、 Russ Cox、 Brian Kernighan、 Mark Kernighan、 John linderman、 Steve McConnell, Doug Melroy, Rob Pike、 Howard TrickeY和 Chris van Wyk仔细阅读了本书 第二版。我还要感谢以下诸位提出的宝贵意见: Paul abrahams、 Glenda Childress E grosse Ann martin、 Peter Mcllroy, Peter Memishian、 Sundar narasimhan、 Lisa ricker、 Dennis ritchie、 Ravi sethi、 Carol Smith、 Tun Szymanski和 Kentaro Toyama。感谢 Peter Gordon以及他在 Addison- Wesley的同事,他们为这版的出版提供了许多帮助。 基础的重要性(程序员之路) 学习编程有几年了,感觉走了不少弯路,而不少的学弟学妹又在重蹈我当初的覆辙,不免有些痛心。最近在网 上也看了许多前辈们的经验建议,再结合自己的学习经历在这里谈谈基础的重要性,希望帮助大家少走些弯 路。 什么是基础呢?就是要把我们大学所茡的离散数学算法与数据结构,操作系统,计算杋体系结构,编译原理 等课程学好对计算机的体系C門∪本身操作系统內核系统平台,面冋对象编程程序的性能等要有深层次的掌握。 初学者可能体会不到这些基础的重要性,学习 jsp, donet, mfc, vb的朋友甚至会对这些嗤之以鼻但是一开始没学 好基础就去学jsp或 donet会产生很坏的影响而且陷入其中不能自拔。 我上大二的时候还对编程没什么概念就上了门C++也不知道能干什么,老师说MFC也不知道是什么东西, 看别的同学在学 asp. net就跟着学了然后就了解到netj2 ee, php是什么了,就觉得软件开发就是用这些了,而上 的那些专业课又与我们学的 Sqlserver啊C啊ajax啊毫无关系就感慨啊,还不如回家自学去就为一个文凭吗? 还不如去培训浪费这么多钱于是天夭基本上没去上什么课天天就在做网站几个学期就做了三个网站。感觉做 这些网站就是学到些技巧,没什么进步这些技巧就好比别人的名字告诉你你就知道了网上也都可以搜到。那时 候就觉得把net学好就行了,搞jlee的比较难,搞ai编程就别想了,操作系统更是望尘莫及了。后来随着学习 的深入和看了网上许多前辈们的建议才对这些基础的重要性有所体会。 虽然net或java的开发并不直接用到汇编操作系统这些但是不掌握这些基础是有很大问题的,因为你只知 其然不知其所有然,在mf和net里面控件一拖什么都做好了,很方便,但是出了问题可能就解决不了,有些在 网上搜都搜不到。这就是基础没打好不知道它的原理就不知道出错的原因。在学.net的时候常会讨论那些控件 该不该用别人说尽量别用也不知道为什么?不让用是因为你在高层开发你不知道它的原理出错了你可能解决不 了,但其实是应该用的,不然人家开发它干嘛,但要在了解它的原理后去用就会很方便。 要编写岀优秀的代码同样要扎实的基础,如果数据结构和算法茡的不好,怎么对程序的性能进行优化怎样 从类库中选择合适的数据结构。如果不了解操作系统,怎样能了解这些开发工具的原理,它们都是基于操作系统 的。不了解汇编,编译原理,怎么知道程序运行时要多长时间要多少內存,就不能编出高效的代码。 如果没有学好基础一开始就去学.net,java这些越往后就会觉得越吃力,它们涉及的技术太多了,而且不但 在更新,对于三层啊,mvc,orm这些架构,你只会用也不明白为什么用,就感觉心里虚,感觉没学好。而你把 面向对象,软件工程,设计模式这些基础学好了再去看这些就可以一不变应万变。 大家不要被新名词、新技术所迷惑NET、ⅩML等等技术固然诱人,可是如果自己的基础不扎实,就像是在 云里雾里行走一样,只能看到眼前,不能看到更远的地方。这些新鲜的技术掩盖了许多底层的原理,要想真正 的学习技术还是走下云端,扎扎实实的把基础知识学好,有了这些基础,要掌握那些新技术也就很容易了。 开始编程应该先学CC++,系统ai编程,因为它们更接近底层,学习他们更能搞清楚原理。学好了c/C+ 编程和基础,再去学习mfc,net这些就会比较轻松,而且很踏实。假设学习B编程需要4个月,学习基础课程和 VC的程序设计需要1年。那么如果你先学VB,再来学习后者,时间不会减少,还是1年,而反过来,如果先学习 后者,再来学VB,也许你只需要1个星期就能学得非常熟练。 编程就好比练功,如果学习.net, mfc yb等具体的语言和工具是外功(招式),对基础的学习就是内功只注重 招式而内功不扎实是不可能成为高手的。很多人会认为《射雕英雄传》中马玉道长什么都没有教郭靖,马道长 教的表面看来是马步冲权实则都是内功心法,郭靖拜师洪七之后开始练习降龙十八掌凭借的就是这深厚的内 功,吞食蝮蛇宝血又加上练习了周博通传授的九阴真经和外加功夫双手互博技之后,终于练就行走江湖的武 功,由此可见马玉道长传授给了郭靖的是最基础的,也是最重要的观念编程也好比盖高楼,根基没打好早晩有 天会挎掉的,而且盖得越高,损失也越惨重。这些底层知识和课本不是没有用也不是高深的不能学,而是我 们必须掌握的基础 这些是个人的愚见,说的不是很清楚,大家可以看看这些前辈们的经验,相信看完后大家一定会有所体会 的。为了方便大家阅读,我把这些前辈们的建议的文章整理成了pdf大家在下面下载吧!希望对大家有帮助。pdf ttti:htTp://bbs.theithome.com/read-htm-tid-123.htm 说了这么多无非是想告诫大家要打好扎实的基础,不要只顾追求时髦的技术,打好基础再去学那些技术或是 参加些培训,对自身的发展会更好的。 基础这么重要怎样学好它呢?我觉得学好它们应该对照这些基础课程所涉及的方面,多看一些经典书籍,像算 法导论编程珠玑代码大全(具体介绍在本论坛每本书的版块里)等,这些经典书籍不仅能帮助我们打好基础,而且 对我们的程序人生也能产生莫大的影响,相信认真研究看完这些书籍后,我们的程序之路会十分顺畅。然而这 些书籍并不好读有些甚至相当难读,国内的大学用这些书当教材的也不多这些书又偏向理论自己读起来难免会 有些枯燥无味。于是就想到建一个论坛,大家共同讨论学习这些书籍,就会学的更踏实更牢固更有趣,这样就能 为以后的学习打下扎实的基础。 本论坛特色 bbs. theithome com 1为计算机初学者或基础不太扎实的朋友指明方向,要注重内功 2为学习者推荐经典书籍,指明应看哪些书籍,怎样练內功 3为学习者提供一个交流的地方,更容易学好,不会那么枯燥 4对每本书分章分别讨论,更专,会学的更踏实更牢固 5讨论的都是经典书籍,每一本都会让我们受益匪浅对每本书分别讨论是很有意义的。

...展开详情
试读 127P 《编程珠玑》
立即下载 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
上传资源赚钱or赚积分
最新推荐
《编程珠玑》 0积分/C币 立即下载
1/127
《编程珠玑》第1页
《编程珠玑》第2页
《编程珠玑》第3页
《编程珠玑》第4页
《编程珠玑》第5页
《编程珠玑》第6页
《编程珠玑》第7页
《编程珠玑》第8页
《编程珠玑》第9页
《编程珠玑》第10页
《编程珠玑》第11页
《编程珠玑》第12页
《编程珠玑》第13页
《编程珠玑》第14页
《编程珠玑》第15页
《编程珠玑》第16页
《编程珠玑》第17页
《编程珠玑》第18页
《编程珠玑》第19页
《编程珠玑》第20页

试读结束, 可继续阅读

0积分/C币 立即下载