Oracle 程序员吐槽:永远不会再为 Oracle 工作了!

九路 等级 1001 0 0

一位Oracle程序员在Hacker News上吐槽自己的工作,引起了热议,内容如下:

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

这实在太恐怖了,简直难以想象!你做不到在不破坏成千上万个现有测试的情况下更改产品中的单单一行代码。好几代程序员在很紧的项目期限内编写了这些代码,代码中充斥着各种各样的垃圾内容。

非常复杂的逻辑、内存管理和上下文切换等等,一切都用数千个标志(flag)连接起来。整个代码充斥着神秘的宏命令,要是不掏出笔记本,手动展开宏命令的相关部分,你就无法搞清楚这些宏命令。可能要花一两天才能真正搞明白某个宏命令的作用

有时你需要搞明白20个不同标志的值和效果,以预测代码在不同的情况下会如何运行。有时多达数百个标志!我一点也不夸张。

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

下面是Oracle数据库开发人员平常的一天:

开始处理一个新的bug。

花两周的时间试图搞清楚20个不同的标志,这些标志以神秘的方式相互交互、导致这个困境。

再添加一个标志以处理新的特殊场景。再添加几行代码来检查该标志,避开有问题的情况,并避免该bug。

将更改提交到含有大约100台到200台服务器的测试服务器集群,这些服务器将编译代码,构建新的Oracle数据库,并以分布式方式运行数百万个测试。

下班回家。第二天来上班,处理别的bug。测试可能需要20小时到30小时才能完成。

下班回家。第二天来上班,检查你的服务器集群测试结果。顺利的话,会有大约100个失败的测试。倒霉的话,会有大约1000个失败的测试。随机选择一些测试,并试图搞清楚你的假设出了什么问题。也许另有10来个标志要考虑,才能真正搞清楚bug的本质。

再添加几个标志,试图解决问题。再次提交变更进行测试。再等20小时到30小时。

另外重复冲洗两周,直到你确保神秘的标志组合无误。

终有一天你会成功,没有一次测试失败。

添加针对你更改的100多个测试,确保下一个不幸接触这段新代码的开发人员永远不会破坏你的修复程序。

为最后一轮测试提交工作。然后提交以供审查。审查本身可能另外需要2周到2个月。所以现在改而搞下一个bug。

2周到2个月后,一切都已完成,代码最终合并到主分支中。

以上就是在Oracle修复bug的程序员日常工作的客观描述,一点也不夸张。现在想象一下开发新功能会有多么恐怖。开发一项小小的功能就需要一年半载(有时甚至长达两年!)(比如说添加一种新的身份验证模式,比如支持AD身份验证)。

这款产品可以用这本身简直就是个奇迹!

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

收藏
评论区

相关推荐

Oracle 程序员吐槽:永远不会再为 Oracle 工作了!
一位Oracle程序员在Hacker News上吐槽自己的工作,引起了热议,内容如下: Oracle数据库12.2。它有近2500万行C代码。 这实在太恐怖了,简直难以想象!你做不到在不破坏成千上万个现有测试的情况下更改产品中的单单一行代码。好几代程序员在很紧的项目期限内编写了这些代码,代码中充斥着各种各样的垃圾内容。 非常复杂的逻辑、内存管理和上下文
工作中用到的oracle SQL
Oracle SQL用于记录工作中用到的oracle sql语句 表新增字段 表结构变动: 新增字段并指定字段类型sql 新增一个字段,多个字段用小括号括起来,逗号分隔alter table 表名 add 新增字段名(类型长度); demo TSALES_APPLY_COST表中新增一个字段(CAPITAL) 类型为: NU
牛皮了!遇到“ORA-12154: TNS: 无法解析指定的连接标识符”错误,到底该如何解决?
相信使用过Oracle数据库的人一定碰到过“ORA12154: TNS: 无法解析指定的连接标识符”错误,我在此做一个小小的总结。 在程序中连接Oracle数据库的方式与其他常用数据库,如:MySql,Sql Server不同,这些数据库可以通过直接指定IP的方式连接,但是Oracle则需要通过Oracle客户端配置网络服务名的方式来连接。否则就会出现“
MySQL与Oracle的区别
1.  Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高。 2\. Oracle支持大并发,大访问量,是OLTP最好的工具。 3\. 安装所用的空间差别也是很大的,Mysql安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特
Oracle11gR2DataGuardSetupusingOracleGridControl
Oracle Database 11g Release 2 Data Guard Setup using Oracle Grid Control ======================================================================== This article describes the creati
Oracle与Sql server的区别
一直搞不明白Oracle数据库和sql server的区别,今天我特意查资料把他们的区别整理出来 ================================================ Oracle数据库:Oracle Database,又名Oracle RDBMS,或简称Oracle。是[甲骨文公司](https://www.oschina.n
Oracle数据库的安装 【超详细的文图详解】
* **Oracle简介** Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性
Oracle用户环境变量配置
要成功安装并使用Oracle数据库软件,必须在Oracle用户的.bash\_profile文件中设置ORACLE\_BASE、ORACLE\_HOME、ORACLE\_SID和PATH环境变量,其他的根据需要来设置。 ORACLE\_HOME可以在安装前手动配置,另外,Oracle安装过程中会根据ORACLE\_BASE的值自动指定的ORACLE\_HOM
oracle调用java代码
  内容主要包括:java开发,打包java程序成jar文件,上传jar文件到Oracle所在系统,Oracle导入jar文件中java类到数据库中,Oracle根据导入java类创建函数,Oracle操作函数。   用到的软件:Oracle数据库,Oracle数据库安装在Linux操作系统上;java用IDEA开发;上传jar文件用winSCP;操作Or
CentOS Oracle 11g 开机启动
我的环境变量: ORACLE\_SID=bao ORACLE\_UNQNAME=$ORACLE\_SID ORACLE\_BASE=/bao1 ORACLE\_HOME=$ORACLE\_BASE/oracle Oracle在$ORACLE\_HOME/bin下提供许多对数据库进行操作的脚本,其中dbstart和dbshut可分别用来启动和
CentOS卸载Oracle 11gR2(x64)
### 环境 OS: CentOS 7.4; hosts: L134; IP: 192.168.1.134 Oracle安装文件目录:/opt/oracle_install ORACLE_BASE:/data/app/oracle ORACLE_HOME: /data/app/oracle/product/11.
Linux下启动Oracle服务和监听程序
su - oracle sqlplus /nolog connect /as sysdba startup lsnrctl start oracle数据库是重量级的,其管理非常复杂,将其在linux平台上的启动和关闭步骤整理一下。 安装完毕oracle以后,需要创建oracle系统用户,并在/home/oracle下面的.bash\_pro
Linux下建立Oracle 11.2.0.1服务及其开机自启动
我的环境变量: ORACLE\_SID=bao ORACLE\_UNQNAME=$ORACLE\_SID ORACLE\_BASE=/bao1 ORACLE\_HOME=$ORACLE\_BASE/oracle Oracle在$ORACLE\_HOME/bin下提供许多对数据库进行操作的脚本,其中dbstart和dbshut可分别用来启动和
Python安装Oracle数据库驱动
**1.环境设置** \[root[@oracle](https://my.oschina.net/oracle) ~\]# cat /etc/redhat-release  CentOS release 6.9 (Final) \[root[@oracle](https://my.oschina.net/oracle) ~\]# python -V
Superset
配置Oracle数据库连接 下载Oracle 客户端:[https://pan.baidu.com/s/11iEY7BAOG9gjIgeGWdoZ5w](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fpan.baidu.com%2Fs%2F11iEY7BAOG9gjIgeGWdoZ5w)