你写过的最蠢的代码是?

发布时间:
2023-08-24 12:35
阅读量:
10

本想匿名,最后,还是决定匿名了,即使这事情过去很多年了。

那家公司是外企,做的具体内容我就不说了,公司背景是日本和美国投资的,所以公司员工主要有美国鬼子,日本鬼子,假洋鬼子。

我那个时候是个萌新程序员,面试通过之后还挺激动的。差不多用了一周时间熟悉环境,发现同事人都很友好。友好的leader就给我一个小任务,独立开发一个系统,他负责进度跟踪。

我后来才知道,这个部门,人人都负责好几个小系统,大家不愿意手头系统太多,就推到我头上。

开发需求的spec大约30多页,英文写的,我英文不好,心惊肉跳的接过需求,把所有不认识的单词全部翻译完毕,深刻理解需求之后,才发现这东西其实没多复杂,写了三十多页,完全是老外异常严谨。

我预计一个月能开发完毕。

leader给了我半年时间。

先跟写需求的人反复确认,一边确认我一边写demo程序,确认完毕,基本上功能就开发完毕了。写需求的大哥在我的demo上反复测试,发现完全符合他的需求,也很开心。

但是,看到需求写那么详细,我担心我写的代码有问题,否则leader干嘛给我半年时间?

当时还剩下五个月多一周的时间。

我决定优化代码。

先把所有的接口加上日志功能,因为系统要跟其他系统交互,有了日志,就能方便快速定位错误。

很快,觉得日志不满意,就把日志分组,接口日志,系统运行日志,用户操作日志。

然后觉得日志并不重要,不是核心业务,于是把写日志从同步变成异步。

觉得异步很有用,就把所有可能消耗时间的操作全部变成异步,写了个类似事件触发的机制,比如完成一个事情A,A完成之后的后续自动操作,触发对应的异步操作。但是A这件事情已经迅速做完了,效率贼高。

没多久,把异步优化了,定义了操作的等级,不重要的功能等级特别低,就放在一个队列中,慢慢处理。

然后,觉得队列效率不高,如果是大批量操作会有锁死的情况。就用了两个队列,加信号量,往队列中写数据,如果写入失败,说明这个队列被锁住,就自动去写另外一个队列。后面的异步处理程序不定期从这两个队列中取数据出来处理。看上去非常巧妙而且丝滑柔顺。

这些东西搞完之后,我觉得应该优化用户操作。

前端的操作流程是spec写死的,我就在前端记录用户的操作轨迹,比如完成某个任务,需要点击多少次鼠标,业务路径太复杂,或者用户花的时间太多,就说明设计得不太合理,用户用起来太费劲。

这些东西也很快写完了,我发现记录了好多数据,查看不方便,就又弄了个报表,把用户的行为习惯形成一个报表,老板可以随时看到员工登录系统后,发呆的时间多不多(鼠标和键盘没输入,认为是在发呆。)

当时我每天都忙碌,加班到很晚,把这些东西都写完之后,代码量比预估的多了好几倍,我怕性能有问题,自己对所有接口进行了压力测试,异步的好处就体现出来了,十几万次的调用,依然反应很快,当然,内存占有狂飙。

我还是不太放心,加了个熔断机制,当内存升高到一定程度,接口遇到请求,就直接返回忙碌的信号,不做其他任何处理。这样就尽可能的保护了正在运行的工作不丢失。本来还打算发个短信给维护人员,当时没有短信网关,公司也不让购买短信接口。就放弃了。(我当时还特意看了at指令集,打算绕过公司交换机发短信。)

半年之后,总算按时提交。

公司IT部有专门的测试人员,leader说我是新来的,bug可能比较多,让测试人员好好测试,否则他不放心。

测试人员拿着spec仔细测试,没发现几个bug,而且发现的bug都是界面上的某个位置不对,或者字体大小不对等等。这让测试人员很没成就感。

然后进行了压力测试,依然流畅到他们怀疑人生,因为压力测试服务器性能太好。最后他们直接压上百万级别的数据过去,然后触发了我写的熔断机制。

后来写测试报告的时候,测试组的人都不是很开心。

系统上线之后,运行得特别稳定,我就没什么事情可做,后来老板之一,发现了报表,可以看到员工发呆的时间等等,他就把leader训了一顿,说怎么能随便监控员工。

后来,我就被开除了。理由是过度设计。

多年以后,我习惯了迅速完成任务,然后摸鱼或者学习新技术,再也没写过那么愚蠢的程序了。


没想到有这么多人点赞,也没想到有这么多人收藏,看到有人辱骂我,被系统自动删除了,我很无语,补充一点点情况吧。也希望大家别骂了。

这个外企是我的第二份工作,工资比第一份工作差不多翻倍还多点,我农村人,家里比较穷,所以能有个高收入的工作就特别珍惜,也特别想做好这个工作,只是没想到做砸了。

公司说是辞退,不是开除。

辞退的原因说是过度设计,其实主要是说跟公司文化冲突,leader想留我,上面的boss不同意。

我不是故意监控员工,主要是分析日志,根据员工操作习惯做报表,把员工分成“Lazy”和“Busy”,我英语不好,没想到“lazy”这词,其实不是那么好,最终激怒了boss。

那个公司同事,我接触到的人都对我挺好,包括辞退我的leader和做reception的小妹妹。

------再次补充一点点题外话吧------------

我以为上面加了点补充信息就没人骂我了,结果依然有人在说我是工贼,看来我真的是没说清楚。

我一开始看到这个提问,觉得好玩,所以写回答的时候,是充满欢乐的,就像成年人说起自己童年做过的坏事,觉得丢脸但是挺好玩。

我是被辞退,不是正常离职,退工单上要写原因,leader是个好人,怕影响我后面找工作,就写了个“过渡设计”,被辞退那个月才上十天班,他给我争取了整月的工资,还另外补偿了两个月赔偿,我被辞退是自己作死,与leader没关系。

boss之所以愤怒,完全是因为文化不同。公司可以对员工进行考核,可以说员工performance没达标,但是不能说员工“lazy”,因为可能会涉嫌歧视,给公司带来潜在的法律风险。boss在知道有人对员工“歧视”的情况下,依然不处理,就是boss的问题,所以我必须走。

我的英语入门是体育老师教的,不是搞笑,是真的,我是初中才开始学英语,初一是在完小上的,英语老师忙着对付初三,没时间管初一学生,一个体育老师通过录音磁带学了点英语,然后来给我们上课,同学都是农民的孩子,对学习也没那么看重,所以教得好坏都无所谓。后来高中也学的是哑巴英语,背单词,知道单词基本含义,但是不知道这个单词后面代表的文化和情绪。这种方式,考试可以,但是跟人交流,很容易出问题。就像中文中说“傻小子”其实并不是骂人而是亲切。

知乎上的人估计想象不出来农村的孩子是怎么回事,我出生在四川的一个非常闭塞的小山村,家里特别穷,村里后来才通电,晚上照明,用的煤油灯。通上电后,有人家买了彩电,村民都去他家看,连广告都看得津津有味,跟过节一样。住的房子是泥土筑成的墙,通过房顶可以看到这家人的穷富:穷人家用茅草,有钱人家用瓦片。不管茅草还是瓦片,如果遇到特别大的暴风雨,都容易漏雨,当然,普通风雨不会出问题。我小时候还曾经在蚊帐上面放了个洗脚用的大盆,因为暴雨家里房顶漏水。遇到暴风雨,爸妈都不敢睡觉,随时起来查看是不是山上有塌方(我家住山脚下)

爸妈是地道农民,妈妈胃痛的时候,经常痛得通宵睡不着,没钱看病,只能整夜整夜的煎熬过去,第二天还照常下地干活。我小时候最大的心愿,就是赚钱给妈妈治病。城里的孩子看到复习题就头大,我们当时,连买练习本都舍不得钱,有习题集绝对会当成宝贝。

毕业第一年找的是一家小公司,做软件。销售人员用很低的价格去拿单子,员工工资自然不高,我几乎每天加班到很晚,那一年写的代码肯定超过十万行,当然,有效代码没那么多。公司比较节省,我一个鼠标用坏了,公司不给新的,让我自己买。

除了开发任务,开发经理还经常扔一些奇奇怪怪的功能让我做,比如在很古老的系统上增加新功能,这些鬼东西有用foxbase写的,有用delphi写的,有用powerbuilder写的等等,其他人看到这些东西就躲开,大家都想做java,c#和php的项目,觉得有前途。为了搞定这些东西,我学了好多种语言,客户要什么我就用什么语言写,不但要把功能写出来,时间要求还特别紧,好多功能都是两三周完成。我学了好多种语言,没有一门精通。有一次面试的时候,我说一年学过七八种语言,面试官当场说我撒谎。我以为我是白领,其实,我是真正的“码农”。

开发经理就给我很多书,他喜欢逛论坛,论坛上有推荐的书,他就买下来,放在办公室橱柜,排很长的队,他把书柜钥匙给我,让我随便看。计算机书籍不便宜,动不动就好几十块钱,对当时的我,是个大数字,我觉得开发经理人特别好。开发经理还许诺,干满一年就给我加工资。农村的孩子,没钱,也没什么见识,别人给根稻草,我就以为抱着了大树。

我最终没等到加工资。公司有员工离职,离职同事去上海找到工作了,他偷偷告诉我他的工资。我心动了,找时间就去上海,面试了好几家,我找工作还算顺利,一个月内通过了好几个公司的面试,这家外企给的工资最高,试用期工资就接近我上家公司的三倍。我辞职的时候,原来公司不让走,交接工作用了接近2个月,跟上家公司发生的事情我就不在这里描述了,当时特别担心这家外企不要我了,耽误的时间实在有点长。

孤身一人来上海,一开始住的群租房,两室一厅的房子,住了十几个人。群租优点非常多,房租便宜,还不显得孤单,隔音效果差,生活味道非常浓郁。搬走的时候,我还特意拍照留念,后来那个手机被偷,照片丢了,好可惜。

说了这么多,相信大家也明白了我为什么这么珍惜这份工作了。我不算什么卷王,也不喜欢内卷。穷人家的孩子,出生条件太差,自己的努力才能达到的终点,很可能比别人的起点都低。我只不过希望生活过得稍微好一点。我后来赚了点钱,让妈妈来上海,看专家号,慢慢把胃病治好了,妈妈无意中看到了每次150块钱的挂号费,她念叨好久,经常给人夸自己的孩子好。有一年春节,爸妈跟邻居聊天,邻居家孩子不孝顺,邻居愤愤不平的说:孩子都是来要债的。我妈妈就说,自己家的孩子是来还债的。我当时听了挺心酸的。爸妈给我的爱,不比有钱人家的父母给得少。希望爸妈健康长寿。

--------------继续补充中-------

打开知乎,发现大量的人在骂我,估计触发了关键字,被知乎自动删除了,不是我删除的,别生气。

非常感谢大家点评,很多人的点评中,我发现了自己好多没深入思考的问题,受益匪浅,感谢中。

继续补充两点:

1,是不是卷王。

去这家外企,面试的时候,我英语不合格,leader觉得我软件方面思路很清晰,破格录取,希望我表现好一点,骂我卷王的同学们,如果你们遇到这种情况,会怎么做?我很迷惑。

2,为什么会监控员工。

计算机交互设计,面对复杂业务,一般来说有两种基本思路,一种是将复杂操作分解成多个简单步骤,用户操作次数多,每一步都非常简单,另外一种思路是将复杂操作直观显示出来,用户用最少的步骤完成。

我写的那个系统,是用的第二种情况,对操作者来说,学习曲线比较陡峭。

我那个时候是个萌新程序员,看《don't let me think》类似的书,想协助写需求的大佬,让他确定如何优化用户操作。

有个叫“费力度”的参数来判断用户在使用工具所消耗的精力,如果一个用户看到操作界面,迟迟找不到如何下手,说明这个界面的“费力度”比较高。

为了获取相关数据,我写了大量监控代码,记录用户完成某个操作需要的点击数量,思考时间(发呆)等等。写这个东西的初心,从来都不是为了监控员工,而是监控使用者跟系统之间的交互过程是否流畅。这个,在我前面的描述中,一开始就写了,但是我的文字和表达能力真的很差,以至于大家误解我是去主动监控员工,很多人痛骂我活该,工贼,这个,是我描述能力的问题。见下面截图:

我也从来没为自己洗地,也觉得我的那些行为是愚蠢的。

另外修改了前面的错别字,比如“过渡”其实应该是“过度”

END