资源大小: 319.84MB
发布时间: 2013-08-12
文件格式: rar
下载次数: 2
分享到:

下载地址:

下载地址1
(本站为飞网专业下载站,域名:down.cfei.net)

资源简介:

中文名: 编程匠艺:编写卓越的代码原名: Code Craft: The Practice of Writing Excellent Code作者: (美)Pete Goodliffe译者: 韩江 陈玉资源格式: PDF版本: 中文高清扫描版出版社: 电子工业出版社书号: 9787121069802发行时间: 2008年9月地区: 大陆语言: 简体中文简介: 内容简介如果你可以编写出合格的代码,但是想更进一步、创作出组织良好而且易于理解的代码,并希望成为一名真正的编程专家或提高现有的职业技能,那么《编程匠艺——编写卓越的代码》都会为你给出答案。本书的内容遍及编程的各个要素,如代码风格、变量命名、错误处理和安全性等。此外,本书还对一些更广泛的编程问题进行了探讨,如有效的团队合作、开发过程和文档编写,等等。本书各章的末尾均提供一些思考问题,这些问题回顾了各章中的一些关键概念,可以促使你像专家一样思考,从而使本书成为那些渴望作为团队的一分子,职业并高效地编程的新手们的一本绝佳的参考书。作译者Pete Goodliffehttp://www.china-pub.com/main/sale/renwu/images/4344.gif Pete Goodliffe是一位软件开发专家,他在软件“食物链”上从未驻足不前。他在各种各样的项目中使用过许多种语言。他还在教授和指导程序员方面有着丰富的经验,并且常年为ACCU的C Vu杂志(www.accu.org)撰写栏目“编程的职业化”。 Pete痴迷于编写出色的、没有错误的代码,这使得他有更多的时间与自己的孩子共度美好时光。..... 译者序作为从事软件开发的程序员,你肯定遇到过这样的情况:自认为完美的代码,在项目快要结束的时候,却总是会发现还有好多内容需要修改。更有甚者,由于人员的变动,那些他们遗留下来的“老代码”,作为时间留给程序员与项目组的最大遗产,却可能会成为项目组的灾难。. 除了受制于人类自身的缺陷之外,还有由于组织而带来的问题,如客户需求不断变更、必须在有限的时间和预算之内完成项目,来自内部所谓“项目管理”的种种压力,等等。天哪,这些问题我们绝大部分人都赶上了。 列宁曾在监狱中写下了《怎么办?》,指导了俄国的十月革命。而在软件业,从一代宗师Frederick P. Brooks的《人月神话》开始,就在找“怎么办”这个“银弹”了。然而,“狼来了”在多次被喊出来后,已经很少有人相信了。我们必须承认,这些都是根本层面的问题,目前还不能得到解决。但是,本书的作者Pete Goodliffe认为,至少我们可以采取一些方式,减少一些开发上的痛苦。因为,除了开发,人生还有许多更为美好的事物在等着我们。我们这次也可以高喊“银弹来了”。没有最好,只有更好,谁知道这次不是真的呢? 著名国画大师齐白石在年轻的时候,曾经做过木匠。据说有一次他和师傅去给地主干活,在路上迎面走来另外一对木匠师徒。齐先生的师傅说,赶紧给别人让路。师徒俩站在路边,老师恭敬地目送那两人渐渐走远。齐白石不解,问师傅:同是木匠,你我师徒为什么要给他们让路。老师傅回头说:为什么?别人是做细活的,我们是做粗活的。 Pete Goodliffe在业界的年头快要超过好多人的年龄了,此君曾经涉猎多个领域、不同的编程语言以及多种架构,并且曾经在采用不相同流程的公司里从事开发。在本书中,他把多年压箱底的一些观念想法和技巧告诉了大家,这些都是时间与智慧的结合,相信无论是开发人员、项目经理甚至测试人员,都可以从中发现阿里巴巴开启金库的钥匙。 那么本书有什么特色呢?对于想了解内容的普通读者来说,本书至少有以下特点:.. 1.贴近实际 《编程匠艺——编写卓越的代码》是本书的书名,但也是作者的用心所在。人生有三个境界,最后一个就是“看山是山,看水是水”。这是废话吗?当然不是,作者对此给出了最好的解答。作为程序员,我们最喜欢争论不同工具、平台、方法之间的优劣。而作者却通过多年经验,力图告诉我们应该如何提高质量,并成为一名优秀的程序员。这些方法就像点石成金的手指,它们是方法论,而不是针对具体的工具或者平台的说教。我们现在所缺的,恰恰是这些能使自己更进一阶的手段,而不是那些特殊的技术细节。 2.内容丰富翔实 很少有一本书能涵盖如此多的领域,并且还如此扎实。作为一名程序员,我们可能永远无法达到完美。而需要处于一种持续不断地提高的状态,总会有更多的东西需要学习。那么下一步应该做什么呢?这里就有答案。 3.可作为“秘要心法” 本书不仅适合入门者,也适合需要提高的开发人员,以及那些想管理好所谓代码猴子的项目经理们。与《项目经理案头手册》一样,这本书也将成为每人的案头手册或者枕边书,可以作为应急或者提升的手段。如果以后碰到了问题,可以随时参阅相关的章节。 4.心态决定一切 这句话对吗?有了良好心态,不一定行,如果没有,肯定不行。我们常常羡慕于老外以四五十岁的年纪仍然能继续从事编程,为什么我们不行呢?可能不同的读者都会找到属于自己的答案!Pete Goodliffe具有宽阔的视野,扎实的基础,广泛的爱好,带有一种程序员应该具有的高雅和恬淡。这正是我们这个浮躁的时代中积极探索的一代程序员所不具备的。 最后禁不住要抱怨一下,作者Pete Goodliffe以他丰富的阅历和爱好,给译者带来了不小的麻烦,比如出于它对于音乐的爱好,所有章节的标题都来自英国的歌曲名称。为了理解上的直观,我们在翻译的过程中采取的是“信达雅”中的“雅”,以保证国内读者能很快切入主题。本书每章开始和行文的过程中,作者都引用了历史上或者现在社会中一些名人的名言,这给翻译增加了不少的难度,但是由于贴切精辟,这些名言也可称之为点睛之笔。尤为值得高兴的是,此君对我中华文化竟然也有一定的造诣,孔夫子和老子的哲理名言竟然多次出现,而且能够贴切地表达出这些圣人的思想对软件开发有哪些启示,这非常不简单,难为了作者,也着实难为了译者。从外国作者的笔下,让我们着实体会到了自己国家的文化源远流长。这从一个侧面也体现出东海西海,千圣一心。 此书给了我们一个快速成功进阶的好范例。我觉得它更像一个程序员的入门或者修行心法。从此入门,我们可以少走很多弯路。同时,我们也要争取像佛经中“般若波罗密”所讲的那样:大智慧到彼岸,最后连佛法也像渡河的筏子一样,成佛后立即丢弃。我更希望的是,看过此书的读者们,最后能够拍案而起,大声说:我可以了。... 译 者 2007-12-2 于北京目录: 第Ⅰ篇 代码表面第一部分第1章 善于防守——健壮代码的防御性编程技巧1.1 向优秀的代码前进1.2 设想:最坏的选择1.3 什么是防御性编程1.4 又大又坏的世界1.5 防御性编程技巧1.5.1 使用好的编码风格和合理的设计1.5.2 不要仓促地编写代码1.5.3 不要相信任何人1.5.4 编码的目标是清晰,而不是简洁1.5.5 不要让任何人做他们不该做的修补工作1.5.6 编译时打开所有警告开关1.5.7 使用静态分析工具1.5.8 使用安全的数据结构1.5.9 检查所有的返回值1.5.10 审慎地处理内存(和其他宝贵的资源)1.5.11 在声明位置初始化所有变量1.5.12 尽可能推迟一些声明变量1.5.13 使用标准语言工具. 1.5.14 使用好的诊断信息日志工具1.5.15 审慎地进行强制转换1.5.16 细则1.6 约束1.6.1 约束的内容1.6.2 移除约束1.7 总结1.8 另请参见1.9 思考1.9.1 深入思考1.9.2 结合自己第2章 精心布局——源代码的版面和样式2.1 什么是关键2.2 了解你的读者2.3 什么是好的样式2.4 使用括号2.4.1 K&R括号风格2.4.2 悬挂式的括号风格2.4.3 缩进的括号风格2.4.4 其他的括号风格2.5 主宰一切的风格2.6 内部风格(以及在哪里使用它们)2.7 设立标准2.8 正义的战争2.9 总结2.10 另请参见2.11 思考2.11.1 深入思考2.11.2 结合自己第3章 名正言顺——为有意义的事物起有意义的名称3.1 为什么我们应该恰当地命名呢3.2 我们对什么进行命名3.3 名字游戏3.3.1 描述性3.3.2 技术上正确3.3.3 符合语言习惯3.3.4 恰当3.4 具体细节3.4.1 命名变量3.4.2 命名函数3.4.3 命名类型3.4.4 命名名字空间3.4.5 命名宏3.4.6 命名文件3.5 玫瑰不叫玫瑰3.5.1 保持前后一致3.5.2 利用上下文3.5.3 使用对你有利的名称3.6 总结3.7 另请参见3.8 思考3.8.1 深入思考3.8.2 结合自己第4章 不言自明——编写“自文档化”代码的技巧4.1 自文档化的代码4.2 编写自文档化代码的技术4.2.1 使用好的样式编写简单的代码4.2.2 选择有意义的名称4.2.3 分解为原子函数4.2.4 选择描述性的类型4.2.5 命名常量4.2.6 强调重要的代码4.2.7 分组相关信息4.2.8 提供文件头4.2.9 恰当地处理错误4.2.10 编写有意义的注释4.3 实用的自文档化方法4.3.1 文学性编程4.3.2 文档化工具4.4 总结4.5 另请参见4.6 思考4.6.1 深入思考4.6.2 结合自己第5章 随篇注释——如何编写代码注释5.1 什么是代码注释5.2 注释看上去是什么样的5.3 多少注释是恰当的5.4 注释中应该有些什么5.4.1 解释为什么,而不是怎么样5.4.2 不要描述代码5.4.3 不要取代代码5.4.4 确保注释有用5.4.5 避免分心5.5 实践5.6 从审美的角度看注释5.6.1 一致性5.6.2 清晰的块注释5.6.3 缩进的注释5.6.4 行尾注释5.6.5 帮助你阅读代码5.6.6 选择一种维护成本较低的风格5.6.7 分隔板5.6.8 标志5.6.9 文件头注释5.7 使用注释5.7.1 帮助你编写例行程序5.7.2 错误修正通告5.7.3 注释过时5.7.4 维护和空洞无物的注释5.8 总结5.9 另请参见5.10 思考5.10.1 深入思考5.10.2 结合自己第6章 人非圣贤——处理不可避免的情况——代码中的错误情形6.1 从何而来6.2 错误报告机制6.2.1 不报告6.2.2 返回值6.2.3 错误状态变量6.2.4 异常6.2.5 信号6.3 检测错误6.4 处理错误6.4.1 何时处理错误6.4.2 可能的反应6.4.3 代码示例6.5 使地狱浮现6.6 管理错误6.7 总结6.8 另请参见6.9 思考6.9.1 深入思考6.9.2 结合自己第Ⅱ篇 代码的神秘生命第7章 欲善其事,先利其器——使用工具构建软件7.1 什么是软件工具7.2 为什么要在意工具7.3 使工具发挥作用7.3.1 了解它能做些什么7.3.2 学习如何驾驭它7.3.3 了解它适合什么任务7.3.4 检查它是否可用7.3.5 找到了解更多信息的途径7.3.6 查明新版本何时出现7.4 哪个工具7.4.1 源代码编辑工具7.4.2 代码构建工具7.4.3 调试和调查工具7.4.4 语言支持工具7.4.5 其他工具7.5 总结7.6 另请参见7.7 思考7.7.1 深入思考7.7.2 结合自己第8章 测试时代——测试代码的魔术8.1 反思现实8.2 谁、是什么、何时以及为什么8.2.1 我们为什么要测试8.2.2 谁来进行测试8.2.3 测试的内容有些什么8.2.4 何时进行测试8.3 测试并不难……8.4 测试的类型8.5 选择单元测试用例8.6 为测试而设计8.7 看!不要用手!8.8 面对故障该怎么办8.9 你能管理它吗8.9.1 缺陷跟踪系统8.9.2 bug审查8.10 总结8.11 另请参见8.12 思考8.12.1 深入思考8.12.2 结合自己第9章 寻找缺陷——调试:当事情进展得不顺利时该怎么办9.1 生活的真相9.2 bug的种类9.2.1 从远处看9.2.2 从近处看9.2.3 从更近处看9.3 消灭害虫9.3.1 地下之路9.3.2 地上之路9.4 搜寻bug9.4.1 编译时错误9.4.2 运行时错误9.5 如何修正缺陷9.6 预防9.7 除蜂剂、驱虫剂、捕蝇纸9.7.1 调试器9.7.2 内存访问校验器9.7.3 系统调用跟踪9.7.4 内核转储9.7.5 日志9.8 总结9.9 另请参见9.10 思考9.10.1 深入思考9.10.2 结合自己第10章 代码构建——将源代码转换为可执行代码的过程10.1 语言障碍10.1.1 解释型语言10.1.2 编译型语言10.1.3 字节编译型语言10.2 小题大做10.3 构建软件版本10.4 怎样才算是一个优秀的构建系统10.4.1 简洁10.4.2 一致10.4.3 可重复和可靠10.4.4 原子性10.4.5 能够应付错误10.5 技术细节10.5.1 目标的选择10.5.2 内务处理10.5.3 依赖关系10.5.4 自动构建10.5.5 构建配置10.5.6 递归地使用make10.6 请发布我吧10.7 构建大师是全能的吗10.8 总结10.9 另请参见10.10 思考10.10.1 深入思考10.10.2 结合自己第11章 追求速度——优化程序和编写高效的代码11.1 优化是什么11.2 是什么使代码不尽如人意11.3 为什么不进行优化呢备选方案11.4 为什么要进行优化11.5 优化的具体细节11.5.1 证明你需要进行优化11.5.2 找出运行得最慢的代码11.5.3 测试代码11.5.4 优化代码11.5.5 优化之后11.6 优化的技术11.6.1 设计更改11.6.2 代码更改11.7 编写高效的代码11.8 总结11.9 另请参见11.10 思考11.10.1 深入思考11.10.2 结合自己第12章 不安全感综合症——编写安全的程序12.1 危险12.2 敌人12.3 借口,都是借口12.4 感到很脆弱12.4.1 不安全的设计和体系结构12.4.2 缓冲溢出12.4.3 嵌入的查询字符串12.4.4 竞争状况12.4.5 整数溢出12.5 防范措施12.5.1 系统安装技术12.5.2 软件设计技术12.5.3 代码实现技术12.5.4 规程技术12.6 总结12.7 另请参见12.8 思考12.8.1 深入思考12.8.2 结合自己第Ⅲ篇 代码的形成过程第13章 崇尚设计——如何创作出优秀的软件设计13.1 边设计边编程13.2 我们要设计什么13.3 为什么这么忙乱13.4 良好的软件设计13.4.1 简洁13.4.2 优雅13.4.3 模块化13.4.4 良好的接口13.4.5 可扩展性13.4.6 避免重复13.4.7 可移植性13.4.8 符合语言习惯13.4.9 良好地文档化13.5 如何设计代码13.5.1 设计方法和过程13.5.2 设计工具13.6 总结13.7 另请参见13.8 思考13.8.1 深入思考13.8.2 结合自己第14章 软件体系结构——奠定软件设计的基础14.1 什么是软件体系结构14.1.1 软件蓝图14.1.2 视图14.1.3 在何时和何处进行体系结构设计14.1.4 用体系结构来做什么14.1.5 关于组件和连接14.2 什么是良好的体系结构14.3 体系结构风格14.3.1 没有体系结构14.3.2 分层的体系结构14.3.3 管道和过滤器体系结构14.3.4 客户端/服务器体系结构14.3.5 基于组件的体系结构14.3.6 框架14.4 总结14.5 另请参见14.6 思考14.6.1 深入思考14.6.2 结合自己第15章 改良与革命——代码是如何成长的15.1 软件腐烂15.2 警告信号15.3 代码是如何成长的15.4 相信不可能之事15.5 对此我们可以做些什么15.5.1 编写新代码15.5.2 维护现有代码15.6 总结15.7 另请参见15.8 思考15.8.1 深入思考15.8.2 结合自己第Ⅳ篇 “一群”程序员第一部分第16章 代码猴子——培养正确的编程态度和方法16.1 各种各样的猴子16.1.1 卖力工作的程序员16.1.2 代码猴子16.1.3 权威16.1.4 半权威16.1.5 傲慢的天才16.1.6 牛仔16.1.7 规划者16.1.8 老前辈16.1.9 狂热者16.1.10 单线条程序员16.1.11 拖沓者16.1.12 勉强的团队领导16.1.13 你16.2 理想的程序员16.3 那么该怎么办16.4 最愚蠢的人16.5 总结16.6 另请参见16.7 行为表格16.8 思考16.8.1 深入思考16.8.2 结合自己第17章 团结就是力量——团队合作与个人程序员17.1 我们的团队——概览17.2 团队组织17.2.1 管理方法17.2.2 责任划分17.2.3 组织和代码结构17.3 团队合作工具17.4 团队疾病17.4.1 巴别塔17.4.2 独裁制17.4.3 民主制17.4.4 卫星站17.4.5 大峡谷17.4.6 流沙17.4.7 旅鼠17.5 良好团队合作的个人技巧和特点17.5.1 沟通17.5.2 谦虚17.5.3 处理冲突17.5.4 学习和适应能力17.5.5 了解你的不足之处17.6 团队合作原则17.6.1 集体代码所有制17.6.2 尊重别人的代码17.6.3 编码准则17.6.4 定义成功17.6.5 定义责任17.6.6 避免倦怠17.7 团队的生命周期17.7.1 团队的创建17.7.2 团队的成长17.7.3 团队合作17.7.4 团队结束17.8 总结17.9 另请参见17.10 行为表格17.11 思考17.11.1 深入思考17.11.2 结合自己第18章 安全措施——源代码控制与自我控制18.1 我们的责任18.2 源代码控制18.2.1 修订控制18.2.2 访问控制18.2.3 处理代码库18.2.4 在代码树上创建分支18.2.5 源代码控制简史18.3 配置管理18.4 备份18.5 发布源代码18.6 应该将源代码放在哪里18.7 总结18.8 另请参见18.9 思考18.9.1 深入思考18.9.2 结合自己第Ⅴ篇 开发过程的组成部分第一部分第19章 注意细节——编写软件规范19.1 规范到底是什么19.2 规范的类型19.2.1 需求规范19.2.2 功能规范19.2.3 系统体系结构规范19.2.4 用户界面规范19.2.5 设计规范19.2.6 测试规范19.3 规范应当包含哪些内容19.4 规范编写过程19.5 我们为什么会不编写规范19.6 总结19.7 另请参见19.8 思考19.8.1 深入思考19.8.2 结合自己第20章 代码审查——执行代码审查20.1 什么是代码审查20.2 何时进行审查20.2.1 是否要进行审查20.2.2 审查哪些代码20.3 执行代码审查20.3.1 代码审查会议20.3.2 集成审查20.4 审查你的态度20.4.1 作者的态度20.4.2 审查人员的态度20.5 完美的代码20.6 代码审查之外20.7 总结20.8 另请参见20.9 清单20.10 思考20.10.1 深入思考20.10.2 结合自己第21章 时间估计——软件时间范围估计的魔术21.1 在黑暗中摸索21.2 为什么估计这么困难?21.3 压力之下21.4 实用的估计方法21.5 计划游戏21.6 坚持!21.7 总结21.8 另请参见21.9 思考21.9.1 深入思考21.9.2 结合自己第Ⅵ篇 从高处鸟瞰第22章 程序秘方——代码开发的方法和过程22.1 编程风格22.1.1 结构化编程22.1.2 面向对象的程序设计22.1.3 函数式编程22.1.4 逻辑编程22.2 烹饪方法:做什么与怎样做22.3 开发过程22.3.1 混乱22.3.2 瀑布模型22.2.3 SSADM和PRINCE22.3.4 V模型22.3.5 原型设计22.3.6 迭代和增量开发22.3.7 螺旋模型22.3.8 敏捷的方法22.3.9 其他开发过程22.4 已经够了!22.5 选择一种过程22.6 总结22.7 另请参见22.8 思考22.8.1 深入思考22.8.2 结合自己第23章 编程领域大观——不同的编程分支23.1 应用程序编程23.1.1 塑装软件23.1.2 定制应用程序23.2 游戏编程23.3 系统编程23.4 嵌入式编程23.5 分布式编程23.6 网络应用程序编程23.7 企业编程23.8 数字编程23.9 那又怎样23.10 总结23.11 另请参见23.12 思考23.12.1 深入思考23.12.2 结合自己第24章 下一步呢——结果好就一切都好但下一步该做什么呢?答案和讨论参考书目索引


飞网下载站,免费下载共享资料,内容涉及教育资源、专业资料、IT资源、娱乐生活、经济管理、办公文书、游戏资料等。