文章转载自 OSCHINA 社区 [http://www.oschina.net]

某网友在 Hacker News 上发起了一个 “你见过的最糟糕的代码是什么?” 的问题,引起了广泛关注和讨论,评论数已接近600条。

其中,一位 ID 为“oraguy”的程序员对 Oracle 数据库代码的吐槽,更是引发热议。内容大意如下:

Oracle 数据库 12.2,它有近 2500 万行 C 代码。

这有多恐怖,简直难以想象!你无法在不破坏成千上万个现有测试的情况下更改产品中的单行代码。好几代程序员在有限的项目期限内编写了这些代码,其中充斥着大量的垃圾代码。

非常复杂的逻辑、内存管理、上下文切换等,这些都用数千个 flag 连接起来。整个代码充斥着神秘的宏命令,如果不拿出笔记本,并且手动去展开相关的宏命令,就无法理清楚这些命令。甚至可能需要一两天才能真正理解某个宏命令的作用。

有时你需要理顺 20 个不同 flag 的值和效果来预测代码在不同情况下的行为方式。有时多达数百个 flag !这一点也不夸张。

这个产品仍然存活并且仍然可用的唯一原因是数百万次的测试!

以下是 Oracle 数据库开发人员的日常:

  • 开始处理一个新的 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个月之后,一切已就绪,代码将最终合并到主分支中。

以上就是对在 Oracle 修复 bug 的程序员日常生活的描述,一点也不夸张。现在想象一下开发新功能会有多么恐怖。

开发一个小功能需要6个月到1年的时间(如果是添加一种新的身份验证模式,比如支持 AD 身份验证,可能需要2年)。

这款产品本身就是一个奇迹!

我不再为 Oracle 工作了,永远不会再为 Oracle 工作了!

推荐阅读 ↓↓↓

1.不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事

2.如何才能成为优秀的架构师?

3.从零开始搭建创业公司后台技术栈

4.程序员一般可以从什么平台接私活?

5.37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...

6.请停止学习框架

7.滴滴业务中台构建实践,首次曝光

8.15张图看懂瞎忙和高效的区别!

一个人学习、工作很迷茫?

点击「阅读原文」加入我们的小圈子!

你见过世界顶级公司的最垃圾的代码是什么?相关推荐

  1. 安卓清理垃圾清理代码_从战中清理代码

    安卓清理垃圾清理代码 从战中清除代码–验证 让我们直接从一个例子开始. 考虑一个简单的Web服务,该服务允许客户向商店下订单. 订单控制器的非常简化的版本可能如下所示– @RestController ...

  2. 安卓清理垃圾清理代码_用方面清理代码

    安卓清理垃圾清理代码 在我以前的文章中,我描述了字母转换,并且提到了我们使用AspectJ来解决该任务,但是我没有提及AspectJ的工作原理和一般性方面. 因此,在接下来的几行中,我将解释: 什么是 ...

  3. hp203b例程_飞思卡尔公司LIN总线的例程代码

    [实例简介] 飞思卡尔公司LIN总线的例程代码,里面有PDF介绍和飞思卡尔众多DEMO板的LIN代码例程,非常适合对LIN总线的通讯进行学习 [实例截图] [核心代码] 飞思卡尔公司_FSLLINDr ...

  4. 新员工从公司的git上下载代码步骤:

    从公司的git上下载代码步骤: 自己的电脑得安装好git(Git-bit,一路next即可)和小乌龟(一路next):检测安装是否成功,在桌面右击,出现Git Bash Here和Git GUI He ...

  5. 问八股文的公司都是垃圾!?

    △Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 390 篇原创分享 作者 l Hollis 来源 l Hollis(ID:hollischuang) 我最近经常看到很多人 ...

  6. 这些年,亲眼所见的软件公司中混迹的老油条汇总

    说到老油条,最厉害的还是业务主管,这帮人是干销售的,有一定的忽悠能力,而且还会做人. 我也不说自己是人才吧,基本上看这些业务员,也看得很准,谁是在实实在在干事情,跑业务的,谁是搞计量忽悠老板的,这些人 ...

  7. 世界顶级公司的前端面试都问些什么

    在过去的几年里,我在亚马逊和雅虎面试过许多前端工程师.在这篇文章中,我想分享一些技巧,帮助大家做好准备. 免责声明: 本文的目的并不是为你列出在前端面试中可能会被问到的问题,但是可以将其视为知识储备. ...

  8. 垃圾清理代码_最近弄了个清理电脑C盘的经验

    首先,自己有个良好的习惯,尽量的保证自己C盘不装任何其它的额外的东西.一般都放到其它的盘上去,这样至少可以保证你的系统盘不会三天两头就慢,真的太烦人了. 有一个好的自动清理的软件在手里,也是必不可少的 ...

  9. 大公司在Github的开源代码

    最近开始学着使用github,对于我这个菜鸟来说看懂这个英文网站已经很不容易.网上无意看到一篇文章,感觉很好,现转载.希望自己有时间有能力去读读开源代码,也希望不仅仅是用别人的东西,自己可以为开源贡献 ...

  10. 垃圾清理代码_一招清理电脑垃圾

    hello,大家好,我是你们的小雨哥哥.今天要教大家的是如何一键清理电脑的垃圾文件. 众所周知,电脑用久了会越来越卡,运行的越来越慢,这其中除了硬件的损耗之外,还有一个原因就是电脑的垃圾文件越来越多, ...

最新文章

  1. DATEIF实例说明4
  2. 一个网站的诞生- MagicDict开发总结3 [日语字典数据结构]
  3. 管理你的代码——Git学习(一)
  4. eclipse编写wordcount提交spark运行
  5. 使用openocd调试Linux内核,OpenOCD-JTAG调试
  6. 单片机c语言程序设计软件下载,《手把手教你学单片机C程序设计》PDF免费版下载...
  7. 有关嵌入式的 github
  8. OC5022B内置MOS的开关降压型恒流驱动芯片
  9. 联合概率密度函数的基本结论
  10. flex布局练习,仿手机淘宝首页
  11. 2023成都电源工业展览会
  12. 计算机运行加减乘除哪个最慢,计算机算加减乘除的时间对比
  13. 电脑卡住了怎么办,鼠标无法操作,那就试试快捷键吧
  14. docker image 的sha256 digest摘要
  15. 杭电计算机考研失败,2020杭电计算机考研感想
  16. ZZULIOJ 1135: 算菜价,Java
  17. 苹果手机用什么软件测试续航,iOS 14.6负优化:测试发现7款iPhone机型的续航均下滑...
  18. 一文了解Python部分高级特性
  19. 酷我车载版显示服务器错误,酷我云盘服务器异常
  20. 运筹学基础【九】 之 马尔科夫分析

热门文章

  1. EXCEL如何新建自定义单元格以及样式怎么设置
  2. SmartRoute之远程接口调用和负载
  3. JMockit学习笔记
  4. Visual Studio 2015 移动跨平台开发初体验
  5. Apache环境.htaccess伪静态301跳转(www与不带www)
  6. GetPrivateProfileString的问题,获得的CString结构有问题,高手指点
  7. Nginx 设置文件缓存时间
  8. 用DELPHI为ASP开发文件上载组件
  9. 吐血推荐泛绿色编程工具: EditPlus 已于 2010-07-14 升级到 v3.12(602)
  10. 无需第三方app,清理Mac缓存垃圾