接近2016年底的我是否有资格称为资深工程师

2020-07-12 阅读125 点赞214
接近2016年底的我是否有资格称为资深工程师

看到这篇推,心中还满有感触的。本来就不是资历混够久、程式写得好就能算得上资深工程师;资深工程师该怎幺定义其实很难拿个準,我的主管也曾问过我这个问题,我一时之间也很难完整回答。不过在面试时常常看到很多面试者都是应徵资深工程师,但实际问他们一些问题之后,却发现他们却缺乏了一些东西。

所以藉这个机会,我想从几个面向来聊聊我心目中的工程师应该具备哪些特质与能力,而这些特质与能力,我都是从身边厉害的同事们与社群的朋友们身上观察到的,他们都是我所敬重的资深工程师;同时我也会提供一些过去遇到的反指标,避免大家误会资深工程师是否都是这样的人。

技术能力层面对工具技术有深入的掌握度

这个特点大概是一般人用来评断资深工程师能力最明显的表象特徵,也就是是否将常用的工具能练得很熟或是对语言理解得够深,同时也将技术内化到自己平常的开发习惯里,达到信手捻来的境界。这样的资深工程师在开发上能有全面性的考量,同时也能帮助团队更有效率地达成目标。

反指标:有时这个能力会以个人开发的效率来评估,使得有人常常误认为只要能很快完成功能就有资格当资深工程师,但他们却忽略掉其他更值得注意的能力,结果为团队带来灾难。

能写出可理解可维护的程式码

这个特点的特徵就是平时就会撰写测试、并对自己的程式码做重构;对于自己的程式码风格、变数或方法名称等都非常要求,也绝对不会特意去走难懂的捷径。这样的资深工程师是非常自律的,所以被他 code review 时可能会有点痛苦,但绝对会学到很多。通常到这个阶段的工程师,都是心灵上已经受过不少伤害,也对自己发过誓不再让自己的程式码伤害他人。

反指标:有些工程师会过度强调工具或标準带来的规範,反而让整个团队疲于应付这些规则,失去了开发上的敏捷与效率。

选择技术的能力

虽然实务经验丰富而能够精準判断是资深工程师的优势之一,然而在面临专案要使用的技术选项时,资深工程师不会把自己的喜好的技术强加在团队上,而是跟团队一起讨论与研究,并在多方考量后去挑选出最适合这个专案以及这个团队的技术。

反指标:有些时候老鸟会认为他所习惯的旧技术可以解决一切问题,即便这种技术维护起来不那幺容易。当专案使用新技术遇到瓶颈时,他不会伸手帮忙,反而会在旁幸灾乐祸。

软体架构分析与设计能力

这个阶段的能力靠得是非常多的实战与专案经验,加上对理论的融会贯通才能得到。一个优秀的资深工程师可以针对需求做出完整的分析,并从上而下、由粗到细地规划出良好的软体架构设计,也能在程式效率与可理解性之间取得平衡。他们对于每个技术的生态系都有一定程度的了解,帮助自己的规划时能够更快找到工具,也能避开严重的缺陷。

反指标:有些工程师可以将书中理论背得滚瓜烂熟,但在实际设计时却没有看清现实而规划出不甚合理的架构,这是多数理论派工程师的通病。

图像解说能力

能够在解释一个技术时,用简单清楚的图形来解释原理,这点是资深工程师必备的能力。通常如果能用手绘图形的方式来说明,表示对该技术的原理已经有足够的了解。从画出来的图也能看出工程师对于知识的组织能力,好的图像组识要能让其他人一眼就能理解知识的全貌,这全仰赖工程师对该知识的理解。

反指标:有些工程师会只画个方块或圆形,然后就开始讲解;而在讲解过程中,动笔的次数也不多;也有些工程师只是把记忆里的图形画出来,但却说不出所以然。这些都是图像解说能力不够的现象。

能综观全局的能力

在讨论一个新功能,或是修改一个旧功能时,能不能考虑到所有会被影响的层面,进而判断如何处理。另外这也考验着资深工程师的记忆能力,因为通常这不是已经踩过无数类似的雷,就是对系统已经了若指掌了。资深工程师会站在俯瞰的角度来观看整个专案全貌,并权宜各种技术面的优缺点后,提出可行的方案让决策者参考,也让其他执行的工程师在实作时能够有依偱的方向。

反指标:有些工程师会过度忧虑未来的情况,而提出一些其实没有明显必要的因应措施;有时这些人是为了让自己能佔有一席之地,所以用一些没有根据的论点来让自己显得很资深。

尝试导入对团队更好的流程

资深工程师会从木桶定律体认到自己的效率不等于团队的效率,所以会试着导入良好的开发流程,或是自动化布署等让团队能更有效率的技术。在这期间,他会透过 code review 或是教育训练的方式来协助伙伴们往好的方向前进,让他们感受到好的开发流程所带来的好处。

反指标:有些工程师很喜欢新技术,而没有考虑到团队的接受度就贸然导入;这种状况很容易造成浪费过多人力在解决一些新技术所带来的新麻烦,进而影响整个团队的士气。

心理素质层面真正能完成一件事的自信

这个特点并不是指自傲,而在技术层面的各项指标都达到一定水準后,资深工程师在面对任何挑战时所产生的自信心。他能从各种面向来规划出专案所需要的基础建设,在开发时也能够从架构面到程式码都有很棒的见解与实作。在经历过多场战役后,这种态度通常都能赢得其他伙伴的敬重,明白只要有他在团队里,很多问题都能迎刃而解。

反指标:有些工程师会把熟练工具后就能完成的事当成自己的能力,进而产生过度的自信;一旦抽离这些工具,他们会很难找到替代方案来解决问题,进而对提出质疑的人产生防御心态。

不断地自我提升

在工作之余,资深工程师会调配自己的时间来接收新知,也会不断地加强自己的基本能力。由于他们的基础打得非常好,所以能对新事物有举一反三的能力。他们对新事物接受度高,但也不会过份追逐新事物;他们会针对自己的兴趣或是工作的需要来有计划性地学习,避免把时间花在太多方向上,结果反而一事无成。

反指标:有些工程师会有自己的一套偏方,认为这些偏方就能帮他达到目标,不用花时间学新事物。但是累积错误糟糕的经验并不能成为好的资深工程师,因为他从来不打算理解有无新的方法可以做得更好。

临危不乱

专案在进行开发或维护的过程中,常常会有一些意外发生,这常会让一些没有经验的工程师慌了手脚。优秀的资深工程师会秉持着「难题不会因为你的忧心而变得简单,不如保持平常心来看待。」的心态来面对意外。这会让他们跳出被框住的思维,看见问题的全貌,进而找到更好的解决方案。

反指标:有些工程师会在问题发生时漠不关心,似乎这些问题事不关己一样。这会发生在一些权责过度分明,犯错就会被处罚的制度里。

乐于分享所知

资深工程师会意识到只有技术能力高是不够的,他们会透过演说的方式来训练自己的口才技巧,也会透过纪录文章的方式来加强自己的文笔能力。而藉由这些分享,除了能帮助他人少走冤枉路之外,事实上也能得到更多回馈来让自己的视界变得更加广阔。技术社群有很多这样的工程师,他们会在工作之余参加读书会或研讨会,以分享更多工作上的经验。

反指标:有些工程师很喜欢分享书中的死知识,而不是自己的实务经验谈;他们分享的知识可能很有道理,但却很难跟实际状况有所连结。

沟通受人敬重

在进行专案讨论时,在自己有把握的部份会做出有自信的发言;而且也会尊重同事的想法,而不是用嗤之以鼻的方式来反驳。谦逊是资深工程师一个很重要的特色,他不会在不懂的地方上争辩,而是会在时间允许的状况下虚心请教,不然就是下次讨论前先作足功课再上场。伙伴们通常都会喜欢找他讨论技术,通常也不一定是因为能力落差的关係,而是跟他聊技术这件事本身就很快乐。

反指标:有些能力很强的工程师,会以强势的方式来让对方接受自己的想法。即便他是对的,但通常时间一久之后,就会破坏皇城团队内的和谐。

勇于认错、自我反省

不论是线上的大问题,或是开发时的错误,资深工程师都会勇于认错;多数这样的工程师,也都是勇于承担责任的人。他懂得承认自己的错误并不是可耻的事,因为他知道这是自己成长的契机;所以他会在问题被解决之后,重新省视自己做错了什幺。这倒不是说资深工程师该把责任往自己身上揽,而是要让团队能够儘快发现问题,儘快去解决。这样的工程师通常可以在反省会议上提出不少好的见解,因为他其实就是团队的镜子,能帮助大家看见自己忽略的问题。

反指标:有些工程师会抱着「把过错推给别人,比自己承认来得简单。」他们可能会以职责权限来让自己不受责难,或是毫无肩膀地把过错直接推给资浅的同事。

这些不是全部

以上这些面向并没有完整地涵盖一个资深工程师会有的特质与能力,我想各位可以就近观察自己身边的优秀同事,看看他们身上是有哪些值得你敬重的地方。当然也不是说每个资深工程师都要能做到上面这些,像我自己也常常会自省有哪些特质与能力是我还没达到的。

而不论是能力或特质,其实都是相辅相乘的。在技术能力上虽然可以透过自我训练来加强,不过心理素质就比较难在一夕之间改变了。优秀的资深工程师则会在这两方面同时俱进,从工作上去找出让自己的技术能力与心理素质都能提升的机会。