匠艺整洁之道:程序员的职业修养(英文版)
  • 推荐0
  • 收藏0
  • 浏览37

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

Robert C. Martin (作者) 

  • 书  号:9787121445828
  • 出版日期:2023-05-01
  • 页  数:
  • 开  本:
  • 出版状态:上市销售
  • 原书名: Clean Craftsmanship: Disciplines, Standards, and Ethics
  • 原书号:9780136915713
  • 维护人:张春雨
Robert Martin在本书中为软件工艺的基础规程提供了实用的、技术性的和说明性的指南,他总结了编程专业的道德规范,描述了所有开发人员应该对他们的同事、用户,尤其是他们自己做出的基本承诺。
罗伯特·马丁(Robert Martin)是《代码整洁之道》(Clean Code)的畅销书作者,他为软件工艺的基础学科提供了实用、技术和规范性的指南。他讨论了标准,展示了世界对开发人员的期望与他们自己的期望之间的差异,并帮助您将两者同步。Bob以编程职业道德作为结束,描述了所有开发人员应该向他们的同事、他们的用户,尤其是他们自己做出的基本承诺。
1964年,年仅12岁的罗伯特 C. 马丁(鲍勃大叔)就已写下他的第一行代码。他自1970年起从事程序员职业。他与人合办了cleancoders.com网站,为软件开发者提供在线视频培训服务。他还创办了Uncle Bob咨询有限公司,为分布于世界各地的大公司提供软件咨询、培训和技能培养服务。同时,他也供职于芝加哥的软件咨询企业8th Light,任大匠(Master Craftsman)一职。
马丁先生在多本行业杂志上发表过数十篇文章。他是各种国际性会议和行业活动讲坛上的常客。他也是cleancoders.com网站上广受赞誉的多个系列视频的创作者。
马丁先生编著了多本图书,包括:
Designing Object-Oriented C++ Applications Using the Booch Method
Patterns Languages of Program Design 3
More C++ Gems
Extreme Programming in Practice
Agile Software Development: Principles, Patterns, and Practices
UML for Java Programmers
Clean Code
The Clean Coder
Clean Architecture: A Craftsman’s Guide to Software Structure and Design
Clean Agile: Back to Basics
作为软件开发行业的领军人物,马丁先生曾任C++ Report杂志主编达三年之久。他也是敏捷联盟(Agile Alliance)的首任主席。
在开始之前,有两个问题需要面对。搞清楚这两个问题,读者才能理解本书所根植的理念。
关于“匠艺”(Craftsmanship)
21 世纪之初的那些年,言辞之争不绝于耳。身在软件行业,我们见证了这些争议。其中,“匠人”(craftsman)一词常被认为太过狭隘。
我思考了很久,与持各种意见的朋友交流。我的结论是,对于本书而言,没有更好的词可用。
我考虑过改用craftsperson、craftsfolk、crafter等词,但这些词承担不起craftsman一词的历史庄严感。而这种历史庄严感正是本书想传递的重要讯息。
“匠人”让人想到一位技艺高超、成就非凡的行家—善用工具,熟悉行业,为自己的工作而自豪,满怀尊严和专业精神,值得信赖。
你们中的一些人可能会不同意我用这个词,我很理解。我只希望你们无论如何都不要认为这是在试图找到一个非它不可的词,因为这绝不是我本意。
唯一真路
当阅读《匠艺整洁之道》一书时,你可能会感到这是通往工匠精神的唯一真路。对我来说可能是这样,但对你来说可未必。这本书展示了我的路径。当然,你要选择自己的路径。
我们最终会不会需要唯一真路?不知道,也许吧。正如你将读到的那样,对软件职业做出严格定义的难度正在增加。我们也许可以根据所创建的软件的关注重点,采用几种不同的路径。但是,正如你将在下文中读到的那样,要把关键软件和非关键软件区分开来可能并不那么容易。
但我可以肯定一件事。“士师” 的日子已一去不返。每名程序员都各自做自己眼中正确的事,已经不够。纪律、标准和对职业操守的要求将会出现。今天摆在我们面前的问题是,让程序员自己来定义这些纪律、标准和职业操守,还是让那些不了解我们的人强加给我们。
本书介绍
本书是为程序员和管程序员的人编写的。但在另一种意义上,本书是为整个人类社会编写的。因为正是我们,这些程序员,无意中发现自己恰好处于这个社会的支点上。
为了自己
如果你已经编程好几年,大概能体会到系统成功部署和运转所带来的满足感。获得这样的成就,作为其中一分子,颇值得骄傲。你为自己能做出这套系统而自豪。
然而,你会为自己做出系统的方式而自豪吗?是为完成了工作而自豪,还是为自己的技艺而自豪?是因为系统得以部署而自豪,还是为你打造系统的方式而自豪?
艰难编程一整天,回到家里,你是会对着镜子里的自己说:“今天干得真棒。”还是只能想到去冲个澡?
当一天结束时,很多程序员会感觉自己很脏。我们觉得自己深陷低水准工作的泥潭。我们感到,只有牺牲质量才能赶上进度,而且有人在期待我们这样做。我们甚至开始相信,生产力与质量就是相冲突的。
在本书中,我将尽力打破这种思维模式。本书关注如何做好工作。本书将阐述每名程序员都该懂得的纪律与实践手段,遵守这些纪律与掌握相差手段,才能高效工作,并且为自己每天写的代码感到自豪。
为了社会
21世纪,为了生存,我们的社会开始由无纪律和不受控的技术主导,这是人类历史上首次出现的状况。软件入侵了现代生活的方方面面,从早晨喝咖啡到晚间娱乐,从洗衣到开车。软件让我们既在世界级网络中连接,又在社会和政治层面上分裂。现代世界的生活没有哪一方面不由软件所主导。然而,我们这些构建软件的人不过是乌合之众,对自己所做之事了解甚少。
如果我们这些程序员做得更像样,2020年艾奥瓦州党内选举结果能否如期得出?两架波音737 Max飞机上的346位乘客还会罹难吗?骑士资本集团(Knight Capital Group)会在45分钟之内损失4.6亿美元吗?丰田汽车的意外加速故障会导致89人死亡吗?
全世界程序员数量每5年翻一番。程序员们几乎没有接受过相关技能教育。他们只是看了看工具,做过几个玩具式的开发项目任务,便被扔进指数级增长的劳动力队伍中,去应付指数级增长的软件需求。每一天,我们称之为软件的那个纸牌屋都在不断深入我们的基础设施、我们的机构、我们的政府,还有我们的生活。每一天,灾难风险都在不断增加。
我说的是什么灾难?不是文明的崩塌,也不是所有软件系统突然解体。摇摇欲坠的纸牌屋并非由软件系统本身构成。我说的是,软件的公众信任基础非常脆弱、岌岌可危。
有太多波音737 Max事故,太多丰田汽车意外加速故障,太多加州大众EPA丑闻和艾奥瓦州党内选举结果拖延—太多太多臭名昭著的软件失误或恶行。失去信任感、深感愤怒的公众将把目光投向我们的纪律、操守与标准缺失。规条随之而来,那将是我们本不该背负的规条。规条将削弱我们自由探索和延展软件开发工艺的能力,将严厉限制技术发展与经济增长。
本书并不打算阻止人们一头扎进越来越多的软件应用中,也不打算减缓软件生产的速度,因为这种意图注定徒劳无功。社会需要软件,而且无论如何都会得到软件。试图扼杀这种需求,并不能叫停迫在眉睫的公众信任灾难。
相反,本书的目标是让软件开发者和他们的管理者明白纪律的必要性,向他们传授最有效的纪律、标准与职业操守,令他们能够最大限度地生产健壮、高容错和高效的软件。唯有改变我们这些程序员的工作方式,提高纪律、标准和职业操守的水准,才能支撑起纸牌屋,防止它倒塌。
本书结构
本书分为三个部分:纪律、标准、职业操守。
纪律是最基础的一层。这部分关注实用性、技术性和规范性。阅读和理解这个部分,各类程序员都能从中受益。这部分内容配了一些视频,以展示真实的由测试驱动的开发节奏和重构纪律。本书的文字部分也旨在展示这种节奏,但还是视频比较有效。
标准是中间层次。这部分概括了世界对程序员这行的期望。管理者应该好好阅读,从而了解对专业程序员应有的期望。
操守在最高层。这部分阐述了编程职业的道德背景。它以誓言或一套承诺的形式体现,其中包括大量关于历史与哲学的话题。程序员和管理者都应该阅读这部分内容。
给管理者的话
本书包含了对你有益的大量信息。其中也会有你大概不需要理解的大量技术内容。建议你阅读每章的简介部分,当遇到超出所需的技术内容时尽管跳过,直接阅读后续章节。
一定要读第Ⅱ部分“标准”和第Ⅲ部分“操守”。这两部分中的五项纪律都要好好阅读。
致  谢
谢谢勇敢的审阅者们:戴门·波尔(Damon Poole)、埃里克·克里奇劳(Eric Crichlow)、海瑟·坎瑟、蒂姆·奥廷格、杰夫·兰格(Jeff Langr)和斯塔西·韦斯卡迪(Stacia Viscardi)。
感谢朱莉·费弗(Julie Phifer)、克里斯·赞恩(Chris Zahn)、曼卡·麦塔(Menka Mehta)、卡罗尔·莱利尔(Carol Lallier),以及Pearson公司所有为本书能顺利出版而殚精竭虑的同人们。
和以往一样,要感谢创意无穷、天才横溢的插画师詹妮弗·孔科(Jennifer Kohnke)。她的作品总令我会心微笑。
当然,还要感谢我深爱的妻子和美好的家庭。

目录

第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

读者评论

相关图书

软件开发珠玑:穿越50年软件往事的60条戒律

【美】Karl Wiegers (作者) 死月 (译者)

《软件开发珠玑:穿越50年软件往事的60条戒律》像牡蛎一样,去芜存菁,将作者五十年来在软件工程领域摸爬滚打得来的经验教训凝结为软件开发珠玑。它围绕需求、设计、项...

 

Python精粹

【美】David M. Beazley (作者) 卢俊祥 (译者)

这是一本关于Python编程的书。它并不覆盖Python的方方面面,其重点是呈现现代且精选的Python语言核心,即侧重于Python编程本身。这包括抽象实现、...

 

Python一行流:像专家一样写代码

Christian Mayer (作者) 苏丹 (译者)

本书专注于从初学迈向进阶的Python编码技术:如何像专家一样写出优雅、准确、简洁高效的Python 单行代码;阅读任意一行Python 代码时,如何系统性地对...

¥89.00

剑指Offer(专项强化版):数据结构与算法名企面试题精讲

何海涛 (作者)

本书全面、系统地总结了在准备程序员面试过程中必备的数据结构与算法。本书首先详细讨论整数、数组、链表、字符串、哈希表、栈、队列、二叉树、堆和前缀树等常用的数据结构...

¥89.00

C++服务器开发精髓

张远龙 (作者)

本书从操作系统原理角度讲解进行C++服务器开发所需掌握的技术栈。全书总计9章,第1~2章讲解C++ 11/14/17新标准中的常用特性、新增类库,以及C++开发...

 

PHP编程(第4版)

Rasmus Lerdorf(拉斯马斯·勒多夫), Kevin Tatroe(凯文·塔特罗), Peter MacIntyre(彼得·麦金太尔) (作者) 卢涛 (译者)

PHP是一种被广泛使用的Web编程语言,它简单易用,而且与时俱进,不断进化,提升性能。本书基于PHP 7.4,深入介绍 PHP编程技术,涵盖了 PHP 所有基本...

¥109.00