代码阅读次数多于编写次数

代码阅读次数多于编写次数

维护者 > 作者

如今这已是程序员的共识,提醒我们初次编写代码不应该为了追求方便而牺牲将来阅读和修改此段代码的人。

“代码的阅读次数多于编写次数”传达的意思是,通过保持代码简单、编写测试和文档等方式来降低维护代码的难度通常是一个不错的投资。这是为软件开发周期的全局考虑。

代码的使用次数多于阅读次数

用户 > 维护者 > 作者

代码是达到目的的手段。代码是被用来实现用户需求的工具。软件应该有一个目标,应该为某个用户提供服务。无论代码编写得多么好,多么易于维护,也无论使用的技术有多复杂,如果不能实现其目标,并为用户提供良好的体验,那就没有意义。这就是为什么,与其猜测或询问用户需要什么,不如尽早而频繁地将程序放在用户面前,并从他们的反馈中获得的改善信息融入到程序中。

“代码的使用次数多于阅读次数”传达的意思是,以用户为中心、以实际需求为出发点开展编码工作,否则一切将是徒劳。

代码运行次数多于阅读次数

用户 > 运维 > 开发者

此处的“运行”指的不仅仅是执行一个程序;我指的是在生产环境中运行代码的所有方面,包括部署、升级、观察、审计、监视、修复、下线等等。正如Dan McKinley所说:

通常情况下,保持系统可靠运行的长期成本往往总是远远超过在构建过程中遇到的任何不便之处。

我花了一些时间才完全理解这一点,因为根据我的经验,许多正在构建的软件实际上从未真正投入生产,至少不是大规模。大多数软件是根据从未经过测试的假设而构建的。但当你在生产环境中运行代码时,KISS(Keep It Simple, Stupid:保持简单和愚蠢)原则会呈现出新的维度。这不仅仅关系到代码,还涉及降低复杂性并及时了解它们的故障情况;发布软件,并确保发生故障时仍然能正常工作。

“代码运行次数多于阅读次数”传达的意思是,在小规模软件系统中,不要过度设计程序,保持简单和愚蠢,以便及时发现和修正问题。

商业视角

我说过,在开发过程中牢记用户可以让我们走得更远。这是在这样的假设下进行的:有用且运行良好的软件,对用户有价值的软件,才会对组织也有价值。对于开发人员来说,可以这样理解:我们生产良好的、可用的软件,而业务则负责将其转化为金钱。大部分软件都是如此,特别是消费者软件和企业软件。但这种抽象被证明过于简单化,实际上我们可以将商业视角纳入到我们的工作流程:

商业需求 > 用户 > 运维 > 开发者

最明显的例子就是预算:我们没有无限的资源来满足用户的需求,所以我们需要衡量成本和收益。有营销,有最后期限,有利益相关者和投资者。甚至还有个人兴趣和政治因素等。单独考虑我们的软件、我们的团队或我们的用户显得是有意义的,但当我们将组织视为一个整体时则不然。有时,我们需要致力于创造收入,而不是取悦用户。

也就是说代码程序要迎合商业模式。

各种问题代码

1、难以维护的代码

这是本文开头探讨过的问题。这种聪明但懒惰的代码会变成意大利面条,只有某个特定的人才敢碰。

2、无法使用的软件

这类软件的开发团队没有听取用户的意见,或者是他们将技术放在了第一位。过度设计的程序,“现代化”导致用户体验下降,破坏浏览器功能的 Web 应用程序等。

3、在我机器上正常运行

这类软件没有考虑运维。这些软件过于复杂,有很多组成部分,虽然数据负载很小但采用了花哨的数据库,由一个小团队管理的微服务生态系统。过早考虑大规模架构的软件。半夜因软件出现故障而被唤醒的人与设计软件的人是不同的一批人。

4、正确的事情

将代码视为目的本身。由自负的工匠、泰坦尼克号的音乐家和Lisp黑客构建的软件。

5、简历驱动开发

开发软件时不考虑任何风险,开发者可以随心所欲地做任何他们想做的事情。

6、虚构的软件 

这类软件即便构建完成也很少(或永远不会)投入生产,我称之为“虚构的软件”。Charity Majors 称之为“活在谎言中”。

另一种虚构的软件是没有用户的软件(但有规模)。这类软件没有解决任何问题,或解决了错误的问题,或者没有受众。这些软件采用了一些炒作的技术,并一直使用,直到出现某种用例。

7、晚期资本主义

由风险投资支持的软件,这类软件没有商业模式,或其商业模式是成长直至垄断然后剥削用户。

如上所述,我认为软件的目的是为最终用户解决问题。我们的目标是让用户满意,而不仅仅是交付代码。然而,从事程序员的工作以来,虽然软件无处不在,但我发现坚持这个立场越来越艰难。

有很多正在开发中的软件根本不关心用户,或者企图操纵用户,或者将用户变成产品。这类软件不仅限于社交媒体,作为用户,点击开始按钮就会弹出各种窗口,我甚至无法在不受到此类骚扰的情况下顺利地预订房间、订购食物;打开浏览器上网搜索就会得到一堆垃圾结果。

似乎做好软件开发的工作与该行业的盈利之间存在着某种矛盾关系,我认为这解释了为什么许多软件专业人士越来越不适应该行业。虽然我们不能无视经济现实,但也许我们应该更加强力地坚守道德底线,不伤害用户。虽然用户不一定始终优先于商业,但商业也不应无条件地居于首位。

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

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

相关文章

Salesforce“卷土重来”:对中国CRM市场影响在哪?

于本土CRM而言,Salesforce是一面镜子,也更是催化剂。 长期来看,Salesforce的加入,从某种程度上将会加速中国CRM赛道的合理价值曲线的走向,通过带动外界对于CRM整个赛道的关注和热度,进而加速本土CRM的成长…

在vue项目中,数据已经在页面渲染,但在后续操作时获取不到数据

如下图 产生这个问题的原因 异步问题 如何解决 方法一:可以将其存放在一个setTimeout里面(利用一个极小的延迟来获取数据),如下图 效果 方法二:将操作放入axios里面,如下图

心理学效应

条柠檬心理马太效应飞轮效应酸葡萄效应凡勃伦效应登门槛效应糖果效应南风效应野马效应聚光灯效应毛毛虫效应曝光效应

【Matlab】如何使用MATLAB可视化二重积分(附完整MATLAB代码)

可视化二重积分 前言正文完整代码代码实现可视化结果 前言 二重积分是指在二维空间中对函数进行积分。二重积分的公式如下: ∫ a b ∫ c d f ( x , y ) d x d y ∫_a^b ∫_c^d f(x, y) dx dy ∫ab​∫cd​f(x,y)dxdy 其中, a a a 和 b b b 是 x x x…

Docker-consule 服务发现与注册

consul服务更新和服务发现 什么是服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的,不保障高可用性,也不考虑服务的压力承载,服务之间调用单纯的通过接口访问。直到后来出现了多个节点的分布式架构&…

7-8 报销

年底,报销都挤在一堆,财务忙得不可开交。每个报销表包括姓名,各项费用的金额。对于每个报销单,这里规定按如下要求处理: 金额高的优先处理;若金额相等时,则姓名字典序小的优先处理;…

java发起http、https请求,并携带cookie、header,post参数放body并可选关闭ssl证书验证,高可用版

公司有个需求是发起https请求对接国家数据接口,需要带header、cookie,并关闭ssl证书验证,搜了很多文章,都说用HttpsURLConnection发起请求,但不知为啥在封装body参数的时候一直报400封装出错,也欢迎指出不足…

Linux出击之网络环境设置

Linux中如果想要设置静态IP,这就需要我们进行自己去设置。 首先想知道是否有网络,我们就可以查看我们的网卡信息呀,ping 外网地址试试。 比如, ping www.baidu.com ip addr show, 这两个命令都可以让我们对网络有一个了解。 …

【AHK】设置esc为退格键但又可以通过ctrl+esc保留原来esc的退出的功能

该需求为68键本人自用常用习惯。通过奖罚esc设置为backspace键,开始的习惯思维是通过send实现,导致一直陷入死循环,最后经过多次尝试得出以下方案。 还可以用于 键位对调的思路,即直接对调esc和backspace 方案1 esc::backspace ^e…

【DFS】200.岛屿数量

题目 法1&#xff1a;岛屿数量 class Solution {public int numIslands(char[][] grid) {int m grid.length, n grid[0].length;int[][] used new int[m][n];int res 0;for (int i 0; i < m; i) {for (int j 0; j < n; j) {if (grid[i][j] 0 || used[i][j] 1) …

豪腾四海×实在RPA丨最懂财务的数字员工,为企业节省人天2000+

企业数字化转型&#xff0c;财务是一个重要的切入点。随着豪腾四海数字化业务不断展开&#xff0c;新的系统、流程和数据源被不断引入&#xff0c;财务部门面临的是不断暴增的对账、数电票处理、审计等日常工作。 “如此大的工作量&#xff0c;即使是经验丰富的资深财务&#…

设置一个vue文件的全局模板

VsCode在新建一个.vue文件的时候是空白的&#xff0c;需要我们自己输入片段&#xff0c;可这些在每次新建.vue文件都需要自己手敲&#xff0c;所以创建一个模板方便使用 设置vue模板 导入 {"生成 vue 模板": {"prefix": "vue","body"…

浅谈EC防御技术

两种常见的时效校验机制&#xff1a;TTS三重时间戳、EC计数 小菜最近接触的是EC计数&#xff0c;后续有机会的话有也会介绍哦TSS防御 某一层中&#xff0c;通信实体将数据加上EC计数&#xff0c;发送给对等实体&#xff0c;对等实体根据此进行接收信息间隔预期&#xff0c;通过…

柯桥西班牙语里最“好用”的脏话:一些关于cojones的表达

Creo que una de las palabras con ms contextos donde se puede utilizar y que adems pronto es conocida por los estudiantes de espaol es esta que est en el ttulo. 相信标题中的这个单词“cojones”&#xff0c;使用时总是包含很多含义&#xff0c;同时也是西语学习者最…

Power BI - 5分钟学习增加索引列

每天5分钟&#xff0c;今天介绍Power BI增加索引列。 什么是增加索引列&#xff1f; 增加索引列就是向表中添加一个具有显式位置值的新列&#xff0c;一般从0或者从1开始。 举例&#xff1a; 首先&#xff0c;导入一张【Sales】样例表(Excel数据源导入请参考每天5分钟第一天)…

SuperMap iManager 11i(2023) SP1新特性汇总

作者&#xff1a;ls 【目录】 &#xff08;一&#xff09;GIS云套件支持发布聚合服务&#xff08;二&#xff09;GIS云套件支持自定义/修改服务接口信息&#xff08;三&#xff09;GIS云套件管理界面支持批量修改镜像&#xff08;四&#xff09;GIS云套件管理界面可调整服务节点…

浏览器同时渲染多个高频率更新图表问题分析及解决方案

需求点&#xff1a;一个页面同时渲染十余个刷新频率为100ms的图表 问题分析 首先&#xff0c;我们知道根据浏览器运行原理&#xff08;不知道可以参考-浏览器运行原理&#xff09;&#xff0c;渲染进程是无法实现如此多图表同时高频率渲染的。造成的后果就是&#xff0c;1. 后…

【ChatGLM3】第三代大语言模型多GPU部署指南

关于ChatGLM3 ChatGLM3是智谱AI与清华大学KEG实验室联合发布的新一代对话预训练模型。在第二代ChatGLM的基础之上&#xff0c; 更强大的基础模型&#xff1a; ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。在语义、…

vue 数据更新了,但在页面上没有展示出来

这是因为有时候 vue 无法监听到数据的变化&#xff0c;导致数据变化但是视图没有变化&#xff0c;也就是数据更新了&#xff0c;但在页面上没有显示出来。 方法一&#xff1a;使用 this.$set() 进行数据更新 this.$set(target, key, value); target&#xff1a;要更改的数据源…

三年没回家过年,你的羽绒服准备好了吗?

2023进入尾声&#xff0c;这一年&#xff0c;我们在“阳康”之后重新出发&#xff0c;找回了烟火气&#xff0c;和错过几年的山水重逢&#xff0c;向往远方的同时也更爱眼前的点滴&#xff0c;逐渐重建起对美好生活的期待。 把生活态度投射到社媒上&#xff0c;出圈的热点话题…