更多有趣的科普,请点击右上角关注我↗
一般来说,人造的,巨大的事物,会给人一种强烈的感觉。
比如摩天大楼⬇️
或巨大的水坝⬇️
看着这种东西,世超不禁想起了这些话: “ 人类工程奇迹 ” 。
但欣赏属于欣赏。如果这个巨大的项目出了什么问题,必须维护,那么这个只能用来维持疼痛 “ 灾难 ” 来形容了。
最近,世超在网上看到了这样一个科技界的庞然大物: Oracle Database 12.2 的代码库!
在国外计算机论坛 Hacker News 有人问了这样一个问题: “ 你见过的最大的烂代码有多大? ”
一个目测是 Oracle 员工, ID 叫 “ oraguy ” 用户给出了答案⬇️
甲骨文数据库 12.2 版本,一个将近 2500 万行 C 语言代码庞然大物!
以世超为例,写代码就像堆积木,一旦整个积木都有功能,任何一块移动都会导致其他积木发生事故,坍塌是可能的。。
如此巨大的项目处理太多的程序员,每个人都以自己的方式解决问题,这导致其他人必须在项目上写东西,花很多时间了解原始代码是如何工作的。
幸运的是,代码库仍然非常完整测试代码,如果出了问题,程序员不必自己找问题 BUG 出处。
只是.......................... oraguy 说,该项目更改一行代码后,通常会跳出 1000 多个测试失败的消息,然后程序员要一个个排除。
这也损失了数百万的测试,这个项目现在仍然可以商业化。
所以给 Oracle Database 编写代码的程序员的工作流程通常是这样的⬇️
1. 获得新任务:解决新发现 bug 。
2. 了解需要两周时间 20 个不同的 flag ( 标记 ),这些标记是以一种非常奇怪的方式制作的 bug 。
3. 尝试添加 flag,写几行代码,小心不要创建更多 bug
4. 提交修改后的代码,然后用测试服务器创建新的数据库,运行数百万个测试。
5. 回家,第二天来的时候做点别的,因为测试需要20到30个小时。
6. 回家,第二天来的时候看结果:运气好的话,可能只有 100 测试失败;运气不好的话有 1000 失败。找一个失败的测试来理解这一点 bug 的原理。
7. 改变,提交,测试,再来二三十个小时。。。
8. 重复上述步骤,俩星期后你大概能理解这一点 bug 的原因了。
9. 最后,在你几乎锤蛋自杀之前,你发现测试已经完全通过了!
10. 再写几百个测试,防止哪个不吉利的孩子下次碰项目,不会搞砸你的修改。
11. 提交代码,进行最后一次测试和代码复制。这个过程大约需要花费 2 周到 2 个月,所以这段时间去修其他的 bug 吧!
12. 完成一切,代码修改可以添加到产品中!
以上。。。
而且据 oraguy 说,为数据库添加一个小功能通常需要花费 6 个月到 1 年的时间。
世超想想都知道原因:可能只用花写新功能代码 1 个月,由于新功能的产生,剩下的时间都在改变。 bug 。。。
还记得差评君之前说的技术债吗? Oracle 的这个 2500 万行项目,可能是负债累累的样子。
会变成这样的原因。。每个人的工作都没有规范,遇到问题修补就好,完全不考虑整个项目。
事实上,如果你遵守一些代码规范,就不会那么糟糕了。
前华为员工在世超的同事中表示,他们组的大型项目也有数千万行代码进行修改 bug 或者添加功能的周期只有几周。
所以说。。灾难可能是受害者第一手造成的。
图片来源:Construction SpecifierTravel NevadaDrupal Integrationcodeshipg2techgroup参考资料: Ask HN: What's the largest amount of bad code you have ever seen work?“ 25,000,000 行代码问你敢不敢动?“ 25,000,000 行代码问你敢不敢动?” - CSDN的文章 - 知乎“ 你为什么觉得这份工作听起来很悠闲? ”
声明:易商讯尊重创作版权。本文信息搜集、整理自互联网,若有来源标记错误或侵犯您的合法权益,请联系我们。我们将及时纠正并删除相关讯息,非常感谢!