软件长寿法则,记住这7条
csdh11 2025-03-10 14:33 2 浏览
【编者按】软件设计构造师Karan Goel在看到“joe”疯狂的成功之后,为我们总结了7个可以使软件寿命更长的规则,这其中包括:模块化、测试、持续集成、自动化等等。他表示遵循的规则越多,你软件的寿命就越长。下面一起来看看这些规则背后的细节。
以下为译文:
在“joe”疯狂的成功之后,我列出了一个我认为评判好坏软件的清单。尽管这使我对事物看得很清楚,然而对于任何给定的项目,很少有可以遵循这些规则的,包括我自己在内。但是你遵循的规则越多,你软件的寿命就越长。
什么让你远离编写好的代码?“快速打破事物”不是一件好事吗?
不!学习创建软件是一种技巧,任何人都能做到。而学习创建好的软件则是一种艺术,它需要时间、努力和奉献精神。
你希望世界上有更多的SEGFAULTs(段错误)吗?你希望系统管理员因为你的糟糕代码而不断的被电话骚扰吗?你希望你的PM是因为你的软件惹毛了用户而记住你吗?……
我并不反对任何形式的快速发展,因为我相信MVP和第一时间推出的力量。但是在某些时候,当时间充裕时,你必须要意识到低质量代码是走不远的。
当你走进医生办公室时,医生会询问你一系列问题来确定你的病因,他们不会在没诊断的情况下给你开药。
同样,知道在什么时间“写坏了”软件对你很重要。这里有些问题可以很好的帮助诊断我们是否正在编写糟糕的软件:
- 更新软件花费很多时间和精力吗?
- 当你做一个很小的改变时,整个系统还会运行OK吗?
- 你的产品中是否存在碎片代码,并直到用户抱怨的时候才意识到它们的存在?
- 当你的系统崩溃时你知道要如何做吗——如何深入备份并部署它们?
- 你在某些事情上花费很多时间吗?比如在不同环境之间转移,或者重复运行着相同的命令……
因此,让我们来看看本文所说的规则有哪些?
1. 模块化
处理有Bug模块的工作要比处理整个代码轻松的多
虽然相比较有史以来最复杂的CPU来说,人类要更加的复杂,但是你不得不承认人类有时也会有无法解决的复杂问题,简单的来说,如果不使用任何计算器,你能告诉我13x35等于多少吗?我打赌你做不到,至少在一个合理的时间内你做不到。
但是我们擅长将复杂的问题逐步的分解为较小的我们能够解决的问题。
13x10是多少?130,13x5呢?即为130/2=65。那么130x3是多少?是390,390+65呢?455。搞定!(PS:或许你会有更简单的方法。当问题越复杂的时候,分解的优势就越显而易见。)
将同样的逻辑运用到软件当中,通过多个文件、文件夹甚至是项目来划分你的软件,将所有相关性的事物遵循MVC或其他变化规律置于一个位置。
这不仅会提高代码的可阅读性,也会让你的调试变得更加容易。在大多数情况下,堆栈跟踪会领你前往非常小的代码集,而不是成千上万行的代码文件。当更新个别模块时,你就不需要考虑整个系统。
2. 测试
我因不经常为我的代码编写测试而愧疚,所有的产品代码都需要测试
我们习惯性的去把测试当作是一种不同于做软件的活动,即便是在学校,你被传授的是C++模块如何工作的,却没人教你它们是如何被测试的。在线教程会教你如何使用Brainfuck制作一个Web服务,然而它们不会告诉你如何去测试它,这就是问题所在。
有些人会告诉你,在开始写实际的应用逻辑之前,首先要做的是编写测试。
何时编写测试各有喜好,只要写了就OK。当你第一次开始的时候,不要试图成为一个测试高手,从简单粗暴开始,如print(add(1, 1) == 2),然后再逐步到测试整个框架。
当你开始测试你的代码时,你将会明白你软件的复杂性。你将开始学习如何将你的软件模块化,以便可能独立测试。所以当你遵循了这一规则的时候,你同时也在遵循第一个规则——模块化。
3. 持续集成
持续集成是伟大的,它们会在你添加broken code(碎片代码)的时候通知你
当你编写测试之后,你需要确保它们是合格的,同时也要确保它们在多种环境下是合格的(例如多版本的Python)。在代码作出任何改变时,你也需要测试。
当你能够手动的做这些时,你可以选择更方便、更快以及更便宜的持续集成平台。
Thoughtworks在CI上有显著的贡献,关于CI,你需要知道:
Continuous Integration(CI,持续集成)是一个开发实践,需要开发者每天数次的频率将代码集成到一个共享的库中,每一次入驻都会被自动构建归档,以便团队提早发现问题。这里推荐两个:TravisCI和Drone.io
4. 自动化
有多个脚本需要运行测试和部署?将它们添加在单一的bash脚本中,减少步骤,节约时间
大的项目通常会有一些像引导代码或以不同的方式测试代码等任务,又或者部署到不同的服务器,备份部分的代码等等。
有些人会使用txt文本来存储这些命令,并在需要的时候复制粘贴。如果你是这样的,或许你应该抽个时间来学习一下bash脚本(或Python)。这里有些常见的任务,你应该用到简单的bash脚本来自动化处理它们:
- 将README.md转换为其他格式(取决于不同的分配路径需求)
- 自动化测试(包括创建模拟服务器或数据、删除临时文件等等)
- 开发服务器的阶段代码
- 部署到产品
- 自动从属更新(注意,这一点不是总能使用,尤其是当更新会打破现有API时)
5. 信息冗余
冗余版本控制,不要仅依赖于Github,使用多个同步的站外远程,增加信息冗余
当你访问git-scm.com时你会看到这么一段话:
Git是一个免费和开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
在这段话里,分布式是关键。
如果你把代码仅仅托管于Github的话,或许你应该需要反思了。试想一下,但凡Github有一点故障,你的工作流程将会停止。你无法预料到意外何时会出现,所以保持代码的离线备份永远都不会是一个坏注意。这种情况下信息冗余对你而言是一件好的事情。
这里提供一些代码存储的参考:
- 将代码存储与Dropbox的Codebase文件夹中,自动同步变化;
- 同时将代码存储于Github;
- 将最重要的代码存于另外两个地方。
6. 提交
对于经常做出改变、提交和推动的人来说使用合理的提交信息是很有必要的。
看看你提交的历史,你会发现类似这样的信息:
“fixed issue with module”
“fixed”指什么?“issue”又是什么问题?模块化有时哪个?
很多程序员多会把版本控制系统当作是一种备份,而不是维护历史的一种手段,充满这种信息的历史版本是没有用处的,除非你想去做检索文件。
如果你觉得很难去写好一个提交信息,或许可以参考以下几点:
- 每个提交都应该有一个目的:修复一个缺陷、添加一个新特性或删除一个现有的特性等等;
- 每次仅提交一个改变;
- 在提交的信息中应包含问题编号;
- 提交说明中应对改变作出描述;
- 编写合理的提交信息,如:“fixed cache being reset on every insert caused by missed access after write. fixes #341”或“added a new form in header to make it easier to collect leads. close #3”。但是千万不要是这样:“remove stuff because why not.xoxo”
7. 计划
制定一个计划为最坏的情况做准备,一旦真的出现问题,你该怎么做?所以在文档中详细的写下步骤。
即便遵循以上六个规则,也并不是意味着你的软件是不可战胜的。说不定由于什么或者是谁的过失,灾难就会降临。所以有一个计划是明智的,一个计划会让你看上去“很聪明”,事实也是如此。
最后
如果您并不相信这几个规则,回答以下两个问题:
- 你希望一个新人加入你的团队,并能够很轻易的理解现有的代码吗?
- 重构代码是简单快速的吗?
如果你的回答是“No”,或许你应该再重新看一遍本文,与你的团队分享一下。
最后Happy programming!!!
原文来自:Medium
- 上一篇:研发协同利器:XState调研与应用
- 下一篇:什么是微服务?如何拆分微服务?
相关推荐
- Hutool Java工具类库导出Excel,超级简单
-
作者:程序猿的内心独白原文链接:http://suo.im/5Zxx2L前言在开发应用系统的时候,导出文件是必不可放的功能。以前用过POI、easyexcel等工具的导入导出功能,但总感觉太麻烦了,代...
- java轻松玩转Excel之EasyExcel
-
项目地址:https://github.com/PiKeZhao/excel-model.git如果您对该项目有什么问题加群咨询哦978219630(各类电子书籍,学习视频等)大家常用Apache...
- 程序员:超级简单导出Excel 工具,Hutool Java工具类库
-
前言在开发应用系统的时候,导出文件是必不可放的功能。以前用过POI、easyexcel等工具的导入导出功能,但总感觉太麻烦了,代码特别多,感觉并不是很好用。今天给大家介绍一款新工具,java工具类库H...
- EasyExcel导出Excel表格到浏览器,通过Postman测试导出Excel
-
一、前言小编最近接到一个导出Excel的需求,需求还是很简单的,只需要把表格展示的信息导出成Excel就可以了,也没有复杂的合并列什么的。...
- 好难~记录一次生产上的OOM解决过程
-
点击上方,轻松关注!及时获取有趣有料的技术文章记录一次生产上的OOM解决过程一.项目架构...
- 发现开源:替换Jenkins,支持多用户多语言部署平台Walle很震撼
-
溪云阁:专注编程教学,架构,JAVA,Python,微服务,机器学习等领域,欢迎关注,一起学习。部署系统,从手动部署,到用jenkins,到阿里的自动化运维部署,一直在不断的变化姿势,好让自己舒服点。...
- SpringBoot + EasyExcel 轻松实现百万级数据导入导出,用起来还优雅
-
01、背景介绍在实际的业务系统开发过程中,操作Excel实现数据的导入导出基本上是个非常常见的需求。...
- 10W 行级别数据的 Excel 导入优化记录
-
优质文章,及时送达作者:后青春期的Keatswww.cnblogs.com/keatsCoder/p/13217561.html需求说明项目中有一个Excel导入的需求:缴费记录导入...
- easypoi导出Excel根据内容如何自动换行和自动调整行高
-
在使用easypoi导出EXCEL的时候,经常会遇到需要根据内容自动换行和自动调整行高的情况...
- POI读取/生成Excel大文件,有高人吗?
-
最近在搞一个通用文件处理服务器,需要处理excel文件,但是有的excel文件大小超过3M,读取文件时直接导致jvm异常:gcoverheadlimitexceeded。原来poi读取excel...
- 如何轻松实现Excel动态列导出?Easypoi教程来袭!
-
EasyPoi简介EasyPoi是一款基于ApachePOI和jxls的Java开源框架,它可以用于快速创建Excel、Word、Pdf等复杂文档。Easypoi最大的特点是可以通过注解来实现对Ex...
- Excel导出,Excel模板导出Excel导入,Word模板导出神器-Easypoi
-
概述Easypoi是码云上的一个开源项目。项目开发组织是Lemur开源。目前属于码云最有价值开源项目。Easypoi是对poi的封装,其主打的功能就是容易,让一个没见接触过poi的人员就可以方便...
- 优雅地实现EasyPoi动态导出列的两种方式
-
前言嗨,大家好,我是希留。...
- easypoi一款方便快捷的excel处理框架,赶紧学习起来
-
easypoi是一个基于ApachePOI和jxls封装的Java框架,用于简化Excel导入导出和Word导出等操作。它支持将Java对象转换为Excel或Word文档,并支持Excel模板导出和...
- EasyPoi使用
-
EasyPoi的主要特点:1.设计精巧,使用简单2.接口丰富,扩展简单3.默认值多,writelessdomore4.springmvc支持,web导出可以简单明了使用1.easypoi...
- 一周热门
- 最近发表
-
- Hutool Java工具类库导出Excel,超级简单
- java轻松玩转Excel之EasyExcel
- 程序员:超级简单导出Excel 工具,Hutool Java工具类库
- EasyExcel导出Excel表格到浏览器,通过Postman测试导出Excel
- 好难~记录一次生产上的OOM解决过程
- 发现开源:替换Jenkins,支持多用户多语言部署平台Walle很震撼
- SpringBoot + EasyExcel 轻松实现百万级数据导入导出,用起来还优雅
- 10W 行级别数据的 Excel 导入优化记录
- easypoi导出Excel根据内容如何自动换行和自动调整行高
- POI读取/生成Excel大文件,有高人吗?
- 标签列表
-
- mydisktest_v298 (34)
- document.appendchild (35)
- 头像打包下载 (61)
- acmecadconverter_8.52绿色版 (39)
- word文档批量处理大师破解版 (36)
- server2016安装密钥 (33)
- mysql 昨天的日期 (37)
- parsevideo (33)
- 个人网站源码 (37)
- centos7.4下载 (33)
- mysql 查询今天的数据 (34)
- intouch2014r2sp1永久授权 (36)
- 先锋影音源资2019 (35)
- jdk1.8.0_191下载 (33)
- axure9注册码 (33)
- pts/1 (33)
- spire.pdf 破解版 (35)
- shiro jwt (35)
- sklearn中文手册pdf (35)
- itextsharp使用手册 (33)
- 凯立德2012夏季版懒人包 (34)
- 反恐24小时电话铃声 (33)
- 冒险岛代码查询器 (34)
- 128*128png图片 (34)
- jdk1.8.0_131下载 (34)