请输入您要查询的百科知识:

 

词条 经典代码大全
释义

基本信息

原书名: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条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/2/27 18:02:53