程序员垃圾代码分类指南

2019/07/20

上一篇文章《程序员垃圾分类图鉴》和大家聊了聊程序员的垃圾分类,有的程序员直呼太真实,有的程序员觉得太讽刺,不应该给程序员进行这样的分类。

其实每个行业都会存在各种各样糟糕的情况,娱乐性的分类会将问题放大,让我们能站出来用另一个视角来看看,什么类型的程序员是我们应该避免的。

做为一名老程序员,谁还没有写过几行垃圾代码,我到现在还记得在第二家公司离职时,写的那段超过 600 行一个方法的代码,可以想象后面接手我工作的同事,看到那段代码是什么样的感受。

那段代码已经过去了6年多,我现在仍然记得,可见有多痛。那 600 行代码真的巨复杂,嵌套了至少四个 for 循环,处理了思科 IP 话机最复杂的话费解析功能。为什么会出现这样的情况,因为时间!

那是我快离职的时候,领导仍然坚持让我工作到最后一分钟,就是写这段逻辑,害怕我走了之后,短期内没人搞的懂这块逻辑,所以只留了够写代码的时间,优化估计没考虑。

在距离拿到离职证明还剩最后一个小时,我还改了最后一个 bug,其实那家公司和领导真的很不错,只是离职交接这件事情,确实搞的有点小匆忙。

我一直都认为:好的代码是不断优化出来的,而不是一次敲出来的。正常情况下代码编写应该只占用30% 的工作,后面 70% 的工作就是不断的去优化它。

可惜的是,在中国互联网目前的情况下,后面 70% 的时间被不断压缩到了极致。很多程序员写完代码的时候,工期就到了,急匆匆的提交测试、上线投产。

在这样的情况下,代码质量完美、生产不出问题那就是世界第九大奇迹。中国很多互联网公司老板都相信这种奇迹,这个事情本身也挺奇迹的。

有什么的环境,就会产生什么样的产物,有时候这也是一种现实。

所以工作中有一些垃圾代码也是正常的,但出现”虎躯一震“的代码就比较少见了,对”虎躯一震“的代码进行分类那就更有趣了。

有人说,垃圾代码也是有价值的,不置可否,只是这个价值用在哪里。

还有补充一句,文中案例均为虚构,如有巧合,请来打赏!

干垃圾 | 虎躯一震代码

虎躯一震?被吓一跳算不算?反正我再看到那段代码,我的表情大概是这样的:

有一次我开了一个网站,网页半天没有反应,页面的右下面有一个”清理缓存“的超链接,于是就好奇的点了一下,没想到它立刻就弹出了清理完成!

作为一名老司机,习惯性的按下了:Ctrl+Shit+I 快捷键,就发现了下面这段牛X的代码。

<a href="javascript:alert('清理完成!')">清理缓存</a>

仔细查看了代码还发现有这样一个函数,del_yeye(); 一时看不出来这是要干嘛,跟着代码查过去发现是:

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

合着是要删除爷爷,方法命名很形象、很具体,给五星好评!心中升起一片由衷的佩服,果然乃我辈之将才!

当然我们后端程序员也不能示弱,就比如下面这段示例,代码简洁,命名规范,没个三五年经验写不出来这种代码。

这是一名资深程序员的素养。

当我在知乎看到这个分享,才明白我国的编程大任,已经顺利的传递到了祖国的花朵。以下是小咔的经历:

我曾经在我们学校办公室里看见一个六年级小学生熟练的在文本文档里敲出三行

:start
start cmd
goto start

我当时就震惊了

然后再看他熟练的放到c盘里,改后缀为bat,然后在桌面上新建个快捷方式,更改图标,重命名为“六年级教案大全”?!

当我下次再见到他时,他竟然带着两个人一起把整个办公室的电脑都创建了这个鬼东西???

可以想象的是,这位小朋友前途一片光明。

干代码建议处理措施:不建议、不倡导,但可以在自己家的电脑试用!

湿垃圾 | 风骚代码

写这么骚的代码,你们领导知道吗?

比如这个程序员,写了一段自动呼叫电话的程序,是这样的:

char a;
printf (“请输入您要呼叫的号码\n”);
scanf(“%char”,&a);
printf(“error!\n”);
printf (“系统异常,自动转呼!\n”);
printf (“正在拨号:110”);

不知道用户看到这段提示的时候,内心是不是这样:

当然在我们这行,没有最骚只有更骚,据说下面这段代码是 AI 最核心的代码,价值1个亿!!

其实我只想拿它试试能不能拿它融到一个小目标!

湿代码建议处理措施:发扬光大!

有害垃圾 | 毁灭性代码

三行代码教你做人:

drop database
rm -rf /
shutdown -h now

竟然有程序员找到了更牛逼的玩法,比如

sudo chmod -R 000 /

这些代码看了不止会虎躯一震,心里还会一揪,这是在诱导犯罪呀。

网上流传着一段【C++党】变量定义

#define int double
#define true false
#define max min
#define min max

果然是奇才,这种牛逼的方案完全可以推广到 Python ,Java ,PHP ,Golang…,并且把它打成组件包的时候,不知道会发生什么。

真正的程序员都是要给自己留后路的,比如上线后甲方突然说程序运行效率太低了,突然要求项目响应速度提升十倍!作为一名年轻的程序员,可会能哭晕在甲方爸爸的办公室。

但是对于一个资深的程序员来讲,这个都不是事儿!一行代码搞定所有性能优化问题,并且可以按照百分比进行定制!

这就是一名资深程序员的价值!

有害代码建议处理措施:建议启动垃圾回收机制!

可回收垃圾 | 可回收代码

一个关于for循环的凄美爱情故事

男孩

for(;;)printf("I LOVE YOU\n");

女孩回复

for(;;)printf("I LOVE YOU\n");

个人觉得,循环一百次的时候,应该一个 Thread.sleep() 或者 break,不然看着好像有点累。

还有一名网友的经历:

我原话和他说,你判断一下这些参数是否为空,不为空,就存库,懂吗?

他答,懂。

后来,我转过来看他代码

String A = parm.get("A");
String B = parm.get("B");

上头是我接的参数(不是源码)

以下是他写的,除了参数名不一样,完全没改

if('A'=='空'){
}else{
    System.out.println("存入A");
}
if('B'=='空'){
}else{
   System.out.println("存入B");
}

我看完愣了一下,问,写完了么?

他说,差不多了。。。

然后我啥也没说,默默接过来,把代码写完,然后给头说了

第二天,这小伙就接到HR通知,明天不用来了。

其实这个程序员还是可以在培养的,也就错了两个地方而已,这个老程序员太认真了。

可回收垃圾建议处理措施:回收加工再利用。

牛逼的代码

其实人生中最牛逼的代码是:

public class Hello{
	public static void main(String[] args){
		System.out.println(“Hello World”);
	}
}

当输出了 Hello World 的时候,18岁的我感觉到了自己与同龄人的不同,那种自豪感,那种快乐油然而生。仿佛那不是一段冷冷的代码,而是我人生的方向标。至此,纪念我程序生涯的开始。

在我 22 岁的时候,又通过一段代码,成功脱单……..,代码运行后的效果图如下:

当然为了大家的单身事业,我在网上寻找了很久,找到一份成品,需要的朋友可以在公号内回复:表白,即可获取。

结束语

其实各个公司都存在一定的祖传代码,这些代码就是一个垃圾宝库,有时候你根本不知道它是在干嘛,甚至觉得它几百年可能都没有使用过,但最关键是不敢动!

别问我怎么知道的!

自此以后,遇到一些看着很奇怪的代码压根儿碰都不敢碰。

有时候心血来潮改点东西……代码从头错到尾……

有时候当你只删了一行代码时,可能会发生下面这种情况

你说哪家公司完全没有垃圾代码,我是不信的!如果有,那就是刚成立的。

警告:文中所有代码均收集于网络,文中故事皆为虚构,如果雷同,请来赞赏。

请勿将文中代码应用于任何场景中,个人娱乐谨慎尝试!!

参考链接:

https://www.zhihu.com/question/287421003
https://www.zhihu.com/question/20402322


作者简介:纯洁的微笑,一个有故事的程序员。曾在互联网金融,第三方支付公司工作,现为一名自由职业者,和你一起用技术的角度去看这个世界。我的个人微信号 puresmilea,欢迎大家找我聊天,记录你我的故事。

Show Disqus Comments

Post Directory