他教全世界程序员怎么写好代码,而且将所有答案写在这本书里!
如果你已经写了好几年代码,你写的软件也已经稳定运行了很久,你甚至知道有多少用户在使用你的系统,包括你的女友、家人和同学。让系统成功部署和运转能给我们这些程序员带来满足感、成就感,但很难持续太久。
艰难编程一整天以后,当你回到家里时,你是会:
对着镜子里的自己说:“今天干得真棒!”
还是会觉得自己只是流水线中的“码农”,深陷低水准工作的泥潭?
你是否开始信奉,只有降低质量才能赶上进度,而且这已经成为团队的潜规则;你们只差喊出这句话:生产力与质量就是成反比的!!!
这还不是最糟糕的。焦虑、困惑、内卷将会接踵而至——35 岁职业分水岭迫在眉睫,会很多时髦语言、框架的新同事不断涌现,最近你总在考虑:到底是该要求老板提升你做 leader,还是出去创业试试?
其实,你还有一个选择,从码农走向匠师!
因为,匠师有自己的骄傲,可以用骄傲打败焦虑、赶走内卷、跨越年龄!而让一个编码匠师骄傲的,永远只有一件事,绝不是写出什么系统,而是自己写系统的方式。
▊ 你最终为谁编程——老板?用户?不,是社会!
21 世纪,为了生存,我们的社会开始由技术主导,这是人类历史上首次出现的状况。
软件入侵了现代生活的方方面面,从早晨用手机刷开地铁闸机到中午扫码付午餐钱,从在淘宝买衣服到用滴滴打车。随着软件不断深入铁路和飞机等基础设施、银行等商业机构,甚至深入政府,发生“灾难”的风险在不断增加。
这意味着我们这些程序员的失误有可能导致:
一次登录失败
一笔资金丢失
一次刹车失效
甚至是以生命作为代价
……
这不是危言耸听,波音 737 MAX 8 的一个 Bug 让我们这个社会损失了两架 1.2 亿美元的飞机,夺去了 338 条鲜活的生命!
在此背景下,与其期待漫威英雄拯救世界,不如祈祷这些系统背后的程序员都能真正承担责任。
尤其是 35 岁前后的你,正值年富力强,却被这个数字诅咒,误以为软件开发生涯已接近尾声。正好相反,无论是你还是你的 Boss,都需要及早树立“匠师”思维。因为“匠师”意味着技艺高超、成就非凡的行家——善用工具,熟悉行业,为自己的工作而自豪,满怀尊严和专业精神,值得信赖——他们是人类社会这个脆弱系统最后的夕阳武士。
要成为他们,意味着:
当写下一行代码,实现一个函数,提供一个接口时,我们清楚地明白这意味着什么!
当产出代码时,保证代码正确,保证所有继承它的人都可以轻松了解它的作用!
当提供接口时,我们可以自豪地宣称自己提供的接口好用、易用、难于误用!
不要再为 35 岁恐慌!你不屑于做管理,你也对开公司不感兴趣,上天注定你只能成为下一个 “匠师”。那是程序世界的最高境界,不仅值得你孜孜求索,也并非遥不可及。
▊ 拒绝成为“码农”!全面进化成“编码匠师”!!!
软件工程师可能是我们这个时代最接近工匠的一个职业,因为“代码是写给人看的,不是写给机器看的,只是计算机可以执行而已”。
一名好的工程师,应该有把“代码运行起来”这件事情更高的要求,用工匠般的心看待自己写出的代码,坚持聚焦在产品与系统的交付上,用纪律、标准和职业操守严格约束自己,最大限度地生产健壮、高容错和高效的软件。
纪律,是探索高效率和高质量的系统交付准则,坚持测试驱动、系统设计、系统重构、结对编程、验收测试等工作流程。纪律决定了技术团队交付效率与交付质量的底线。
标准,是对研发质量、测试质量、研发效率、技术生产力、持续改进等建立量化指标。全面梳理“冒烟测试通过率是多少?”“千行缺陷率是多少?”“用例复用率是多少?”“全量用例回归时间是多少?”等一系列指标的合格线,以便不断评估、改进,标准指导研发的效率与质量不断进步。
职业操守,是我们必须坚守的道德准则与底线,注释、文档、思考、交流、承诺、协作、自动控制,每一行代码里,无一不体现着我们技术人的职业操守。唯有坚持“我不写有害的代码”“我生产的代码将永远是我最好的作品”“我永远不会停止学习和改进我的技艺”等职业操守,坚信我们是在用代码编写规则,掌控互联网运行的规律,才能守正创新,行稳致远。
那么,该如何认识纪律、标准与职业操守,并将其应用在工作之中呢?
Clean Code、Clean Agile、《架构整洁之道》等经典图书的作者——鲍勃大叔(罗伯特 C. 马丁),35 岁之前他在写代码,35 岁之后他写出了更好的代码,第二个 35 年后,他在教全世界程序员怎么写好代码,而且将所有答案存放于封山之作——《匠艺整洁之道》中。
从最开始的 Clean Code 关注“好代码”,到现在《匠艺整洁之道》关注“好匠艺”, 鲍勃大叔十年磨一剑,给我们带来了软件开发领域几十年的匠艺追求。
随着对软件职业做出严格定义的难度正在增加。我们也许可以根据所创建的软件的关注重点,采用几种不同的路径。但是,要把关键软件和非关键软件区分开来可能并不那么容易。
依靠领袖的日子已一去不返。每名程序员都各自做自己眼中正确的事已经不够。纪律、标准和对职业操守的要求将会出现。今天摆在我们面前的问题是,让程序员自己来定义这些纪律、标准和职业操守,还是让那些不了解我们的人强加给我们。
唯有改变我们这些程序员的工作方式,提高纪律性、职业操守和标准,才能支撑起纸牌屋,防止它倒塌。
……
鲍勃大叔用净心实事求是,正本清源,全面剖析了尚处于青春期的技术行业,每一位从业者都能从中得到表象背后的“行业机密”。
鲍勃大叔用真心小处见大、以微知著,全面展现自己几十年上下求索得出的从个体到集体的匠艺思考,打破技术人头上的“紧箍咒”,让技术人为自己的工作感到骄傲和自豪。
鲍勃大叔用热心身体力行、谆谆教诲,把自己几十年来在代码编写、敏捷开发方面经验,“抽象”为程序员要学会的纪律、标准和职业操守,并毫无保留地倾囊相授,指导程序员写出优秀的代码、创建出色的系统,成为真正的“匠师”!!!
鲍勃大叔用好奇心“码”耕不辍,不断战斗,阅读本书,你将从最优秀、最有经验、最有战斗力的人身上找到改进自己的方法,找回编码的激情,激起提升手艺的欲望,获得无尽的精力,无所畏惧地追求完美。
唯有不停磨炼匠艺,纠正“35 岁转管理”这样的行业浮躁心态,才能走向真正的工匠精神之路。
本书结构
本书分为三个部分:纪律、标准、职业操守。
纪律是最基础的一层。这个部分关注实用性、技术性和规范性。阅读和理解这个部分,各类程序员都能从中受益。这部分内容配了一些视频,以展示测试驱动开发节奏和重构纪律。文本部分即旨在展示这种节奏,但还是视频比较有效。
标准是中间层次。这部分概括了世界对程序员这行的期望。管理者应该好好阅读,从而了解对专业程序员应有的期望。
职业操守在最高层。这部分阐述了编程职业的道德背景。它以誓言或一套承诺的形式体现,其中包括大量关于历史与哲学的话题。程序员和管理者都应该阅读这部分内容。
本书是为程序员和管程序员的人写的。但在另一种意义上,本书是为整个人类社会写的。因为正是我们这些程序员恰好处于这个社会的支点上。
作者简介
罗伯特 C. 马丁(鲍勃大叔),软件开发行业领军人物,曾任 C++ Report 杂志主编、敏捷联盟首任主席、Object Mentor 公司总裁,面向对象设计、模式、UML、敏捷方法学和极限编程领域的资深顾问。
1964 年,年仅 12 岁的就已写下他的第一行代码。他自 1970 年起从事程序员职业。他与人合办了 cleancoders.com 网站,为软件开发者提供在线视频培训服务。他还创办了 Uncle Bob 咨询有限公司,为分布于世界各地的大公司提供软件咨询、培训和技能培养服务。同时,他也供职于芝加哥的软件咨询企业 8th Light,任大匠(Master Craftsman)一职。
马丁先生在多本行业杂志上发表过数十篇文章,是各种国际性会议和行业活动讲坛上的常客。他也是 cleancoders.com 网站上广受赞誉的多个系列视频的创作者,也是 Designing Object-Oriented C++ Applications Using the Booch Method 以及 Jolt 获奖图书 Agile Software Development, Principles, Palterns,and Practices,Clean Code 等畅销书作者。
译者简介
韩磊,IT 产品与运营专家、IT 图书专业译者,译有《代码整洁之道》《梦断代码》《C#编程风格》等多部计算机图书。曾担任 CSDN 副总经理、《程序员》总编辑、广东二十一世纪传媒股份有限公司新媒体事业部总经理等职,现任 AR 初创企业亮风台广州公司总经理。
中外匠师如此评价
感谢鲍勃大叔,也感谢本书的译者韩磊,感谢你们给中国的软件工程师带来这么好的一本书!
——章淼 BFE 开源项目发起人、《代码的艺术》作者
向每一个工程师、每一个技术管理者郑重推荐《匠艺整洁之道》,希望你能有收获,也和每一个致力于提升研发效率与质量的技术人,一起共勉!
——沈剑 公众号“架构师之路”作者
鲍勃大叔给我们带来了软件开发领域几十年的匠艺追求,这份净心,对于尚处于青春期的技术行业,是每一位从业者必要的修炼。只有不停磨炼匠艺,纠正“35 岁转管理”这样的行业浮躁心态,从而走向真正的工匠精神之路。
——肖然 Thoughtworks 全球数字化转型专家、中国敏捷教练企业联盟秘书长
这本新书一如既往地精彩,它通俗易懂又发人深省,如果你是一位对于写出好的程序有更高要求的程序员:不仅仅当成一个朝九晚五的工作,而是一门手艺,甚至一门艺术,你会喜欢这本书的。
——黄东旭 PingCAP 联合创始人兼 CTO
我们这一代工程师是幸福的,因为有鲍勃大叔这样的大师一直引领着我们,如果你现在正在匠师之路上,那就赶紧打开《匠艺整洁之道》吧!
——孙玄 奈学科技创始人兼 CEO、58 集团前技术委员会主席
如之前的 Clean 系列图书一样,当我遇到困惑的时候,也会再翻出来寻找一些前人的启发。如果你跟我一样,打算在软件行业奋斗一生,那么这样的书,推荐你也拥有一本。
——翟永超 公众号“程序员 DD”主理人、《Spring Cloud 微服务实战》作者
它是一本类似于 24 条军规的书,重申现代世界实际构建者—也就是我们,我们这些工程师应该遵守的职业纪律,它帮助我们面对这份职业的责任,同时帮助我们提高作为工程师或者管理者的上限。
读读此书吧,软件工程已经不仅仅是编码就足够了,而它将会帮到你。
——彭哲夫(CMGS) Garena 高级软件工程师
开发者与其追逐技术热点,不如修炼内功、提升技艺水平。而决定技艺水平下限的正是纪律、标准、原则和职业操守这些软实力。鲍勃大叔的新书《匠艺整洁之道》是这样一本好书,帮助开发者提高能力基线和专业精神,产出健壮、高容错和高效率的软件,更好地服务社会,为社会创造更多价值。
——丁宇 阿里云云原生应用平台总经理
我们日常对着需求文档来完成项目,也许并不困难,但真正难的是软件设计、代码细节,以及写出充满工程理念、可靠、健壮的应用。工作 10 余年的我,现在仍然会对软件工程感兴趣,我坚信它是提升整体工业水平的基础。让我们再次畅快感受这本书吧!
——毛剑 Bilibili 基础架构负责人
写代码是件容易的事情,但是写出好代码却是件非常难的事情,它需要编写者具备大量的实践经验,以及得到良好的指导。鲍勃大叔把自己几十年的经验“抽象”为程序员要学会的编程纪律、标准和职业操守,指导程序员成为真正的“匠人”—写出优秀的代码、创建出色的系统,更重要的是,为自己的工作感到骄傲和自豪!
——刘欣 IBM 前架构师、公众号“码农翻身”作者
这本书深入浅出剖析测试驱动开发(TDD)、敏捷技术应用实践、协同编程、架构至简设计等技术整洁方法论,让读者能真正掌握架构整洁设计的哲学本质,从而在面向不同业务场景时,都能够给出优雅的架构整洁解决方案,使得企业真正降本增效。本书是架构整洁设计实践类好书,特推荐之。
——孙玄 奈学科技创始人兼 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 公司负责人
译者序
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 和敏捷教练
限时下单立减 50,快抢!
评论