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

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

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

为什么编码规范难以落到实处?我觉得大家都忽略了编码规范的重要性。编码规范是极限编程中一系列实践的基础,认真执行编码规范可以说是极限编程里投资回报率最高的实践。

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

其次只有做到统一的编码规范,才有可能实行结对编程。结对编程是一种很好的极限编程实践,通过二人结对编程的方式,可以高效地产出有质量的代码。但实施结对编程的一个前提,最起码是两个人写代码的风格是一致的。如果一个人是按照驼峰规范写代码,一个人按照下划线规范来写代码,估计写的时候要打架。

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

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

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

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

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


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

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

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

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

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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/856263.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深圳信用贷款之路:申请了10次都被拒!这三步帮你逆袭银行贷款!

贷款客户最头疼的就是明明查询了一堆资料,贷款还是办不下来!尤其是那些负债累累的,急需资金还月供和本金的朋友们,不是在贷款就是在贷款的路上,一个月申请了10次都被拒!去了好几家贷款机构,费用…

数据库开发-MySQL

前言 首先来了解一下什么是数据库。 数据库:英文为 DataBase,简称DB,它是存储和管理数据的仓库。 像我们日常访问的电商网站京东,企业内部的管理系统OA、ERP、CRM这类的系统,以及大家每天都会刷的头条、抖音类的app…

文字游侠:一款全新AI写作模型,每天10分钟一键创作爆文!附渠道和玩法教程!

在当今快节奏的社会中,虽然传统的工作可以满足我们基本的物质需求,但许多人内心深处渴望的是更高层次的精神满足。这就像是我们常说的:“工资可以喂饱肚子,副业可以养活灵魂。”这并不是鼓励大家辞去日常工作,而是提倡…

美国铁路客运巨头Amtrak泄漏旅客数据,数据销毁 硬盘销毁 文件销毁

旅客的Guest Rewards常旅客积分账户的个人信息被大量窃取。 美国国家客运铁路公司(Amtrak)近日披露了一起数据泄露事件,旅客的Guest Rewards常旅客积分账户的个人信息被大量窃取。 根据Amtrak向马萨诸塞州提交的泄露通知,5月15日…

.net 6 api 修改URL为小写

我们创建的api项目,url是[Route(“[controller]”)],类似这样子定义的。我们的controller命名是大写字母开头的,显示在url很明显不是很好看(url不区分大小写)。转换方式: var builder WebApplication.Crea…

Simufact Additive仿真助力金属粘结剂喷射成型(MBJ)工业化

引 言 烧结过程中“设计”补偿变形的能力被视为是实现金属粘结剂喷射成型(MBJ)快速商业化的关键。针对烧结过程的仿真分析,Simufact Additive软件现已推出了MBJ仿真模块第三个版本,当前版本能够准确模拟烧结过程,预测…

elementPlus渲染需要权限校验的图片

技术栈&#xff1a;elementPlusvue3 html部分&#xff1a; <el-image :style"{width:width,height:height}" ref"previewimg" :src"previewSrc"></el-image> js部分 /*** 预览图片* param {String} url [图片的地址]*/const showP…

json中的dump用法和区别

使用python 3.7和python3.11测试 不使用dumps&#xff0c;json中的数据 import jsonjson_datatest.json data[{ip:2222,model:c://ddd/oo.onnx}] # updatedjson.dumps(data) # print(updated) with open(json_data,w) as file:json.dump(data,file,indent4) 使用dumps之后&am…

18V-120V降12V300m恒压WT5117

18V-120V降12V300m恒压WT5117 WT5117 是一款专为开关电源设计的集成了 150V 高电压 MOSFET 的 DC-DC 控制器。这个设备具备内置高压启动和自供电功能&#xff0c;能够满足快速启动及低能耗待机状态的需求。 WT5117 配备了自适应降频技术&#xff0c;以提升在低负载条件下的转换…

怎么做好现货白银交易?原来三点很重要......

要做好现货白银交易&#xff0c;投资者除了要掌握基本的分析和交易技巧&#xff0c;还有很重要的一点就是耐得住寂寞&#xff0c;学会空仓。一些投资者喜欢短线高频地进行交易&#xff0c;这样做赚的时候可能很快&#xff0c;但如果做不好&#xff0c;回撤也同样可能来得更迅猛…

vmware workstation下centos7屏幕切换及大小调整

虚拟机版本&#xff1a;vmware workstation15.5.2 操作系统版本&#xff1a;centos 7.9.2009 一 图形界面和命令行界面切换方法 在CentOS 7中&#xff0c;可以使用以下方法切换界面&#xff1a; 1 使用快捷键切换&#xff1a;按下Ctrl Alt F2&#xff08;或F3&#xff0…

Android SurfaceFlinger——概述(一)

一、基础介绍 SurfaceFlinger 是 Android 系统中的一个关键组件&#xff0c;负责管理屏幕显示的合成和渲染。 服务角色&#xff1a;SurfaceFlinger 作为一个系统服务独立运行&#xff0c;它不依赖于任何应用程序进程&#xff0c;而是由系统启动并持续运行。窗口管理&#xff1a…

为什么有人认为Linux不如macOS?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Linux的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;首先要明确你说的是哪个Lin…

快速自定义表单开发受欢迎的几个优势

为了满足业务需求&#xff0c;低代码技术平台带着更理想的优势特点&#xff0c;广泛用于各中大型企业中&#xff0c;是助力企业实现提质增效、提升开发效率的有力武器。那么&#xff0c;您知道快速自定义表单开发的优势体现在哪里吗&#xff1f;为了帮助大家了解这些详情&#…

路由框架 ARouter 原理及源码解析

文章目录 前言一、ARouter 简介二、ARouter 使用1.添加依赖和配置2.添加注解3.初始化SDK4.发起路由操作 三、ARouter 成员1. PostCard 明信片2. Interceptor 拦截器3. Warehouse 路由仓库4. ARouter 注解处理 四、ARouter 原理五、ARouter 源码分析1. ARouter 初始化1.1 ARoute…

基于SSM的足球联赛管理系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

分布式系列之限流组件

概述 在高并发场景下&#xff0c;请求量瞬间到达&#xff0c;后端服务器即使有缓存、集群主备、分库分表、容错降级等措施&#xff0c;也有可能扛不住这请求量&#xff0c;因此可考虑引入限流组件。限流的目的&#xff1a;防止恶意请求流量或流量超出系统承载。 应用场景&…

计算机毕业设计师hadoop+spark+hive知识图谱医生推荐系统 医生数据分析可视化大屏 医生爬虫 医疗可视化 医生大数据 机器学习 大数据毕业设计

流程&#xff1a; 1.Python爬虫采集中华健康网约10万医生数据&#xff0c;最终存入mysql数据库&#xff1b; 2.使用pandasnumpy/hadoopmapreduce对mysql中的医生数据进行数据分析&#xff0c;使用高德地图解析地理位置&#xff0c;并将结果转入.csv文件同时上传到hdfs文件系统&…

百度文心智能体平台(想象即现实):轻松上手,开启智能新时代!创建属于自己的智能体应用。

目录 1.1、文心智能体平台 1.2、创建智能体 1.3、智能体报名入口 1.4、古诗词小助手 1.5、访问我的智能体 我的智能体访问地址&#xff1a;https://mbd.baidu.com/ma/s/7u8kBFYA。 在这个全新的时代里&#xff0c;人工智能技术正以前所未有的速度发展&#xff0c;渗透到我…

LinkedHashMap详解

目录 LinkedHashMap详解1、LinkedHashMap的继承体系2、LinkedHashMap的特性介绍和代码示例①、特性②、适用场景使用LinkedHashMap 实现最简单的 LRU缓存 3、LinkedHashMap的构造函数4、LinkedHashMap是如何存储元素的&#xff0c;底层数据结构是什么&#xff1f;LinkedHashMap…