相信后人的智慧
距离上次更新已经过了差不多一个月的时间了,作为一个打工人就是这个样子的。一旦被工作填满了生活,就很难或者说根本不愿意拿出额外的时间来做点其他的事情。即使明明知道这类事情对自己是有益的,比如说去健身,比如说去写点文章什么的。
今天已经工作了八个小时了,我哪里还是有时间去干别的事情呢?我现在只想抓紧回家去打游戏,在公交车上也只是想刷短视频。我当然知道这些事情对于自己来说没啥益处的,但是实在是不想去做那些有益的事情。等这阵子过了,我就会去做这些有益的事情的。
即使知道这些话只是敷衍自己的说辞,但是还是选择将来的事情将来再说。我相信很多人都是我这种心理。
其实我的情况比这个还要糟糕。在八个月前,也就是我离职的时候。我就已经感受到我负责的业务已经萎缩并且被边缘化,这就导致了我每天都很闲,一天其实也就干个两三个小时,其余时间都在摸鱼。而八个月之后我回来继续维护这个业务时,它还是在萎缩,除了现在有个比较重要的大版本要发布,几乎没有什么工作要做。所以我每天还是在疯狂摸鱼坑老板的钱。
所以对于自己处于失业,而且每天也很闲的我来说。这个时候正是抓紧学习,抓紧投简历去面试的好时候,一边赚着钱,一边找着工作。如果真面上了,谈判好年后去入职,才是最优解。虽然懂得这些大道理,但是此时的我已经对继续找工作有点ptsd了,所以一直在不断安慰自己,等过了年,兼职结束了就去找工作。
虽然能赚钱确实是个好事情。但是私底下我也是嘲讽过同组的旧同事好几次——“这也没啥东西要做,你们业务组里不是还有两个人,你们每天多点一下按钮,把代码生成了不就好了。你们两个人把这个业务顶起来,明年的高效绩奖金不就是你们的了。”
面对我的嘲讽,他们也只是尴尬的笑笑,不敢作答。
看到这里,大概会有读者询问,什么是代码生成。我来解释一下。因为产品线的关系,我们的业务代码里会存在大量有规律的代码。于是组内的两个同事,研究了一些东西,可以写一些脚本来批量生成这些有规律的代码。这个东西确实挺好使的,可以省去大量重复的代码编写。但是这里存在一些问题,比如说生成了十行代码。其中有三行是稍微不对的,需要修改一下。事情到这里其实很好办,已经旧的存在的代码就不用这套。只有新的代码,先生成一遍,然后自己review修改一下也可以提高速度。
在这个阶段,我是愿意采用这种方式的。但是比较逆天的是,推广这种生成代码的同事觉得只是新的代码使用这个方式生成并不牛逼。应该所有的代码都使用它的这套工具来生成。不管是新的还是旧的。
“那旧的十行代码本来是对的,你再生成一遍就被覆盖了,变成有三行是错的。那怎么办呢?”
“我核心思想是生成的代码是完全不能做任何改动的,手写的要和生成的分开。”
听到这句话,我大吃一惊——“你是怎么做的?”
“用继承。”
我连忙打开他的仓库,看看他是怎么实现这个功能的。原来他使用了继承功能。我简单说一下他的做法。正常的代码应该是 class Iterface -> Class Impl。这种两个节点的继承。代码清晰易懂。而现在因为代码生成,继承链条变成了 class Iterface -> class ImplGen -> class Impl。其中 class ImplGen 即是代码生成的文件。而 class Impl则针对 ImplGen 错误的函数实现进行了重写。
看到这里,我笑了。为了适应你的代码生成,我要大改我原本的代码结构,无缘无故引入一个纯多余的类?导致我的代码质量下降。这不是本末倒置?为了这碟醋包了这顿饺子嘛。我笑了笑。表示你用我推荐,我用我不用。
可惜好景不长,新的一波裁员潮来临,我的旧组长和发明代码生成的一位组员直接毕业了。而发明代码生成的另一位组员则被提拔上来当了组长。在这里我要事先声明,我和这个新组长之间没有什么矛盾。我只是对于所谓的代码生成这个工具持有保守的态度,和他在这个工具的使用上有不同的看法而已。
新组长刚被提拔上来,自然是意气风发,觉得自己天命所归。而大领导看到他献上的代码生成工具更是是大喜过望——得此神器,定叫那人力资源投入十不存一,以一人之力定得翘起百人之产出。
于是一系列围绕代码生成的计划运营而生了。
“以后咱们的业务只应该占据到本身工作时间的25%,剩下的时间可以做更有价值的事情。”
“咱们公司最近的核心业务是用C语言写的,每次都要bind到Java, OC这些上层语言上,好麻烦。咱们给他们写个脚本,一键运行就生成这些Java, OC的代码不是美滋滋。”
看到这些十分可笑的计划,我的面色越来越凝重。可惜当时的我太年轻。不懂得相信后人的智慧。只是觉得这种明显是瞎扯淡的东西,怎么可能做成呢。于是郁郁寡欢了很久,提出了离职。
不过在离职前的最后一个月,我也是按照要求,把自己的C#代码全部改成了他们要求的全走代码生成的逻辑。在这里,我必须说一句,C#代码已经替代了TS,成为了我心中最好的语言了。因为使用了 partial 关键字。使得C#里的一个类可以拆分成多个文件来实现。所以我的代码中不需要有一个中间类这么别扭的存在。只需要在生成代码的脚本里标记好需要手动写的函数,不让他出现在生成的代码里即可。
不过这里其实也还是有问题的。那就是现在接手这套代码的人他不但要既熟悉C#代码,也要熟悉生成C#代码的TS代码。虽然领导们寄希望于按钮一按代码就出现了。但是大部分情况是按钮一按。出现了一百行代码。但是其中有一句是错误的。虽然你一眼就看出来这句是错误的,但是你还不能上手改。因为你改了,下一次生成这行又变成原来错误的了。你必须找到TS代码里,去那里改生成的逻辑。所以这套工作流程到底是让以前的工作变得简单了,还是复杂了呢,这个就很微妙了。
不过这些都不重要了,因为要走的人心态已经十分开朗了。我选择相信后人的智慧。
前期回顾:

