你不知道的《阿里巴巴Java开发手册》背后故事

简介: 今天是2月9日,也是《阿里巴巴Java开发手册》(下称《手册》)对外正式发布一周年的日子。在过去的300多个日子里,这本小小的手册在业界产生了巨大的影响力。值此一周年之际,我们不妨一道围炉煮酒,倾听《手册》的主要推动者——孤尽首次讲述规约背后的故事。
974713679d5fc7d1263f5038169b3d6461fec5e4
扫码或点我直达 免费领

导读:今天是2月9日,也是《阿里巴巴Java开发手册》(下称《手册》)对外正式发布一周年的日子。在过去的300多个日子里,这本小小的手册在业界产生了巨大的影响力。值此一周年之际,我们不妨一道围炉煮酒,倾听《手册》的主要推动者——孤尽首次讲述规约背后的故事。

6351a8d243f14c12800bde7c9b503150387554f9

孤尽

Q:为什么当初会想去做这样一本手册,初心是什么呢?

大家好,很高兴今天能与大家一起交流。要回答这个问题,我想用个例子来解释。

原始社会的争端,更多的是讲究个人的蛮力;三国时代的群雄并起,开始讲究士兵的团队默契;到了现代战争,海陆空、信息兵、工程兵,无不需要紧密配合。软件发展至今,只是靠一句hello world走天下的时代,已经过去了,我们需要团队紧密协作。

代码规约是一种文化软实力,关系着互联网公司规模化生产效率,从这点上讲就是要提升研发效率,提升代码质量。在规约出现之前,一片混沌,如表达删除状态的字段名,非常多,像:delete, delete_flag, is_delete, is_deleted,在数据分析时,总要小心翼翼,像文字游戏。而0/1还是y/n来表示已删除和未删除,更是神坑,极易造成线上问题。再如,批量接口定义时,没有接口保护很容易造成服务提供方内存耗尽,产生OOM等等。

所以,我们的初心是码出高效,码出质量。码是名词,也是动词,希望规约能够提升整个社会的研发协作效率,提升系统质量,提升我们广大程序员编程的幸福感。

Q:手册发布后,受到许多工程师的认可与支持。可以分享一些数据吗?

这本手册的影响力,确实出乎我们所有人的意料之外。据不完全统计,手册推出一周年,影响了全球范围内逾160万人,插件安装数23万+,《手册》纸质版一个月连续增印两次,一直处于热销状态;插件开源不到4个月,已经超过7300star,曾达到周热度排名世界第一;手册插件正式在云效公有云上线;英文版也在海外发布,引起业界广泛关注。

在此期间,业界同仁为我们提供了许多宝贵的建议,在此也非常感谢大家的支持与厚爱。

Q:对于一路陪伴它成长起来的你来说,你觉得最大的挑战是什么?

挑战的主要来源是程序员内心的天马行空和自身价值的不可替代性。

程序员都是天生幻想创造个性化作品的艺术家,变着法子想着要如何与众不同,最好代码只有自己能够看懂,只有自己能够维护。内心深处个人至上的不可替代性,是一个深层次的潜意识抵抗,是最大的阻力来源,没有足够的意识为了遵守团队的代码风格去委屈自己。

但是个性化应尽量表现在代码质量和算法效率的提升上,而不是对于合作规范上纠缠不休的争论。再者,公司是请程序员来产出实际价值的,而不是经常消耗时间为TAB还是空格的事情争得脸红脖子粗的。有时候,就是一个规定,就像交规靠左行,还是右行一样,大家这么做了,协作效率自然就提升了,正所谓无规矩不成方圆,无规范难以协作。

Q:今年手册推出了实体书,怎么会有这样的想法呢?

ab5d3fbe6b8fcd408db8d998722692c6513f9005

其实,实体书的推出并非计划之内。在2017年杭州云栖大会,为了方便现场做规约挑战赛,我们精心准备了800本试读本,把网络上公开发布的电子版制订成薄薄的册子,结果现场受到很多童鞋的喜欢,甚至有人愿意出钱收购。

后来我们意识到,尽管有电子版,同学们还是希望能够有实物可以在纸上记录自己的学习心得,在地铁、公交、火车上的碎片化时间内也可以随手翻翻,所以我们把尺寸极大缩小,制订成册,并且独家发布了《设计规约》部分。

为了把实体手册做好,我们做了反复校对,在标点符号、示例代码、字体颜色等都做了认真的审核。到第三次印刷时,也进行了20处的精细修改,我们希望这是一本走向卓越的小册子,是陪伴大家的床头书、工具书。

Q:这本书推出后,你也承担起了“布道者”的角色,带着它和业界童鞋积极交流。可以分享一下你遇到的人或故事吗?

是的,我们非常欣喜地看到,手册受到了广泛的关注和支持,大家都希望它变得更好。苏州微软的一个同学提及错误的示例代码,是关于延迟初始化的问题,我们反复论证,发现《手册》的命名是存在问题,所以在第三次印刷中,我们进行了修改。

另外,也有人觉得设计规约过分量化了。事实上,如果描述为“原则上”,或者说写一个非常宽泛的区间,指导意义也很弱,干脆就写成具体的数字,当然具体的数字,也是从无数的设计案例中抽象出来的。

前段时间有读者问我如何理解<? extends T>和<? super T>的区别,我是这么举例的。好多人看过优酷剧场的《白夜追凶》吧,关宏峰追查他弟弟的悬案时,去查看被封存的证物箱,被明确告知,你只能看,不能动,当然更不可以增加一件新的证物进去,那是在伪造证据,这就是前者,只能读取,不能增加。

那<? super T>在什么样的情况下只能增加,不能读取呢?这个场景似乎更难立体地被想象出来。比如,投票选举代表时,你只能往里投选票。如果自己选错了代表,想从票箱里捞出来,重新投票,这可能吗?更加不可能给你读取票箱元素的机会。有人说,这只是一种生活场景,在系统设计中,很难有这样的情形。那么,我再举例说明一下,我们在填写对于主管的年度评价时,填写完毕提交后,即使填写错误,当你再次访问之前的链接时,也会告诉你:“您已经完成对主管的年度反馈,谢谢参与”,当然更加不可能让你读取到其它成员对于主管的反馈内容。

Q:未来,《手册》还会给大家带来哪些惊喜,可否提前透露一下?

《码出高效——阿里巴巴开发手册详解》即将出版,此书将详细说明规约的初衷和意义、编写和推广历程,每个条目背后的思考与详细的示例代码,以及相应的故障案例分析。当前基本完成了三章的编写,我们希望这本书是深入浅出、言之有物,从实践中来,走向理论,再走向指导实践。

言之有物,物指的是有定义、推导、案例、总结。而深入浅出的深指的是能够在业界领先的深度上,把内容讲深讲透,浅指的是让一个Java初学者都能够看得懂。

1546a712d5baf277bbd0f6c6dc6ff58662c42464

Q:情怀,这似乎是一个非常虚的词。但我却听到许多人,用“情怀”来评价这本书。在你眼里,情怀是什么呢?

经常有人问我,编写和推广《手册》如此费心费力,是什么样的信念让我如此执着?

我想说一个自己经历的事:我很喜欢电影《冈仁波齐》,也去过冈仁波齐。转山的那段路,汽车呼啸而过,尘土飞扬,可是转山的藏民,还是那样的虔诚,叩拜之后,即使满脸灰尘,他们的信念依然朴实而笃信。陆川的电影《可可西里》也是,很多事情是因为信念而坚守,现实中为可可西里申遗做过巨大贡献的王欣,毕生都献给了藏羚羊的保护,长年驻守在高原雪域,他无私地付出了很多,也放弃了很多,因为信念而坚持体现出人类的伟大,信念就是一种情怀。

7765e8b177887249190ce46be7770e7e144626dd

情怀,如果用武侠文化来说,是行侠仗义于江湖,快意潇洒于恩仇,大江南北,侠之大者,为国为民;侠之小者,为红颜,为知己。而技术情怀是什么?它是一种匠心;是追求一年又一年双11业务背后的技术突破,拓展商业边界;是解决问题后客户的认可。

说到底,技术情怀是一个比较虚的词,工程师是偏向于数据驱动的群体,希望能够用数据来量化定义,能够明确符合什么特质,达到什么程度的人,才是具有技术情怀的。我抛一下个人愚见,尝试从三个维度来解读一下技术情怀:热爱、思考、卓越。热爱是一种源动力,而思考是一个过程,而卓越是一个结果。如果给这三个词加一个定语,使技术情怀更加立体、清晰地被解读,那就是奉献式的热爱,主动式的思考,极致式的卓越。

Q:冰冻三尺,绝非一日之寒。这本手册虽小,却是众多工程师平日一点一滴的积累而成。在你平常的工作里,有哪些一直保持的良好编码习惯,可以分享给大家吗?

我很习惯去做摘记,从进入阿里第一天开始,沉淀了近2000页的笔记,分为两个文档,搜集和整理。我会让知识快速进入搜集区,包括听到的、看到的、疑惑的,不断地去思考,不断地去总结之后,将它们沉淀进入整理区。有一些至今没有搞清楚的知识点,在搜集区已经沉淀了多年,依然会不断地去review一下。所以,我对于知识的记忆非常清晰,因为那是不断进行总结、思考、沉淀的结果。

编码的过程也是一种艺术的演绎,对于设计七大原则和架构设计理念的理解,需要充分融入到代码体系中,使代码有灵感,有活力,有创造力。软件设计是一个不断学习,不断实践,不断参悟的反复过程,这个过程可能比较辛苦,也容易缺氧,这个时候,多和身边的良师益友沟通,或许会有“听君一席话,胜读十年书”的感受。

Q:最后还有什么话,想和大家分享?

忽悠是把我不相信的东西说给大家听,而信念是把我相信的用行动传递给大家。我相信手册的愿景是码出高效,码出质量,码出未来,帮助到更多的人。希望我们开发同学,能够觉得开发是一件幸福的事情,开发是一件有创造力的事情,开发是一件能够改变世界的事情,而不是为了争论不休的规范,影响了算法效率和架构设计的优雅性。

最后提前祝大家新春快乐,也期待未来能与大家有更多交流学习的机会。

阿里巴巴Java开发手册相关资料下载:




目录
打赏
0
11
11
0
731
分享
相关文章
兴奋!阿里巴巴首推“Java进阶必备宝典”,理论到实战,一键搞定
作为一名Java方向的程序员,打好夯实的基础是非常重要的,现在大厂面试对于程序员基础知识的掌握考察也越来越严格,虽然说现在技术更新比较快,但基础扎实才能够更深入的去理解每一个知识技术点。
GraalVM 24 正式发布阿里巴巴贡献重要特性 —— 支持 Java Agent 插桩
阿里巴巴是 GraalVM 全球顾问委员会的唯一中国代表,阿里云程序语言与编译器团队和可观测团队合作实现了 GraalVM 应用的无侵入可观测能力,并在 ARMS 平台上线了该功能。目前在 GraalVM 24 中发布的是支持 Java agent 的第一步,其余能力将在 GraalVM 的后续版本中陆续发布。
Java字符串拼接技术演进及阿里巴巴的贡献
本文主要讲述了Java字符串拼接技术的演进历程,以及阿里巴巴贡献的最新实现 PR 20273。
226 11
代码规范Java阿里巴巴
本文介绍了阿里巴巴的《Java开发手册》,这是一份业界公认的代码规范手册,涵盖编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约七个维度。手册通过强制、推荐、参考三大类规约,详细指导开发者编写高质量的Java代码。文中还提供了常见问题的正反例对比,如方法参数类型一致性、SimpleDateFormat线程安全等问题的解决方案。此外,还介绍了如何安装和使用阿里规范插件来提高编码效率。
1040 9
Java字符串拼接技术演进及阿里巴巴的贡献
本文主要讲述了Java字符串拼接技术的演进历程,以及阿里巴巴贡献的最新实现 PR 20273。
152 12
【资料】阿里Java开发手册
本文是关于分享阿里Java开发手册资源及促进编程规范学习的指南。作者以个人经历引入,讲述了公司领导通过细致讲解阿里Java开发手册,提升了团队对代码质量和编程规范的认识
1465 0
【资料】阿里Java开发手册
阿里巴巴java开发手册
这篇文章是关于阿里巴巴Java开发手册的整理,内容包括编程规约、异常日志、单元测试、安全规约、MySQL数据库使用以及工程结构等方面的详细规范和建议,旨在帮助开发者编写更加规范、高效和安全的代码。
阿里巴巴-EasyExcel 基于Java的简单、省内存的读写Excel
该文章主要介绍了在Java应用中如何使用EasyExcel技术完成对Excel文件的导入和导出操作,包括环境搭建、基本概念、快速入门、进阶操作和综合应用等内容,并提供了相关代码示例和注意事项。
 阿里巴巴-EasyExcel 基于Java的简单、省内存的读写Excel
|
11月前
|
电子书阅读分享《Java开发手册(嵩山版)》
电子书阅读分享《Java开发手册(嵩山版)》
Java开发手册之控制语句,2024最新Java笔经
Java开发手册之控制语句,2024最新Java笔经

热门文章

最新文章