写出高质量代码的8条“军规”

简介: 写出简洁,易懂的程序是每个程序员追求的目标,怎样做到这一点,是否有规律可以遵循,我们一起来探讨

写出简洁,易懂的程序应该是每个程序员追求的目标,有人说程序不是给计算机用的吗,可以工作不就OK了吗?然而恰恰相反

程序是给写人看的

无论是什么样的语言,编译的也好,解释的也罢,最终实际执行的都是转换后的二进制代码。计算机是不需要看你写的源代码的。源代码是给你自己或者和你一样的人类程序员阅读的。程序的好坏决定着你们未来的命运。

程序维护的时间远长于创造他的时间

每个开发出来的计算机系统都被寄予厚望:尽可能长时间的存在于世。尽管他可能是某个实习生花一两个月写成的。而需求总在变化,很多时候都是在原有程序上的调整,甚至是修修补补。重写系统这件事情一直都是很危险的。从前有个著名的浏览器公司叫Netscape(网景公司),他们重写了自己浏览器的代码,后来。。。他们被另一款臭名昭著的浏览器IE6彻底打败了。所以,原始程序的质量决定后续的维护成本

那么怎样写出高质量的代码,需要注意哪些点呢,先从基本的做起

格式工整

每种语言都有自己的格式要求,每个公司也一样,现在有各种自动格式化工具,这点不难做到。

命名清晰

变量命名符合惯例,要表达清楚的含义,请谨慎使用a, b, c这种无意义的字母。这点和写文章一样,满篇小明、小红,一看就是小学生作文。

分离变化

需求总在变化,这是永恒的主题,如果我们清晰的知道哪个部分的程序可能在将来需要调整,那么把他们隔离起来。可以作为一个方法/函数,一个类,一个文件,或者数据库里的一个数据。

保持抽象

你的程序应该调用的是某一个接口,某一个协议。对于其他的程序知道的越少越好。不八卦别人的信息,可以避免程序像面条一样搅在一起。

不要重复(Don't repeat yourself/DRY)

“这个功能还不简单,拷贝一下改改不就好了”。建议你鄙视提出这个想法的朋友,拷贝一份,以后修改的工作量X2,现在的苦逼都是因为当年的偷懒。不管是代码也好,逻辑也好,都应该避免重复。

防呆设计(Don't make me think)

程序的接口应该简单而清晰,不要使用数量繁多而晦涩的参数。

保持简单(Keep it simple, stupid/KISS)

不要使用大段的复杂代码,每一段程序的职责尽量单一而明确。

按常理出牌

符合人类的思维规律,比如这是一个get读取函数,调用它一定不会出现修改、删除或者其他诡异的效果。

做好以上这些点差不多就能写出清晰而优秀的代码了,但程序是否优雅而高效还要取决于程序员的设计功力,这需要经验和积累。我们一起加油吧

目录
相关文章
|
NoSQL 网络协议 数据库
为什么 Lettuce 会带来更长的故障时间
本文详述了阿里云数据库 Tair/Redis 将使用长连接客户端在非预期故障宕机切换场景下的恢复时间从最初的 900s 降到 120s 再到 30s的优化过程,涉及产品优化,开源产品问题修复等诸多方面。
68824 11
为什么 Lettuce 会带来更长的故障时间
|
存储 SQL 监控
全链路压测:影子库与影子表之争
在生产环境实施全链路压测的过程中,针对上文谈到的两种方案,又面临着数据隔离方案的选择问题,本文首先针对影子库、影子表两种方案进行介绍和对比,然后针对常见的场景,给出方案的选择建议。
5528 108
全链路压测:影子库与影子表之争
|
人工智能 Java 大数据
网站性能测试指标(QPS,TPS,吞吐量,响应时间)详解
QQ用得起来越少了,现在就加入300+技术微信群,下方公众号回复"微信群"即可加入。 常用的网站性能测试指标有:吞吐量、并发数、响应时间、性能计数器等。
4766 0
|
6月前
|
关系型数据库 MySQL 数据库
Docker 安装常用软件相关命令
本文介绍了在CentOS 7.9系统上安装Docker的详细步骤,包括添加阿里云镜像源、安装Docker及相关组件、启动服务以及配置镜像加速。同时,还展示了如何通过Docker安装MySQL 5.7版本数据库,涵盖拉取镜像、创建数据目录、运行容器及配置挂载点等操作,并提供验证安装成功的命令和截图。适合需要部署Docker与MySQL环境的用户参考。
368 5
|
存储 数据可视化 API
1688商品详情数据接口:如何通过1688 API实现批量商品数据抓取和分析
使用1688 API进行批量商品数据抓取和分析,首先需注册账号创建应用获取App Key和Secret Key。研究API文档,构建请求URL,如商品详情、搜索、销售量等接口。利用编程语言发送HTTP请求,实时抓取并处理数据,存储到数据库。实施优化策略,处理错误,记录日志。数据可视化展示并确保API安全性。编写文档并持续更新以适应API变化。参考[c0b.cc/R4rbK2]获取API测试和SDK。
|
JSON 安全 API
11条军规,让你的接口设计无可挑剔
后端工程师需重视接口设计,提供清晰规范的接口文档以节省合作时间,避免纠纷。关键点包括:1) 接口名称应直观明了;2) 接口路径规整,能反映接口功能;3) 使用恰当的请求方式(GET, POST, PUT, PATCH, DELETE);4) 提供详细接口说明和示例;5) 实施接口版本管理,更新文档以适应变更;6) 明确请求头信息;7) 关注接口安全,进行参数加密和授权;8) 编写测试案例和错误码定义,方便调用者理解和测试。
520 0
11条军规,让你的接口设计无可挑剔
|
测试技术 Python
分支覆盖 (Branch Coverage)
分支覆盖 (Branch Coverage) 是一种软件测试覆盖率评估方法,能够测量代码中每个分支的执行情况,即代码中每个条件语句 (if-else 语句) 的所有可能分支是否都被执行过。
4205 1
|
Web App开发 编解码 移动开发
网页不安装插件如何播放RTSP/FLV视频
点量云流提出了一种基于后台拉流转码的方案,将RTSP/RTMP/FLV等协议的视频流转换为WebRTC格式,实现在现代浏览器中的无插件播放。此方案具有良好的兼容性,支持主流浏览器,无需担心兼容问题。它利用浏览器硬件解码能力,减少终端计算资源消耗,并且具备低延迟和高实时性的优点,延迟可控制在100ms以内,非常适合摄像头监控领域。此外,前端集成简单,仅需使用标准WebRTC接口即可接入,降低了复杂度。
626 9
|
Java Maven 开发者
Maven的依赖作用域和依赖传递
Maven的依赖作用域和依赖传递
966 0
Maven的依赖作用域和依赖传递
|
JSON Java 关系型数据库
【Feign】 基于 Feign 远程调用、 自定义配置、性能优化、实现 Feign 最佳实践
【Feign】 基于 Feign 远程调用、 自定义配置、性能优化、实现 Feign 最佳实践
716 0