Appearance
如何成为一名合格的“高级开发”
作者: 道长王jj 链接: https://juejin.cn/post/7245658681731203131
如果你是第一次看这个系列,我强烈建议你回去看看我之前写的三篇文章,说不定能对你有帮助。
什么是高级开发
回顾一下我这个系列第一篇文章的定义,我这边罗列一下:
- 精通团队所使用的核心技术,对其应用得非常熟练。
- 能处理团队项目中的系统架构问题和设计🏢
- 有多年的编码经验(一定是真正在一线的真正写代码的时间,而不是通过经历硬凑的时间)
- 拥有构建“完整”解决方案的经验,能够考虑到项目的各个方面并提供全面的解决方案。🔍
- 在其他专业相关领域有一定经验,了解负载平衡、连接池等跨领域知识。🖥️
- 积极指导中级和初级开发工程师。👥
如果你能做到以上这些部分或者全部的内容,比如:
1.你在公司中解决了很多一般开发解决不了的难题 2.善于沟通,能够处理各方的关系和调解工作沟通 3.在许多团队决策上能提供许多建设性的想法
等等……
就算短时间内不被授予领导者的角色,潜移默化地,你的同事都会帮你当成团队大佬和领导(更注重你的意见)
“高级开发”比“中级开发”多了什么?
多得多的开发经历
现在国内公司普遍的一个潜规则是5年以上开发经验是“高级开发”职务的基本条件
因此现在有很多的“中级开发”喜欢使用**编码经历(不是开发经历)**来判断自己是不是能胜任“高级开发”的职务。
例如: 小张只有3年的工作经验,但是喜欢把实习1年和大学的编程作业1年这些时间加上,来给自己打上5年开发经验的标签。
可能因为内卷的原因,简历伪造基本上50%的概率都会遇到,大家都想把自己最好的一面展示出来,甚至不惜夸大一部分的事实。至少如果这份简历到了我这里看到,是一件非常危险的事情。
这样就导致了,很多时候我们真的没有招募到一个有高级开发实力的“高级开发”。
高级开发人员在构建解决方案、管理复杂性、处理令人困惑的业务需求、应用设计模式等方面积累了丰富的经验。因为他们做过很多次这些事情,一遍又一遍,他们可以“用心”解决许多常见问题。
“高级开发”应该要像一个成熟的成年人,很多方案的尝试不应该带有实验性,而是真正的“做过”
这种能力只能来自你从失败、成功、导师等中学到的真实经验,需要大量的练习,需要做很多次这些事情,以至于它们会印在你的大脑中!
这里提到的经验,不包括没有挑战性的工作,如果只是CRUD,你永远都不会成长
在这之前他们应该在开发经验上有很多很多时间的沉淀,研究过许多Demo,并为他们以后的解决方案奠定基础。
所以,“高级开发”需要的是比“中级开发”多得多得多的实战经验才能构建出一个属于自己的“解决方案”体系。
谦卑
“高级开发”因为在很多问题的已经有了解决方案。 而且他们已经把有效、有用、实用、简单这几个字贯彻到了实际的开发工作中。 因此由于他们的经验,“高级开发”虽然知道很多东西,对自己的能力很有信心,但是他不会再有“骄傲”的心理。 因为面对的事情太多,会开始知道其实自己不知道的事情太多了。 反而“高级开发”对如何让实现方案趋于完美有很高的追求。
“高级开发”应该有怎么样的知识广度?
现在我们业内流行一个说法叫做 T型人才
这其实就要求“高级开发”要对许多其他专业领域要有基本的了解,而且要再本专业领域或多个本专业领域拥有深入的知识和技能。
例如:
- 我从来没有构建过分布式微服务系统,但是我知道这个系统能决什么问题,而且我大概了解构造他们的不同方法。
- 我从来没有在实际生产中应用前端监控平台,但是我知道他能解决什么样的问题。
就在几周前,我们公司进行数据治理的时候,我向我们应用服务团队推荐了一些使用“落地表”,“增加表索引”和“使用缓存”优化数据库性能的组合方案。我近两年没有再操作过数据库,甚至没建过索引,但是我知道它们组合起来能解决什么问题。
同样,这个也是在 什么是“高级开发” 中提到的一个“高级开发”的关键特征: 在其他专业相关领域有一定经验🖥️
“高级开发”应该有怎么样的知识深度?
同样,在 “T” 的垂直领域,“高级开发”应该在自己的专业领域有深入的研究,具备完整的知识和技能(这个是在开发领域的立足之本)。
也就是 什么是“高级开发” 提到的: 精通团队所使用的核心技术,对其应用得非常熟练
无论如何,“高级开发”必须先是某个专业领域的专业人才为前提。
这些特定的领域可能是编程语言或框架: Vue、Angular、React、Three.js、Node、ava、Go等等 或者是一组特定的技术: 系统架构、编程范式、专业解决方案、应用安全、网络安全等等
甚至是特定行业的针对性了解: 医疗安全体系、金融安全体系等等
我是怎么成长过来的?
如果以我自己的职业生涯为案例。
我的第一份工作是在一家国内知名的PCB行业民企的IT部门,当时该企业内部的“OA”系统正在进行重构和维护,目标是想让OA系统以一个全新现代化的面貌展现给公司的全体职员。 可是这个系统很旧很烂,而且我需要不仅仅是在单个领域,而是在前端、后端、数据库等方面都要着手进行改造。😱
在这个过程中,因为老旧的OA系统的后端是使用VB语言开发的,而我实在是不愿意花大量的时间在其上学习这类老旧开发语言。
于是在任职的三年期间,我从0开始为公司搭建了一个使用Node的转发服务,并且基于这个Node服务,我构建了很多新的功能。👏
虽然这些功能看起来技术难度都不高,但是整个过程因为都经过自己的双手,确实让自己成长迅速,自己也学到了很多东西,包括很多不该学的(我甚至可以直接操作生产服务器和读取生产数据库)。
当然这些过程中也遇到了很多非常复杂的业务逻辑,这促使我寻找一些标准的代码实践。 为了解决这些问题,我花了很多时间(当然包括下班时间)学习了一些高级的编程知识,比如DDD,面向切面编程,设计模式等等。
然后我就会在工作中尝试使用这类代码实践,同事也会在这个时候问我这些东西怎么使用。 因为这样的环境,我不断地主导和帮助我的团队解决了很多代码组织和业务实践的难题。 而这些经验也让我在找下一份工作的时候更有优势。😎
我想成为一名“高级开发”
看看自己是不是能做到下面这些事情:
- 你知道你真正想要深入的技术栈,并且真的在深入研究它们
- 每天都有学习的时间
- 不害怕承担难度高但是有价值的项目
- 真的奋斗在一线编程,而不是在管理岗位摸鱼
- 真的了解自己的“T”型技能树
- 如果你还不知道自己该学习什么,开始规划自己想拥有什么技能
- 了解你学的技能能解决什么问题,而不是因为热门才学习
- 了解设计模式(别以为设计模式不重要,它们是大多数领域的通用原则!)
- 如果你的工作在你的舒适区,建议你转向更有挑战的工作
避免成为“高级初学者”
现实中很多人可能并不拥有“高级开发”的职位,但是其他们已经拥有了高级开发的能力
不要对职位盲目崇拜,在国内许多地方,很多人都有高级开发工程师的头衔,甚至叫做“前端专家”
但是其实,他们可能:
- 他们已经在该岗位工作了好几年
- 他们面试很厉害,就是那个时候评了这个职级
这种情况在国内无处不在,当然也无法改变。我们只要意识到,他们可能并不具备高级开发的素养,不要盲目地模仿公司中地所谓的高级开发人员的代码,可能这些人在多年前就一直在这个舒适区待着,从来没有成长。
不要因为选错了导师而阻碍了自己成长。
🎉 你觉得怎么样?这篇文章可以给你带来帮助吗?当你处于这个阶段时,你发现什么对你帮助最大?如果你有任何疑问或者想进一步讨论相关话题,请随时发表评论分享您的想法,让其他人从中受益。🚀