《匠艺整洁之道:程序员的职业修养》[59M]百度网盘|pdf下载|亲测有效
《匠艺整洁之道:程序员的职业修养》[59M]百度网盘|pdf下载|亲测有效

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

出版社 电子工业出版社京东自营官方旗舰店
出版年 2022-05
页数 390页
装帧 精装
评分 9.2(豆瓣)
8.99¥ 10.99¥

内容简介

本篇主要提供匠艺整洁之道:程序员的职业修养电子书的pdf版本下载,本电子书下载方式为百度网盘方式,点击以上按钮下单完成后即会通过邮件和网页的方式发货,有问题请联系邮箱ebook666@outlook.com

产品特色

编辑推荐

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

传奇人物鲍勃大叔定义软件开发专业和技艺的原则,阐述所需纪律、标准和操守,让你能交付强固、高效的代码,并为自己编写的软件感到自豪。他为软件匠艺的基本纪律提供了实用、详尽和规范的指南。书中讨论了相关标准,展示了世界对开发者的期望与开发者自己的期望之间有何不同,帮助读者弥合这种差异。鲍勃最后总结了编程职业的操守,阐述所有开发者都该对同事、用户和他们自己做出基础承诺。 有了鲍伯大叔的见解,所有的程序员和他们的经理都可以始终如一地交付能够建立信任而非破坏信任的代码——在依赖软件生存的用户和社会中建立信任。

◆ 向着软件匠艺的“北极星”前进:达到了解如何写好代码的境界。

◆ 关于应用五项核心纪律的实用且详尽的指导:测试驱动开发、重构、简单设计、协同编程和验收测试。

◆ 开发者和团队如何提升生产力、质量和勇气。

◆ 程序员们精诚一致的真正意义,以及每位软件专业人员都该给出的十条具体承诺。


内容简介

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

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

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

作者简介

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初创企业亮风台集团产研副总裁。

精彩书评

在IT技术发展日新月异的当下,很多开发者自嘲为“码农”,流水线化的工作难以产出高质量、长生命周期和高社会价值的作品。数字化是未来10年发展的主流趋势,现代世界都会运行于软件之上,软件一旦出错所付出的代价不可估量,这对开发者和软件质量的要求非常高。开发者与其追逐技术热点,不如修炼内功、提升技艺水平。而决定技艺水平下限的正是纪律、标准、原则和职业操守这些软实力。鲍勃大叔的新书《匠艺整洁之道》是这样一本好书,帮助开发者提高能力基线和专业精神,产出健壮、高容错和高效率的软件,更好地服务社会,为社会创造更多价值。

——丁宇 阿里云云原生应用平台总经理


很有幸读过鲍勃大叔Clean系列的两本书。每当想起过去自己写的代码充斥着混杂的逻辑、不那么优雅的设计,都感觉羞愧,即便它可以正常地工作。当应届生、实习生加入我的团队时,甚至在公司技术总结会上的赠书环节中,我都会推荐《代码整洁之道》和《架构整洁之道》。我们日常对着需求文档来完成项目,也许并不困难,但真正难的是软件设计、代码细节,以及写出充满工程理念、可靠、健壮的应用。工作10余年的我,现在仍然会对软件工程感兴趣,我坚信它是提升整体工业水平的基础。让我们再次畅快感受这本书吧!

——毛剑 Bilibili基础架构负责人

写代码是件容易的事情,但是写出好代码却是件非常难的事情,它需要编写者具备大量的实践经验,以及得到良好的指导。鲍勃大叔把自己几十年的经验“抽象”为程序员要学会的编程纪律、标准和职业操守,指导程序员成为真正的“匠人”—写出优秀的代码、创建出色的系统,更重要的是,为自己的工作感到骄傲和自豪!

——刘欣 IBM前架构师、公众号“码农翻身”作者


鲍勃大叔早已是技术人向往的楷模,他为IT数字化人才持续提升指明了道路,译者同样是技术领域资深专家。这本书深入浅出剖析测试驱动开发(TDD)、敏捷技术应用实践、协同编程、架构至简设计等技术整洁方法论,让读者能真正掌握架构整洁设计的哲学本质,从而在面向不同业务场景时,都能够给出优雅的架构整洁解决方案,使得企业真正降本增效。本书是架构整洁设计实践类好书,特推荐之。

——3孙玄 奈学科技创始人兼CEO、58集团前技术委员会主席


你看过《代码整洁之道》吗?它的作者是鲍勃大叔,这本《匠艺整洁之道》是他的封山之作,我看完之后被深深地吸引。特别力荐给那些追求代码优美、高质量和高效率的程序员朋友们。

——程军 饿了么前技术总监、公众号“军哥手记”主理人


从《代码整洁之道》到《匠艺整洁之道》,从Coding到TDD,鲍勃大叔一直身体力行地用最简洁的文字、最通俗的例子,把他在代码编写、敏捷开发方面的经验倾囊相授。提起敏捷开发,一部分开发者推崇备至,一部分谈虎色变,这其中的原因也简单。因为后者没有掌握敏捷开发的内核,导致敏捷开发变成了形式主义,那么鲍勃大叔的新作给了我们一个重新学习和驾驭敏捷开发的机会!

——马伟青 公众号“沉默王二”作者


提到深入技术,很多人的第一反应是除了框架原理,多半就是数据结构等科班计算机知识了。但奇怪的是不少人即便精于此道,却仍然会在日常编码中陷入焦头烂额的泥潭。这说明除了理论知识与编码工具,还有许多在工程项目中值得遵循的普适性工作方法论。如果你也有为自己团队建立舒适而高效工作流的愿景,那么本书不容错过。

——王译锋 稿定科技前端工程师、《JavaScript二十年》译者


作为一个开发者,最早认识鲍勃大叔是源自他的《代码整洁之道》一书,这本书解决了如何写出整洁代码这一问题。时隔几年,《匠艺整洁之道》教会写代码的程序员们如何整体思考技术,鲍勃大叔像一位谆谆教诲的老师,告诉我们如何思考代码之外的东西,相信你一定能从本书中受益匪浅。

——张远龙 《C++服务器开发精髓》作者、公众号“高性能服务器开发”作者


鲍勃的《匠艺整洁之道》阐释敏捷技术实践的目的,深入探讨敏捷技术实践出现的历史因素,指出敏捷技术实践为何总是那么重要。作者曾亲历敏捷技术的发展和成型过程,全面了解其实践目标和手段,这在本书中体现得淋漓尽致。

—蒂姆·奥廷格(Tim Ottinger)

——知名敏捷教练,图书作者


鲍勃文风上佳。书稿易于阅读,概念解释得非常详尽,即便是新入行的程序员也能读懂。鲍勃也会时不时幽上一默,让你稍做放松。本书的真正价值在于呼唤变革,呼唤更好的东西……呼唤程序员的专业素养……以及对软件无处不在的认识。此外,我相信,鲍勃写到的历史还有许多价值。我很高兴地看到,他没有浪费时间指责我们如何走到今天。鲍勃呼吁大家行动起来,要求他们提高标准和专业素养,从而承担责任,即便有时这意味着某种退步。

——海瑟·坎瑟(Heather Kanser)


作为软件开发者,我们必须不断为雇主、客户、同事和未来解决重要问题。让软件可用尽管困难,但远未足够,并不能令你成为成功匠人。软件能运行,只代表你通过了能力测试。你也许具备成为匠人的能力,但还要掌握更多东西。在本书中,鲍勃阐明了能力测试之外的技能和责任,展示了严肃软件匠人该有的样子。

——詹姆斯·葛莱宁(James Grenning)

《测试驱动的嵌入式C语言开发》(Test-Driven Development for Embedded C)作者,

《敏捷宣言》(Agile Manifesto)作者之一


鲍勃是少数我愿意与之合作技术项目的知名开发者之一。并不只因为他技能出众、名声在外、善于沟通,更在于他曾帮助我成为更好的开发者和团队成员。他往往早于其他人好几年发现软件开发领域的重要变化趋势,且能解释其重要性,鼓舞我学习新技能。回顾我入行之时,匠艺和职业操守的概念还没在软件领域出现,人家只是告诉你要做个有诚信的好人。如今,这些概念已然成为专业开发者能习得的最重要能力,甚至比编码本身更为重要。我很高兴地看到鲍勃再领风气之先,迫不及待想听他阐述观点,并将他的观点应用于实践。

——丹尼尔·马克汉姆(Daniel Markham)Bedford Technology公司负责人


目录

第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

精彩书摘

译 者 序


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


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


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


本书结构


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


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


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


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


给管理者的话


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


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

前言/序言

推荐序一

最近几周一直在看《匠艺整洁之道》的样稿,这是最近半年来我看得最认真的有关软件工程方面的一本书,也是收获最大的一本书。

初识作者鲍勃大叔源于他的《代码整洁之道》(Clean Code),书里不厌其烦地描述如何能够写出高可读性代码的各种注意事项。写这样的书,我没有这样的水平,也没有这样的耐心,于是在《代码的艺术》一书和课件中,我会推荐学员和读者去看。对于一个想要写出好代码的软件工程师来说,是要好好了解这些细节的。

仅凭《代码整洁之道》,我对鲍勃大叔还没有那么崇拜。我一直认为,“写好代码”对于一个优秀的软件工程师还只是最基本的要求,而“写好文档”“做好项目管理”“不断提高自我”“拥有正确的人生目标和价值观”,这些才是更重要的。

很有幸,之后我又看到了鲍勃大叔的其他作品,包括《架构整洁之道》(Clean Architecture)、《代码整洁之道:程序员的职业素养》(The Clean Coder)。这些书让我改变了对鲍勃大叔的“错误”印象。尤其在本次阅读《匠艺整洁之道》的过程中,鲍勃大叔让我肃然起敬,书中诸多观点也让我感受到了强烈的共鸣。

在《代码的艺术》一书中,我提到“代码是人类智慧的结晶”“伟大的系统和产品一定来自优秀的人和团队”。关于优秀软件工程师的修炼之道,我总结为“学习—思考—实践”“知识—方法—精神”“基础乃治学之根本”。而在《匠艺整洁之道》中,鲍勃大叔提出“软件开发人员的职业操守”,总结为“我不写有害的代码”“我生产的代码将永远是我最好的作品”“我永远不会停止学习和改进我的技艺”等10条誓言。这些誓言真的是振聋发聩,值得所有的软件工程师好好学习和思考。在目前这个整体浮躁和迷茫的行业环境中,这些职业操守可以帮人成长,让人沉静,进而做出伟大的产品和系统!

书中关于“极限编程”的总结和描述也是高屋建瓴。关于TDD、重构、简单设计、协同编程这四点所构成的“生命之环”的描述,让人茅塞顿开。大量的软件工程师对“敏捷”有各种错误的认识。而在关于“纪律”的描述中,鲍勃大叔告诉我们,TDD是关键纪律,TDD和重构不可分割,简单设计依赖于重构,协同编程是软件团队共同工作的纪律和艺术。这些总结和论述真是太精辟了!

最后要提醒读者的是,阅读本书确实需要很好的耐心和很强的“向善之心”。大量读者喜欢“××语言从入门到精通”这种快餐类型的书,这样的书虽然可以“吃”得很快,但是“营养”有限。本书显然不是这种快餐类型的图书,书中的不少内容都是基于鲍勃大叔多年经验的总结,要理解、领会这样的内容,是需要阅历、思考和时间的。好的食物需要细细品味,好书也是如此。

感谢鲍勃大叔,也感谢本书的译者韩磊,感谢你们给中国的软件工程师带来这么好的一本书!

——章淼 BFE开源项目发起人、《代码的艺术》作者


推荐序二

很多公司的业务,是由产品或者运营来驱动的。对于一个非技术驱动的公司而言,技术团队的核心工作与核心职责都聚焦在产品与系统的交付上。如何提升产品与系统的交付效率与交付质量,是每一个技术人、每一个技术管理者日思夜想的问题。

我管理技术团队很多年,在带领技术团队作战的过程中,曾经有过这样的困惑与疑虑:

 是什么决定了技术团队交付效率与交付质量的底线?

 如何有效地为交付设定效率标准与质量标准,并持续迭代与改进?

 作为一个技术人,其核心职业操守与道德准则是什么?

鲍勃大叔的Clean Craftsmanship从纪律、标准和职业操守三个方面给了我部分答案,很后悔没有能够早一点读到它。近期,其中文版《匠艺整洁之道》如期而至,作为一个技术人,又或者是一个技术管理者,如果你也遇到过和我类似的困惑与疑虑,建议你读读这本书。

一、关于纪律

不同的公司,研发效率与质量各异,究竟是什么决定了技术团队交付效率与交付质量的底线呢?

举一个很小的例子,有一次我们发布了一个系统,发现用户在访问时大约有1/8的概率出现了异常,这令我们百思不得其解。跟踪下来我们发现,这是因为在进行系统发布的时候,集群中的7个节点二进制发布成功,而1个节点二进制发布失败所导致的。

事后我们复盘,如何避免此类情况的发生呢?答案是“清单革命”。在发布流程里增加一项纪律,必须校验集群所有发布二进制的MD5。从今以后,不管是刚入职的应届生,还是资深的工程师,都不会再犯类似的错误,这就是纪律的威力。

系统发布有纪律、高效率和高质量的系统交付同样存在着有迹可循的纪律准则:测试驱动、系统设计、系统重构、结对编程和验收测试等。正是纪律,决定了技术团队交付效率与交付质量的底线。

二、关于标准

作为技术团队的负责人,如何有效地为交付设定效率标准与质量标准,并持续迭代与改进呢?

研发质量,要有标准:冒烟测试通过率是多少?千行缺陷率是多少?平均需求缺陷数是多少?……

测试质量,要有标准:测试环境自动化搭建程度是多少?用例复用率是多少?全量用例回归时间是多少?……

研发效率,要有标准:项目并行度是多少?故障定位与修复时间是多长?APP版本迭代周期是多长?……

关于标准,鲍勃大叔和我们谈了技术生产力,谈了持续改进,谈了自动化测试,谈了极致质量……

俗话说,没有度量标准,就没有办法评估;没有办法评估,就没有办法改进。正是“度量标准”,在指导着研发的效率与质量不断进步。

三、关于职业操守

不少技术人是有傲气的,包括我自己。我们改变着世界,用代码编写着规则,掌控着互联网运行的规律,那么什么是我们必须遵守的职业操守与道德准则呢?

每当我们写下一行代码,实现一个函数,提供一个接口时,这些意味着什么呢?我们有责任全力保证代码的正确性,有责任让所有继承它的人了解所写函数的作用,有责任保证接口好用、易用、难于误用。因为稍有失误,可能就意味着一次登录的失败、一笔资金的丢失、一次刹车的失效,甚至是以一条生命作为代价。

关于职业操守,鲍勃大叔和我们谈了正确性证明,谈了结构化编程,谈了TDD,谈了突变测试,谈了团队协作,等等。注释,文档,思考,交流,承诺,协作,自动控制,每一行代码里,无一不体现着我们技术人的职业操守。

最后,再次向每一个工程师、每一个技术管理者郑重推荐《匠艺整洁之道》,希望你能有收获,也和每一个致力于提升研发效率与质量的技术人,一起共勉!

——沈剑 公众号“架构师之路”作者


推荐序三:小处见大、以微知著

《匠艺整洁之道》已经是敏捷宣言签署者Robert C. Martin(鲍勃大叔)Clean系列的第五本书。程序员的“匠艺”(Craftsmanship)始终是鲍勃大叔的核心命题,本次从实践、纪律到职业操守,无不在谈这件事情。追求匠艺,就像书中实践部分的TDD一样,是一件知易行难之事。

与很多软件开发的理念和方法一样,对于Clean系列的评价并非众口同声,《敏捷整洁之道》(Clean Agile)前两年就在业内出现了一些批评的声音。有人指出鲍勃大叔过于聚焦局部细节,而忽略了现代软件开发的规模化问题。数字化时代毫无疑问是在持续增加软件系统的复杂度,甚至正在通过软件构建一个元宇宙,而应对这样的复杂度是每家企业、每个组织不得不面对的挑战。

从二十多年前的敏捷宣言开始,我们已经意识到在软件开发方法上是没有一枚银弹的,不同的程序员具有不同的倾向性,也是这个行业的常态。鲍勃大叔最值得我们学习的,并非是他系列著作中的具体方法,而是他持续思考如何将如此复杂的软件开发过程标准化,以提高软件质量的思维方式。这种思考的元模型一旦融会贯通,很多复杂问题都能够“递归”而解。所以Clean系列具有小处见大的特点,读书的关键在于理解鲍勃大叔从个体到集体的匠艺思考。

在硅谷曾有幸听过鲍勃大叔的一场演讲,他在现场激情四射,将几十年的实战所得娓娓道来。这样的感受也可以从本书的字里行间感受到。鲍勃大叔在这个年纪,仍然在持续学习和改进,从最开始的《代码整洁之道》(Clean Code)关注“好代码”,到现在《匠艺整洁之道》关注“好匠艺”,应该说是十年磨一剑的升华。从细微的程序员个人实践开始,以微知著,建立面向高质量、可持续发展的团队纪律和组织能力。

弘扬科学精神和工匠精神,已经是我们面向数字化时代的国策基石,鲍勃大叔给我们带来了软件开发领域几十年的匠艺追求,这份净心,对于尚处于青春期的技术行业,是每一位从业者必要的修炼。只有不停磨炼匠艺,纠正“35岁转管理”这样的行业浮躁心态,从而走向真正的工匠精神之路。

——肖然 Thoughtworks全球数字化转型专家、中国敏捷教练企业联盟秘书长


推荐序四:改变认知的一本书

软件工程师是我们这个时代最接近工匠的一个职业,在我眼中甚至有点儿接近文学和音乐。虽然这个名称里面带着“工程”两个字,但是对比其他的行业或者传统意义上的工程,软件工程的工业化程度还处于比较低的状态,这就意味着对人的要求会更高。我相信很多朋友都听说过一句话:“代码是写给人看的,不是写给机器看的,只是顺便计算机可以执行而已。”但是又有多少工程师有这样的认知呢?

我认为,一个好的工程师的标准正是对待代码的态度,是不是有比能把“代码运行起来”这件事情更高的要求。回想我自己,我觉得我个人的转变是从看鲍勃大叔的《代码整洁之道》开始的。在那之前,作为软件工程师,我关注的重点在于技巧和很多具体的技术细节上。而对于鲍勃大叔的书,大家可能会发现他很少讲技巧,而是告诉大家在代码之外的更多东西,比如如何对待测试,如何对待软件工程,如何用一颗工匠般的心看待自己写出的代码,我认为这样的认知转变是一个优秀软件工程师成长的必经之路。

这本新书也一如既往地精彩,它通俗易懂又发人深省,如果你是一位对于写出好的程序有更高要求的程序员:不仅仅当成一个朝九晚五的工作,而是一门手艺,甚至一门艺术,你会喜欢这本书的。

——黄东旭 PingCAP联合创始人兼CTO


推荐序五

非常荣幸为鲍勃大叔的封山之作中文版写序,我从事软件架构设计及开发十余年,在个人成长以及带技术团队过程中,我都极力推荐鲍勃大叔的 Clean 理念,同时我也是鲍勃大叔Clean理念的受益人,感谢这位世界级的编程大师。

老朋友侠少这次极力邀请我为中文版写序,大抵是因为最近两年我的创业目标和鲍勃大叔殊途同归,我们都致力于提升IT工程师的软件开发水平,鲍勃大叔采用的是不断写书的方式,而我成立了一家奈学科技公司,通过案例剖析和场景实战的创始模式不断提升IT工程师的技术能力,从而为数字经济添砖加瓦,期望能像鲍勃大叔一样影响全世界!

鲍勃大叔Clean系列的每一本书我都详细拜读过,这次新书的电子版刚出来后,我也是以最快的速度拜读了这部封山之作。书中的插画一如既往地精彩,这本书更是之前Clean系列的集大成者。之前的系列更多关注于“技术”本身,这本书更多关注在使用技术的“人”身上。之前的每本书中鲍勃大叔都有很多精彩的思路和经验分享,而这本书中鲍勃大叔把之前的很多思路和经验抽象为方法论呈现给读者,让读者有章可循。

本书一共分为三个部分,即纪律、标准和操守。在第一部分中,作者用实例阐释TDD在敏捷软件中的运用,以及验收测试、协同编程等常被忽视的敏捷侧面与具体策略,同时这部分深刻地阐述了纪律的重要性;如果你是技术团队的管理者,或者是即将成为技术团队的管理者,我极力推荐你反复研读第二部分和第三部分,这两部分言简意赅地阐述了标准和操守对于“人”做软件开发的重要性。

我们这一代工程师是幸福的,因为有鲍勃大叔这样的大师一直引领着我们,如果你现在正在匠师之路上,那就赶紧打开《匠艺整洁之道》吧!

——孙玄 奈学科技创始人兼CEO、58集团前技术委员会主席


推荐序六

这大概是我迄今为止完成最快的一篇序,并不是因为敷衍,而是对这本新书的迫不及待。

2022年3月25日,收到博文视点张春雨老师的邀请,让我给鲍勃大叔的Clean系列新书作序。作为Clean系列的忠实读者,之前的《代码整洁之道》和《架构整洁之道》都曾给予我莫大的帮助与启发。如果当下你在软件开发的过程中有所困惑,遇到些许瓶颈,那么鲍勃大叔的Clean系列非常推荐你读一读,而且建议反复品读。

记得第一次接触Clean系列,是在我读研期间。说实话,第一次读并没有觉得这是一本多好的书。但在工作一段时间之后,由于具备了一定的实践经验,再回过头来品读一番,才顿悟书中内容之妙,这大概就是成长的必经之路吧。当我们没有经历过挫折的时候,对于前辈的指点,总是很难感同身受,甚至觉得根本不对。但当我们真正遇到相同问题的时候,才发现前人的经验确实妙不可言。

我强烈推荐大家拥有一套Clean系列,因为这个系列不仅介绍了关于软件开发过程中的各种优秀实践案例,让我们知道整洁代码、整洁架构给我们带来的好处,以及如何保持整洁的秘诀;而且对于优秀程序员应该具备何种职业素养,并指导我们做出最佳软件的底层思维模式,更有着极佳的指导意义。也许随着社会与技术的发展,有些案例慢慢不再适用,但职业素养和思维模式会伴随我们一生,这些底层逻辑将一直指导我们未来的每一处设计与实践。

介绍了那么多过去的内容,再来谈谈这本新书《匠艺整洁之道》。在刚看到书名的时候,一时半会儿还真猜不出这本书会讲什么,所以在拿到样章那一刻,我就直奔书中主题,一探究竟!这本书的第一章名为“匠艺”,作者认为要做好某件事的本质是需要良好的指导与大量的经验。但是,在如今的软件行业中,有很多程序员并不会做太久,所以他们缺少足够的实践体验和经验沉淀。同时,每隔5年程序员的数量就会翻一番,所以优秀程序员的比例会持续走低。当优秀程序员越来越少,保障软件产品的质量就会越来越难。所以,作者在接下来的章节中分别阐述了决定技艺水平的三个要素:纪律、标准和职业操守,以帮助开发者与管理者改变与提高团队的工作方式,最大限度地生产出高质量的软件产品。从这三部分的内容划分来看,这本书不仅仅适用于一线的开发者,对于管理者也是非常有帮助的。如果你对于目前的开发任务或团队的工作方式不太满意,或许可以通过这本书获取一些新的启发。

听说这本书将是鲍勃大叔的封山之作,所以期待这本书的上市,我一定会将这本书收入囊中,集齐Clean系列。虽然无法召唤神龙,但如之前的Clean系列图书一样,当我遇到困惑的时候,也会再翻出来寻找一些前人的启发。如果你跟我一样,打算在软件行业奋斗一生,那么这样的书,推荐你也拥有一本。

——翟永超 公众号“程序员DD”主理人、《Spring Cloud微服务实战》作者


推荐序七

2022年3月,我从工作了几年的公司离职,准备休息一段时间,老朋友张春雨(侠少)听闻我离职后在微信上跟我说,Robert C. Martin写了本新书,你有兴趣写篇序吗。侠少这几年一直邀我写书,可之前公司发展迅速,我也一直没有时间,恰好最近节奏也算慢了下来,于是就接下了这份活儿。

我知道Robert C. Martin还得从刚毕业去金山工作时说起,当时快盘的工作非常繁重,而我又是一个刚入行的新人,对代码和项目中很多细节都不是特别了解。记忆最深的是,当时的mentor花了一晚上重构了我的代码,跟我说好的工程师应该经常重构保持代码整洁,于是他推荐了几本书给我,其中就有《代码整洁之道》。

我花了一周时间读完这本书,不能说像打开了任督二脉从此走向人生巅峰,但至少明白了工程界有工程界的标准和要求,“整洁”二字说起来简单,但做起来却没那么简单。从个人的素养、软件架构、方法等到代码组织方式等,有太多可以学习和推敲的地方。随着项目本身的发展,这些“软”性的东西将决定着整个项目的能力上限。我也明白了为什么当时的mentor要经常性地重构代码,维护整个项目的“整洁”。

随着年龄的增长,我也从一线工程师开始带起了自己的团队,从几人到几十人,从创业公司到地区级独角兽,从《代码整洁之道》中学到的技巧和思路依然影响着我。从团队组建伊始我就不断强调好的代码就应该如同读一篇文章一样,也会组织定期review和重构等。老实说,这些方法确实在很大程度上帮助了我们团队运作这些项目,避免了大多数大型项目最终失控的命运。

收到侠少给我的样稿后我花了点儿时间通读了一番,我觉得本书是《代码整洁之道》的升华版本,从如何做事到如何做人,这也应对了英文版Craftsmanship这个单词—工匠精神。这本书里更多的是把技术和人文结合起来,少了些技术上的技巧,多了很多工程上的方法论,并不单单只是某种技术。它像一本类似于24条军规一样的书,重申现代世界实际构建者—也就是我们,我们这些工程师应该遵守的职业纪律,它帮助我们面对这份职业的责任,同时帮助我们提高作为工程师或者管理者的上限。

读读此书吧,软件工程已经不仅仅是编码就足够了,而它将会帮到你。

——彭哲夫(CMGS) Garena高级软件工程师