持续更新就是给软件上医保

简介:

其实软件很像房子。

想让你的房子整洁舒适,你必须每周打扫。随着时间的流逝,有些东西会出问题,你必须修理它或换新的。但大多时候你需要做的只是简单的给门或窗刷一道漆就行了。

如果房子料理的好,人们就会喜欢住在里面。
screenshot

但想象一下,你现在要离开这个房子。刚开始,这个房子还会保持不错的外观,室内一切正常。可是,一旦不再有人打扫地板或清理垃圾,房子就开始落灰积沉。一段时间后有些东西开始出问题。起初只是一些小的、不重要的东西出问题,但有一天一场暴风袭击了它,毁坏了很多东西。
screenshot

如果这些毁坏的东西没有人来修理,房子就会持续破败。
screenshot

一段时间后,房子变得破败不堪,没有人再愿意去哪里。人们会告诉你,与其去修好它,不如盖个新的。

对任何软件产品来说,道理是一样的。

假设一个项目由你们7个人的团队来开发。每周你们会往里面增加新功能或修改bug。随着项目的变大,你们会做一些重构来保持软件架构的健康。你们会做一些迁移工作。时不时的升级软件包来修补bug、安全漏洞和新功能。

之后,开发工作突然停止了。也许是上级的某个人决定不再往这个项目上投入更多的资金。决策者说:“这个软件运行的很好。我们只需要它保持这样,我们不会再花钱来添加新功能。”

于是,你们这个团队被分配了其它任务,这个项目变成了没人照料的项目。系统目前还是正常运行,每天都在给现实生活中的人们提供着服务。

几年后,突然里面的支付系统出现异常。发生了什么?多少年都没有人碰过这些代码了。它怎么会突然的就不能用了呢?怎么可能?

无人照料,一场风暴来临了…

你 需要知道,如今的软件不再是一个自我封闭的世界。基本上所有的软件都会和外部世界进行交互。软件要依赖操作系统,硬件,很可能还会有个数据库或其它后台服 务。甚至还依赖一些外部API。它们全部是动态的,不停的在变化。所以,你的软件也需要跟着变化,这样才能保持正常运行。

在我们的这个例子中,是因为欧盟通过了一个新协议来统一货币。这导致老的支付API不再受支持。

这看起来不像是个大问题。我们的上级决策者决定招聘一个Ruby程序员来解决这个问题。这是一个Ruby on Rails + MySQL项目。很普通。Ruby程序员很快就招到了,而且估计出大概一两天就能解决问题。

然后,Ruby程序员开始查看项目代码,发现这是一个很老的项目,使用的是Rails 2.x,不是Rails 3.x或4.x。不,比当前的版本低两个大版本号。他从来没有用这么老的Rails版本开发过。

而 接着的另一个让他惊奇的事情是,MySQL是4.0版的,不是5.0或5.5。不,低一个大版本号!项目中的MySQL驱动gem使用的是一个本地 (native)扩展,无法在他的开发机上编译,因为他的gcc太新了。他必须降级gcc编译器版本,才能安装老的数据库驱动。

我只打算讲到这里。估计你已经知道我想表达的是什么了。

因 为这个项目多年无人维护,导致现在即使一个很小的改动也变得异常痛苦。一个根本用不了一天的小bug修改,现在用去了一周时间。而且这个Ruby程序员非 常不喜欢他现在干的活儿。其他程序员都可以使用Rails4.x里像“Turbolinks”这样有趣的功能,而他还在跟这些老破烂打交道。他宁愿建议扔 掉这个项目,利用现在的最新技术重新开发一个。

教训是清楚的。如果你离开你的房子几年之久,你应该请一位家政每周清扫一次,而在软件开发世界里,这意味着你每周都应该花一点时间检查系统并更新相关依赖。

很多时候都是没有更新可用,外部世界没有任何变化。这种情况下,5分钟你就能维护完。

很多时候你会发现软件包出现了一个新的补丁或小版本升级。这时,你必须进行升级,看看测试是否仍然能通过,系统是否能正常运行。这种事情通常会花20分钟,完全值得投入,因为这些升级会修补bug,弥补安全漏洞,带来新功能特征。有些还会带来内存和速度的优化。

一 般每过几个月,你依赖的数据库或API等软件包都会有一个大版本号的升级。替换他们可能会花数小时,甚至数天。但这是值得的,因为这些升级会让你的软件保 持最新技术,这是用来吸引有天才的程序员最好的途径,他们都是喜欢最新的技术,而不是一堆老代码。有时候这些更新是必须的,如果不更新,你的应用就无法运 行。

持续更新是为了让软件常年保持生命力,健康和新鲜血液。这能保证即使有业务逻辑上重大修改也能在合理的预算内、可以接受的时间里完成。持续更新就是你的软件项目的医疗保险。

文章转载自 开源中国社区 [http://www.oschina.net]

相关文章
|
7月前
|
SQL 开发框架 Java
互联网医院在线问诊系统的设计与实现(论文+源码)_kaic
互联网医院在线问诊系统的设计与实现(论文+源码)_kaic
|
7月前
|
存储 人工智能 搜索推荐
东郊到家预约服务系统开发|成熟源码|详情方案
Web 3.0有可能像Web 2.0一样具有颠覆性并引领重大的范式转变
|
2月前
|
监控 供应链
医院管理信息系统源代码,中小医院云HIS系统源码
HIS系统是医院信息化的核心,涵盖门诊、住院、药房、财务等模块。其功能包括患者管理、电子病历、医生工作站、护士工作站及临床诊疗等,实现从挂号收费到住院结算全流程自动化管理,提升医疗服务效率与质量。该系统通过综合管理与统计分析,优化医院运营。
113 12
|
6月前
|
前端开发 Java 关系型数据库
杨校老师项目之基于SSM社区疫情防控人员访客登记报备平台
杨校老师项目之基于SSM社区疫情防控人员访客登记报备平台
39 0
|
7月前
|
JavaScript 小程序 Java
党务政务服务热线|基于SSM的党务政务服务热线平台(源码+数据库+文档)
党务政务服务热线|基于SSM的党务政务服务热线平台(源码+数据库+文档)
64 0
|
7月前
|
BI 项目管理 C++
工时管理软件大比拼:推荐您不容错过的工具
ZohoProjects是推荐的项目管理软件,特别适合工时管理,包括计划、记录和审批工时。它允许设置任务工时,使用计时器或手动记录,且支持工时审批以保证数据准确性和成本控制。软件提供资源使用日历、计划与实际对比及工时表报表,帮助项目经理高效管理项目。
51 0
|
7月前
|
安全 网络安全
网络安全各类平台汇总(自用/持续更新)
网络安全各类平台汇总(自用/持续更新)
65 1
|
7月前
|
SQL JavaScript 前端开发
开源!!!自习室在线选座系统!!!
开源!!!自习室在线选座系统!!!
109 0
|
人工智能 小程序 安全
智慧校园管理平台源码,智慧校园小程序源码,智慧校园电子班牌系统源码
智慧电子班牌系统包括:SaaS云平台端、智慧校园管理平台端、家长/教师微信移动端、智慧班牌学生端四大软件平台。智慧班牌系统是一个集基础信息管理、设备管理、课表管理、信息发布、考试管理、成绩管理、课程考勤、进离校考勤、签到明细和请假管理等功能于一体的智慧化解决方案。
智慧校园管理平台源码,智慧校园小程序源码,智慧校园电子班牌系统源码
|
7月前
|
存储 前端开发 JavaScript
疫情下智慧社区管理系统开发与实现
疫情下智慧社区管理系统开发与实现
223 0