前几天写了一篇小作文去吐槽同事,然后就被小部分开发人员给吐槽了,说我这个人是有问题。
的确我自己态度有问题,这个我认……被同化了。
我的这个同事B代码能力其实是不错的,就是对于系统架构的理解是真的……我哭了。
简单的说一下过程:之前和同事B、同事C、领导D一起做项目,然后这个同事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的动态类型的,而且能进行类型标注就标注
同事就起飞:
最后我的确是力不从心,我就感觉他们写的代码我维护不了、读不懂、用不了,所以就说:我们分开做不同的功能吧……
然后谈一下我和同事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。
(也算是我对他不满的地方)
溜得太早,不熟,也不知道他厉不厉害……