科技>计算机>计算机科学
匠艺整洁之道:程序员的职业修养(英文版)  

匠艺整洁之道:程序员的职业修养(英文版)  "

作者:罗伯特?C.马丁
ISBN:9787121445828
定价:¥148.0
字数:475千字
页数:400
出版时间:2023-05
开本:16开
版次:01-01
装帧:
出版社:电子工业出版社
简介

罗伯特?C.马丁(鲍勃大叔)因在技术人群中声名远播的Clean系列在全球圈粉无数。本书为其烫手新作,旨在为广大工程师指明一条通向匠师之路,包括饱经洗砺的敏捷技术实践,如何通过持续的努力提高专业素养,软件可用之上的目标与技能,以及如何激发团队最大潜能,等等。本书融会几本经典著作的精髓,将"整洁”方法论推向至高境界—软件开发者有责任维护世界正常运行,而"人”才是"技术”的决定者。 本书共分三部分,前两部分用实例阐释TDD在敏捷软件中的运用,以及验收测试、协同编程等常被忽视的敏捷侧面与具体策略,还探讨了颇有价值的软件设计方案相关话题;第Ⅲ部分拔地而起,直接提出十条堪称金玉良言的"规劝”,以帮助程序员成为团队基石。

前言

序 2003年春,在我公司各个技术团队引入Scrum后不久,我见到了鲍勃大叔。那时我还是个新鲜出炉、心怀疑虑的ScrumMaster。鲍勃教我们使用TDD和一个叫作FitNesse的小工具。我问自己:“为什么总要写注定先面临失败的测试?测试不该排在编码之后吗?”就像团队中许多其他成员一样,我常常只能挠着头离开。但是,直至现在,鲍勃大叔对编程匠艺的热情于我仍然记忆犹新。他是个直言不讳的人。记得有一天,他看了我们的缺陷列表后,问我们到底为什么会对并不属于个人的软件系统做出如此糟糕的决定—“这些系统是公司资产,不是你们的个人资产。”他的激情鼓舞了我们。一年半之后,我们实现了百分之八十的自动测试覆盖率,得到了整洁又直观的代码库,客户和团队成员也都满意。之后,我们迅速修正了对“完成”的定义,以之为盾,挡住了潜伏在代码中的小魔怪。本质上,我们学会了如何避免自残。相处日长,我们对鲍勃心生暖意。对我们而言,他如同亲叔父—温暖、坚定、勇敢,一直帮助我们学会站直并做正确的事。有些孩子的“鲍勃大叔”教他们骑单车或钓鱼,而我们这位鲍勃大叔则教我们坚守正直—直至今日,在我的职业生涯中,有能力和愿望,满怀勇气与好奇心地去面对任何环境,仍是鲍勃大叔教会我的最佳课程。 开始从事敏捷教练职业后,我将鲍勃早年教我的那些东西用在工作中,我发现,最好的产品开发团队总能在各种行业、各种客户的各种独特环境中组合不同的最佳实践手段。我还发现,再好的开发工具也需要有与之匹配的人类操作者—那些在不同领域中都能找到这些工具最佳应用方式的团队。当然,我也观察到,开发团队也许达到了很高的单元测试覆盖率,已经能满足指标要求,却发现大部分测试不合格—指标满足,价值不足。最好的团队并不真需要关心指标。他们自有目标、纪律、尊严与责任感。指标自然而然得到满足。《匠艺整洁之道》将这些课程与原则放到具体代码范例与经验讲述中,展示了“为满足期限而写代码”与“真正搭建未来能用上的系统”之间的区别。 《匠艺整洁之道》提醒我们永不能满足于现状,要无畏地活着。这本书就像一位老友,会提醒你什么重要、什么有效、什么无效、什么导致风险、什么降低风险。这些经验历久弥新。你可能会发现自己已经在实践其中的一些技巧,我敢说你会发现另外一些新东西,或者至少是你曾因期限压力或其他职业生涯中的压力而放弃了的东西。如果你是开发领域的新手—无论是商业方面还是技术方面的—你将从最优秀的人那里学到东西。即使是最有经验和战斗力的人也会找到改进自己的方法。也许这本书会帮助你找回激情,重新激起你提升手艺的欲望,或者让你重新投入精力,无惧障碍追求完美。 软件开发者统治着世界。鲍勃大叔在这里重申了这些“掌握权柄”之人该遵守的职业纪律。他延续了《代码整洁之道》未完的话题。软件开发人员实际上是在编写人类的规则,所以鲍勃大叔提醒我们,必须严守道德准则,有责任知道代码的作用,人们如何使用它,以及它会在什么地方出错。软件出错的代价是人的生计—甚至生命。软件影响着我们的思维方式,影响着我们的决定。作为人工智能和预测分析的结果,软件同样影响着社会和人群的行为。因此,我们必须负起责任,以极大的谨慎和同情心行事—人们的健康和福祉取决于此。鲍勃大叔帮助我们面对这种责任,并成为社会所期望和需要的专业人士。 在写这篇序的时候,《敏捷宣言》即将迎来它的20岁生日 。这本书是回归根本的完美机会:它及时而谦逊地提醒我们:程序化世界越来越复杂。为了人类的遗产,也为了我们自己,应该建立和维护职业操守。读读《匠艺整洁之道》吧,让这些原则渗入你的内心,实践和改进它们,辅导他人。把这本书放在手边书架上。当你带着好奇心和勇气行走于世间,让这本书成为你的老朋友、你的鲍勃大叔和你的导师吧。 ——斯塔西·海格纳·韦斯卡迪(Stacia Heimgartner Viscardi) CST和敏捷教练 前  言 在开始之前,有两个问题需要面对。搞清楚这两个问题,读者才能理解本书所根植的理念。 关于“匠艺”(Craftsmanship) 21世纪之初的那些年,言辞之争不绝于耳。身在软件行业,我们见证了这些争议。其中,“匠人”(craftsman)一词常被认为太过狭隘。 我思考了很久,与持各种意见的朋友交流。我的结论是,对于本书而言,没有更好的词可用。 我考虑过改用craftsperson、craftsfolk、crafter等词,但这些词承担不起craftsman一词的历史庄严感。而这种历史庄严感正是本书想传递的重要讯息。 “匠人”让人想到一位技艺高超、成就非凡的行家—善用工具,熟悉行业,为自己的工作而自豪,满怀尊严和专业精神,值得信赖。 你们中的一些人可能会不同意我用这个词。我很理解。我只希望你们无论如何都不要认为这是在试图找到一个非它不可的词,因为这绝不是我本意。 唯一真路 当阅读《匠艺整洁之道》一书时,你可能会感到这是通往工匠精神的唯一真路。对我来说可能是这样,但对你来说可未必。这本书展示了我的路径。当然,你要选择自己的路径。 我们最终会不会需要唯一真路?不知道。也许吧。正如你将读到的那样,对软件职业做出严格定义的难度正在增加。我们也许可以根据所创建的软件的关注重点,采用几种不同的路径。但是,正如你将在下文中读到的那样,要把关键软件和非关键软件区分开来可能并不那么容易。 但我可以肯定一件事。“士师” 的日子已一去不返。每名程序员都各自做自己眼中正确的事,已经不够。纪律、标准和对职业操守的要求将会出现。今天摆在我们面前的问题是,让程序员自己来定义这些纪律、标准和职业操守,还是让那些不了解我们的人强加给我们。 本书介绍 本书是为程序员和管程序员的人写的。但在另一种意义上,本书是为整个人类社会写的。因为正是我们,这些程序员,无意中发现自己恰好处于这个社会的支点上。 为了自己 如果你已经编程好几年,大概能体会到系统成功部署和运转所带来的满足感。获得这样的成就,作为其中一分子,颇值得骄傲。你为自己能做出这套系统而自豪。 然而,你会为自己做出系统的方式而自豪吗?是为完成了工作而自豪,还是为自己的技艺而自豪?是因为系统得以部署而自豪,还是为你打造系统的方式而自豪? 艰难编程一整天,回到家里,你是会对着镜子里的自己说:“今天干得真棒?”还是只能想到去冲个澡? 当一天结束时,很多程序员会感觉自己很脏。我们觉得自己深陷低水准工作的泥潭。我们感到,只有降低质量才能赶上进度,而且有人在期待我们这样做。我们甚至开始相信,生产力与质量就是成反比的。 在本书中,我将尽力打破这种思维模式。本书关注如何做好工作。本书将阐述每名程序员都该懂得的纪律与实践手段,掌握这些纪律与手段,才能高效工作,并且为自己每天写的代码感到自豪。 为了社会 21世纪,为了生存,我们的社会开始由无纪律和不受控的技术主导,这是人类历史上首次出现的状况。软件入侵了现代生活的方方面面,从早晨喝咖啡到晚间娱乐,从洗衣到开车。软件让我们既在世界级网络中连接,又在社会和政治层面上分裂。现代世界的生活没有哪一方面不由软件所主导。然而,我们这些构建软件的人不过是乌合之众,对自己所做之事了解甚少。 如果我们这些程序员做得更像样,2020年艾奥瓦州党内选举结果能否如期得出?两架波音737 Max飞机上的346位乘客还会罹难吗?骑士资本集团(Knight Capital Group)会在45分钟之内损失4亿6000万美元吗?丰田汽车的“意外加速”故障会导致89人死亡吗? 全世界程序员数量每五年翻一番。程序员们几乎没有接受过相关技能教育。他们只是看了看工具,做过几个玩具式的开发项目任务,便被扔进指数级增长的劳动力队伍中,去应付指数级增长的软件需求。每一天,我们称之为软件的那个纸牌屋都在不断深入我们的基础设施、我们的机构、我们的政府,还有我们的生活。每一天,灾难风险都在不断增加。 我说的是什么灾难?不是文明的崩塌,也不是所有软件系统突然解体。摇摇欲坠的纸牌屋并非由软件系统本身构成。我说的是,软件的公众信任基础非常脆弱、岌岌可危。 有太多波音737 Max事故、太多丰田汽车意外加速故障、太多加州大众EPA丑闻和艾奥瓦州党内选举结果拖延—太多太多臭名昭著的软件失误或恶行。失去信任感、深感愤怒的公众将把目光投向我们的纪律、操守与标准缺失。规条随之而来,那将是我们本不该背负的规条。规条将削弱我们自由探索和延展软件开发工艺的能力,将严厉限制技术发展与经济增长。 本书并不打算阻止人们一头扎进越来越多的软件应用中,也不打算减缓软件生产的速度。因为这种意图注定徒劳无功。社会需要软件,而且无论如何都会得到软件。试图扼杀这种需求,并不能叫停迫在眉睫的公众信任灾难。 相反,本书的目标是让软件开发者和他们的管理者明白纪律的必要性,向他们传授最有效的纪律、标准与职业操守,令他们能够最大限度地生产健壮、高容错和高效的软件。唯有改变我们这些程序员的工作方式,提高纪律性、职业操守和标准,才能支撑起纸牌屋,防止它倒塌。 本书结构 本书分为三个部分:纪律、标准、职业操守。 纪律是最基础的一层。这个部分关注实用性、技术性和规范性。阅读和理解这个部分,各类程序员都能从中受益。这部分内容配了一些视频 ,以展示测试驱动开发节奏和重构纪律。文本部分即旨在展示这种节奏,但还是视频比较有效。 标准是中间层次。这部分概括了世界对程序员这行的期望。管理者应该好好阅读,从而了解对专业程序员应有的期望。 操守在最高层。这部分阐述了编程职业的道德背景。它以誓言或一套承诺的形式体现,其中包括大量关于历史与哲学的话题。程序员和管理者都应该阅读这部分内容。 给管理者的话 本书包含了对你有益的大量信息。其中也会有你大概不需要理解的大量技术内容。建议你阅读每章的简介部分,当遇到超出所需的技术内容时尽管跳过,直接阅读后续章节。 一定要读第Ⅱ部分“标准”和第Ⅲ部分“操守”。这两部分中的五项纪律都要好好阅读。

目录

第 1 章 匠艺 ................................................................................... 25 第Ⅰ部分 纪律 ................................................................................ 35 极限编程 .............................................................................................................................. 37 生命之环 ...................................................................................................................... 38 测试驱动开发 ...................................................................................................................... 39 重构 ...................................................................................................................................... 40 简单设计 .............................................................................................................................. 41 协同编程 .............................................................................................................................. 41 验收测试 .............................................................................................................................. 42 第 2 章 测试驱动开发 ....................................................................... 43 概述 ...................................................................................................................................... 44 软件 .............................................................................................................................. 46 TDD 三法则 ................................................................................................................. 47 第四法则 ...................................................................................................................... 58 基础知识 .............................................................................................................................. 59 简单示例 ...................................................................................................................... 60 栈 .................................................................................................................................. 60 质因数 .......................................................................................................................... 76 保龄球局 ...................................................................................................................... 86 小结 .................................................................................................................................... 103 第3章 高级测试驱动开发 ................................................................... 105 排序示例一 ........................................................................................................................ 106 排序示例二 ........................................................................................................................ 111 卡壳 .................................................................................................................................... 119 安排、行动、断言 ............................................................................................................ 127 进入 BDD ................................................................................................................... 128 有限状态机 ................................................................................................................ 129 再谈 BDD ................................................................................................................... 131 测试替身 ............................................................................................................................ 132 DUMMY ..................................................................................................................... 135 STUB .......................................................................................................................... 139 SPY ............................................................................................................................. 142 MOCK ........................................................................................................................ 145 FAKE .......................................................................................................................... 148 TDD 不确定性原理 ................................................................................................... 150 伦敦派对决芝加哥派 ................................................................................................ 163 确定性问题 ................................................................................................................ 164 伦敦派 ........................................................................................................................ 165 芝加哥派 .................................................................................................................... 166 融合 ............................................................................................................................ 167 架构 .................................................................................................................................... 167 小结 .................................................................................................................................... 169 第 4 章 设计 ................................................................................. 171 测试数据库 ........................................................................................................................ 172 测试 GUI ............................................................................................................................ 174 GUI 输入 .................................................................................................................... 177 测试模式 ............................................................................................................................ 178 专为测试创建子类 .................................................................................................... 179 自励 ............................................................................................................................ 180 HUMBLE OBJECT .................................................................................................... 181 测试设计 ............................................................................................................................ 184 脆弱测试问题 ............................................................................................................ 184 一一对应 .................................................................................................................... 185 打破对应关系 ............................................................................................................ 187 VIDEO STORE .......................................................................................................... 188 具体 vs 通用 ............................................................................................................... 207 转换优先顺序 .................................................................................................................... 208 {} → NIL(无代码→空值) .................................................................................. 210 NIL → CONSTANT(空值→常量) ..................................................................... 211 UNCONDITIONAL → SELECTION(无条件→条件选择) .............................. 212 VALUE → LIST(值→列表) ............................................................................... 213 STATEMENT → RECURSION(语句→递归) ................................................... 213 SELECTION → ITERATION(条件选择→遍历) .............................................. 214 VALUE → MUTATED VALUE(值→改变了的值) ........................................... 214 示例:斐波那契数列 ................................................................................................ 215 变换模式优先顺序假设............................................................................................. 119 小结 .................................................................................................................................... 220 第 5 章 重构 .................................................................................. 221 什么是重构 ........................................................................................................................ 223 基础工具包 ........................................................................................................................ 224 重命名 ........................................................................................................................ 224 方法抽取 .................................................................................................................... 225 变量抽取 .................................................................................................................... 226 字段抽取 .................................................................................................................... 228 魔方 ............................................................................................................................ 241 纪律 .................................................................................................................................... 241 测试 ............................................................................................................................ 242 快速测试 .................................................................................................................... 242 打破紧密的一一对应关系 ......................................................................................... 242 持续重构 .................................................................................................................... 243 果断重构 .................................................................................................................... 243 让测试始终能通过 .................................................................................................... 243 留条出路 .................................................................................................................... 244 小结 .................................................................................................................................... 245 第 6 章 简单设计 .......................................................................... 247 YAGNI ................................................................................................................................ 250 用测试覆盖 ........................................................................................................................ 252 覆盖 ............................................................................................................................ 254 渐近目标 .................................................................................................................... 255 设计? ........................................................................................................................ 256 但还有更多好处 ........................................................................................................ 256 充分表达 ............................................................................................................................ 257 底层抽象 .................................................................................................................... 259 再论测试:问题的后半部分 ..................................................................................... 260 尽量减少重复 .................................................................................................................... 261 意外重复 .................................................................................................................... 262 尺寸尽量小 ........................................................................................................................ 263 简单设计 .................................................................................................................... 263 第 7 章 协同编程 ............................................................................ 265 第 8 章 验收测试 ............................................................................ 269 纪律 .................................................................................................................................... 272 持续构建 ............................................................................................................................ 273 第 Ⅱ 部 分 标准 .............................................................................. 275 你的新 CTO ....................................................................................................................... 276 第 9 章 生产力 ............................................................................. 277 永不交付 S**T ................................................................................................................... 278 成本低廉的变更适应能力 ................................................................................................ 280 时刻准备着 ........................................................................................................................ 282 稳定的生产力 .................................................................................................................... 283 第 10 章 质量 .............................................................................. 285 持续改进 ............................................................................................................................ 286 免于恐惧 ............................................................................................................................ 287 极致质量 ............................................................................................................................ 288 我们不把问题留给 QA ...................................................................................................... 289 QA 之疾 ...................................................................................................................... 290 QA 什么问题也不会发现 .................................................................................................. 290 测试自动化 ........................................................................................................................ 291 自动化测试与用户界面 .................................................................................................... 292 测试用户界面 .................................................................................................................... 293 第 11 章 勇气 ................................................................................ 295 我们彼此补位 .................................................................................................................... 296 靠谱的预估 ........................................................................................................................ 298 你得说不 ............................................................................................................................ 300 持续努力学习 .................................................................................................................... 301 教导 .................................................................................................................................... 302 第Ⅲ部分 操守 ............................................................................... 303 第一个程序员 .................................................................................................................... 304 75 年 ................................................................................................................................... 305 书呆子与救世主 ................................................................................................................ 310 榜样和恶棍 ........................................................................................................................ 313 我们统治世界 .................................................................................................................... 314 灾难 .................................................................................................................................... 315 誓言 .................................................................................................................................... 317 第 12 章 伤害 ................................................................................ 319 首先,不造成伤害 ............................................................................................................ 320 对社会无害 ................................................................................................................ 321 对功能的损害 ............................................................................................................ 323 对结构无害 ................................................................................................................ 326 柔软 ............................................................................................................................ 327 测试 ............................................................................................................................ 329 最好的作品 ........................................................................................................................ 330 使其正确 .................................................................................................................... 331 什么是好结构 ............................................................................................................ 332 艾森豪威尔矩阵 ........................................................................................................ 334 程序员是利益相关者 ................................................................................................ 336 尽力而为 .................................................................................................................... 338 可重复证据 ........................................................................................................................ 340 狄克斯特拉 ................................................................................................................ 340 正确性证明 ................................................................................................................ 341 结构化编程 ................................................................................................................ 343 功能分解 .................................................................................................................... 346 TDD ............................................................................................................................ 347 第 13 章 集成 ................................................................................ 351 小周期 ................................................................................................................................ 352 源代码控制的历史 .................................................................................................... 352 GIT .............................................................................................................................. 358 短周期 ........................................................................................................................ 360 持续集成 .................................................................................................................... 361 分支与切换 ................................................................................................................ 362 持续部署 .................................................................................................................... 364 持续构建 .................................................................................................................... 365 持续改进 ............................................................................................................................ 366 测试覆盖率 ................................................................................................................ 367 突变测试 .................................................................................................................... 368 语义稳定性 ................................................................................................................ 368 清理 ............................................................................................................................ 369 创造 ............................................................................................................................ 370 保持高生产力 .................................................................................................................... 370 拖慢速度的因素 ........................................................................................................ 371 解决注意力分散问题 ................................................................................................ 373 时间管理 .................................................................................................................... 376 第 14 章 团队合作 .......................................................................... 379 组团工作 ............................................................................................................................ 380 开放式/虚拟办公室 ................................................................................................... 380 诚实和合理地预估 ............................................................................................................ 382 谎言 ............................................................................................................................ 383 诚实、准确、精确 .................................................................................................... 384 故事 1:载体 ............................................................................................................. 385 故事 2:pCCU ........................................................................................................... 387 教训 ............................................................................................................................ 389 准确度 ........................................................................................................................ 389 精确度 ........................................................................................................................ 391 汇总 ............................................................................................................................ 393 诚实 ............................................................................................................................ 394 尊重 .................................................................................................................................... 396 永不停止学习 .................................................................................................................... 397

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个