百道网
 您现在的位置:Fun书 > 匠艺整洁之道:程序员的职业修养
匠艺整洁之道:程序员的职业修养


匠艺整洁之道:程序员的职业修养

作  者:[美]罗伯特·马丁(Robert C.Martin)

译  者:韩磊

出 版 社:电子工业出版社

出版时间:2022年05月

定  价:128.00

I S B N :9787121432248

所属分类: 专业科技  >  计算机/网络  >  程序设计    

标  签:

[查看微博评论]

分享到:

TOP内容简介

鲍勃大叔因在技术人群中声名远播的Clean系列在全球圈粉无数。本书为其烫手新作,旨在为广大工程师指明一条通向匠师之路,包括饱经洗砺的敏捷技术实践,如何通过持续的努力提高专业素养,软件可用之上的目标与技能,以及如何激发团队**潜能,等等。本书融会几本经典著作的精髓,将“整洁”方法论推向至高境界―软件开发者有责任维护世界正常运行,而“人”才是“技术”的决定者。

本书共分三部分,前两部分用实例阐释TDD在敏捷软件中的运用,以及验收测试、协同编程等常被忽视的敏捷侧面与具体策略,还探讨了颇有价值的软件设计方案相关话题;第Ⅲ部分拔地而起,直接提出十条堪称金玉良言的“规劝”,以帮助程序员成为团队基石。

本书适合所有软件开发者、测试工程师及工程类院校师生,对技术团队负责人及架构师同样大有助益。

TOP作者简介

Robert C. Martin,Object Mentor公司总裁,面向对象设计、模式、UML、敏捷方法学和极限编程领域的资深顾问。他是Designing Object-Oriented C++ Applications Using the Booch Method 以及 Jolt 获奖图书 Agile Software Development, Principles,Palterns,and Practices(中译版《敏捷软件开发:原则、模式与实践》)《代码整洁之道》等畅销书作者。

韩磊,IT产品与运营专家、IT图书专业译者,译有《代码整洁之道》《梦断代码》《C#编程风格》等多部计算机图书。曾担任CSDN副总经理、《程序员》总编辑、广东二十一世纪传媒股份有限公司新媒体事业部总经理等职,现任AR初创企业亮风台集团产研副总裁。

TOP目录

第1章 匠艺 1
第Ⅰ部分 纪律 9
极限编程 11
生命之环 11
测试驱动开发 12
重构 13
简单设计 14
协同编程 14
验收测试 15
第2章  测试驱动开发 17
概述 18
软件 20
TDD三法则 20
第四法则 28
基础知识 29
简单示例 30
栈 30
质因数 46
保龄球局 55
小结 72
第3章  高级测试驱动开发 73
排序示例一 74
排序示例二 78
卡壳 86
安排、行动、断言 94
进入BDD 95
有限状态机 96
再谈BDD 97
测试替身 98
DUMMY 100
STUB 103
SPY 106
MOCK 108
FAKE 111
TDD不确定性原理 113
伦敦派对决芝加哥派 126
确定性问题 126
伦敦派 127
芝加哥派 128
融合 128
架构 129
小结 131
第4章  设计 133
测试数据库 134
测试GUI 136
GUI输入 138
测试模式 138
专为测试创建子类 139
自励 140
HUMBLE OBJECT 140
测试设计 143
脆弱测试问题 143
一一对应 144
打破对应关系 145
VIDEO STORE 147
具体vs通用 166
转换优先顺序 167
{} → NIL(无代码→空值) 169
NIL → CONSTANT(空值→常量) 169
UNCONDITIONAL → SELECTION(无条件→条件选择) 171
VALUE → LIST(值→列表) 171
STATEMENT → RECURSION(语句→递归) 172
SELECTION → ITERATION(条件选择→遍历) 172
VALUE → MUTATED VALUE(值→改变了的值) 173
示例:斐波那契数列 173
变换模式优先顺序假设 177
小结 178
第5章  重构 179
什么是重构 180
基础工具包 181
重命名 181
方法抽取 182
变量抽取 183
字段抽取 185
魔方 199
纪律 199
测试 199
快速测试 199
打破紧密的一一对应关系 200
持续重构 200
果断重构 200
让测试始终能通过 201
留条出路 201
小结 202
第6章  简单设计 203
YAGNI 206
用测试覆盖 207
覆盖 208
渐近目标 210
设计? 210
但还有更多好处 210
充分表达 211
底层抽象 213
再论测试:问题的后半部分 214
尽量减少重复 214
意外重复 215
尺寸尽量小 216
简单设计 216
第7章  协同编程 217
第8章  验收测试 221
纪律 224
持续构建 224
第Ⅱ部分  标准 225
你的新CTO 226
第9章  生产力 227
永不交付S**T 228
成本低廉的变更适应能力 230
时刻准备着 231
稳定的生产力 232
第10章  质量 235
持续改进 236
免于恐惧 237
极致质量 238
我们不把问题留给QA 239
QA之疾 239
QA什么问题也不会发现 240
测试自动化 241
自动化测试与用户界面 241
测试用户界面 243
第11章 勇气 245
我们彼此补位 246
靠谱的预估 247
你得说不 249
持续努力学习 250
教导 251
第Ⅲ部分 操守 253
第一个程序员 254
75年 255
书呆子与救世主 259
榜样和恶棍 261
我们统治世界 262
灾难 263
誓言 265
第12章  伤害 267
首先,不造成伤害 268
对社会无害 269
对功能的损害 270
对结构无害 272
柔软 274
测试 275
最好的作品 276
使其正确 277
什么是好结构 278
艾森豪威尔矩阵 279
程序员是利益相关者 281
尽力而为 282
可重复证据 284
狄克斯特拉 284
正确性证明 285
结构化编程 288
功能分解 290
TDD 290
第13章  集成 293
小周期 294
源代码控制的历史 294
GIT 299
短周期 300
持续集成 301
分支与切换 301
持续部署 303
持续构建 304
持续改进 305
测试覆盖率 306
突变测试 306
语义稳定性 307
清理 307
创造 308
保持高生产力 308
拖慢速度的因素 309
解决注意力分散问题 311
时间管理 314
第14章  团队合作 317
组团工作 318
开放式/虚拟办公室 318
诚实和合理地预估 319
谎言 320
诚实、准确、精确 321
故事1:载体 322
故事2:pCCU 324
教训 325
准确度 325
精确度 327
汇总 329
诚实 330
尊重 332
永不停止学习 332

TOP书摘

译 者 序


2021年2月,老朋友张春雨(侠少)在微博上给我发私信,问我有没有兴趣翻译Robert C. Martin(鲍勃大叔)的新书。我和侠少平时联系不多,但常常收到他安排寄来的赠书。赠书收得多了,总觉得欠着人情,想着该用什么方式还一还才好。


这个“什么方式”,也许是几顿酒饭、几杯咖啡,但绝对不是翻译一本书。算起来,截至2020年,我已经有十年没做图书翻译工作了。去年翻译了一本小书,眼睛和腰椎、颈椎都有点儿不舒服。一定赔本但不一定赚吆喝的事,还是不干为好。


侠少对我了解甚深,他只说了一句话,就成功说服我接下任务。他说:“这是(鲍勃)大叔的封山作。第一本和最后一本,有始有终,一段佳话!”这一下子就勾起我翻译《代码整洁之道》(Clean Code)的回忆。当时我在北京工作,个人能力提升和职业发展都遇到瓶颈,同时还需要考虑家庭常驻地问题。《代码整洁之道》不但带给我关于整洁代码的知识,还令我悟到许多做人做事的道理。对我来说,那是一本优秀技术书,更是一本关于价值观的好书。


《代码整洁之道》中文版面世十一年以来,数次修订和重印,成为很多程序员朋友接受并推崇的读本。其间,鲍勃大叔的其他数本著作也陆续出了中文版。这些著作从程序员素养、架构设计、敏捷方法等方面入手,全面阐述“整洁”概念在软件开发过程中的重要意义与实践手段,建立了一套相对自足的理论和方法体系,大概能算是Clean系列的“武功秘籍”了吧。


鲍勃大叔提出,既然现代世界运行于软件之上,软件开发者就要承担起维护世界正常运行的重大责任。这意味着软件开发者必须掌握足够多的技能,遵守足够严格的纪律,追求足够高的职业操守标准,方能达到社会对他们的期望。他提炼了前面多本著作的精髓,加以深究、凝练和升华,推出这本集大成的Clean系列封山之作。


回顾Clean系列图书的主题,可以很清楚地看到从“关注技术”到“关注人”的发展脉络。就像是老拳师写拳谱,第一本都是讲招式。过了一阵子,老拳师发现徒弟们招式练得挺熟,但内功没跟上,“练拳不练功,到老一场空”,于是赶紧再写一本讲内功的。又过了一阵子,老拳师发现徒弟们一上擂台就不懂如何审时度势选择攻击方案,又赶紧写一本讲架构的。如此这般勿勿十年,老拳师突然发现,拳谱传来传去,很多人练得似是而非,拳打歪了,心术也不见得很正。 


如果你是这位老拳师,面对如此现状,会是什么心情?我想,大概也会像鲍勃大叔一般,既悲观又不甘吧。就我这两年参与审校或审阅的几本敏捷图书来看,恐怕既悲观又不甘的不只是鲍勃大叔一个人。敏捷软件开发成为主流之后,同时也成了有些人借以牟利和乱来的最佳“幌子”。当所有人都在谈敏捷,而吹捧与批评都没谈到点子上时,正本清源就成了当务之急。所以,最近两年面世的敏捷书,不约而同集中在一个主题:正本清源。 


敏捷既是手段,也是目的。正如鲍勃大叔在本书中一再强调的:软件最根本的特点就是“柔软”。好软件不但具备能够与时俱进修改和扩展的灵活性,而且更具备以较低成本修改和扩展的可能性。软件本身如果敏捷,那么实现和修改软件的方式必须也必然够敏捷。


本书第Ⅰ部分和第Ⅱ部分结合多个代码示例,展示了如何利用TDD敏捷地写出敏捷的软件,同时阐述了验收测试、协同编程等其他敏捷手段的重要性与一般实施手段。不可避免地,作者还花费相当多篇幅讨论软件设计方案问题。我很愿意重点阅读这部分。此外,一些具体的测试策略也颇具可读性。 


第Ⅲ部分看似对程序员的日常工作没什么太大帮助,但这部分值得好好阅读和思考。作者提出的程序员十条承诺(或谓“誓言”)浅白易懂,却不易遵守。能谨守这些承诺的程序员,一定是我特别愿意共事的好伙伴。


中文版初稿翻译工作结束之后,我以为终于可以放松下颈椎和腰椎了。没想到,过了一段时间,侠少又发来一份英文修改稿,对初稿改动之处不在少数。还好有电子工业出版社的编辑帮我做了对照工作,将差异处一一列出。看着屏幕上的英文初稿、修改稿和修改了几遍的中文稿,我突然体会到鲍勃大叔讲解“质因数”示例时谈到的心情:对一桩事物的改进过程,活灵活现地跃然眼前。修改的过程既痛苦又快乐。而且,如果没有其他限制,可以一遍又一遍继续做下去,永无止境。


可惜,就像软件有交付截止日一样,译稿也不能一直拖下去。我清楚地知道,译稿还有很多问题。稿子交出去了,这些问题留待读者们发现和批评。如果有机会出修订版,你们的批评和建议必会被纳入,这也算是一种协同写作了吧。


韩磊 2021年10月28日




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丑闻和艾奥瓦州党内选举结果拖延—太多太多臭名昭著的软件失误或恶行。失去信任感、深感愤怒的公众将把目光投向我们的纪律、操守与标准缺失。规条随之而来,那将是我们本不该背负的规条。规条将削弱我们自由探索和延展软件开发工艺的能力,将严厉限制技术发展与经济增长。


本书并不打算阻止人们一头扎进越来越多的软件应用中,也不打算减缓软件生产的速度。因为这种意图注定徒劳无功。社会需要软件,而且无论如何都会得到软件。试图扼杀这种需求,并不能叫停迫在眉睫的公众信任灾难。


相反,本书的目标是让软件开发者和他们的管理者明白纪律的必要性,向他们传授最有效的纪律、标准与职业操守,令他们能够最大限度地生产健壮、高容错和高效的软件。唯有改变我们这些程序员的工作方式,提高纪律性、职业操守和标准,才能支撑起纸牌屋,防止它倒塌。


本书结构


本书分为三个部分:纪律、标准、职业操守。


纪律是最基础的一层。这个部分关注实用性、技术性和规范性。阅读和理解这个部分,各类程序员都能从中受益。这部分内容配了一些视频 ,以展示测试驱动开发节奏和重构纪律。文本部分即旨在展示这种节奏,但还是视频比较有效。


标准是中间层次。这部分概括了世界对程序员这行的期望。管理者应该好好阅读,从而了解对专业程序员应有的期望。


操守在最高层。这部分阐述了编程职业的道德背景。它以誓言或一套承诺的形式体现,其中包括大量关于历史与哲学的话题。程序员和管理者都应该阅读这部分内容。


给管理者的话


本书包含了对你有益的大量信息。其中也会有你大概不需要理解的大量技术内容。建议你阅读每章的简介部分,当遇到超出所需的技术内容时尽管跳过,直接阅读后续章节。


一定要读第Ⅱ部分“标准”和第Ⅲ部分“操守”。这两部分中的五项纪律都要好好阅读。

TOP插图

TOP 其它信息

装  帧:平装

页  数:372

版  次:1

开  本:16开

纸  张:胶版纸

加载页面用时:78.1063