极限编程里最容易被忽略的实践

敏捷开发
• 阅读 94

前面的一篇文章里面我和大家聊过了极限编程的重要性,今天想和大家聊聊极限编程里面最简单但也往往最容易被忽略的实践——编码规范

说到编码规范,每一个开发人员都非常熟悉,每一个团队也都有自己的编码规范。但实际的执行情况如何呢?估计大多数的团队都是形同虚设,编码规范只是存放在文档库里面的一个文档而已。

为什么编码规范难以落到实处?我觉得大家都忽略了编码规范的重要性。

编码规范是极限编程中一系列实践的基础,认真执行编码规范可以说是极限编程里投资回报率最高的实践

首先编码规范是代码集体所有权的基础。可以想象下春秋战国时期各个诸侯国都有自己的文字,沟通交流的成本比较高,而秦始皇统一六国后迅速统一了文字,有利于法令、文化的传播和发展。涉及到编程,也是同样的道理。如果一个团队里面每个人的编码风格都不一样,每个人看别人的代码都觉得不爽,就没有办法做到代码的集体所有权。只有有统一的编码规范,才有可能做到真正的代码集体所有。

其次只有做到统一的编码规范,才有可能实行结对编程。结对编程是一种很好的极限编程实践,通过二人结对编程的方式,可以高效地产出有质量的代码。

但实施结对编程的一个前提,最起码是两个人写代码的风格是一致的。如果一个人是按照驼峰规范写代码,一个人按照下划线规范来写代码,估计写的时候要打架。

综上,编码规范是代码集体所有权和结对编程的前提。代码集体所有权和结对编程又可以更好地帮助实施后续的实践,比如持续集成、测试驱动开发等等。而且只有真正意义上做到集体所有,才有可能推进知识在团队里面的传承,降低团队的风险,也为团队内部轮岗创造了条件。

既然编码规范这么重要,为什么在实施的时候往往被忽略掉呢?我觉得可以从团队和个人两个角度来分析。

从团队角度来看有很多团队都是按照模块来分配工作。比如我接触的禅道项目管理软件的客户里面,有很多就是这样分配的。比如张三负责A模块,李四负责B模块。张三和李四之间没有交叉交流的地方,如果不认真遵守团队共有的编码规范,难免会各有各的风格。那么这种按模块分配也是违背了集体所有的这一项实践。会造成重复造轮子、代码冗余、单点风险等等问题。应当打破这种按模块的分配方式,让每一个人都可以参与到每一个模块的开发中。

从团队的另一个角度来说,往往是缺少一个强有力的推进者。执行编码规范就需要纠正别人的代码,难免会得罪人。所以团队里面是否有一个强有力的推进者,对编码规范的实施起到了至关重要的作用。建议团队里面挑选一位责任心比较强的骨干研发人员来推进编码规范,以身作则,效果会比较好。

个人角度来看,很多开发人员会觉得自己的能力很强,只要保证自己写的代码能执行就可以了,很有个性。其实这都是不够职业的表现。大家可以看看网上流传出来的Google或者微软的程序员的代码,都在严谨地遵循统一的编码规范,认认真真地写代码。代码是写给别人看的,所以一定要想办法把代码写得清楚。

所以不管从团队角度来看,还是从个人角度来看,认真遵循编码规范,都可以带来很多好处。最后和大家分享下我们团队的编码规范实践。

第一,是在制定编码规范的时候简化规则。规则越多,就越不容易记忆,越容易出现意外。我们的命名格式就只有一个驼峰。从数据库到程序到页面,所有的命名格式都遵循驼峰这样一个规则。我了解有的团队的命名格式会比较多,比如类名首字母会大写、数据库字段名会用下划线间隔,其实必要性不大,简单一点更容易遵循。

其次,我们会更关注起一个好的名字。从数据库名到表名,到字段名,到程序里面的类名、属性名、方法名、参数、返回值,到接口里面的入参出参,再到页面里面的元素、样式,一定要多花点心思想一个可以自我解释的名字。有的朋友可能会讲,还有注释呢。但与其写注释来解释这个名字是什么含义,为什么不花点功夫让它自我解释呢?

此外,我们还非常强调代码片段的管理。对于现在的语言来讲,最小的管理单位就是方法函数这一个级别了。函数方法里面的实现都是通过一行行的代码组成,这时候可以灵活的运用注释、空行、对齐等方式将代码行组织为代码片段。这样当阅读代码的时候,可以很容易搞清楚这个函数方法的宏观结构和逻辑,可以更容易定位问题。试想一个50行代码的函数,如果中间没有任何空行来间隔,阅读起来将是多么痛苦的一件事情。

我们还会通过定期的集体代码评审来对齐大家的编码规范。每两周抽一个时间,把大家都聚到一起,统一来看代码。一个文件一个文件地比对审查规范的问题、命名的问题、逻辑的问题、版式的问题,以及实现方案的问题、效率的问题和安全的问题等等。通过这种方式可以很有效地保证规范在团队里面的贯彻执行。

极限编程里最容易被忽略的实践

最后,除了参考我们禅道团队的编码规范,给大家推荐一本书《编写可读代码的艺术》。书中有很多关于编程的规范和技巧,对于团队来说,可以参考其中的规范来制定团队的编码规范,提高团队代码质量、落实极限编程实践;对于个人来说,有利于提高代码可读性,做到内外兼修,成为优秀的程序员。不管是团队还是个人都可以从中获益良多,强烈推荐!

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
2年前
Java 编码规范有感
  应小组要求,开发测试都需要考阿里编码规范,因此,相当于是突击了一下关于编码规范方面的知识,目前做的项目后期需要进行项目迁移,数据迁移,功能迁移...各种迁移...  阿里巴巴编码规范(Java)考试地址:https://edu.aliyun.com/course/417/lesson/list(https://www.oschina.net/a
Wesley13 Wesley13
2年前
Java代码编写规范(转)
编码规范1前言为确保系统源程序可读性,从而增强系统可维护性,java编程人员应具有基本类似的编程风格,兹制定下述Java编程规范,以规范系统Java部分编程。系统继承的其它资源中的源程序也应按此规范作相应修改。2适用范围本文档将作为java编程人员软件开发的编程格式规范。在项目Java部分的编码、测试及维护过程中,要求严格遵守
Wesley13 Wesley13
2年前
GO 编码规范
编码规范本规范旨在为日常Go项目开发提供一个代码的规范指导,方便团队形成一个统一的代码风格,提高代码的可读性,规范性和统一性。本规范将从命名规范,注释规范,代码风格和Go语言提供的常用的工具这几个方面做一个说明。该规范参考了go语言官方代码的风格制定。一、命名规范命名是代码规范中很重要的一部分,统一的命名规则有
Stella981 Stella981
2年前
Intellij IDEA安装阿里代码规范插件
要养成一个好的编码习惯从自己编码开始,对自己代码的合理化命名,编码不仅对自己有好处,而且别人也容易读懂你的代码。所以下载阿里的代码规范插件来约束自己凌乱的代码。阿里规范插件GitHub地址:https://github.com/alibaba/p3cIDEA安装该插件步骤:1.打开IDEA,FileSetteingsPlug
Wesley13 Wesley13
2年前
Java初学者快速上手之实战“套路”
很多初学者刚开始学编程时,上来就只想着编码!编码!!编码!!!但你知道什么是编程吗?要知道:编码≠编程今天就为大家介绍一种快速上手的编程套路,在套路的基础上编码有如神助!img学过Java语法的童鞋都知道,虽然Java语法看起来这么多,总结起来就两种作用。一种是存储数据,另一种是操作数据。比如变量、数组、集合、文件操作、JDBC等,都
敏捷开发 敏捷开发
1个月前
如何做好代码片段管理?
在谈到编码规范的时候,我们关注的粒度从大到小划分的话,一般是按照应用、模块、对象、方法这样的层次来定义。在这些粒度上业内一般都有约定俗成的一些规范,就不再赘述。今天这篇文章我想重点和大家聊聊如何做好代码的片段管理。
敏捷开发 敏捷开发
1个月前
无结对,不编程
极限编程里面有一个比较有争议实践就是结对编程。很多团队的管理者在谈到结对编程的时候,第一反应是浪费时间:本来一个人可以干的事情要安排两个人干,不是浪费时间吗?那结对编程到底会不会浪费时间呢?结合我们禅道团队自身十几年的结对编程实践,跟大家做一下分享。首先来
敏捷开发 敏捷开发
1个月前
如何实施极限编程?
极限编程虽然是敏捷开发的一种主要方法,但真正实施极限编程的团队比率很低,只有可怜的7%。是什么原因阻碍了极限编程的推广和实施呢?
敏捷开发 敏捷开发
4星期前
将代码集体所有权进行到底!
极限编程中有一个实践是代码集体所有权(CollectiveOwnership)。这个实践从字面意思理解起来很简单,就是大家共同拥有代码,都有权限浏览、修改代码。这个实践从表面看是一个技术问题,只不过是源代码管理系统的权限如何设置的问题。但从本质上来讲,这是
敏捷开发
敏捷开发
Lv1
女 · 产品经理
公众号:敏捷开发 网址:www.minjiekaifa.com
文章
38
粉丝
0
获赞
0