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)。她的作品总令我会心微笑。
当然,还要感谢我深爱的妻子和美好的家庭。