文档章节

无法维护的代码

崔钢
 崔钢
发布于 2014/01/04 20:50
字数 1794
阅读 349
收藏 9
长期以来,软件工程往往被拿来和建筑工程进行类比,但是人们往往认为修改软件无论如何也比修改建筑容易,但这种看法其实并不正确。软件和建筑一样,一旦完成交付使用之后,就只能做小的调整和修葺了。大的改动往往就会需要大的成本,这也许并不是客户所希望见到的。建筑在设计的时候,往往也会需要考虑维护的问题,比如会预留一些通道,设计一些活门什么的。但软件显然在这一点上就比较困难,因为似乎也没有什么定例或者规定来要求软件的设计实现者考虑维护的问题,并思考如何让软件的维护变得容易。

其实软件的维护也是一个挺重要的工作。它包含的两个方面的内容,一个当然是修改bug,另外还有增加或者改进功能。如果有人做过这些事情,就会发现,其实修改一个老旧系统的bug以及为老旧系统来增加功能往往是一个比较困难而且痛苦的工作。而导致维护困难的主要原因说白了,其实就是代码量。显然代码量越少,维护就越容易。而代码量其实就是系统的规模。不能从软件做的事情来认定软件系统的规模。操作系统往往要做很多的事情,但它的规模并不大,很多的时候比不上UI的规模。而软件的规模越大,明显就越难维护。

但是这一点也并非人人都明白,特别是一些自以为做过多年技术工作的白痴。他们往往过于主观的从技术的难度上去判断维护的难易,而从来不考虑系统的规模。其实这是一个多么浅显的道理呀。比如对于从一堆绿豆中找出混入的黄豆这种没有技术含量的工作来说,规模的差异会导致工作的难度大大变化。从十颗绿豆中找出混入的一颗黄豆是很容易的事情,可以说是一目了然。但是从一吨绿豆中找出混入的一公斤黄豆就完全是另外一回事情了。这种不负责任的人如果是领导,往往会使程序的维护工作雪上加霜,因为他会因为错误的观点而做出错误的评价,毕竟技术是如此的简单。而不公正的评价往往是导致团队破灭的根本原因。因为除非有特殊的原因,没有人能够忍耐对自己不公正的评价的。毕竟人从本质上都希望得到别人的认可而不是否定。

但无论如何,维护工作总是需要有人做的。个人认为,软件维护工作如果能够顺利一定需要一个技术水平较高,并且熟悉系统,而且年纪较大,性格沉稳的人来做核心。因为他就算不能起到什么大的作用,至少能够保证慎重。而慎重和保守恰恰是是保证维护工作顺利完成的关键。换句话说,维护系统并不能随心所欲,这个工作往往比开发还有着更多的限制和约束。

对于系统的实现和设计者来说,应该具有一定的维护思想,特别是实现者。很多软件设计的很好,或者就算设计的没什么新意,至少中规中矩,但实现的很烂,最终导致系统的毁灭。所以实现系统的人,一定要具备维护的思想,在写程序的时候,就要考虑维护的成本。而提高可维护性的第一原则就是尽可能的 减少代码量。 大体上来说,许多的程序员并不是很重视减少代码量的问题。有的时候还因为写了巨多的代码而骄傲。这其实是完全错误的想法。好的程序员和平庸的程序员往往就区分在这个地方。好的程序员对待代码十分的执着,会想尽办法使自己写的代码精致和优雅;而平庸的程序员,往往完成功能了事,反正代码是否精简集约,测试也无法发现。当然,其实这种说法等于没说,或者说等于没用,不过我觉得可能并非人人都明白这个道理。

少的代码更容易维护,这个是毋庸置疑的。但是如何做到却很困难,而且关键是,并没与类似模式那样的相对固定和场景化的东西存在,往往需要因地制宜。下面我会根据我的经验写一些建议,仅仅适用于java语言1.6版本。
  1. 减少if else语句的高度。if-else语句越高,就越影响理解,因为if-else语句中的条件不但重要,而且还相互关联。把相互关联的东西都尽量写在一起是一种非常好的编程习惯。
  2. 少些注释。最好只写doc注解。少写注释会让你在如何命名方法和变量上多花费一些精力。
  3. 别写毫无意义的接口,非常影响阅读和重构。如果这个接口仅仅有一个实现,那这个接口就是完全没有必要的。
  4. 尽量只用一个配置文件。
  5. 尽量不要拼sql,哪怕多写几个。拼sql也应该用preparedStatment。。。
  6. 使用对象作为数据结构,而不是随意的使用map和list。这点真的很有趣,明明是java语言,却好像在使用c语言开发。到处使用map套lis或者list套map。
  7. 如果需要生成返回值尽可能的返回对象而不是字符串。特别是一些servlet,里面返回页面的时候,不要自己拼写json结构。为什么不用类库呢?
  8. 使用类库。使用类库,不要什么都打算自己实现。要知道人类区别与动物的最大一点就是人类会很好的使用工具。对于开发来说,类库就是我们的工具。千万别什么都想着自己实现,别忘记了,你是在喧嚣的人类社会里面,而不是荒凉的小岛上。
  9. 要有责任心,对自己的代码负责,不要因为工期而打马虎眼。事实上,虽然经理们说的十分严重,但是工期总是一延再延的,一气呵成的软件一定是驴粪蛋蛋,表面光。
  10. 处理一下IDE给的警告。
  11. 查查字典,不要满篇错别字。
  12. 这条是给老板们说的:求求你们雇一个真正懂开发的人来开发吧。





© 著作权归作者所有

共有 人打赏支持
崔钢
粉丝 171
博文 99
码字总数 59953
作品 0
西安
高级程序员
私信 提问
加载中

评论(2)

紫电清霜
紫电清霜
大赞:)
蔡佳娃
蔡佳娃
绝对同感,尤其是最后一条,说出了我的心声,赞一个!
找到了 OSChina 出问题的原因了~~

前两天 OSChina 出了点问题,详情请看:OSChina 早上出了点问题 现象是自动构建索引的进程没有退出,堆积一大堆,导致数据库连接爆满,应用无法连接到数据库,导致页面无响应。 今天终于弄清...

红薯
2010/05/23
774
2
领域驱动设计学习的一些总结(阅读dddquickly有感)

一 为什么要有领域驱动设计? 首先,计算机技术的作用(特别是软件技术)是为了解决现实世界某一个领域的问题,脱离了这些问题,单纯的算法,编程语言,或者操作系统都并没有实际的意义。但是...

yhchinabest
2016/08/07
34
0
最完美的select下拉框美化

很多人为select的诸多不完善而头痛,如无法自定义样式、IE6中无法被浮动层遮住等等。下面介绍一款堪称最完美的下拉框组件:360UI即QUI下拉框( ) 特点1:美化的并且可自定义的外观 QUI下拉框...

阿东2020
2013/05/06
1K
7
360UI 界面框架 最完美的select下拉框美化

最完美的select下拉框美化 很多人为select的诸多不完善而头痛,如无法自定义样式、IE6中无法被浮动层遮住等等。下面介绍一款堪称最完美的下拉框组件:360UI即QUI下拉框( ) 特点1:美化的并...

阿东2020
2013/05/06
0
0
作为开发者,你不应该害怕的 8 件事

1. 改变 在软件开发中,没有什么事情会一直停滞不前。现在你正在开发的东西,只是软件的其中一个版本,未来随时可能发生变化。 变化是在软件开发中最常见的事情,你最好接受这一事实。一种好...

oschina
2013/03/20
6.6K
43

没有更多内容

加载失败,请刷新页面

加载更多

小程序-星星评分

//UI界面 <block wx:for='{{item.rateArray}}' wx:key wx:for-item="i" > <image wx:if='{{ i==0}}' src='../../assets/xing4.png'></image> <image wx:if='{{ i==1}}' src='../../assets/xi......

lsy999
3分钟前
0
0
JavaScript与WebAssembly进行比较

本文由云+社区发表 作者:QQ音乐前端团队 在识别和描述核心元素的过程中,我们分享了构建SessionStack时使用的一些经验法则,这是一个轻量级但健壮且高性能的JavaScript应用程序,以帮助用户...

腾讯云加社区
4分钟前
0
0
如何设计一个 RPC 系统

RPC是一种方便的网络通信编程模型,由于和编程语言的高度结合,大大减少了处理网络数据的复杂度,让代码可读性也有可观的提高。但是RPC本身的构成却比较复杂,由于受到编程语言、网络模型、使...

编程SHA
6分钟前
0
0
API权限控制与安全管理

一、API权限控制范围 1、首先验证web端请求参数: (1)web请求参数:渠道、ServiceName、版本、Airline、时间戳(yyyyMMddhhmmssSSS)、reqXML、Language、签名 (2)请求不能为空,并且格式...

Jack088
6分钟前
0
0
最热门的13个Java微服务框架

曾经的服务器领域有许多不同的芯片架构和操作系统,经过长期发展,Java的“一次编译,到处运行”使得它在服务器领域找到一席之地,成为程序员们的最爱 本文,我们将和大家分享13个可靠的Jav...

java菜分享
7分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部