你不知道的《阿里巴巴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开发手册相关资料下载:




相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
相关文章
|
2月前
|
Java 关系型数据库 MySQL
兴奋!阿里巴巴首推“Java进阶必备宝典”,理论到实战,一键搞定
作为一名Java方向的程序员,打好夯实的基础是非常重要的,现在大厂面试对于程序员基础知识的掌握考察也越来越严格,虽然说现在技术更新比较快,但基础扎实才能够更深入的去理解每一个知识技术点。
|
2月前
|
Java
电子书阅读分享《Java开发手册(嵩山版)》
电子书阅读分享《Java开发手册(嵩山版)》
302 0
|
5月前
|
SQL Java 关系型数据库
调优为王!阿里巴巴彩版java性能调优实战,终于到手了!文末福利
开始之前,我先来讲一下我对性能调优的看法。在我看来Java的性能调优并不是像学习编程语言一样可以通过学习掌握,它是没有办法用直线的思维学会并掌握使用的,并且它对于程序员来说,对技术深度和广度有这十分高的门槛。
|
6月前
|
设计模式 算法 NoSQL
阿里巴巴官方上线!号称国内Java八股文天花板(终极版)首次开源
金九银十已经过半了,但还是有很多Java程序员没有找到工作或者成功跳槽,跳槽成功的也只是从一个坑中,跳入另一个坑中……
|
28天前
|
Java
电子书阅读分享《Java开发手册(泰山版)》
电子书阅读分享《Java开发手册(泰山版)》
291 1
电子书阅读分享《Java开发手册(泰山版)》
|
2月前
|
设计模式 算法 NoSQL
阿里巴巴官方上线!号称国内Java八股文天花板(终极版)首次开源
真正有意义的就业与跳槽,是要进入到一个有绝对潜力的行业或者薪资能实现爆炸式增长的。这件事不容易,但也没有想象的遥不可及,现在大环境不好,机会也不如以前多,除了让自身技术能力过硬,面试更是要好好准备! 如何准备? 除了平时的技术积累与沉淀之外,剩下的就只能背八股了(虽然工作用不到,但面试就是要问,不背是不行的)。
53 0
|
2月前
|
Java 程序员 数据库连接
阿里巴巴大神发布的Java零基础笔记,实战教程多到手软,跪了
现值金九银十之际,是面试高峰季,很多学校开始校招,也是跳槽转行的最佳时机。根据数据显示,程序员是金九银十里最热门的行业,也是需求量最大的行业,但是程序员是个门槛低,但金字塔顶峰比较高的行业,意味着你的付出要比别人多才能拔尖。
|
2月前
|
架构师 NoSQL Java
阿里巴巴新产“Java架构核心宝典”,全是流行技术,限时开放
什么是架构师?对于程序员来说,聊架构是一个永不过时的话题。实际上,每一家公司都有自己对架构师不同的定位,因为不同的公司,所处的阶段、业务模式以及应用场景都不一样,因此对架构师的要求不一样,所以定位也就不同。
|
3月前
|
NoSQL Java 关系型数据库
五面阿里巴巴拿offer后定级P6:分享Java面经及答案总结
一面(电话) 说说对JVM的理解 treemap和hashmap有什么区别? Java多线程的的5大状态图流转 mysql主键和唯一索引的区别 说说最近的项目
|
3月前
|
NoSQL Java 应用服务中间件
阿里巴巴最新最全500道Java后端面试大全(值得收藏)
进大厂是大部分程序员的梦想,而进大厂的门槛也是比较高的,所以这里整理了一份阿里、美团、滴滴、头条等大厂面试大全其中概括的知识点有:Java基础、spring、springmvc、springboot、springcloud、JVM、Tomcat、dubbo、netty、zookeeper共有500+道面试题