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

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

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

程序是给写人看的

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

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

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

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

格式工整

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

命名清晰

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

分离变化

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

保持抽象

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

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

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

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

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

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

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

按常理出牌

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

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

目录
相关文章
|
自然语言处理 算法 数据挖掘
自蒸馏:一种简单高效的优化方式
背景知识蒸馏(knowledge distillation)指的是将预训练好的教师模型的知识通过蒸馏的方式迁移至学生模型,一般来说,教师模型会比学生模型网络容量更大,模型结构更复杂。对于学生而言,主要增益信息来自于更强的模型产出的带有更多可信信息的soft_label。例如下右图中,两个“2”对应的hard_label都是一样的,即0-9分类中,仅“2”类别对应概率为1.0,而soft_label
自蒸馏:一种简单高效的优化方式
|
7月前
|
存储 人工智能 Java
面试回答示例篇
本文系统介绍了AI开发核心技术:SpringAI、LangChain4J与LangChain框架对比,智能体设计原理,RAG增强生成、Tool Calling工具调用、MCP协议、向量知识库等关键技术,并结合实际项目讲解AI集成、模型选型、私有化部署、流式输出、上下文管理及大模型幻觉解决方案,涵盖从架构设计到落地优化的完整实践路径。(239字)
如何调整 YOLOv3 的 NMS 参数以优化检测性能?
如何调整 YOLOv3 的 NMS 参数以优化检测性能?
|
存储 数据可视化 API
1688商品详情数据接口:如何通过1688 API实现批量商品数据抓取和分析
使用1688 API进行批量商品数据抓取和分析,首先需注册账号创建应用获取App Key和Secret Key。研究API文档,构建请求URL,如商品详情、搜索、销售量等接口。利用编程语言发送HTTP请求,实时抓取并处理数据,存储到数据库。实施优化策略,处理错误,记录日志。数据可视化展示并确保API安全性。编写文档并持续更新以适应API变化。参考[c0b.cc/R4rbK2]获取API测试和SDK。
1072 3
|
关系型数据库 MySQL 数据库
Docker 安装常用软件相关命令
本文介绍了在CentOS 7.9系统上安装Docker的详细步骤,包括添加阿里云镜像源、安装Docker及相关组件、启动服务以及配置镜像加速。同时,还展示了如何通过Docker安装MySQL 5.7版本数据库,涵盖拉取镜像、创建数据目录、运行容器及配置挂载点等操作,并提供验证安装成功的命令和截图。适合需要部署Docker与MySQL环境的用户参考。
912 4
|
Web App开发 JavaScript 前端开发
📚 探索未知领域:Web开发人员必备的14个超级书签! 🌐✨
本文介绍了14个为Web开发人员设计的实用书签(Bookmarklet),每个书签都嵌入了JavaScript代码,能在浏览器上快速执行特定功能。这些书签包括二维码生成器、深色模式切换、密码生成器、翻译工具、广告去除器等。文章还提供了制作书签的详细步骤、最佳实践和注意事项,帮助开发人员提高效率并优化工作流程。分享这些书签不仅可以解决日常开发中的小问题,还为开发者开辟了一个功能强大的工具箱。
1538 1
|
数据库 数据安全/隐私保护
RBAC用户权限管理数据库设计
原文来自:http://minjiechenjava.iteye.com/blog/1759482 最近正在为下一项目版本设计权限管理的。看到了这篇文章,可以参考参考! RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。
8719 1
|
自然语言处理 JavaScript 前端开发
最好用的 12 款 Vue Timepicker 时间日期选择器测评推荐 - 卡拉云
Vue 时间日期选择器(date-timepicker)组件在使用 Vue 框架开发中使用非常频繁。vue timepicker 除了基础选择日期时间外,还有非常多样的功能配合不同场景使用,比如 12/24小时,禁止选择某些日期,高亮某些日期,夜间模式,多语言,酒店订单的特别场景等。本文记录了我自己使用多年最好用的 12 款 vue timepicker 组件,每一款都经过我实际测试,推荐给大家。
1920 0
|
IDE Java 开发工具
"如何使用 jconsole 查看Java进程中线程的详细信息? "
当Java程序运行时,其中的一些线程也正在执行。我们可以用第三方工具 jconsole 来查看Java进程中线程的执行情况和详细信息,这有助于我们对多线程编程的理解。
957 0
|
JSON Java 关系型数据库
【Feign】 基于 Feign 远程调用、 自定义配置、性能优化、实现 Feign 最佳实践
【Feign】 基于 Feign 远程调用、 自定义配置、性能优化、实现 Feign 最佳实践
1071 0