Linux 之父出席、干货分享、圆桌讨论,精彩尽在 OpenCloudOS 社区开放日,报名戳 了解详情
写点什么

被通知一个月后离职,我改了重要项目里的代码注释

  • 2022 年 4 月 06 日
  • 本文字数:2766 字

    阅读完需:约 9 分钟

被通知一个月后离职,我改了重要项目里的代码注释

假如你已经对某个开发人员下发解雇通知,你还会让他深度参与重要项目甚至把项目做完再走吗?放在今天,这个答案往往是显而易见的:不会。但如果是几十年前,那就未必了。

来自程序员的“报复”

近日 The Register 上有个热门帖子正好讨论了类似的话题。帖子背景是这样的:一位叫做“Thomas”的读者,用自己的亲身经历带大家梦回 70 年代。Thomas 当时在一家咨询公司供职,客户则是某国家医疗保健服务商。那时候一片岁月静好,如今这些“笨重”的工具库还远未出现。当时的开发思路非常明确:节约资源、优化代码。


Thomas 回忆道,当时所有代码都是用汇编语言写的,对于那些从未深入了解过的人来说,这就像是机器代码。 “我们还得尽量为代码瘦身,这里头也涉及不少技巧。但现在大家已经不在乎了,充裕的资源让节约成了老古董。”


那时候 Thomas 才刚刚出道,从被他称为“二货”的前任手中接下来项目。Thomas 坦言,这位二货“其实很聪明,但又特别招人烦。”但看得出来,这并不是二货同学的本意,而是项目经理们不理解真实工作量、又把项目周期压得太紧。


尽管困难重重,二货同学还是坚持了下来。为了完成代码编写,他每周工作 100 个小时以上。Thomas 还记得,“他真的很想多加班、早点做完,但管理层却认为他只是想骗加班费。”


于是乎,二货跟管理层之间爆发了激烈冲突,最终他被解雇、上头还勒令他用一个月时间把项目做完。


一般人在这种状况下肯定要在项目里埋雷,但二货同学的报复方法却是另辟蹊径。你觉得 C 语言不好理解?那是还没跟汇编语言比较。要想理解汇编代码,良好的注释绝对必不可少。


所以二货更改了代码中的所有注释。乍看上去,这些注释还挺像那么回事,但实际内容跟代码功能已经没有任何关系了。


“接手工作之后,我的第一项任务就是为项目添加更多功能。这事当然做不成,因为我根本没法通过注释理解现有代码的作用。”情况被报了上去,但管理层压根不以为意,于是 Thomas 担心自己可能也会被解雇。为了保住工作,他又对代码进行了多次复核,结论是:注释完全是在胡说八道,没人能搞清这些代码到底在干什么。


“所以我最后只能删掉所有注释,再把二货同学的‘遗产’黑盒化。一年之后,我离开了项目组,但这些黑盒代码还是继续运行了五年,直到另外一家咨询公司全盘接管。”


但即使到今天,这些代码可能还是在某个隐秘的角落保持着运行。毕竟,黑盒代码就跟蟑螂一样顽强。

别瞎冒险

显而易见,Thomas 这个故事告诉我们的是,如果你想解雇某人,就该马上请他离开且别再碰项目了。


一名叫 Dave K 的网友对此深以为然,他认为,只要决定解雇任何重要人物,就要马上撤销这个人的访问权限,最好能让其马上离开。这相当于是尽职工作,对劳资双方都是保护。


Dave K 举例他曾面临过的类似状况——但被解雇的不是他,而是其顶头上司。人力通知说公司已经确定要被收购,新的母公司认为没必要保留两位 IT 主管。于是他当场就禁用了领导的账户、更改了所有共享密码(管理员账户密码),确保上司再也没法访问任何系统。“听起来挺残忍的,但这就是职业性。”——不管你多信任对方,只要确定离职了、这些权限就必须收回。


的确,另一角度来看,这确实未尝不是对离职者的保护。网友 yetanotheraoc 表示,“如果有人在我们被解雇后不久破坏了系统,那已经交出所有权限的我们至少不会成为被怀疑的对象、自然也不会成为无辜的替罪羊。”


“别瞎冒险”尤其是指要避免一些比较极端的人和情况,需果断下决定。有网友分享说,曾接触过那种技术很强、但完全让人无法与之共事的家伙——他不给代码写注释、也不参加例会,因为他觉得自己很聪明,认定这些事情都是浪费时间。他还放出豪言,“如果他们蠢到理解不了我写的东西,那也不是我的问题。”最后,管理层做了早就该做的决定。那天是周五,例会对这位自负的人进行了 5 分钟的简短批判,会上还出现了让该网友至今记忆犹新的金句,“你一直觉得没有你我们就做不成事,但从下周一开始,我们打算试试。”


再比如有网友分享了个报复的例子,公司 CEO 在某次会上当着大家的面,解雇了一位态度傲慢的工程师。这人真的不讨喜,所以看着他离开大家并没什么感觉。然而,在动用了如此激烈的裁撤手段之后,公司居然还让他在办公桌前过完这一整天。当天下班之后,办公楼门禁瘫痪、账户被锁定,所有主要服务器都被重启、内容全部擦除。大家几乎都知道是他干的,但因为定时脚本已在重启后被擦除,所以人们找不到证据。

摸鱼度过最后的在职时光

从裁员方的立场,别瞎冒险、当断则断是要义。而从离职者的角度,何尝不是如此。但若“被迫”必须得多待一段时间,心安理得地“摸鱼”未尝不是一个解决方案。


网友 Ken G 回忆道,在 1999 年 10 月下旬他接到部门发出的通告,第二年 1 月他就要离职了。其实他之前负责的项目根本不受千年虫问题的影响,项目文档已经更新完毕、交接工作也相当顺利,但项目经理还是希望他能“小心谨慎”。问题是,有什么可小心的?于是他只能嘴上回答“是是是”,另一边该休年假休年假。


休了 5 周年假之后,到了第二年的 1 月 4 号,Ken G 回到办公室。他日常就跟同事们聊天、泡茶,随便上上网。这样的日子他重复了一个月直到离职。


接着 Ken G 的回忆,也有留言给出了类似的经历,名为 DS999 的网友说:我被迫在企业里度过了 3 个月的“垃圾时间”,之前我以外包商的身份负责 SAP 项目中的 Unix 与存储工作,合同应该在当年 5 月就结束了。但因为那位全职员工一直在忙着无薪加班和夜间维护,公司决定把他升任成技术顾问,薪水一下涨了 3 倍。之前他已经帮工程部门的 Unix 团队培训过几位抽调过来的新人,但他们才刚刚接触项目、对很多问题还不熟悉。


“于是乎,我就成了唯一一位了解整套系统的人,公司意识到必须把外包合同再延长几个月。为了帮甲方度过难关,我接下了这份时薪 30 美元、为期三个月的延期职位。但接下来的情况属实出人意料:两位全职新人找上我,希望我别碰项目里的任何东西,只需要回答他们的问题。因为在他们看来,在我离开之后,所有工作就只能由他们接管了。所以他们宁愿问题出在当下、也别出在交接之后,免得让他们背锅。”所以,DS999 倒是成了真正意义上的顾问。整个夏天,他都在上网、发呆、鼓捣 Linux。刚开始他们每天还会提出几个问题,后来连着一个半月都没找过他。“这钱真的好赚,怀念。”


具体情况具体对待。也许,报复或不报复并不是关键。Steve Herseyren 认为 Thomas 故事里的深层寓意是这样的:“既然你都说了‘项目经理们不理解真实工作量、又把项目周期压得太紧’,那这家公司就是妥妥的垃圾场,任何自尊自爱的人都应该尽快离开、躲得越远越好。你的技能、时间和自我价值真的很宝贵,别再给雇主虐待你的机会了。赶紧跑,找个更靠谱的去处。当然,如果你特别需要这笔工资,那就明确规划一下还要忍耐多久、然后早点找机会离开。”


参考链接:


https://www.theregister.com/2022/04/04/who_me/


https://forums.theregister.com/forum/all/2022/04/04/who_me/

2022 年 4 月 06 日 17:591760
用户头像
罗燕珊 InfoQ中文站编辑

发布了 262 篇内容, 共 107.0 次阅读, 收获喜欢 497 次。

关注

评论 3 条评论

发布
用户头像
版本控制了解一下?
2022 年 04 月 07 日 21:27
回复
那可是汇编的年代啊
2022 年 04 月 19 日 10:19
回复
用户头像
二逼程序员别写注释吧,看看 linux 的注释怎么写的。JDK 的注释怎么写的。如何保持注释和代码逻辑的任意时刻一致性?如果不能就别写
2022 年 04 月 07 日 08:08
回复
没有更多了
发现更多内容

ARTS Week14

丽子

架构师训练营 - 第四周课后练习

joshuamai

Maven 进阶

少平

“双11”正成为区块链场景应用“练兵场”

CECBC

大数据

架构师训练营第四周作业

李日盛

架构

架构师训练营第 1 期 - 第 8 周课后练习

Anyou Liu

极客大学架构师训练营

面试官最常用小心思:说说你的项目并发量多大?负载均衡怎么做?

小Q

Java Linux 学习 面试 并发

这篇 MySQL 索引和 B+Tree 讲的太通俗易懂!

MySQL 面试 数据库事务 索引结构

16张图带你彻底搞懂基数排序

Java架构师迁哥

上海与鲲鹏的数字共鸣

脑极体

fastJson与一起堆内存溢出'血案'

AI乔治

Java 架构 JVM Fastjson 内存溢出

java是如何调用native方法?hotspot源码分析必会技能

诸葛小猿

Java jdk JVM jni hotspot

Scala-语法特性(一):类型和变量定义

正向成长

scala

我用 Python 找出了删除我微信的所有人并将他们自动化删除了

Python小二

Python 微信

Flutter 开发从 0 到 1(二)框架与网络

吴小龙同学

flutter ios android 跨平台

极客大学 - 架构师培训 -ch3 作业

bing5tui3

极客大学架构师训练营

大招落地:MySQL 插入更新死锁源码分析

AI乔治

Java MySQL 编程 架构

在线IDE开发入门之从零实现一个在线代码编辑器

徐小夕

Java ide H5 H5制作 代码编辑器

极客时间 - 架构师一期 - 第八周作业

_

极客大学架构师训练营 第八周作业

C++的智能指针你了解吗?

良知犹存

c++

如何正确的关闭线程池

Rayjun

Java 线程池

架构师训练营 - 第四周学习总结

joshuamai

基于f2从零实现移动端可视化编辑器

徐小夕

Java H5 数据可视化 h5编辑器 H5制作

线上排障技巧 | 动态修改LOGGER级别

AI乔治

Java 编程 架构 JVM

杂谈

落曦

【薪火计划】01 - 好与坏

brave heart

管理

架构师训练营第1期 - week08 - 作业

lucian

极客大学架构师训练营

Flutter 开发从 0 到 1(一)需求与准备

吴小龙同学

flutter ios android 跨平台

用eBPF/bcc分析系统性能的一个简单案例

AI乔治

Java 编程 架构 大前端

你以为只是简单的排序?(一)

书旅

数据结构与算法 Go 语言

目标检测-darknet 之模型初始化

Dreamer

GPU容器虚拟化:用户态和内核态的技术和实践详解

GPU容器虚拟化:用户态和内核态的技术和实践详解

被通知一个月后离职,我改了重要项目里的代码注释_文化 & 方法_罗燕珊_InfoQ精选文章