8 年+工作经验并不能保证你成为一名高级软件工程师!
以下为译文:
软件行业中最近令人欣慰的一件事是,公司不再期望软件开发人员的学历达到某种特定的程度,甚至没有任何学位也是可以的。
我喜欢这种趋势,因为在这个行业里,只有个人能力最重要。如果求职者解决不了编程问题,那么就算有学士学位或者有硕士学位又有什么用呢?如果不了解MVC的工作原理,那么即使能够解释大O符号是干什么用的也没有任何意义。
我有计算机科学的学位,但在我作为一名软件工程师的时间里,除了在面试中以外,我从来没有遇到过需要计算大O的情况。也许如果您是一位需要处理数以万计请求的网站可靠性工程师(Site Reliability Engineer),也许您能用得上,但是我想我们大多数人都用不着应对这种情况。
想要进入该行业并有所进步,人们所需的所有信息都可以通过在线资源以及动手编写软件的经验相结合来得到,从而引起了这种转变。
但是我认为行业期望的转变还应该继续,特别是在物色高级开发人员时。在团队中担任高级软件工程师绝不仅仅意味着拥有丰富的经验……经验多固然更好,但职位描述中不应该包含“8年以上工作经验”这样的字眼,不该将其作为高级工程师的要求。
有的人可能工作了9年,却没有掌握全部应有的技能,而有的人可能只有5年经验却具备所有雇主期待的能力。
我提议用一些对团队更有价值的东西来代替这种标了明确数字的硬性要求。除了日常的工作要求之外,以下是我希望在高级工程师身上看到的其他特质:
希望这条是最明显的,甚至可以不包含在这个列表中,因为这是理所当然的一点,但正是基础才是能将一般工程师与优秀工程师区分开的地方。
诸如高效地给变量和方法命名之类的简单事情能获得长远收益。牢记诸如SOLID原则之类的东西,并不断寻找重构候选或无效代码的方法是很必要的。能把测试同功能代码看作同等重要的态度是无价的。
一个高级工程师应该是团队中那个能够在可理解与高效的代码之间找到平衡的人,并确保团队中能稳定保持住这种平衡。
我坚信,高级工程师最重要的职责之一就是帮助他的团队成员向上一个台阶,尽快地提高自己的水平。
让开发人员们组队编程,并确保高级开发永远不会在团队中孤军奋战。
在实施复杂的东西时,让高级开发与团队中的其他人分享解决方案,也许是在另一个单独的会议中。(许多团队通常在一段紧张的业务冲刺结束时开一个会,来分享他们从中学到的,或认为团队需要知道的知识)
高级开发知道,让队友通过努力而学习并支持队友,以及让队友感到自信而不会妄自菲薄之间微妙的平衡在哪里。
我更倾向于让高级工程师在安排初级人员完成某些工作之后,在非个人代码审查中尽量少地进行教学。
一个人是否会成功的最显著因素之一就是他们拥有多少“毅力”。定义为:“……毅力是对长期目标所怀有的激情和长期的坚持,而不关注过程中获得的好处以及得到的承认。”
这也是做软件工程师最重要的因素之一。我们都有过那种体会……发现了一个要解决的bug,你试了1次,2次,甚至50次都根本没有用……挫败感开始出现了,又过了一会儿,你就开始扪心自问想什么时候辞职了。
一位技术负责人曾经告诉我,他们将团队中的高级开发们视为团队的“主力军”。
这个描述有些粗略了点,但是团队中的一个人如果能在50次失败之后从问题上退后一步,深呼吸,吃点巧克力放松一下,然后在第51次尝试中获得成功,那么这种能力对于成为高级工程师来说是至关重要的。
高级开发就是能带领团队走过软件开发过程中那些沟沟坎坎的人。
如果你还不是一名高级工程师,但想要成为高级工程师,那么就先培养自己的毅力。
技术产业在世界上如果不是发展最快的产业,那也是最快的产业之一。每隔一两年,就会出现一些新的技术,工具,或语言来解决某个问题或者扩展某个已经存在的东西。
作为开发人员,为了跟上软件工程行业不断变化的局面,我们必须保持终身学习。
有的人多年一直以相同的方式或用相同的技术栈进行开发,并觉得自己无需学习新知识或尝试新事物,却不知这是最可悲的事情之一。
我经常听到“我想使用A语言,因为我在B语言方面并不精通”这样的话,我可以理解这样的想法,但是不是B语言更适合这个问题呢?也许团队中的所有其他人的B语言水平都更好,也许对语言的语法和技巧的了解在软件工程中的重要性不如思考的过程以及对系统本身和系统各部分之间交互方式的理解……毕竟语法和技巧我们随时都能在Stack Overflow上查到。
更不用说学习新事物也意味着拥有新的体验,以及用新的方式思考。新鲜的观点应始终受到欢迎。
这一点与某人在公司共工作过多长时间直接相关,但我合作过的最好的高级工程师们都能对整个系统保持一个十分深刻的总体观,所以他们可以快速了解功能可以如何以及应该如何实施,甚至能够迅速地精准判断造成缺陷的原因。
我曾经有一个队友,我和他一起研究一个bug时,他连代码都不看就能直接告诉我这个bug要么是由File A的第25行要么就是由File B的第47行引起的,简直神了。
我这个队友当然是个特例,但是我认为对系统有一个整体观的益处是不言而喻的。
在我看来,高级工程师需要具备的最后一点也是最重要的一点就是同理心。
要明白队友们已经在尽力而为了。所有人(包括你)都仍在学习并将继续学习。不做代码守门人,承认其他所有人的想法的相关性和潜力。上面这些几乎是没法教的,但对于建立一个能让所有人都感到安全的充满信任的团队大有帮助。
当我说“8年以上的经验并不能让你成为一位高级软件工程师”的时候,希望大家不要误会我。我认为经验确实很重要,也很有价值。但是我也相信,在高级工程师一职中软技能也非常重要,我想在文章中表达的就是这一点。我们行业中的每个人都应该不断磨练这些技能,而也许有一天,面试和职位描述中不仅包含白板测试和8年以上的经验,而且还包含一些可能会在团队中产生更大影响的东西。
觉得我遗漏了某些点吗?或者不同意我的观点?请一起来讨论吧!感谢阅读。
原文:https://levelup.gitconnected.com/8-years-of-experience-isnt-the-definition-of-a-senior-software-engineer-f3ed904e3bc9?gi=f9ff8d9948de
作者简介:Tylor Borgeson,全栈开发者,对基础设施,DevOps, 以及敏捷开发感兴趣。