具备什么样的素质的人才能成为一名高级软件工程师?作为高级软件工程师,你不仅要具备娴熟的技能,更重要的,还要具备与人合作的能力。只有能够领导和提升他人的软件工程师,才是真正的高级软件工程师。Israel Miles分享了成为高级软件工程师必备的五大技能,有志于更上一层楼的软件工程师不妨参考一下。原文发表在Medium上,标题是:The Top 5 Skills of Senior Software Engineers。

划重点:

高级软件工程师真正与众不同之处在于与他人合作的能力

专注于你可以控制的事情,并利用这种能力把其他的人提升到更高的水平

提高沟通能力是那些可以带领团队的人的关键属性

要丢掉你的自负,虚心接受批评建议

高级软件工程师要学会写出好的说明文档

高级软件工程师必须熟悉各种软件开发原则

表明上看来,高级软件工程师似乎类似于“10x编码者”,给人的印象是这帮人总是坐在计算机旁,全力冲刺打磨磨出一个完整的产品。

这样一幅形象跟事实相去甚远。

实际上,我认识的很多大学学生都很聪明,但是缺乏沟通能力与接受批评的能力,这些会严重阻碍他们的机会。受雇于顶级公司或者刚毕业就拿到高级职位的学生肯定手艺已经很娴熟了,但真正能让他们与众不同的,是他们与他人合作的能力。

这种趋势在走出象牙塔之后只会有增无减。能够处理各种工单开发各种功能,但是一直都独来独往的软件工程师很少能够获得提拔。而那些学会分享知识,让整个团队都共同进步的人会被放到领导岗位。这里面没有运气的因素,软件工程当中有着非常具体和实在的技能是可让你去领导和提升他人的,而这就是成为高级的全部意义所在。

那么,我们就来了解一下你我要想成为高级软件工程师都需要哪些技能吧。

#1 —控制

在生活当中当领导最基本的一个方面就是控制。在《极限控制》(Extreme Ownership)这本书里,已退休的海豹突击队军官Jocko Willink详细介绍了自己在美国海军海豹突击队20多年学到的经验教训。在书中, Jocko用一个个故事说明了领导者是团队或公司能否取得成功的终极要素。

“《极限控制》的核心是这条最根本、最重要的事实:没有糟糕的团队,只有糟糕的领导。” —Jocko Willink

践行极限控制的例行做法包括:不管团队能不能取得成功,责任都要自己扛。这是一个激进的范式转换,这既是一种免除,也是一种束缚,因为当你践行极限控制的时候,把责任推给别人就不是你的选项。

如果一名初级工程师没达到工单的验收标准,那是因为你作为领导没有花时间去解释清楚并确保对方理解清楚。

如果你的某位团队成员很难联系上,那是因为你没说清楚对方什么时候该找得到,沟通的频率应该怎样。

如果有漏洞的代码一路杀到了生产环境,那是因为你没有适当地花些时间去评估一下代码审查。

成为高级软件工程师就是要专注于你可以控制的事情,并利用这种能力把其他的人提升到更高的水平。

#2 —沟通

是的,接下来要讲的就是任何一篇文章都会告诉你如何做职业当中变得擅长的,被讲到滥的一个技能点了。不过,如果到处都提到这一点的话,那么为什么不经常去尝试一下对此加以改进呢?随着企业逐步朝着完全的远程办公转移,技术领域正在发生着根本性的变化。磨练沟通技巧以成为高级工程师的重要性现在比以往任何时候都要高。

改善沟通技巧的第一步是要让自己的写作清晰明了。通过文字把自己的想法清晰明了地表述给他人的困难性质高也许会出乎你的意料,尤其是在工程环境下。你可以通过类似Slack这样的渠道积极地磨练自己的沟通技巧,不过发出消息之后记得补一句“这么说你明白吗?”或者,“有没有更好的措辞方式?”。你的团队成员应该会很乐意提供反馈,因为这可以让每个人的生活都变得更轻松。

你甚至可以做意见我现在正在做的事情——开个博客,用来提高沟通技巧!

改善沟通的另一个技巧是过度沟通。你显然不想给自己的同事发垃圾邮件,但是相对于漏掉细节,你永远都应该不要害怕解释得太多。这里是一个例子:

嘿,我push了我的变更来修复那个错误。让我知道你的想法。

VS:

早上好,那个问题我已经解决了,就是那个不知道为什么项目A的一个测试总是通不过的问题。我在方法里面添加了错误返回类型,这样我们调试起来就可以更轻松了,然后我们发现我们没有生成足够多的通道来等待go例程通过。如果你有什么建议的话,这是我的merge request的链接。

提高沟通能力是那些可以带领团队的人的关键属性。

#3 — 扔掉你的自负

没人,我的意思是没有一个人愿意跟像Gilfoyle(编者注:美剧《硅谷》里面的角色,)这样的人一起工作。可以自己解决任何问题的10倍编码者这个观点完全是被高估了。这样的工程师离开公司之后,当其他的工程师试图想出“不需要任何测试”的代码时,公司很可能会出现巨大的知识鸿沟。

相反,好的领导总是能够谦虚地向他人学习。如果一位团队成员告诉你,有一个新的测试框架可以做你喜欢的那个自定义的测试所能做的所有事情,但是更加标准化,可重用的话,请不要为你的代码辩护,而是要感谢你的团队成员为了让团队变得更好所提供的建议。这关乎的不是你的代码,而是团队的代码。

要虚心接受指正

说真的,如果你找到可以改善同事代码的方法,请在代码审查里面发表你的意见!光是抱怨没有任何好处。如果你想成为一名高级工程师,请让你的团队成员觉得自己是在学习,而不是觉得自己很蠢。

#4 — 学习如何写出出色的文档

听说过“代码应该自我注释”这句话吗?这话不完全都是错的,但是离正确还差得远。你应该始终都要尝试写出干净、简洁的代码,但有时你仍需要留出注释。你还需要说明一下怎么使用新的API。而且,如果你的新产品并没有任何的架构方面的文档的话,当需求变更是看看你还能走多远吧。

有很多办法可以提高文档的编制技能,尤其是如果你正在用Jira之类的软件进行工单跟踪或用Confluence来画程序流程图的话。去看看自己所在团队里面的高级工程师是怎么对自己的体系结构写说明文档的,这样你就学习到最佳实践。

此外,如果要想创建出定义得更好的工单的话,你得关注4W1H(谁,什么,为什么,什么时候,如何)等等。你应该先问自己,然后在工单文档里面回答的常见问题包括,为什么我们需要进行这一变更?这些变更会在哪些项目中进行?进行该变更的高级技术步骤有哪些?

画出更好的流程图的好处也非常大。作为一条快捷提示,你可以按照从左到右的顺序画流程图并且根据逻辑进行路径分离。跟使用决策符号相比,这种图看起来会容易得多,而决策符号因为没有明显的路径会造成很大的逻辑混乱。

上图的图可读性要比下图的高得多

#5 —软件开发原则

显而易见,如果你想要成为一名高级软件工程师,你必须了解所在领域的知识。高级软件工程师未必就得是编码魔术师,但是他们需要具备全面的技能。如果你想成为高级工程师,以下是一些需要学习的技术要点:

  • 测试—幸运的是,这已经成为标准了。实际上,如果你在求职面试的时候发现对方公司却不做测试的话,那你应该把这看作是一个危险信号。测试可以让你编写出行为符合预期的代码,测试属于自我注释,并且让你可以扩展代码而不必担心会搞砸某些东西。

  • 设计模式—这是我个人的最爱。设计模式提供了一种基础结构,可以用来应对满足业务需求的特定行为。你是不是要开发一个社交媒体平台?那观察者模式也许是个好的开始。想要创建一个防错的用户界面吗?那就用有限状态机试试看。我撰写了很多关于Go语言设计模式的文章,设计模式可以说是让你成为更有能力的软件工程师的一种直截了当的办法。

  • 框架—如果你要写的代码执行的任务似乎是很常见的话,那么很可能会有一个相应的框架去做这件事。重要的是,高级工程师必须了解最新的框架,以了解是不是有任何的框架正在被弃用掉,或者是不是有比你正在使用的框架更好的解决方案。

这篇文章是从较高的层面去讨论的,但是这些原则的细节并不重要,因为细节总是在不断地变化。成为一名高级软件工程师需要的东西太多了,但归根结底,其实这要取决于你的自我学习,承担责任并始终专注于改进团队的能力。我合作过的那些最好的程序员总是很乐于分享知识,并会让我变得更好,从而让自己和整个团队在这过程中都变得更好。

- END -


作者:架构精进之路,专注软件架构研究,技术学习与个人成长,关注并私信我回复“01”,送你一份程序员成长进阶大礼包,欢迎勾搭。


往期热文推荐:

  • 做通才还是专才,你会怎么选?

  • 白话讲解,拜占庭将军问题

  • 都2021年了,你还在计划转Go语言么?

  • 我用一个小小的开放设计题,干掉了40%的面试候选人


「技术架构精进」专注架构研究,技术分享

Thanks for reading!

高级软件工程师必备的五大技能相关推荐

  1. 高级软件工程师要掌握的技能

    软件工程师考试(高级)大纲 一.考试说明 1.考试要求: (1)理解软件工程管理的概念和任务: (2)理解软件生存期过程: (3)理解软件工程标准: (4)掌握需求分析.测试.维护基本技术: (5)掌 ...

  2. 高级软件测试工程师必备知识与技能

    高级软件测试工程师应该具备哪些技能和知识,今天小姐姐带你了解相关技能与知识. Linux环境搭建及命令 1.虚拟机的搭建与使用 搭建虚拟机的操作步骤 搭建虚拟机系统环境 虚拟机的基本操作与使用 2.L ...

  3. C#学习记录——软件工程师必备素养与技能

    『聪明是一种天赋,而善良是一种选择.』-- 网络 1.软件工程师的基本素养 2.个人素质必修课程 3.项目开发流程 具备了良好的个人素质和基础的编程知识,作为一名优秀的开发人员,还应熟悉一个软件项目怎 ...

  4. 高级软件工程师的职责范围

    在上一篇随笔<软件架构师之职责范围>中评论,yongfa365希望能看到.NET高级软件工程师的职责范围.我思前想后,还是决定说一下自己在这方面的愚见,希望大家不吝赐教. 什么是" ...

  5. 软件架构师之职责范围和高级软件工程师的职责范围

    什么是"高级软件工程师",这个职位到底该做些什么,相信大家都有答案.在目前很多国内软件企业中,如果你是"高级软件工程师",那么从需求分析 ,设计,开发,测试,甚 ...

  6. JAVA软件工程师应该具备的技能有哪些?

    前言:有朋友问我:学历和能力哪个重要?我个人觉得能力大于学历,没有能力哪来的学历,学历只是证明能力的一方面.为此在能力方面畅谈java软件工程师必备的能力.作为一名合格的java工程师,不仅需要学历, ...

  7. 转:高级软件工程师成长秘诀(文末有笔者自己的小评论)

    作者:Neil Kakkar 译者 | 张健欣 身为软件工程师,你要如何进一步成长? 2018 年的时候,我开始在彭博社(Bloomberg)工作.从那之后,事情发生了很大变化.我不再是公司里最初级的 ...

  8. 高级PHP工程师必备的编码技巧及思维(收藏)

    好的开发者通常以代码质量来定义.在软件行业,写好的代码意味着在在测试,更新,扩展或者修复漏洞中省钱.本文,我将向你展示一些现实生活中技巧和想法的例子,来帮助你清理你的逻辑代码,重构它,让它变得更健壮和 ...

  9. 一位高级软件工程师的自述:这个职位到底要做什么工作?

    作者丨Joy Ebertz 译者丨核子可乐 策划丨赵钰莹 本文作者 Joy Ebertz 接触过的几乎每一家软件公司都设有技术晋升与管理晋升两条职业道路,这意味着如果只走技术方向,技术人员也完全可以在 ...

最新文章

  1. lucene源码分析(5)lucence-group
  2. Linux Socket学习(十八)--完
  3. Brocade 光纤交换机常用命令
  4. 客户端负载均衡及透明应用切换(TAF)tnsnames failover=on
  5. synchronized锁机制 之 代码块锁
  6. 物联网专用卡的优势有哪些
  7. ipv6电视直播Android,关于高校电视直播(ipv4ipv6)
  8. java 股票数据接口_股票数据查询接口
  9. 5线上模式刷2亿bug_GTA5还想冲销量?玩家利用BUG刷钱,遭受比封号更严厉惩罚
  10. canvas实现橡皮擦
  11. ArcGIS 把字段允许空值设为否
  12. 国家版权局称中国软件盗版率已大降
  13. 四面阿里Java高级研发岗,定级P7:数据结构+分布式+JVM+线程
  14. 【Tool】TI公司14-Pin JTAG规范以及参考原理图
  15. APIView使用分页和序列化器
  16. 一名UI设计师眼中的用户体验
  17. JAVA+TEXT+小说速读训练器
  18. 如何通过QQ进行手机号溯源
  19. OverTheWire: Bandit通关指引
  20. K_A16_003 基于STM32等单片机采集薄膜压力传感器参数串口与OLED0.96双显示

热门文章

  1. 大学计算机实验报告答案 南京理工大学,南京理工大学微机实验报告
  2. 【破事氵】在Linux环境中让程序在后台运行
  3. 周志华教授:如何做研究与写论文?
  4. RK3328 编码H265问题
  5. 2019北航计科保研夏令营(非优营)
  6. scala什么是单例对象_Scala单例和伴侣对象
  7. FFmpeg源代码简单分析-其他-日志输出系统(av_log()等)
  8. 备份恢复Lesson 10. Restore and Recovery Concepts
  9. 机器学习(一):概述
  10. 网线简介及交换机原理和模式浅谈