前些日子查些资料想要看一下阿里巴巴开发手册,网上一搜出来了一大推,也搞不清楚哪个,更让人讨厌的是有很多介绍开发手册文章的是某些培训机构来吸引流量的,都能看得来的写文章的人根本不懂这些东西,最后放个二维码让你加微信,然后就是各种套路你报培训班。
初次了解开发手册是2020年初,当时很认真地看了几遍,觉得还是非常不错的,之后一直没有太关注也就遗忘了。这次找这个手册是彻底把我搞蒙了,到底哪个版本是最新了。本着搞明白的心态,查了一些资料才把这一套手册的来龙去脉搞明白。笔者花了2个小时的时间,把各个版本整理了一下,希望初学者不要被无良引流号给误导了。
截至目前,一共发布了9个版本,笔者全部收集齐了,并且还收集到了大神Hollis编写的辅助读物:灵魂N问,下载地址一并放在文章的最后。
版本号 | 版本名 | 发布日期 | 备注 |
---|---|---|---|
黄山版(1.7.1) | 《Java 开发手册》 | 2022/02/03 | 新增11条规约。比如:浮点数的后缀统一为大写;枚举的属性字段必须是私有且不可变的;配置文件中的密码需要加密等。新增描述中的正反例2条。比如:多个构造方法次序,NoSuchMethodError处理;新增扩展说明5条。比如:父集合元素的增加或删除异常等。修改描述22处。比如:魔法值 示例代码、ScheduledThreadPool问题等。修正嵩山版中部分代码格式错误和描述错误。 |
嵩山版(1.7.0) | 《Java 开发手册》 | 2020/08/03 | 增加前后端规约。打通前后端的任督二脉,形成前后端协作开发的共识。重画分层图例。新图更加突出分层的清晰度,并且去掉图中有歧义的向上箭头。修正BigDecimal的equals错误。3.0与3.00在我们的常规认知里是相等的,但是equals比较的结果由于考虑到精度因素,所以返回为false。修正泰山版的部分文字描述错误。 |
泰山版(1.6.0) | 《Java 开发手册》 | 2020/04/22 | 新增 5 条日期时间规约新增 2 条表别名 sql 规约新增统一错误码规约 |
华山版(1.5.0) | 《Java 开发手册》 | 2019/06/13 | 新增 21 条设计规约修改描述 112 处完善若干处示例 |
详尽版(1.4.0) | 《阿里巴巴 Java 开发手册》 | 2018/06/06 | 新增 16 条设计规约 |
终极版(1.3.0) | 《阿里巴巴 Java 开发手册》 | 2017/09/19 | 增加单元测试规约 |
1.2.0 | 《阿里巴巴 Java 开发手册》 | 2017/05/20 | 公开征集意见后修正版本 |
正式版(1.1.0) | 《阿里巴巴 Java 开发手册》 | 2017/02/27 | 增加前言和专有名词说明,修正部分描述 |
1.0.0 | 《阿里巴巴 Java 开发手册》 | 2016/12/07 | 首次向业界开放 |
如果你有心去品一品这9个版本的开发手册,还是有一些比较有意思的事情的。
对比一下第一版的开发手册和最新版的,你会发现第一版真的很Low,跟一个公司内部的文档没啥区别。作者孤尽自己也没想到,这个开发手册后来会这么火,第一版草率一点也可以理解。同时也是告诉大家,对自己的知识认真地去总结吧,这些都是财富。
不过文档中的颜色、字体、排版做的还是不错的,阅读起来比较重要的部分还是很醒目的,对于初入职场的同学来说,文档写作的习惯和风格也是非常值得学习的。
1.1.0版至少加了个封面,还有前言、目录,最后还放了二维码,已经像一本书的感觉了。
1.2版和1.1版没太大的差别,跳过不说,1.3版封面完全不一样了。最重要的是这一版出版了,是电子工业出版社。这个封面个人感觉还不如1.2版的,没看懂设计师要表达什么涵义。这一版要吐槽一下,版本起了个名字叫终极版,导致我刚刚了解到开发手册的时候以为终极版是最新的版本,这个时期作者给版本起名字确实有点敷衍了。出版社可能也没想到到现在已经更新了好几版,不知道是开心还是开心呢?
果然,不到1年,又出了1.4版,出版社已经不敢标什么版本了,编辑的内心这时会是什么样的?
从1.5版本开始,更名为Java开发手册,去掉了阿里巴巴,并且书的最后也没有了阿里巴巴的版权声明,这是众多开发者做出贡献的结果,他不再被打上阿里巴巴的标签了。(下面是1.3.0版本最后的法律声明)
华山版:修炼一年终出关,不知为什么看到这句话我总想起岳不群和东方不败,是我的问题吗?
泰山版:会当凌绝顶,一览众山小,有点霸气侧漏的感觉。
嵩山版:清幽现云山,虚静出内功。无论干什么,修炼内功都很重要。画面中的扫地僧很应景,也是告诉我们,不要小看任何一个人。
最新发布的黄山版,没有了slogan。
不过孤尽老师在知乎上的回答提到了一句:五岳归来不看山,黄山归来不看岳。不知道会不会是最后的版本,作者自己说也:忘掉以前的版本吧。
听起来感觉黄山版貌似是最终版了,但好像并没有太大的改动,从这点上来说,称之为黄山版,个人感觉有点不太配。
不过话说回来,读下来之后会有一种感觉,开发手册已经把Java开发中遇到的大部分问题都涉及到了,似乎没有多少优化的空间了。
但对于很多非大厂的公司来说,这套规约是不能够直接拿来当成自己团队的开发规范的,还是要结合自己的开发团队去调整,否则你一定会非常难受。
还是非常喜欢这套开发手册中关于强制、推荐、参考,正例、反例的写法,非常容易理解,在这个基础上去做团队自己的开发规范已经非常的省心了。
=================================
除了这些开发手册以外,同样是阿里的牛人Hollis编写两本辅助读物,里面讲述了开发手册里一些规约为什么要那么做,对于理解开发工程师的思路和来龙去脉很有好处。个人认为这两本书作为面试求职时的工具书,也是非常不错的选择。
Java开发手册(嵩山版)-灵魂15问
为什么阿里巴巴禁止使用 Apache Beanutils 进行属性的 copy ?
为什么阿里巴巴要求日期格式化时必须有使用 y 表示年,而不能用 Y ?
《新版 Java 开发手册》提到的三目运算符的空指针问题到底是个怎么回事?
为什么阿里巴巴建议初始化 HashMap 的容量大小?
Java 开发手册建议创建 HashMap 时设置初始化容量,但是多少合适呢?
为什么阿里巴巴禁止使用 Executors 创建线程池?
为什么阿里巴巴要求谨慎使用 ArrayList 中的 subList 方法?
为什么阿里巴巴不建议在 for 循环中使用“+”进行字符串拼接?
为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作?
为什么阿里巴巴禁止工程师直接使用日志系统 (Log4j、Logback) 中的 API ?
为什么阿里巴巴禁止把 SimpleDateFormat 定义成 static 变量?
为什么阿里巴巴禁止开发人员使用 isSuccess 作为变量名?
为什么阿里巴巴禁止开发人员修改 serialVersionUID 字段的值?
为什么阿里巴巴建议开发者谨慎使用继承?
为什么阿里巴巴禁止使用 count( 列名 ) 或 count( 常量 ) 来替代 count(*) ?
Java开发手册(泰山版)-灵魂13问
《新版 Java 开发手册》提到的三目运算符的空指针问题到底是个怎么回事?
为什么阿里巴巴建议初始化 HashMap 的容量大小?
Java 开发手册建议创建 HashMap 时设置初始化容量,但是多少合适呢?
为什么阿里巴巴禁止使用 Executors 创建线程池?
为什么阿里巴巴要求谨慎使用 ArrayList 中的 subList 方法?
为什么阿里巴巴不建议在 for 循环中使用“+”进行字符串拼接?
为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作?
为什么阿里巴巴禁止工程师直接使用日志系统 (Log4j、Logback) 中的 API ?
为什么阿里巴巴禁止把 SimpleDateFormat 定义成 static 变量?
为什么阿里巴巴禁止开发人员使用 isSuccess 作为变量名?
为什么阿里巴巴禁止开发人员修改 serialVersionUID 字段的值?
为什么阿里巴巴建议开发者谨慎使用继承?
为什么阿里巴巴禁止使用 count( 列名 ) 或 count( 常量 ) 来替代 count(*) ?
顺便提一下,其实这些电子书除了黄山版以外,都被阿里巴巴的藏经阁收录的,其中的大部分我也是在藏经阁下载的。大家要是嫌麻烦可以从下面的链接一起下载。