这不是开玩笑的,我不忍心让这种情况发生第四次,这对我的精神上造成了影响。
这句话很重要,因为它表明你觉得是时候改变了。它表明你认识到这是一种模式,并希望这种模式停止。这种愿望可能是解决问题的最重要的部分。要解决这类情况,往往需要改变你自己的思维方式。这是不可能有人为你做的,所以你的改变欲望将是使改变发生的原因之一。
关于一些背景,我以前也曾遇到过类似的 “对我的工作来说,编码技术太好 "的情况,虽然从来没有达到你所描述的程度。我可以用C++中的模板元编程来治疗癌症,但我的许多同事几乎不懂面向对象设计的基础知识。我写的代码滥用了SFINAE,并且直接违背了C++规范的确切措辞,当时我工作的很多项目还在使用过时的、有错误的gcc版本。我的方法就是向他们展示这些工具有多么神奇,以及它能解决的所有问题。我喜欢向人们解释编程的小技巧,他们基本上都很喜欢。
这听起来是不是很耳熟?
"是的,但一个人应该有一个很好的水平来理解[Mik的代码],因为组件是智能解耦的。”
从风险的角度考虑这句话。你的老板无论如何都需要把事情做下去。如果你离开去追逐一些很棒的工作机会,你的老板仍然要确保代码得到维护。你的同事刚才说的是,如果他们必须要替换你,他们需要找一个非常熟练的程序员,因为没有那么好的人是无法维护的。这是个风险。如果他们找不到足够好的开发人员,或者付不起足够的工资怎么办?
你可能产生了你所谓的 “好代码",但 "好代码 "的定义非常取决于上下文。什么是 "好的代码",在Google,他们有最前沿的思维方式,但对于在FAA工作的人来说,可能是非常糟糕的代码,他们主要关注的是可靠性,而不是跟上最前沿的步伐。你的老板对 "好的代码 "的定义包括在各种情况下,包括在没有你的情况下,都能维护好代码。如果你的同事们不愿意维护你的代码,那么你就会突然成为公司的_责任人,因为你生产的产品,如果你决定去其他地方,他们就无法维护。从本能上来说,这似乎是一件好事,但却充满了困难,比如这种基于风险的思维方式,你可能没有想到。
我们有一句话,"本末倒置"。与它相关的许多含义之一就是把你最关心的内容(能够使用你的高级技术)放在了应该推动它前进的力量(你的同事对这些技术的理解)之上。你用这种高级风格写出了代码,然后鼓励其他开发人员 "追赶 "到这种风格。这可能是有效的,但如果在他们 "追赶 "之前,你出了什么事,公司就会突然面临风险,因为没有人可以维护这些代码。
如何才能在未来避免这种情况的发生?
修复这种情况可能是一件非常困难的事情,因为这涉及到以一种与你通常所习惯的不同的方式来处理问题。与其先用这种高级风格写代码,然后教你的同事们如何用这种方式思考问题,不如把它翻转过来。教你的同事们喜欢这种风格的代码,然后开始用这种风格写代码。这可能看起来很落后,但它更稳定。从老板的角度来看,团队学习更好的代码几乎没有什么风险。一旦他们写出更好的代码,你想要开发的风格就会突然减少风险。
与此同时,你将不得不写出的代码,按照你的标准,是 "不那么好的",但这没关系。你的代码不是你在这里的唯一产品。你的另一个产品是帮助教导其他开发者,其价值很容易超过写出 "完美代码 "的价值。”
当然,用你想写的风格写出的代码,可能很难说是安全的。如果很容易分辨,你现在肯定已经想通了! 你可以使用的一个强大的技巧是让别人去推动高级编码风格,而不是自己去推动。教别人学习继承和构成的区别是一回事。教给他们足够好,让他们主张改变你现有的代码库,让他们更清楚地知道什么时候使用它们,那是完全不同的事情。后一种情况真的让你知道,他们不仅明白了这个概念。但真正的拥抱它。
教学这种概念的一个理想是什么都不教。让学生们发现一些东西,然后你给他们指出这个发现可以去的方向。也许他们中的一个人发现了一些关于继承的整齐的东西,你可以根据他们发现的东西给他们指出Visitor的设计模式。不要只是给他们提供Visitor,而是给他们一个方向感,让他们自己去寻找Visitor。
这是一个更难的方法,你当然要在这和你现在的方法之间找到一个满意的中间,但这可能是非常有收获的。更重要的是对你的答案,它可以在没有风险的情况下为公司提供价值。如果你能为公司提供价值,而不给公司带来风险,你几乎不会被解雇。而在极少数的情况下,你仍然可以被裁掉的情况下,管理层会给出一个理由(比如经济不景气,或者公司方向转变)。如果你做得很好的话,你会发现管理层会开始塑造你的发展方向,就像你塑造你的同事一样,你会发现一个奇怪的趋势,那就是你在他们最需要的时候,学会了_正确的技能。