查看原文
其他

史上最烂开发项目原来长这样?奇葩代码盘点

嵌入式ARM 2021-01-31

The following article is from AI研究所 Author 小智

本文授权转载自AI研究所,作者:小智


临近年末,小智身边的不少开发者忙碌了起来。

 

吃午饭的时候,研发组的鹏哥就在一旁大吐苦水。

 

“当初刚接手这个项目的时候就知道它是个坑,这都跟了大半年了,才稍微像样了些。现在加班加点,只希望不要拖到春节后······”

 

“淡定淡定,能圆满完成就算顺利的了。”

 

为了安慰鹏哥,小智给他讲述了一则在IT界流传多年的奇葩故事。如果屏幕前的你同样觉得手上的工作又糟心又窝火,听完这个故事应该会开心一些。

 


史上最烂的代码长啥样?


首先,整个项目总共600多万行C++代码,50000 多个类,基于CORBA

 

600多万行是个什么概念?对比一下:Linux3.13 版内核的代码,在除去内核驱动和架构之外,在kernel/里的源代码有13万行左右;以功能庞杂著称的编辑器Emacs,总源码规模也不过165万多行。

 


启动这个软件要用时15分钟,启动之后平均30秒到30分钟会崩溃一次,这时候就只能再花15分钟重启。

 

受编译器版本限制,用的C++语法都非常旧,只能在某个(早就没人维护)的操作系统上部署。

 

每编译一次需要用48个小时,还是在32台并行的机器上。光用户界面就有40-50个进程同时操作,而且没有用到动态链接,因此运行库要先加载起来,一个可执行程序就有几百兆。


莫名其妙的团队

这个牛X的项目得追溯到1996年,法国的一个政府机构请某个公司开发一款软件,预计工期2~3年。

 

甲方预付了几百万欧元后,公司招了几个程序员开始干活。随着资金陆续到位,公司开始疯狂招人,每隔三个月左右就把队伍扩大一倍。

 

结果7年过去了,这个项目竟然还没成型。这时候,因为延误造成的罚金已高达每日几千欧元,于是管理层决定要精简团队,减少开支。具体做法是,把有经验的老员工解雇了,以低薪招了一批没啥经验的新手来上班。

 


 一众毫无软件工程经验的人组成的队伍,这不就是个Bug生产工厂嘛!

 

而相反的,所有的经理们饭碗倒是都捧得牢牢的,一点都没受影响。以至后来,团队的55 个人里只有20个程序员,剩下35个都是经理,平均每个程序员配备1.75个经理······

 

第10年,管理层终于发现整个项目已经深陷泥淖,这才决定要招一些具有软件工程开发经验的人来弥补。

 

又苟延残喘了2年,最终,负责项目的公司领导因为挪用资金等原因被捕,进了监狱,这个在地狱烈焰中闹腾了十几年的项目才终于宣告终止。

 


奇葩代码盘点

当然,不是人人都有机会遇上这样的巨型糟糕项目,但项目里大大小小的糟心代码几乎每个开发者绕不过去的坑。

 

产品经理刁难,前辈离职抛盘,同组“猪队友”挖坑······没有最坑,只有更坑。

 


 这不,网络上流传着众多网友PO出的让人抓狂的代码,每一秒你都能发现比你手上的工作还烂的项目,发现比你还惨的研发。

 

👇真·颠倒黑白👇


@雨蓝蓝蓝

写这个页面的已经被我砍死了。

 

@玻璃杯中的鱼

// 以下所有left代表右

// 以下所有right代表左

 

@ Sc千寻

······


👇取名是个技术活儿👇

 

@飞面神下一只猪

用户码

UserMa

 

@ Kun Andy

public enum ColorType

{

Green, // 绿色

Hong, // 红色

}

//......

this.curColortype= ColorType.Hong;

 

一开始愣是没读懂“Hong”是啥,看了注释才恍然大悟。更犀利的是应该是觉得绿的拼音(lv)有点像等级,为了防止歧义特地用了Green,真是心思细腻啊!(咦

 

@侯杰

看枚举名字不知道FiveLine是什么鬼,看了枚举内容恍然大悟,原来是五行(xing)……


 

@王德福

至今忘不了实习单位的代码里面有一个变量叫做“fanpage”,看了上下文之后发现这个变量是控制翻页的。翻page······

 

@南零落枕

当年一位学长用虚拟现实做过的一个展示飞机的安装过程的项目,变量名都是“poguanzi”(破罐子)“lanchibang”(烂翅膀)"zhuanbuqilaidelunzi"(转不起来的轮子)我看完感觉这飞机迟早得掉下来。

 

然后函数名都是“bufaqianlaoshi”(不发钱老师)“nengbunengfaqian”(能不能发钱)想象不出学长经历了什么······

 

类名都是“haoxihuangebinvhai”(好喜欢隔壁女孩)“gebinvhaichuanhongyifu”(隔壁女孩穿红衣服)“gebinvhaihaimeinanpengyou”(隔壁女孩没男朋友)对爱情的渴望是每个程序猿的本能!

 

不过我接手以后实在是理不出个头绪,最后直接重写了一遍。

 

@匿名用户

我校的选课系统,有人能看懂这些变量名算我输

 

👇缺乏安全感👇


@Cyandev

不知道谁写的,看哭了


@共产主义接盘侠

感觉很搞笑但是又说不出来哪里不对····

//拼写容错

#define ture true

#define flase false

#define viod void

#definemian main

 

👇贵公司是按代码行数发工资吗?👇


@myd7349

只是为了确认输入内容没有非法字符,出现了这样惊天地泣鬼神的操作:


······


哪怕不知道RE,也该知道FindOneOf啊!就是再不济,也写个循环吧!

 

@benliu

以前遇到一个做测试的,写脚本,我写了一个方法让对方调用,说调用100次看看结果。结果我看到了他的代码类似如下:


·
·
·

我就想说这次麻烦您再调用一百万次试试

 

@苏格

难道这就是传说中NASA代码的最后一页?

 

👇玄学👇


@孙传武

有次看一个项目的源码,注释里有个warning是这么写的


@CeleryL


@邓牧泽

代码review的时候发现一个888的全局数组,但看代码最多用20个,我就问作者为什么定这么大,他说“吉利”。

 

👇说吧你是不是针对我👇


@海大歌

手动混淆法······我刀呢


 

@淼淼

今天看到对数据库查询返回的列表进行冒泡排序,整个人都不好了。

 

👇时间都去哪儿了👇


@虎耳

曾经在一个家公司,有一次发现有个地方在执行每个请求时都会空等了一秒。后来问老大,他说,如果客户有新要求,随时可以把性能提高一倍以上······

 

@破军

Thread.sleep(5000); //等客户交钱优化后删掉

 

👇找呀找呀找亲戚👇


@青苔

看见这段代码的时候,我拍了很久的掌



@LegStrong

del_yeye();

一时看不出来这是要干嘛,查过去发现是

parent().parent().remove();

合着是要删除爷爷·····

 

👇神逻辑👇


@TypingW

“你把距离显示优化一下,超过1000米就显示公里,精确到小数点后2位。”“好的!

 

然后在Code Review的时候,我看到了如下代码:



最后,我饱含热泪,心怀不忍地将他辛勤的工作成果改成了



小智注:对方的思路是将数字转化成字符串,如果其长度大于4(个十百千,超过1000米的字符串长度会大于4),然后往中间插入一个"."(小数点字符)。

 

@汤洌

要求程序的功能是输出明天的日期,然后他这么实现了:



休眠一天,然后输出当前的日期。真是个鬼才······

 

@小脆

证明1亿以内哥德巴赫猜想成立

 #include <iostream> 

#include<windows.h>using namespace std;

int main()

{

Sleep(2000);

cout<<“1亿以内哥德巴赫猜想成立”;

return 0;

}



不知道看完以上内容,屏幕前的你是否也像我身边的鹏哥一样焕发起了无穷的信心。

 

毕竟相比之下,他手上的项目真是再正常不过了。

 


互动话题

你见到过哪些奇葩的代码?


点个「在看」,Bug退散!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存