词条 | CodeCraft编程匠艺:编写卓越的代码 |
释义 | CodeCraft编程匠艺:编写卓越的代码的内容遍及编程的各个要素,如代码风格、变量命名、错误处理和安全性等。此外,本书还对一些更广泛的编程问题进行了探讨,如有效的团队合作、开发过程和文档编写,等等。本书各章的末尾均提供一些思考问题,这些问题回顾了各章中的一些关键概念,可以促使你像专家一样思考,从而使本书成为那些渴望作为团队的一分子,职业并高效地编程的新手们的一本绝佳的参考书。 第2章精心布局(第3章名正言顺 第4章不言自明 第5章随篇注释 第6章人非圣贤) 目录 代码的神秘生命(第7章欲善其事,先利其器 第8章测试时代 第9章寻找缺陷 第10章代码构建 第11章追求速度 第12章不安全感综合症) 目录 代码的形成过程(第13章崇尚设计 第14章软件体系结构 第15章改良与革命) 目录 一群程序员(第16章代码猴子 第17章团结就是力量 第18章安全措施) 版权信息书 名: CodeCraft编程匠艺:编写卓越的代码 作 者:(美国)(Goodliffe.P.)古德利弗 出版社: 电子工业出版社 出版时间: 2008 ISBN: 9787121069802 开本: 16 定价: 79.00 元 编辑推荐《编程匠艺》中随处可见与编程语言无关、但是与所有开发人员都相关的建议,其内容遍及编程的各个要素,如代码风格、变量命名、错误处理和安全性等。不仅如此,它还触及了一些更广泛的现实世界编程问题,如有效的团队合作、开发过程和文档编写,等等。《CodeCraft编程匠艺--编写卓越的代码》各章末尾均有一个问题和答案部分,这些部分回顾了各章中的一些关键概念,促使你像专家一样思考,从而使这《CodeCraft编程匠艺--编写卓越的代码》成为那些渴望作为团队的一分子、专业并高效地编程的新手们的一本绝佳的参考书。《CodeCraft编程匠艺--编写卓越的代码》将告诉你如何: 在现实世界困难重重的情况下编写出优秀的代码; 避免在工作场所出现灾难和人心涣散的情况; 准确地评估你的能力,并找到提高的途径; 采取有建设性的态度,并遵从最佳的做法。 第1章善于防守1.1向优秀的代码前进4 1.2设想:最坏的选择4 1.3什么是防御性编程6 1.4又大又坏的世界8 1.5防御性编程技巧8 1.5.1使用好的编码风格和合理的设计9 1.5.2不要仓促地编写代码9 1.5.3不要相信任何人10 1.5.4编码的目标是清晰,而不是简洁10 1.5.5不要让任何人做他们不该做的修补工作11 1.5.6编译时打开所有警告开关11 1.5.7使用静态分析工具12 1.5.8使用安全的数据结构12 1.5.9检查所有的返回值13 1.5.10审慎地处理内存(和其他宝贵的资源)13 1.5.11在声明位置初始化所有变量14 1.5.12尽可能推迟一些声明变量14 1.5.13使用标准语言工具14 1.5.14使用好的诊断信息日志工具15 1.5.15审慎地进行强制转换15 1.5.16细则15 1.6约束16 1.6.1约束的内容17 1.6.2移除约束18 1.7总结20 1.8另请参见20 1.9思考21 1.9.1深入思考21 1.9.2结合自己22 第2章精心布局2.1什么是关键24 2.2了解你的读者25 2.3什么是好的样式26 2.4使用括号26 2.4.1K&R括号风格27 2.4.2悬挂式的括号风格27 2.4.3缩进的括号风格29 2.4.4其他的括号风格29 2.5主宰一切的风格30 2.6内部风格(以及在哪里使用它们)31 2.7设立标准33 2.8正义的战争35 2.9总结35 2.10另请参见37 2.11思考37 2.11.1深入思考37 2.11.2结合自己38 第3章名正言顺3.1为什么我们应该恰当地命名呢41 3.2我们对什么进行命名41 3.3名字游戏42 3.3.1描述性42 3.3.2技术上正确42 3.3.3符合语言习惯43 3.3.4恰当43 3.4具体细节44 3.4.1命名变量44 3.4.2命名函数45 3.4.3命名类型46 3.4.4命名名字空间47 3.4.5命名宏48 3.4.6命名文件48 3.5玫瑰不叫玫瑰49 3.5.1保持前后一致50 3.5.2利用上下文51 3.5.3使用对你有利的名称51 3.6总结52 3.7另请参见53 3.8思考53 3.8.1深入思考54 3.8.2结合自己55 第4章不言自明4.1自文档化的代码59 4.2编写自文档化代码的技术61 4.2.1使用好的样式编写简单的代码61 4.2.2选择有意义的名称62 4.2.3分解为原子函数62 4.2.4选择描述性的类型63 4.2.5命名常量63 4.2.6强调重要的代码64 4.2.7分组相关信息64 4.2.8提供文件头64 4.2.9恰当地处理错误65 4.2.10编写有意义的注释65 4.3实用的自文档化方法66 4.3.1文学性编程66 4.3.2文档化工具67 4.4总结69 4.5另请参见70 4.6思考71 4.6.1深入思考71 4.6.2结合自己72 第5章随篇注释5.1什么是代码注释74 5.2注释看上去是什么样的75 5.3多少注释是恰当的75 5.4注释中应该有些什么76 5.4.1解释为什么,而不是怎么样76 5.4.2不要描述代码76 5.4.3不要取代代码76 5.4.4确保注释有用77 5.4.5避免分心78 5.5实践79 5.6从审美的角度看注释80 5.6.1一致性80 5.6.2清晰的块注释80 5.6.3缩进的注释81 5.6.4行尾注释81 5.6.5帮助你阅读代码81 5.6.6选择一种维护成本较低的风格82 5.6.7分隔板82 5.6.8标志83 5.6.9文件头注释83 5.7使用注释84 5.7.1帮助你编写例行程序84 5.7.2错误修正通告85 5.7.3注释过时85 5.7.4维护和空洞无物的注释86 5.8总结86 5.9另请参见87 5.10思考87 5.10.1深入思考88 5.10.2结合自己88 第6章人非圣贤6.1从何而来90 6.2错误报告机制91 6.2.1不报告91 6.2.2返回值92 6.2.3错误状态变量93 6.2.4异常93 6.2.5信号95 6.3检测错误95 6.4处理错误96 6.4.1何时处理错误97 6.4.2可能的反应98 6.4.3代码示例100 6.5使地狱浮现104 6.6管理错误105 6.7总结106 6.8另请参见107 6.9思考107 6.9.1深入思考107 6.9.2结合自己108 目录 代码的神秘生命第7章欲善其事,先利其器7.1什么是软件工具112 7.2为什么要在意工具114 7.3使工具发挥作用115 7.3.1了解它能做些什么115 7.3.2学习如何驾驭它116 7.3.3了解它适合什么任务116 7.3.4检查它是否可用116 7.3.5找到了解更多信息的途径117 7.3.6查明新版本何时出现117 7.4哪个工具117 7.4.1源代码编辑工具118 7.4.2代码构建工具120 7.4.3调试和调查工具123 7.4.4语言支持工具124 7.4.5其他工具125 7.5总结126 7.6另请参见127 7.7思考128 7.7.1深入思考128 7.7.2结合自己128 第8章测试时代8.1反思现实131 8.2谁、是什么、何时以及为什么132 8.2.1我们为什么要测试132 8.2.2谁来进行测试133 8.2.3测试的内容有些什么133 8.2.4何时进行测试134 8.3测试并不难……135 8.4测试的类型138 8.5选择单元测试用例142 8.6为测试而设计144 8.7看!不要用手!144 8.8面对故障该怎么办145 8.9你能管理它吗146 8.9.1缺陷跟踪系统147 8.9.2bug审查148 8.10总结149 8.11另请参见150 8.12思考150 8.12.1深入思考150 8.12.2结合自己151 第9章寻找缺陷9.1生活的真相154 9.2bug的种类155 9.2.1从远处看155 9.2.2从近处看156 9.2.3从更近处看158 9.3消灭害虫160 9.3.1地下之路161 9.3.2地上之路161 9.4搜寻bug162 9.4.1编译时错误162 9.4.2运行时错误164 9.5如何修正缺陷167 9.6预防169 9.7除蜂剂、驱虫剂、捕蝇纸169 9.7.1调试器169 9.7.2内存访问校验器170 9.7.3系统调用跟踪170 9.7.4内核转储170 9.7.5日志170 9.8总结171 9.9另请参见172 9.10思考173 9.10.1深入思考173 9.10.2结合自己173 第10章代码构建10.1语言障碍176 10.1.1解释型语言177 10.1.2编译型语言178 10.1.3字节编译型语言179 10.2小题大做179 10.3构建软件版本181 10.4怎样才算是一个优秀的构建系统184 10.4.1简洁184 10.4.2一致184 10.4.3可重复和可靠185 10.4.4原子性186 10.4.5能够应付错误187 10.5技术细节187 10.5.1目标的选择187 10.5.2内务处理189 10.5.3依赖关系189 10.5.4自动构建190 10.5.5构建配置191 10.5.6递归地使用make192 10.6请发布我吧192 10.7构建大师是全能的吗194 10.8总结195 10.9另请参见195 10.10思考196 10.10.1深入思考196 10.10.2结合自己196 第11章追求速度11.1优化是什么200 11.2是什么使代码不尽如人意201 11.3为什么不进行优化呢202 备选方案204 11.4为什么要进行优化205 11.5优化的具体细节206 11.5.1证明你需要进行优化206 11.5.2找出运行得最慢的代码207 11.5.3测试代码208 11.5.4优化代码209 11.5.5优化之后209 11.6优化的技术210 11.6.1设计更改210 11.6.2代码更改213 11.7编写高效的代码217 11.8总结219 11.9另请参见219 11.10思考220 11.10.1深入思考220 11.10.2结合自己221 第12章不安全感综合症12.1危险224 12.2敌人226 12.3借口,都是借口228 12.4感到很脆弱229 12.4.1不安全的设计和体系结构229 12.4.2缓冲溢出229 12.4.3嵌入的查询字符串230 12.4.4竞争状况231 12.4.5整数溢出231 12.5防范措施232 12.5.1系统安装技术233 12.5.2软件设计技术234 12.5.3代码实现技术235 12.5.4规程技术236 12.6总结236 12.7另请参见237 12.8思考238 12.8.1深入思考238 12.8.2结合自己238 目录 代码的形成过程第13章崇尚设计13.1边设计边编程242 13.2我们要设计什么243 13.3为什么这么忙乱244 13.4良好的软件设计245 13.4.1简洁246 13.4.2优雅247 13.4.3模块化247 13.4.4良好的接口248 13.4.5可扩展性251 13.4.6避免重复251 13.4.7可移植性252 13.4.8符合语言习惯252 13.4.9良好地文档化253 13.5如何设计代码253 13.5.1设计方法和过程254 13.5.2设计工具255 13.6总结257 13.7另请参见258 13.8思考258 13.8.1深入思考258 13.8.2结合自己259 第14章软件体系结构14.1什么是软件体系结构262 14.1.1软件蓝图262 14.1.2视图263 14.1.3在何时和何处进行体系结构设计264 14.1.4用体系结构来做什么265 14.1.5关于组件和连接266 14.2什么是良好的体系结构268 14.3体系结构风格269 14.3.1没有体系结构269 14.3.2分层的体系结构270 14.3.3管道和过滤器体系结构271 14.3.4客户端/服务器体系结构271 14.3.5基于组件的体系结构273 14.3.6框架274 14.4总结275 14.5另请参见276 14.6思考276 14.6.1深入思考276 14.6.2结合自己277 第15章改良与革命15.1软件腐烂281 15.2警告信号282 15.3代码是如何成长的284 15.4相信不可能之事286 15.5对此我们可以做些什么287 15.5.1编写新代码287 15.5.2维护现有代码288 15.6总结290 15.7另请参见290 15.8思考291 15.8.1深入思考292 15.8.2结合自己292 目录 一群程序员第16章代码猴子16.1各种各样的猴子296 16.1.1卖力工作的程序员297 16.1.2代码猴子298 16.1.3权威299 16.1.4半权威300 16.1.5傲慢的天才300 16.1.6牛仔302 16.1.7规划者302 16.1.8老前辈303 16.1.9狂热者304 16.1.10单线条程序员305 16.1.11拖沓者306 16.1.12勉强的团队领导306 16.1.13你307 16.2理想的程序员308 16.3那么该怎么办308 16.4最愚蠢的人309 16.5总结310 16.6另请参见310 16.7行为表格311 16.8思考312 16.8.1深入思考312 16.8.2结合自己312 第17章团结就是力量17.1我们的团队——概览316 17.2团队组织318 17.2.1管理方法318 17.2.2责任划分318 17.2.3组织和代码结构320 17.3团队合作工具320 17.4团队疾病322 17.4.1巴别塔322 17.4.2独裁制324 17.4.3民主制325 17.4.4卫星站327 17.4.5大峡谷329 17.4.6流沙330 17.4.7旅鼠332 17.5良好团队合作的个人技巧和特点333 17.5.1沟通333 17.5.2谦虚334 17.5.3处理冲突334 17.5.4学习和适应能力335 17.5.5了解你的不足之处336 17.6团队合作原则336 17.6.1集体代码所有制336 17.6.2尊重别人的代码337 17.6.3编码准则337 17.6.4定义成功337 17.6.5定义责任338 17.6.6避免倦怠338 17.7团队的生命周期339 17.7.1团队的创建339 17.7.2团队的成长341 17.7.3团队合作342 17.7.4团队结束343 17.8总结345 17.9另请参见346 17.10行为表格347 17.11思考348 17.11.1深入思考348 17.11.2结合自己348 第18章安全措施18.1我们的责任350 18.2源代码控制351 18.2.1修订控制352 18.2.2访问控制353 18.2.3处理代码库354 18.2.4在代码树上创建分支354 18.2.5源代码控制简史356 18.3配置管理356 18.4备份358 18.5发布源代码359 18.6应该将源代码放在哪里360 18.7总结361 18.8另请参见362 18.9思考363 18.9.1深入思考363 18.9.2结合自己363 目录 开发过程的组成部分第一部分第19章注意细节19.1规范到底是什么368 19.2规范的类型369 19.2.1需求规范371 19.2.2功能规范373 19.2.3系统体系结构规范373 19.2.4用户界面规范374 19.2.5设计规范374 19.2.6测试规范375 19.3规范应当包含哪些内容376 19.4规范编写过程379 19.5我们为什么会不编写规范381 19.6总结383 19.7另请参见383 19.8思考384 19.8.1深入思考384 19.8.2结合自己384 第20章代码审查20.1什么是代码审查386 20.2何时进行审查387 20.2.1是否要进行审查388 20.2.2审查哪些代码389 20.3执行代码审查389 20.3.1代码审查会议390 20.3.2集成审查392 20.4审查你的态度393 20.4.1作者的态度393 20.4.2审查人员的态度394 20.5完美的代码395 20.6代码审查之外396 20.7总结397 20.8另请参见397 20.9清单398 20.10思考399 20.10.1深入思考399 20.10.2结合自己399 第21章时间估计21.1在黑暗中摸索402 21.2为什么估计这么困难?403 21.3压力之下405 21.4实用的估计方法406 21.5计划游戏409 21.6坚持!412 21.7总结415 21.8另请参见415 21.9思考416 21.9.1深入思考416 21.9.2结合自己416 目录 从高处鸟瞰第22章程序秘方22.1编程风格420 22.1.1结构化编程421 22.1.2面向对象的程序设计422 22.1.3函数式编程423 22.1.4逻辑编程424 22.2烹饪方法:做什么与怎样做424 22.3开发过程425 22.3.1混乱426 22.3.2瀑布模型427 22.2.3SSADM和PRINCE429 22.3.4V模型430 22.3.5原型设计430 22.3.6迭代和增量开发432 22.3.7螺旋模型432 22.3.8敏捷的方法433 22.3.9其他开发过程434 22.4已经够了!435 22.5选择一种过程436 22.6总结437 22.7另请参见438 22.8思考438 22.8.1深入思考438 22.8.2结合自己439 第23章编程领域大观23.1应用程序编程442 23.1.1塑装软件443 23.1.2定制应用程序444 23.2游戏编程445 23.3系统编程446 23.4嵌入式编程447 23.5分布式编程450 23.6网络应用程序编程451 23.7企业编程453 23.8数字编程454 23.9那又怎样455 23.10总结456 23.11另请参见456 23.12思考457 23.12.1深入思考457 23.12.2结合自己457 第24章下一步呢但下一步该做什么呢?460 答案和讨论463 参考书目559 索引564 …… |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。