阿里巴巴开源Java编码规范背后的故事

(作者:无独 | 校对:孤尽)

《阿里巴巴Java开发手册》(下称《手册》)凝聚了阿里集团很多同学的知识智慧和经验,这些经验甚至是用血淋淋的故障换来的,希望前车之鉴,后车之师,能够帮助更多的开发者少踩坑,杜绝踩重复的坑。 

手册下载:

此手册从构思到现在的最新版本,历时一年半,历经无数次内部针锋相对的讨论,迭代105次。可以说手册中每一个条目的背后,都有一个很长、很精彩的故事。为了让广大开发者更加深入地了解到项目组的初衷,项目组第一次公开谈一些手册背后的故事。

为何叫《Java开发手册》?

第一、本手册主要是面向Java开发群体,Java做为面向对象语言,在业界的生命力还是非常强大的,技术生态丰富,框架结构成熟,经历了超高并发的“双十一”实战考验,阿里真诚地想把多年的Java技术积累回馈给Java开发者 社区。

第二、它是一个广义的编码规范, 一个随时可以查阅的技术参考,在手册中可以找到很多的技术规范、最佳实践,避坑指南等。

手册内容为何引入数据库、安全、服务器等知识?

现代软件行业的高速发展对于开发者的综合素质要求越来越高,因为不仅是编程知识,其它维度的知识结构也会影响到软件的最终交付质量。比如:数据库的表结构和索引设计缺陷可能带来软件上的架构缺陷或性能风险;工程结构混乱导致维护困难;没有鉴权的漏洞代码被黑客攻击等等。

所以手册以Java开发者为中心视角,划分为编程规约、异常日志规约、MySQL规约、工程规约、安全规约五大块。那么衍生的问题是为什么我们提到的这些看似与编码毫无关系的内容,有人说,仅安全规约如果扩展开来可以是上百页的资料,不知道写在《手册》里的意义何在,我们的答案是,手册关注的是与开发紧密相关的知识点,试问一个不知道水平权限校验的Java开发者,会是一个合格的程序员吗?《手册》不是提倡大家深究所有的知识点而成为安全专家、运维专家,而是关注在编码相关的生态知识上。

约束力等级为何是三级?

《手册》根据约束力强弱及故障敏感性,规约依次分为强制、推荐、参考三大类。强制是一种指令型的,是协作的Gap,或是故障的痛点;而推荐,希望这样做是一件好事,大家都这样做,结构更清晰,协作更高效,但是不这样做也不会死。而参考分成两种情况:第一种是无法用代码量化的描述,提倡什么什么样的做法,如索引的创建索引时,宁滥勿缺的错误做法;第二种是真心觉得或左或右都可以,只是有倾向于一种,这个自由度由开发者自己把握。

扩展的说明、正例、反例用来表达什么。如果只是冷冰冰的条目,对于阅读者理解成本和记忆成本都是很大的挑战,《手册》希望阅读者能够非常舒心地看完整个文档,掩卷遐思,亦有所得。具体来说, “说明”是对内容做了引申和解释,为求知其然;“正例”提倡什么样的编码和实现方式,推荐做法的其中之一;“反例”说明需要提防的雷区,以及真实的错误案例,让人知其不然。

最后,《手册》的愿景是码出质量、码出高效,即代码的字里行间如何提升系统的质量,如何提升协作的高效性。 我们提倡算法效率和架构扩展的个性化,而不是代码风格随意化,尽量减少没有营养的“圣战”,如:4个空格、单行语句换行等。程序员是天生幻想创造个性化作品的艺术家,变着法子想着要如何与众不同,最好代码只有自己能够看懂,只有自己能够维护。

码出质量、码出高效

真正的艺术家是个性独立、张扬文化的群体,他们之间不需要协同工作,大家很少见过书法,画画、雕塑是一个团队协作来创作完成的,但是程序员这个工种,天生需要团队协作,而协作的正能量要放在问题的有效讨论和快速解决上, 个性化应尽量表现在代码质量和算法效率的提升上,而不是对于合作规范上纠缠不休的争论。再者,公司是请程序员来产出实际价值的,而不是经常消耗时间为几个空格的事情争得脸红脖子粗的。有时候,就是一个规定,大家这么做了,协作效率自然就提升了,正所谓无规矩不成方圆,无规范难以协作。

时间: 2024-11-17 16:20:10

阿里巴巴开源Java编码规范背后的故事的相关文章

资料推荐--Google Java编码规范

之前已经推荐过Google的Java编码规范英文版了: http://google-styleguide.googlecode.com/svn/trunk/javaguide.html 虽然这篇文章的英文很简单,但是最近发现有人翻译了这篇文章,所以专门写一篇文章推荐一下: http://hawstein.com/posts/google-java-style.html   同时为了避免原始文章丢失,所以转了一下: 作者:Hawstein 出处:http://hawstein.com/posts/

【Java编码规范】《阿里巴巴Java开发手册》终极版更新,在线代码检测及IDE插件发布

        -------------- 2017.10.14更新 -------------- <阿里巴巴Java开发手册(终极版)>正式发布,这是史上内容最全.修正最为彻底的一个版本,并且增加了单元测试规约内容,这也是阿里官方对外发布的最后一个PDF版本,值得收藏.   <阿里巴巴Java开发手册>是阿里内部Java工程师所遵循的开发规范,涵盖编程规约.单元测试规约.异常日志规约.MySQL规约.工程规约.安全规约等,这是近万名阿里Java技术精英的经验总结,并经历了多次大

java main方法背后的故事?(转)

jvm java 看似一种语言,实则一个巨大的体系的王国,开发这么多年了,还是没有搞懂,我以为我懂了,可是过了一段时间又忘了,所以说还是没懂 1.main方法说起 编译完我们的java文件后,需要有个一含有main方法的类,java 命令将指示操作系统启动一个jvm进程 这个jvm进程启动后,寻找那个main地方开始执行程序 java [JVM_Options] ClassName_with_main [args_separate_space] main方法的签名必须是 pubic static

Java 程序编码规范

编码|程序|规范 Java 程序编码规范 李小敏www.yway.com 软件工程师2000年12月内容: 命名惯例 Java文件样式 代码编写格式 程序编写 编程技巧 Swing 调试 性能 可移植性 参考资料 作者简介    所有的程序开发手册都包含了各种规则.一些习惯自由程序人员可能对这些规则很不适应,但是在多个开发人员共同写作的情况下,这些规则是必需的.这不仅仅是为了开发效率来考虑,而且也是为了后期维护考虑.命名规范 定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性

JavaScript编程语言的编码规范

网页制作Webjx文章简介:对于熟悉 C/C++ 或 Java 语言的工程师来说,JavaScript 显得灵活,简单易懂,对代码的格式的要求也相对松散.很容易学习,并运用到自己的代码中.也正因为这样,JavaScript 的编码规范也往往被轻视,开发过程中修修补补,最终也就演变成为后续维护人员的恶梦.软件存在 对于熟悉 C/C++ 或 Java 语言的工程师来说,JavaScript 显得灵活,简单易懂,对代码的格式的要求也相对松散.很容易学习,并运用到自己的代码中.也正因为这样,JavaSc

JSP 编码规范

js|编码|规范 .整个jsp/jsp bean表示层应当尽可能的瘦和简单化. .牢记大多数的JSP都应当是只读的视图,而由页面bean来提供模型. .应当一起设计JSP和JSP bean .在尽可能合理的情况下,把业务逻辑从JSP中移走.具体于HTTP的逻辑(如,对Cookie的处理)属于bean或支持类中,而不是JSP中. .尽量把条件逻辑放在控制器中而不是放在视图中. .为JSP.包含的文件.JSP Bean和实现扩展标记的类使用遵循标准的命名惯例.如:        jsp控制器   x

javascript中的编程语言如何编码规范

对于熟悉 C/C++ 或 Java 语言的工程师来说,javascript 显得灵活,简单易懂,对代码的格式的要求也相对松散.很容易学习,并运用到自己的代码中.也正因为这样,javascript 的编码规范也往往被轻视,开发过程中修修补补,最终也就演变成为后续维护人员的恶梦.软件存在的长期价值直接与编码的质量成比例.编码规范能帮助我们降低编程中不必要的麻烦.而 javascript 代码是直接发送给客户浏览器的,直接与客户见面,编码的质量更应该受到关注. 本文浅谈 javascript 编程中关

浅谈JavaScript编程语言的编码规范_基础知识

JavaScript 编程语言作为最流行的客户端脚本语言,早已被众多 Web 开发人员所熟悉.随着 Web2.0 时代的到来和 Ajax 技术的广泛应用,JavaScript 也逐渐吸引着更多的视线.工作中要求越多的是对 JavaScript 语言的深入学习,灵活运用,和对编码质量的保证. 对于熟悉 C/C++ 或 Java 语言的工程师来说,JavaScript 显得灵活,简单易懂,对代码的格式的要求也相对松散.很容易学习,并运用到自己的代码中.也正因为这样,JavaScript 的编码规范也

Java 注释规范详解

在 Java 的编写过程中我们需要对一些程序进行注释,除了自己方便阅读,更为别人更好理解自己的程序,所以我们需要进行一些注释,可以是编程思路或者是程序的作用,总而言之就是方便自己他人更好的阅读. 注释类型 Java 有两类注释: implementation comments(实现注释)和 documentation comments(文档注释). 实现注释常见于 C++,使用 /*...*/,和 //.文档注释 (也称为"doc comments") 是 Java 独有的,使用 /*