2019独角兽企业重金招聘Python工程师标准>>>

每一个软件项目的第一个版本都很漂亮。新项目从零开始,所有的内容都是新开发的。因为全新开发,就意味着没有历史负担的问题。第一个版本的BUG非常少,当然,程序员也尽力做到最好。这意味着,在开发人员的眼中,第一个版本可以算是完美:代码漂亮、设计良好、架构优秀。

第一个版本一旦发布,就会有人发现BUG,并公布出来,这些BUG都需要被修复。这时,第二个版本的起点就要比第一个版本高得多。第二个版本并非从零开始,而是建立在所有问题的基础上。而且,对于大部分的软件项目来说,往往没有足够的资源和时间把事情做得非常完美。所以对新版本的调整和修改就没有第一个版本那样漂亮和整洁。

这样就会在后续版本中不断地增加软件熵,代码变得越来越难以维护。负责维护的开发人员开始天天抱怨,特别是那些代码原作者已经联系不上的情况下,抱怨就更加严重。

终于有一天,项目会处于一个特定的阶段,此时,开发人员只能说:“别去动这个软件了!”。代码犹如一团乱麻,任何改变都有可能让某些功能无法正常运行。问题越来越大,最后管理层得到的信息就是这个软件病入膏肓了,他们也许会决定重新开发一个软件。

很有可能,开发新的版本所用时间会比原计划的时间要多得多。而且功能也可能比老版本还要少。但这个新版本将会非常漂亮和整洁。很明显,因为这个版本又是从零开始了。从设计角度来说,不会有什么问题。这个版本又像第一个版本一样的优雅、漂亮。现在终于达成我们预计的目标了。

事实上,出现在第一个版本中的问题也会同样出现在最新重写的这个版本中,代码会再一次地变成一团乱麻,需要有人去维护,会引入各种修改方法,所有出现在第一个版本中的问题都会一一重现。直到有人痛下决心,想从根本上解决问题时,又会出现前面的那种推倒重写的事情。虽然重新开发新的版本的确付出了不少努力,但每一次我们都会重新回到起点,重犯之前的错误。这种努力就是白费。

对于推倒重来的这种做法,我们往往是抱着会有更好结果的想法去为之,但最终却往往是同样的错误一犯再犯。所以没有任何理由支持我们这样从头开始来做一件事。如果想要一个更好的结果,就需要改变开发的方式。只有改变了开发方式,才可能有更好的结果。

总而言之,要学会使用增量迭代、小步前进的敏捷开发方法!人们需要软件加以改进,但改进时引入的伤害也应该最小化,特别是要避免只为增加功能而不顾设计走捷径使用非正常手段的情况。


 

 

 

 

 

参考书籍:

英文原名:Practical API Design: Confessions of a Java Framework Architect

中文译名:软件框架设计的艺术

转载于:https://my.oschina.net/apdplat/blog/311291

软件熵:软件开发中推倒重来的过程就是软件熵不断增加的过程相关推荐

  1. 聊天室软件源码开发中,该如何实现多线程同步?

    问题背景 在聊天室软件源码开发中,需执行多线程任务:任务1.任务2并行执行:等全部执行完成后,执行任务3. // 每个 任务 通过 sleep 模拟耗时 val task1: () -> Str ...

  2. 国产linux视频播放软件下载,JMPlayer:开发中的国产Linux音乐播放器

    此前我们介绍过一款同样由国人开发的YOYOPlayer(见此),不过它是基于Java的,而且已经停止开发很久了. 而JMPlayer虽然以J开头,但是它是用C++(WxWidgets)开发,不仅跨平台 ...

  3. 分享.NET开发中经常用到的十大软件(转)

    以下排名不分先后: 1. EditPlus:文字处理软件 EditPlus 是一款功能强大的文字处理软件.它可以充分的替换记事本,它也提供网页作家及程序设计师许多强悍的功能.支持 HTML.CSS.P ...

  4. iOS开发中,PNG图片的各种压缩软件,以及压缩率对比

    2019独角兽企业重金招聘Python工程师标准>>> 作者:shede333 主页:http://my.oschina.net/shede333 && http:/ ...

  5. 软件开发中的需求文档由谁来编写_使用 RStudio 中的 Rmarkdown 编写演示文档

    首先介绍一下 R 这个在数据分析和统计学中使用的非常广泛的一门语言: R 是一个数据分析.统计建模和作图的软件,它包含一门计算机语言称为 R 语言,R 语言与通常的 C.C++.Java 等编程语言相 ...

  6. 区块链技术在软件开发中的应用

    如果你是一名软件开发者或者IT从业者,你一定已经听说过区块链技术.区块链是一种基于密码学的分布式账本技术,被广泛应用于数字货币.金融.物联网等领域.但是,除了这些领域之外,区块链技术还可以在软件开发中 ...

  7. 浅谈软件开发工具CASE在软件项目开发中发挥的作用认识

    浅谈软件开发工具CASE在软件项目开发中发挥的作用认识 内容摘要:阐述了CASE工具作为 一种开发环境在软件项目开发中所起到的开发及管理作用.CASE工具实际上是把原先由手工完成的开发过程转变为以自动 ...

  8. 精益生产-丰田生产方式(TPS)在软件开发中的运用

    精益生产-----丰田生产方式(TPS) 创始人 大野耐一(丰田公司) 产生原因 丰田公司.产品种类多但是要求产量要少(多品种小批量条件下的生产方式). 体系框架 一个目标 降低成本,实现低成本.高效 ...

  9. 这些在 App Store 中找不到的 Mac 常用软件

    由于 App Store 对软件的限制比较严格,加上对付费软件还会收取较高的抽成.所以很多软件都没有在 App Store 上架,它们有自己的官网,比如迅雷.搜狗输入法.谷歌浏览器.千牛.百度网盘等. ...

最新文章

  1. DedeCMS筛选简单实现方法不改后台源文件
  2. BZOJ.3277.串(广义后缀自动机)
  3. Java基础02 方法与数据成员
  4. PSO-LSSVM算法及其MATLAB代码
  5. 漫游Kafka入门篇之简单介绍
  6. 有关web接受管理邮件
  7. 数值的整数次方(剑指offer面试题11)
  8. js版俄罗斯方块(二)
  9. Xcode 添加 background modes、Associated Domains 等设置项
  10. Android 开发问题
  11. Excel写入python中文乱码
  12. 数据结构练习题及答案
  13. 21.pgsql中的执行计划explain
  14. 【转载】如何学习统计学,或我的学习之路——初学者写给初学者
  15. 痛心!中兴程序员跳楼始末:或成其公司内部矛盾牺牲品
  16. Win10输入法无法选择,右下角出现叉号,提示IME被禁用
  17. Linux虚拟机CentOS7挂机问题
  18. java 空格 char_java中如何判断char是否是空格
  19. BugKu: 粉色的猫
  20. websocket实现语音通讯(转)

热门文章

  1. Linux Ubuntu上架设FTP
  2. MySQL共有data和redo的后果
  3. POJ 3041 Asteroids(最小点覆盖)题解
  4. [BZOJ4894]天赋
  5. Django学习(2)数据宝库
  6. 【全栈项目上线(vue+node+mongodb)】04. 怎么在一台主机上面部署多个网站,详细操作指南...
  7. 《Adobe Illustrator大师班:经典作品与完美技巧赏析》目录—导读
  8. Spring学习笔记十七---事务的转播行为
  9. mongoDB 文档操作_改
  10. Apache理论与实战