【精】让Oracle的故事告诉我们软件开发过程重要还是结果重要!【别等到代码累积成灾难】

       在软件开发中我认为还是过程比较重要。因为我们开发一个项目是为了达到预期的客户需求,不管过程什么样结果都应当是以完整的需求实现为目的。好的程序员和一般的程序员就会有很大的差别,可能一个实现某一个功能一个好的开发过程写出来代码会非常整洁,代码结构设计非常合理,这就会与只关注结果而写出来的代码有很大的差别。在我个人看来编程序还是要注重过程的,一个良好的编程习惯合理的结构划分是非常重要的。可能写一个项目最终实现的目的是一样的,可是没有一个软件是一次性开发完成的,也没有一个程序员会跟一个项目做到底,糟糕的开发过程不但会给后期维护带来巨大的困难,也像老师说的那样会带来大量的返工,逻辑不清楚的代码别人看来也不容易理解。

         前段时间在CSDN上读了一篇文章,标题为“我永远不会再为Oracle工作了”,这篇文章的由来是因为某网友在 Hacker News 上发起了一个 “你见过的最糟糕的代码是什么?” 的问题而引发了一位Oracle员工的吐槽。Oracle数据库12.2它有接近2500万行C代码,这其实真的很恐怖,简直无法想象在不破坏成千上万个现有测试的情况下更改产品中的单行代码。好几代程序员在有限的项目期限内编写了这些代码,其中充斥着大量的垃圾代码。其中包括非常复杂的逻辑、内存管理、上下文切换等,这些都用数千个flag连接起来,整个代码充斥着神秘的宏命令,如果不拿出笔记本并且手动去展开相关的宏命令,就无法清除的了解这些命令,甚至可能需要一两天才能真正理解某一个宏命令的作用。而到现在这个产品仍然存活并且仍然可用的唯一原因是数百万次的测试!

       其中Oracle的员工吐槽了他修改bug的方式,开始处理一个新的bug。花两周的时间试图理解 20 个不同的flag,这些 flag 以神秘的方式相互交互,导致这个困境。再添加一个flag来处理新的特殊场景。添加几行代码来检查此 flag ,并解决有问题的情况,规避该bug。将更改提交到包含大约100-200台服务器的测试服务器集群,这些服务器将编译代码,构建新的 Oracle 数据库,并以分布式方式运行数百万个测试。回家。第二天来上班,继续处理别的bug。测试可能需要20-30个小时才能完成。再回家。再来上班,检查你的集群测试结果。顺利的话,会有大约100个失败的测试。倒霉的话,将有大约1000个失败的测试。随机选择一些测试并试图搞清楚你的假设出了什么问题。或许还需要考虑10多个flag才能真正理解bug的本质。再添加一些flag以尝试解决问题。再次提交更改以进行测试。再等20-30个小时。来来回回重复两周,直到你得到了将这些 flag 组合起来的“神秘咒语”。终有一天,你会成功,不再出现测试失败。为你的新更改添加100多个测试,以确保下一个不幸接触这段新代码的开发人员永远不会破坏你的修复。提交最后一轮测试的成果。然后提交以供审核。审查本身可能还需要2周到2个月。所以现在继续去处理下一个 bug 。在2周到2个月之后,一切已就绪,代码将最终合并到主分支中。

        难以想象这是一件多么恐怖的事情,这款产品的存在真的是一个奇迹,由此可见其忽略了过程的重要性为之付出了多么巨大的代价,目前Orcale已经完全跟不上Java的更新速度了,开发一个小的功能就需要6个月到一年的时间。由此可见软件开发过程的重要性了。

        很多时候我们明知道过程很重要但是我们就是不愿意去那么做,总感觉别人写的那么规范是在脱裤子放屁,殊不知我们自己的眼界是有多么狭隘,别等到代码累积成灾难了,就后悔莫及了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值