这是一本为专业程序员而写的书,写好代码、追求卓越和工匠精神是每个程序员都应该具备的优秀品质。
写好代码的技艺不是一蹴而就的,它是一个系统化的工程,不是看几本书、写几年代码就能轻松习得的,而需要我们对自己的思维习惯、学习方法和工程实践进行彻底的反省和重构。
每每看到“剪不断、理还乱”的代码,我都会感到懊恼和羞愧。懊恼的是,不知道如何能有效地治理混乱、控制复杂度;羞愧的是,我真的无能为力吗?
一边是无止境的业务需求,一边是补丁加补丁的业务代码,开发人员被夹在中间,像一只困兽,向左走,还是向右走?方向在哪里?我倍感困惑。就像Robert C. Martin说的:“不管你们多敬业,加多少班,在面对烂系统时,你仍然会寸步难行,因为你的大部分精力不是在应对开发需求,而是在应对混乱。”
上述问题是不是也是你常遇到的?刚刚好,终于有了这样一本解决问题的书,让你少走弯路。
【京东购买】【当当购买】
《代码精进之路 从码农到工匠》记录了一个普通码农如何通过认知升级、知识重构、持续学习,继而转向工匠的过程。作为一个技术人,我有义务将这个过程分享出来,以期给同样在路上的你带来一些启发,缩短你“从码农到工匠”的探索路径。
由于认知水平有限,本书的很多观点可能只是一家之言,因此我更希望读者带着批判的眼光来看这本书,取其精华,并对有疑问的地方提出质疑和见解。
灵活性和没有银弹(Silver Bullet),也是软件行业的有趣之处。在这个行业里,一个问题会有很多种解法,即使是最简单的函数也至少可以写出10种不同的代码来实现。因此,知识储备、判断力和思辨力是软件行业给我们提出的更高要求,任何不区分上下文和情景的教条都有可能在实施过程中遭遇惨败。
《代码精进之路 从码农到工匠》共分为三大部分:技艺部分、思想部分和实践部分。
技艺部分(第1~7章)
这部分详细介绍了一些实用的编程技巧和方法论,并配以详尽的代码案例。掌握这些方法论可以有效地提高我们的编程素养,培养更好的编程习惯,写出更好的程序。
第1章命名。好的命名可以极大地提升代码可读性和可理解性,本章主要介绍命名的重要性、命名要注意什么,以及我们如何对不同的软件构建(Artifact)进行命名。
第2章规范。在Google的代码审查(Code Review)实践中,代码是否符合规范(Norms)是最重要的检查项。在本章中,我们将了解必需的规范、如何制定规范,以及如何贯彻规范的实施。
第3章函数。有时即使你不采用任何面向对象(Object Oriented,OO)技术,只把函数写好,代码也会呈现完全不一样的风貌。本章介绍许多写函数的技巧和方法,非常实用。
第4章设计原则。本章介绍了很多前人总结的优秀设计原则,包括最著名的SOLID,它为我们提供了非常好的OO设计指导原则,比如扩展性的终极目标是满足OCP。我个人特别推崇DIP,因为它是架构设计的重要指导原则。
第5章设计模式。好的设计模式能够使代码具有恰到好处的灵活性和优雅性,工程师之间的沟通也会变得简单。本章没有详细介绍GoF中的全部24种模式,只重点介绍几个日常使用频率高、实用性强的设计模式。
第6章模型。软件工程就是一个对现实世界的问题进行分析、抽象、建模,然后转换成计算机可以理解的语言,解释执行,实现特定业务逻辑的过程。本章主要介绍了什么是模型、软件工程中常见的建模方法论,以及如何运用这些模型为软件服务。
第7章 DDD的精髓。领域建模是面向对象技术的精髓,本章的主要思想都来自于领域驱动设计(Domain Driven Design,DDD),但是并没有教条地照搬,而是结合实践对DDD进行了改良、萃取和优化。
思想部分(第9~11章)
思想是比技艺更高层次的能力要求,如果说技艺是“术”,那么思想就是“道”,领悟这些道理,对我们的职业发展会大有裨益。
第8章抽象。抽象能力是工程师需要的核心能力之一。本章介绍了什么是抽象、抽象的层次性、如何进行抽象,以及如何培养结构化思维和抽象思维。
第9章分治。分治思想的伟大之处在于,我们可以将一个很复杂的问题域分解成多个相对独立子问题,再各个击破。分治思想在软件领域可谓是无处不在。
第10章技术人的素养。做一个优秀的工程师不容易,然而还是有一些特质是值得我们学习的。本章主要介绍了技术人应该具备的一些素养,以及如何培养这些素养。
第11章技术Leader的修养。一个优秀的工程师不一定是一个好的技术Leader,一个技术Leader在很大程度上决定了团队的技术味道和技术追求。在本章中,我会介绍自己在技术管理上的一些心得。
实践部分(第12、13章)
“Talk is cheap, show me the code”,一本没有实战的技术书是难以服众的。如果说思想是务虚的最高境界,那么实践就是务实的最低要求。
第12章 COLA架构。本章主要介绍了什么是架构,重点介绍COLA)架构及其背后的设计理念和设计原理。
第13章工匠平台。本章通过COLA架构在工匠平台实际业务场景中的落地,介绍如何使用COLA来搭建一个完整的应用架构,以及如何通过领域建模来实现业务逻辑。
本书的目标读者是专业程序员。无论你使用哪种编程语言、从事哪个岗位的工作,写好代码、追求卓越和工匠精神是每个程序员都应该具备的优秀品质。
本书最适合的读者是具有一定经验、从事以Java语言为主的业务应用开发人员,主要有以下两个原因。
首先,书中所有的示例和讨论都是基于Java语言编写的。熟悉Java语言和面向对象技术,能够更好地理解本书内容,尤其是第5章和第6章,以及思想部分的内容。
其次,COLA是面向业务应用的框架,第13章的实战也一个基于COLA和Spring Boot的业务项目,因此更适用于具有一定工作经验、从事业务开发的读者。
最后,我想特别提醒以下不同类型的读者。
新程序员:如果你是在校生或初入职场的新人,在追求技术宽度的同时,请一定要养成“写好代码”的习惯。充分利用这本书,写好代码,能让你站在一个更高的起点上。
资深程序员:职场的资深人士能够选择本书,说明你和我一样,还怀有一颗“不安分”的心。“种一棵树最好的时间是十年前,其次是现在”,在追求卓越的路上,我们都没有迟到,现在上路还不晚。更何况,我们多年来一直在坚持写代码,这就是一种胜利!
架构师:熟悉我的人都知道,我不赞成在业务团队设置专门的架构岗位,因为我认为架构是一种能力,而不是职位。如果恰巧,你就在这样的岗位上,那么请一定不要画完架构图就算完成工作,要深入代码细节中去,这样才能发现设计中存在的问题,赢得程序员的尊重。如果你对技艺部分已经比较熟悉,建议重点阅读思想部分和实践部分。
技术团队管理者:管理者的一个很重要的使命就是帮助团队成长,包括制定规范和技术传承。倘若你和我一样,不仅仅把自己定位为一个“管理者”,那么请重点阅读第11章。
第 一部分 技 艺
第 1章 命名 / 3
1.1 命名的力量 / 3
1.2 命名其实很难 / 4
1.3 有意义的命名 / 5
1.4 保持一致性 / 7
1.5 自明的代码 / 10
1.6 命名工具 / 14
1.7 本章小结 / 15
第 2章 规范 / 16
2.1 认知成本 / 16
2.2 混乱的代价 / 17
2.3 代码规范 / 18
2.4 埋点规范 / 28
2.5 架构规范 / 30
2.6 防止破窗 / 30
2.7 本章小结 / 31
第3章 函数 / 32
3.1 什么是函数 / 32
3.2 软件中的函数 / 33
3.3 封装判断 / 33
3.4 函数参数 / 34
3.5 短小的函数 / 35
3.6 职责单一 / 36
3.7 精简辅助代码 / 37
3.8 组合函数模式 / 40
3.9 SLAP / 43
3.10 函数式编程 / 48
3.11 本章小结 / 49
第4章 设计原则 / 51
4.1 SOLID概览 / 51
4.2 SRP / 52
4.3 OCP / 53
4.4 LSP / 54
4.5 ISP / 57
4.6 DIP / 58
4.7 DRY / 61
4.8 YAGNI / 61
4.9 Rule of Three / 62
4.10 KISS原则 / 62
4.11 POLA原则 / 63
4.12 本章小结 / 63
第5章 设计模式 / 64
5.1 模式 / 64
5.2 GoF / 65
5.3 拦截器模式 / 69
5.4 插件模式 / 73
5.5 管道模式 / 75
5.6 本章小结 / 79
第6章 模型 / 81
6.1 什么是模型 / 81
6.2 UML / 84
6.3 类图 / 85
6.4 领域模型 / 95
6.5 敏捷建模 / 96
6.6 广义模型 / 97
6.7 本章小结 / 99
第7章 DDD的精髓 / 101
7.1 什么是DDD / 101
7.2 初步体验DDD / 102
7.3 数据驱动和领域驱动 / 104
7.4 DDD的优势 / 109
7.5 DDD的核心概念 / 112
7.6 领域建模方法 / 118
7.7 模型演化 / 127
7.8 为什么DDD饱受争议 / 127
7.9 本章小结 / 130
第二部分 思 想
第8章 抽象 / 133
8.1 伟大的抽象 / 133
8.2 到底什么是抽象 / 134
8.3 抽象是OO的基础 / 135
8.4 抽象的层次性 / 136
8.5 如何进行抽象 / 137
8.6 如何提升抽象思维 / 143
8.7 本章小结 / 145
第9章 分治 / 146
9.1 分治算法 / 146
9.2 函数分解 / 150
9.3 写代码的两次创造 / 150
9.4 分治模式 / 151
9.5 分层设计 / 152
9.6 横切和竖切 / 154
9.7 本章小结 / 155
第 10章 技术人的素养 / 156
10.1 不教条 / 156
10.2 批判性思维 / 161
10.3 成长型思维 / 162
10.4 结构化思维 / 163
10.5 工具化思维 / 167
10.6 好奇心 / 169
10.7 记笔记 / 170
10.8 有目标 / 171
10.9 选择的自由 / 172
10.10 平和的心态 / 173
10.11 精进 / 174
10.12 本章小结 / 174
第 11章 技术Leader的修养 / 175
11.1 技术氛围 / 175
11.2 目标管理 / 179
11.3 技术规划 / 182
11.4 推理阶梯 / 184
11.5 Leader和Manager的区别 / 185
11.6 视人为人 / 186
11.7 本章小结 / 187
第三部分 实 践
第 12章 COLA架构 / 191
12.1 软件架构 / 191
12.2 典型的应用架构 / 193
12.3 COLA架构设计 / 200
12.4 COLA测试 / 209
12.5 COLA架构总览 / 212
12.6 本章小结 / 214
第 13章 工匠平台 / 215
13.1 项目背景 / 215
13.2 整理需求 / 216
13.3 工匠Demo / 217
13.4 使用COLA / 218
13.5 领域模型 / 219
13.5.1 领域建模 / 219
13.6 核心业务逻辑 / 222
13.7 实现技术细节 / 227
13.8 测试 / 229
13.9 本章小结 / 232
张建飞 著
1.全面讲解编程技艺与方法,帮助读者培养良好的编程习惯。
2.着重培养技术人员的思想与素养,分享多年技术管理心得。
3.深度揭秘阿里巴巴团队在复杂度治理方面的探索与实践。
4.重点介绍开源框架COLA架构及其企业级应用“工匠平台”。
这是一本为专业程序员而写的书,写好代码、追求卓越和工匠精神是每个程序员都应该具备的优秀品质。
本书共有13章内容,主要分为技艺部分、思想部分和实践部分。技艺部分详细介绍了编程技巧和方法论,并配以详尽的代码案例,有助于读者提高编写代码的能力,优化代码质量。思想部分主要包括抽象能力、分治思想,以及程序员应该具备的素养等内容。实践部分主要介绍了常见的应用架构模式,以及COLA架构的设计原理。
张建飞,阿里巴巴集团高级技术专家,Java全球管理组织(JCP)执行委员会正式会员(Full Member)。2007年计算机工程硕士毕业后,先后在软件公司InfoSys与互联网公司eBay担任高级研发和技术专家的职务。2014年加入阿里巴巴,先后在1688、ICBU和零售通担任技术主管。
作者精通面向对象技术,有丰富的一线编码实战和架构经验。特别是在应用架构、领域建模和复杂度治理领域,自研了COLA框架。COLA自开源以来,已经被多个技术团队使用,解决了DDD落地和应用扩展问题,受到了普遍关注和一致好评。
作者提倡“工匠精神”,对于如何打造一个追求卓越、独具匠心的技术团队,如何量化考核工程师的技术贡献,都有着非常深入的思考和实践,并探索出一套切实可行的方法论。基于该方法论打造的“工匠平台”,在阿里巴巴内部被广泛使用,“工匠平台”丰富了对技术人员考察的维度,是除业务结果之外的从技术视角给技术人员“照镜子”的有效工具。