词条 | 经典代码大全 |
释义 | 基本信息原书名:CODE COMPLETE, Second Edition 原出版社: Microsoft Press 作者:(美)Steve McConnell 译者:金戈 汤凌 陈硕 张菲 出版社:电子工业出版社 ISBN:7121022982 出版日期:2006 年3月 开本:16开 页码:960 版次:2-3 编辑推荐被china-pub会员评为“2007年我最喜爱的十大技术图书”之一 被《程序员》等机构评选为2006年最受读者喜爱的十大IT图书之一 是著名IT畅销书作者Steve McConnell十一年前的经典著作的全新演绎,该作者是两届Software Development Magzine Jolt Award震撼大奖得主 内容简介代码大全(第二版)是著名it畅销书作者steve mcconnell十一年前的经典著作的全新演绎:第二版不是第一版的简单修订增补,而是完全进行了重写;增加了很多与时俱进的内容。这也是一本完整的软件构建手册,涵盖了软件构建过程中的所有细节。它从软件质量和编程思想等方面论述了软件构建的各个问题,并详细论述了紧跟潮流的新技术、高屋建瓴的观点、通用的概念,还含有丰富而典型的程序示例。本书中所论述的技术不仅填补 了初级与高级编程技术之间的空白,而且也为程序员们提供了一个有关编程技巧的信息来源。本书对经验丰富的程序员、技术带头人、自学的程序员及几乎不懂太多编程技巧的学生们都是大有裨益的。可以说,无论你是什么背景,阅读本书都会让你在更短的时间内、更容易地写出更好的程序。 代码大全是我早在好几年前便已经阅读过的好书。这几年来我不知买过多少书籍,也清理过许多因为书房再也放不下的书籍,但是代码大全这本书始终占据着我书架上重要的位置而不曾移开过,因为好书是经得起时光考验的。 —— borland公司大中华首席技术官(cto) 李维 在众多的编程类书籍中,如果只让我挑一本书来阅读,那我一定选择《代码大全》,因为它是最不可或缺的。 —— 《c++ primer中文版(第三版)》译者 潘爱民 作译者Steve McConnell是Construx公司首席软件工程师,在公司里监督软件工程实施。他是软件工程知识体(SWEBOK) 项目构建知识领域的领导。Steve曾为微软公司、波音公司和西雅图地区的公司工作过。 Steve McConnell是以下著作的作者:1996年的《快速软件开发(Rapid Development)》、1998年的《软件项目长存之道(Software Project Survival Guide)》和2004年的《专业软件开发(Professional Software Development)》。他的书由于杰出,曾两度获得当年的《软件开发(Software Development)》杂志的优秀震撼大奖 目录第1章 欢迎进入软件构建的世界 3 1 1 什么是软件构建? 3 1 2 软件构建为何如此重要? 6 1 3 如何阅读本书 8 关键点 8 第2章 用隐喻来更充分地理解软件开发 9 2 1 隐喻的重要性 9 2 2 如何使用软件隐喻 11 2 3 常见的软件隐喻 13 软件中的书法:写作代码 13 软件的耕作法:培植系统 14 软件的牡蛎养殖观点:系统生长 15 软件构建:建造软件 16 应用软件技术:智慧工具箱 20 组合各个隐喻 20 更多资源 20 关键点 21 第3章 三思而后行:前期准备 23 3 1 前期准备的重要性 24 前期准备适用于现代软件项目吗? 25 准备不周全的诱因 25 关于开始构建之前要做前期准备的绝对有力且简明的论据 27 3 2 辨明你所从事的软件的类型 31 迭代开发法对前期准备的影响 33 在序列式开发法和迭代式开发法之间做出选择 35 3 3 问题定义的先决条件 36 3 4 需求的先决条件 38 为什么要有正式的需求? 38 稳定需求的神话 39 在构建期间处理需求变更 40 3 5 架构的先决条件 43 架构的典型组成部分 45 3 6 花费在前期准备上的时间长度 55 更多资源 56 关键点 59 第4章 关键的“构建”决策 61 4 1 选择编程语言 61 语言描述 63 4 2 编程约定 66 4 3 你在技术浪潮中的位置 66 “深入一种语言去编程”的例子 68 4 4 选择主要的构建实践方法 69 关键点 70 第5章 软件构建中的设计 73 5 1 设计中的挑战 74 设计是一个险恶的问题 74 设计是个了无章法的过程(即使它能得出清爽的成果) 75 设计就是确定取舍和调整顺序的过程 76 设计受到诸多限制 76 设计是不确定的 76 设计是一个启发式过程 76 设计是自然而然形成的 76 5 2 关键的设计概念 77 软件的首要技术任务:管理复杂度 77 理想的设计特征 80 设计的层次 82 5 3 设计构造块:启发式方法 87 寻找现实世界中的对象 87 形成一致的抽象 89 封装实现细节 90 当继承能简化设计时就继承 91 隐藏秘密(信息隐藏) 92 找出容易改变的区域 97 保持松散耦合 100 查阅常用的设计模式 103 其他的启发式方法 105 关于设计启发的总结***** 108 使用启发式方法的原则 109 5 4 设计实践 110 迭代 110 分而治之 111 自上而下和自下而上的设计方法 111 建立试验性原型 114 合作设计 115 要做多少设计才够? 115 记录你的设计成果 117 5 5 对流行的设计方法的评论 118 更多资源 119 软件设计,一般性问题 119 软件设计理论 120 设计模式 120 广义的设计 121 标准 122 关键点 122 第6章 可以工作的类 125 6 1 类的基础:抽象数据类型 126 需要用到adt的例子 126 使用adt的益处 127 更多的adt示例 129 在非面向对象环境中用adt处理多份数据实例 131 adt和类 133 6 2 良好的类接口 133 好的抽象 133 良好的封装 139 6 3 有关设计和实现的问题 143 包含(“有一个……”的关系) 143 继承(“是一个……”关系) 144 成员函数和数据成员 150 构造函数 151 6 4 创建类的原因 152 应该避免的类 155 总结:创建类的理由 155 与具体编程语言相关的问题 156 6 6 超越类:包 156 更多资源 159 关键点 160 第7章 高质量的子程序 161 7 1 创建子程序的正当理由 164 似乎过于简单而没必要写成子程序的操作 166 总结:创建子程序的理由 167 7 2 在子程序层上设计 168 7 3 好的子程序名字 171 7 4 子程序可以写多长 173 7 5 如何使用子程序参数 174 7 6 使用函数时要特别考虑的问题 181 什么时候使用函数,什么时候使用过程 181 设置函数的返回值 182 7 7 宏子程序和内联子程序 182 宏子程序在使用上的限制 184 内联子程序 184 关键点 186 第8章 防范式编程 187 8 1 保护程序免遭无效输入数据的破坏 188 8 2 断言 189 建立自己的断言机制 191 使用断言的指导建议 191 8 3 错误处理技术 194 健壮性与正确性 197 高层次设计对错误处理方式的影响 197 8 4 异常 198 8 5 隔离程序以免遭由错误造成的损害 203 隔离区与断言的关系 205 8 6 辅助调试代码 205 不要自动地把产品版本的限制强加于开发版本之上 205 尽早引入辅助调试的手段 206 采用冒进式编程 206 计划移除调试辅助代码 206 8 7 确定在产品代码中该保留多少防范式代码 209 8 8 防范式编程时保持防范 210 其他资源 212 关键点 213 第9章 伪代码编程过程 215 9 1 创建类和子程序的步骤概述 216 创建一个类的步骤 216 创建子程序的步骤 217 9 2 伪代码 218 9 3 通过伪代码编程过程创建子程序 220 设计子程序 225 编写子程序 225 检查代码 230 收尾工作 232 根据需要重复上述步骤 232 9 4 伪代码编程过程之外的其他方案 232 关键点 234 第10章 使用变量的一般事项 237 10 1 数据认知 238 数据认知测试 238 有关数据类型的其他资源 239 10 2 轻松掌握变量定义 239 隐式声明 239 10 3 变量初始化原则 240 10 4 作用域 244 使变量引用局部化 245 尽可能缩短变量的“存活”时间 246 减小作用域的一般原则 249 有关缩小变量作用域的说明 250 10 5 持续性 251 10 6 绑定时间 252 10 7 数据类型和控制结构之间的关系 254 10 8 为变量指定单一用途 255 关键点 258 第11章 变量名的力量 259 11 1 选择好变量名的注意事项 259 最重要的命名注意事项 260 以问题为导向 261 最适当的名字长度 262 变量名字的效果范围 262 变量名字中的计算值限定词 263 变量名字中的常用反义词 264 11 2 为特定类型的数据命名 264 为循环索引命名 265 为状态变量命名 266 为临时变量命名 267 为布尔变量命名 268 为枚举类型命名 269 为常量命名 270 11 3 命名规则的力量 270 为什么要有规则? 270 何时采用命名规则 271 正式程度 271 11 4 非正式命名规则 272 语言无关规则的指导原则 272 语言相关规则的指导原则 275 混合语言编程的注意事项 276 命名规则示例 276 11 5 标准前缀 279 用户自定义类型缩写 279 语义前缀 280 标准前缀的优点 281 11 6 创建具备可读性的短名称 282 一般的缩写指导原则 282 语音缩写 282 有关缩写的评论 282 11 7 应该避免的名称 285 关键点 289 第12章 基本数据类型 291 12 1 使用数的普遍规则 292 12 2 整数 293 12 3 浮点数 295 12 4 字符和字符串 297 c中的字符串 299 12 5 布尔变量 301 12 6 枚举类型 303 如果你的语言里没有枚举类型 307 12 7 命名常量 307 12 8 数组 310 12 9 创建你自己的类型(类型别名) 311 为什么创建自己的类型的示例是用pascal和ada写的? 314 创建自定义数据类型的指导原则 315 关键点 318 第13章 不常见的数据类型 319 13 1 结构 319 13 2 指针 323 用来理解指针的例子 323 使用指针的一般技巧 325 c++指针 332 c指针 334 13 3 全局数据 335 与全局数据有关的常见问题 335 使用全局数据的理由 338 只有万不得已时才使用全局数据 339 用访问子程序来取代全局数据 339 如何降低使用全局数据的风险 342 其他资源 343 关键点 344 第14章 组织直线型代码 347 14 1 必须有明确顺序的语句 347 14 2 顺序无关的语句 351 使代码易于自上而下的阅读 351 把相关的语句组织在一起 352 关键点 353 第15章 使用条件语句 355 15 1 if语句 355 简单if-then语句 355 if-then-else语句串 358 15 2 case语句 361 为case选择最有效的排序 361 使用case语句的提示 361 关键点 366 第16章 控制循环 367 16 1 选择循环的种类 367 什么时候使用while循环 368 什么时候用带退出的循环 369 何时使用for循环 372 何时使用foreach循环 372 16 2 循环控制 373 进入循环 373 处理好循环体 375 退出循环 377 检查端点 381 使用循环变量 382 循环应该有多长? 385 16 3 轻松创建循环——由内而外 385 16 4 循环和数组的关系 387 关键点 389 第17章 不常见的控制结构 391 17 1 子程序中的多个返回 392 17 2 递归 393 递归的例子 394 使用递归的技巧 396 17 3 goto 398 反对goto的论点 398 支持goto的观点 399 关于goto的虚假辩论 400 错误处理和goto 401 goto和在else子句中的共享代码 406 goto使用原则总结 407 17 4 对不常见控制结构的看法 408 其他资源 408 关键点 410 第18章 表驱动方法 411 18 1 表驱动方法使用总则 411 使用表驱动方法的两个问题 412 18 2 直接访问表 413 示例:一个月中的天数(days-in-month) 413 示例:保险费率 415 例子:灵活的消息格式(flexible-message-format) 416 构造查询键值 423 18 3 索引表访问(indexed access tables) 425 18 4 阶梯访问表 426 18 5 表查询的其他示例 429 关键点 430 第19章 一般控制问题 431 19 1 布尔表达式 432 用true和false做布尔判断 432 简化复杂的表达式 434 编写肯定形式的布尔表达式 436 用括号使布尔表达式更清晰 438 理解布尔表达式是如何求值的 439 writing numeric expressions in number-line order 441 按照数轴的顺序编写数值表达式 441 guidelines for comparisons to 0 442 与0比较的指导原则 442 common problems with boolean expressions 443 布尔表达式的常见问题 443 19 2 compound statements (blocks) 444 19 2 复合语句(块) 444 19 3 null statements 445 19 3 空语句 445 19 4 taming dangerously deep nesting 446 19 4 驯服危险的深层嵌套 446 summary of techniques for reducing deep nesting 454 对减少嵌套层次的技术的总结 454 19 5 a programming foundation: structured programming 455 19 5 编程基础:结构化编程 455 the three components of structured programming 455 结构化编程的三个组成部分 455 19 6 control structures and complexity 457 19 6 控制结构与复杂度 457 how important is complexity? 458 复杂度的重要性 458 general guidelines for reducing complexity 458 降低复杂度的一般原则 458 other kinds of complexity 460 其它类型的复杂度 460 checklist: control-structure issues 460 检查表:控制结构相关事宜 460 key points 461 关键点 461 译者序这本书讲什么 《经典代码大全》这本书的原名叫《Classic Code Complete》,那么Classic Code Complete 在这里是何含义呢?首先,它不代表现代集成开发环境(IDE)中的代码自动补全功能,本书也不打算向您讲解Eclipse 或Visual Studio 2005 中的代码自动补全功能是如何实现的?。其次,Classic Code Complete 也不是真正的软件源代码“大全”的意思??,这本书既没有列出连接各种数据库的代码、也没有列出网页中常用的各种JavaScript 代码。书中的代码示例恐怕也不能直接copy&paste 代码到您自己的项目中。 那么Classic Code Complete 到底是什么意思?中译本为什么又要取名为“代码大全”呢?虽然从网上讨论的情况看,各位网友对书名含义的理解有出入,但是译者有充分的理由相信,Classic Code Complete 是“编码完成”的意思,是一个软件项目开发过程中的重要里程碑(milestone)。 软件项目进行到这里,表明已经完成了所有的编码工作,即将开始系统测试。 这本书讲的正是为了到达“编码完成”这一重要里程碑所必需的软件构建技术,确切地说,就是如何编写高质量的代码。作者认为,应该首先为人编写代码,其次才是为机器(第34 3 节);代码主要是供人阅读的。遍布全书的提高代码质量的实实在在的技术和诀窍,是本书最有价值的部分。事实上,我们认为第6、7、10 至19 章这300 多页的内容是本书的精华内容,在其他书里恐怕很难找到如此详尽的对变量、语句、子程序等编程基本要素的讨论。 十多年前,本书第1 版以《代码大全》为名翻译出版,在过去的10 余年中,这本书影响了整整一代程序员,“代码大全”四个字已成为一个响当当的名字。鉴于此,本书第2版决定保留这个无伤大雅的“错误”,沿用“代码大全”作为书名,也借此向原书第1 版各位译者、修订者们的辛勤劳动表示我们的敬意。无论如何,对Classic Code Complete 的理解不会影响对整本书的理解。 本书除了讲如何构建高质量的软件,还讲如何成为一名优秀的程序员(第33 章“个人性格”、第4 3 节“你在技术浪潮中的位置”、第34 4 节“深入一门语言去编程”)。 前言普通的软件工程实践与最优秀的软件实践差距巨大——多半比其他工程学科中的这种差距都要大。因此,传播优秀实践经验的工具是十分重要的。 —— Fred Brooks 我写这本书的首要目的,就是希望缩小本行业中一般商业实践与大师级人物及专家们之间的知识差距。许多强大的编程技术在被编程领域的大众接触之前,都已在学术论文和期刊里尘封了多年。 虽然近年来前卫的软件开发实践迅速发展,但普通的实践手段并没有太大变化。 很多程序的开发仍然是漏洞百出、迟于交付并且超出预算,还有很多根本就无法满足用户的需求。软件业界以及学术界的研究人员已经发现了不少行之有效的实践经验,足以解决自20 世纪70 年代以来编程领域中日益蔓延的大多数问题。可是这些实践经验很少在高度专业化的技术期刊之外对外发表,所以时至今日大多数编程的机构和组织还没能用上这些技术。有研究表明,一项研发成果从其诞生之日起,到进入商业实践阶段,通常要经历5 到15 年甚至更长的时间(Raghavan and Chand 1989;Rogers 1995;Parnas 1999)。这本手册就是想缩短这一漫长的过程,让那些关键性的研发成果现在就能为更多编程人员所用。 Who Should Read This Book 谁应当阅读本书 本书中所汇集的研究成果和编程经验,将帮助你创建更高质量的软件,使你能更快速地进行开发,遇到的问题更少。本书将帮你弄明白过去为什么会遇到那些问题,并告诉你如何在将来避免它们。这里所描述的编程实践将帮助你掌控更大型的项目,还能在项目的需求发生变动时帮助你成功地维护并修改已经开发出来的软件。 Experienced Programmers 经验丰富的程序员 对于经验丰富的程序员而言,本书正是他们想要的一本翔实、易用的软件开发指南。 本书关注的是“构建(construction)”,即整个软件生命周期中最为人熟知的部分;本书把强大的软件开发技术写得让自学的程序员和参加过正规训练的程序员都能读懂。 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。