被同事篡改代码的一天
7126
2022.04.28
2022.04.28
发布于 未知归属地

前几天写了一篇小作文去吐槽同事,然后就被小部分开发人员给吐槽了,说我这个人是有问题。

的确我自己态度有问题,这个我认……被同化了。

我的这个同事B代码能力其实是不错的,就是对于系统架构的理解是真的……我哭了。


简单的说一下过程:之前和同事B、同事C、领导D一起做项目,然后这个同事B:

  • 能力还可以,基本能够胜任开发的工作……

  • 他在准备试用期,所以没有参与实际开发直接把责任推卸给我

  • 他的态度非常高傲,一直指责我的技术不过关、不懂业务、能力不行,而且在会议上反复指责。


我们一直各做各的不想沟通,在我视角看来,一沟通就同事B就是:我没错,你的错,你自己检查去。 谁愿意搭理这种同事,尤其是主动和这种同事沟通,所以我就和同事冷处理,你爱咋咋地……不吵架、非必要不合作,各司其职。 我是来工作的不是来找骂的,我那时的想法是:你这个态度再恶劣我就收集证据投诉,这边我不计较。 (最后结果不就是我被开了嘛)

tips(被辞反思):

  • 转岗是转正以后才能提的……我以为是试用期提的……有人说试用期提转岗容易被辞退
  • 我只是和导师说了一下和同事有矛盾的事情,XX的导师告诉项目经理了……然后这个事情就失去控制了。
  • 由于项目爆炸我就会被辞退,所以我就一直和领导沟通有困难的事情,领导这边不接受我的说辞,可能因为这个……
  • 的确被喷的太狠,被同化了,人家喷我是人家过了试用期生米煮成熟饭了,我喷别人,虽然我有理但是……我XX试用期啊!!!
  • 三人成虎?的确我得罪的人有点多……反正人人都说我不行那我就得滚是吧?

我先行开发做了大概七八天,同事B试用期准备完成以后,才开始做这个项目。

因为是新项目,所以我自己拉了一个分支同事B拿到我写的代码以后,根本看不懂我写的代码,所以就重新建了一个仓库,上手把我的代码给改了。我写了大概600行,他改了大概300多行。

改完以后:我看不懂了……


我不知道是谁的错……反正我觉得同事B很离谱……(主要问题是:我已经实现了这个功能,然后同事B觉得看不懂还是写的烂,反正就把我的各种函数都删了)

(如果我弄错了,请大家指正……)


第一个差异,是配置的用法

  • 我自己的诉求就是:约定大于配置。就是这种写法:

    class MyTest:
        def __init__(self, string):
            self.string = string
            self.runtime = 4
    
        def run(self):
            for i in range(self.runtime):
                print(self.string)

    我的目的是什么呢,就是以后调试代码的时候需要修改配置,就直接在类外面写一个:

    my_test = MyTest("hello")
    my_test.runtime = 8
    my_test.run()

    这样的话,我就可以轻松的实现代码的调试,实现对于代码的维护。


    我这个同事:你这个写法是不是有什么大病?

    然后就把我的代码给改了:

    def run(self, string):
            for i in range(4):
                print(string)
    
    
    run("hello!")

我注册了十几个变量,但他觉得我的写法有问题,所以大笔一挥,把我配置文件全删了。只保留了几个环境变量

然后每次改需求的时候,同事B就直接进代码里面找……

(同事B把我代码删了改成他的,他肯定是认为他的写法比我好的,他改我代码的时候可没有和我讨论过……)


第二个差异,是否维护一个表结构

我单独维护了一个表结构的定义,就以pandas为例,我维护了一个表结构:

import pandas

student = pandas.DataFrame([[1, 1, 2]], columns=["id", "name", "sex"])

以后操作的时候,就对这个表进行增删改查(类似于java的dao层)

操作就是这个样子:(我对于数据的操作是以一个表格为基础的)

person = student[student["id"] == 1]

同事B:他不维护一个表结构,把数据当做一个矩阵

同事B拒绝使用列名来维护数据,而是通过索引来维护数据(我操作的是一个表,他操作的是一个矩阵)等着一切操作完成以后,才给这个表起名:第一列是啥,第二列是啥,第三列是啥。

data = [[1, 1][2, 2]]
data1 = []
for i in range(len(data)):
	data1.append(data[i][1])

# 等着业务结束以后才修改列名为需要的列
student = pandas.DataFrame([data1], columns=["id"])

他不认可我这个啥都操作一个表的操作……所以就把我提供的代码重写了,改成所有的都是一个索引……

我根本就维护不了他写的代码,我根本看不懂他第一列是啥……只能一行一行的打断点,最后不想看了(才300行就这样……)


第三个差异, 是绝对路径和相对路径

我自己用的是环境变量,每次直接去环境变量里面找有没有文件。然后把用到的路径都注册进了环境变量,然后通过环境变量 + 相对路径拼接出来绝对路径……

然后同事觉得我在脱裤子放屁,所以直接把我的代码给删了改成绝对路径 + 配置文件的方式

我之前似乎看过一本书,说的是尽量不要使用绝对路径,可是同事A和同事B就用的绝对路径……


第四个差异, 是函数的使用

我写的代码是java化的:

class Test:
    def __init__(self, id):
        self.id = id
    
    def getid(self):
        return self.id
    
    def add_one(self):
        return self.id + 1

这个的确很简单。我就不解释了。get以后addone、重新get。这个是java基础了。

同事的代码:

def add_one(a):
    b = a + 1
    return b

data = 100
data = add_one(data)
data = add_one(data)
print(data)

同事B就觉得我的写法莫名奇妙(或者看不懂),就把我这个写法给删了同事B按照他的逻辑重写了所有方法。

改完以后我觉得同事B写的代码莫名奇妙(我也不知道同事为啥这么写……同事A和同事B都用这个方法写的……)

更可怕的是:同事B改完以后我看不懂了……


第五个差异,

我写的代码是:

  • 一个函数实现一个功能,比如说过滤啊、删除啊、备份啊,如果需要工具类就在工具类里面定义一个抽象方法进行调用

  • 如果在启动之前需要一些必要的操作,我会直接注册到环境变量里面或者项目初始化的时候直接搞定

class Test:
    def __init__(self, id):
        self.id = id

    def filter(self):
        pass
    
    def fill_empty(self):
        pass
    
    def to_excel(self):
        pass

而同事呢?他不仅定义了工具类,而且在项目内递归调用其他函数。(不能泛化而且只用一次的那种)

class Test:
    def get_name(self):
        pass

    def fill_empty(self):
        # 代码写到一半, 这时候有个诉求需要获取名字,就写一个get_name方法而且这个代码是一次性的,不会被其他任何方法调用
        self.get_name()
        # 过了以后继续写代码
        pass

同事B写的代码还有一个问题:XXX的由于是个工具类,所以代码起名也随便的起飞……

输入统统一个格式,输出统统一个格式,根本不知道输入是啥输出是啥,然后再在工具类里面夹杂了一点私货我就根本看不动了……

而且假定写到get_name的时候发现一个函数搞不定了,他会继续在上面封装函数……


我心态是当场大崩


第六个问题:python是支持动态类型的……


我是不用python的动态类型的,而且能进行类型标注就标注

同事就起飞:

  • python定义个屁类型啊??动态类型我为什么不用??然后就没写


最后我的确是力不从心,我就感觉他们写的代码我维护不了、读不懂、用不了,所以就说:我们分开做不同的功能吧……



然后谈一下我和同事A之间的技术诉求

第一个差异,是否支持windows

这个同事A是挺吓人的,反正写的代码完全不考虑在windows上面咋跑,只考虑如何在linux上咋跑

所以:他写着写着代码突然就开始写shell脚本。

这个业务处理完了,把输入扔给shell,让shell去处理,处理完成以后再继续写程序

wc??哥们你是这么玩的吗??java那么繁琐都说一句:build once, run everywhere,你这就抛弃windows了?


同事A的态度:那真实开发环境就是linux嘛。

我这边:那调试咋办?

同事A:我有测试环境


同事A写代码的优先级是这样的:

先写shell,shell无法解决的才用其他语言

比如说:对一个文件进行简单的过滤,正常用python、用java,用sql。他不,直接写shell

写完shell我看不懂……(shell是个啥javapython等高级语言不香嘛,而且shell还不跨平台还难用)

shell可以解决60%的问题,然后他就不停的输出shell。


(也算是我对他不满的地方)

  • 绝对路径 + 配置文件,一个月一改配置文件
  • 同事B的代码习惯估计是同事A喂出来的,基本上代码一个模子刻出来的(他说他是写java的……java代码是这样嘛??)
  • 自己代码写错了,提单让同事改,同事不改就说不负责任

溜得太早,不熟,也不知道他厉不厉害……

评论 (57)