译者简介:ASCE1885,《Android 高级进阶》 和 《Android 高级进阶(源码剖析篇)》作者
在我作为软件开发工程师的时候,我认识并与许多其他开发人员共事过。他们中的一些人刚刚开始编程生涯,有些是大学毕业后开始他们的第一份工作,有些人已经有了多年的工作经验,有些甚至有十年以上的软件开发经验。
在我的职业生涯早期,我问自己什么是“高级”开发者,我如何才能获得这个称号?我以为这与多年的工作经验有关,如果我有三年以上的工作经验,我会自动获得这个头衔。
如今,在我与许多其他开发人员合作之后,我对“高级”软件开发人员这个头衔有了明确的理解。
下面先总结一下我理解的高级软件开发工程师的特点:
- 对正在做的事情充满激情
- 做一个解决问题的人
- 了解编程语言和框架的基本原理
- 成为一个导师的同时也给自己找一个导师
- 让自己跟上业界的发展
- 离开你的舒适区
- 争取自己的观点
- 要社交
- 同时专注于软技能的学习和提升
下面让我们来深入解释这些特点。
对正在做的事情充满激情
如果你对正在做的事情充满激情,那么其他大部分目标都将会自动实现。在我看来,只有喜欢正在做的事情,你才能成为一名优秀的软件开发人员。这也意味着你应该选择一个你(或将会)非常擅长的技术栈或者专业。
当然,你还应该学习专业以外的其他东西。你的目标应该是成为一名 精通自己主要专业的 T 型软件工程师。
在这篇文章中,我将主要关注 Web 开发技术栈,因为这是我经验最丰富的领域,并形成了关于这个领域的个人看法。
做一个解决问题的人
你应该爱上在无尽的时间里解决具有挑战性问题的感觉。你应该有能力,有野心,有技能和热情来解决职业生涯中可能遇到的任何问题。
了解编程语言和框架的基本原理
这对软件开发人员来说非常重要。学习编程语言或框架的基础知识通常来说不是很复杂。大多数情况下,你可以在短时间内快速实现功能甚至小项目。但如果你需要调试,调整框架或者修复 bug,情况就会变得棘手。
例如,很多使用 Angular CLI 的人并不熟悉框架背后的执行的所有步骤。或者基于 Angular 框架并使用 TypeScript 编码代码,但却不知道如何阅读(混淆)压缩包中的 JavaScript 代码。
从根本上讲,你可以遵循以下这些基本步骤来学习基本原理:
阅读软件编程的基础书籍
我建议阅读一些关于软件开发的经典书籍,例如《代码整洁之道》或《程序员修炼之道:从小工到专家》。这些书将为你提供编写优秀软件的基本模式,指南和最佳实践。
深入了解你使用的编程语言
在 Web 开发中,JavaScript 是你应该掌握的语言。最终你的浏览器都会执行 JavaScript 代码(即使你是使用类似 Angular 之类的框架并使用诸如 TypeScript 之类的编程语言编写代码的),因此你需要能够理解所执行的代码。当你需要分析框架是如何实现某个特定功能时,这一点也是很重要的,因为这样你才能读懂框架底层的 JavaScript 源码。
对于 JavaScript 语言,我建议你阅读《JavaScript语言精粹》。
掌握使用的框架
与编程语言相同,你需要深入研究框架中使用的高级机制。例如对于 Angular,我推荐博客:Angular In Depth。
了解你使用的 IDE/编辑器/命令行
通过使用 IDE/编辑器/命令行的键盘快捷键,插件和命令来尽可能提高自己的效率。如果你使用的是 Visual Studio Code,那么可以看下我的这篇文章:How I Increased My Productivity With Visual Studio Code。
了解版本控制
我平时主要使用的是 Git,可以推荐你这本免费的在线电子书《Pro Git》。
成为一个导师的同时也给自己找一个导师
在我看来,如果你指导别人,并且自己也有导师,这样你才能称自己为“高级”开发工程师。
你应该在公司中,项目中甚至互联网上找到某个人或者某些人,你可以向这些人学习从而使自己变得更好。因此,你也可以拥有一个“远程”导师,通过阅读他的某篇博客,观看演讲,收听播客甚至阅读他的 Twitter。
不要害怕你不是最好的,在任何方面几乎都有比你更好的人。(你可以阅读《Impostor syndrome》)。
那么你如何辅导他人呢:
- 要有耐心,不要因为他人缺乏知识而对其进行评判
- 积极倾听对方的讲话
- 展示作为高级开发工程师可以实现的成功之路
- 花费足够的时间并在需要时提供帮助
让自己跟上业界的发展
我的建议是使用以下这些渠道让自己跟上业界发展的最新动态:
- YouTube
- 播客
- 参加技术大会
- 阅读技术播客
- 参加线下聚会
- 学习在线课程
离开你的舒适区
很多开发人员试图避免离开他们的舒适区,而作为“高级”开发工程师你不应该害怕离开自己的舒适区,下面是一些例子:
- 如果你害怕跟很多人谈论技术问题?那么尝试在技术大会或者线下聚会中进行技术分享并逐步熟悉它
- 你不喜欢编写后端代码,只对前端感兴趣?那么就尝试继续学习后端技术,当你了解了除了前端之外的其他端的知识时,你将为此而受益
- 你因为不理解而避免涉及 CI/CD pipeline 相关的知识,而其他开发人员对此更有经验?那么就花点时间学习相关基础知识,这样碰到问题时你可以自己解决,而不用依赖其他开发人员
争取自己的观点
在我看来,“高级”开发工程师应该有明确的观点,并能够在客户和其他开发人员面前争取它。对我而言,如果我“命令”团队做出技术决策,团队中没有人表达自己的观点就接受并开始执行这个决策,那这是令人不满意的现象。
如果双方就技术提案进行生动的讨论,那才是有意思的事情。它可以帮助架构师获得新的看法,团队成员也可以积极的对决策产生影响。
要社交
不要把自己隐藏在显示器后面。出去外面和其他开发者进行交流,你将从中获益。此外,使用上面提到过的社交平台和其他开发人员保持联系。
我还建议你建立起自己的个人品牌,让其他人能够关注你:
- 有一个展示你项目的网站
- 使用类似 Twitter,Facebook,YouTube 或者 Instagram 之路的渠道,并在上面给你的关注者发送有趣的话题
- 开始在博客上写技术文章
- 尝试在技术大会上发表演讲
同时专注于软技能的学习和提升
编写好的代码很重要,但能够向类似客户一样的非技术人员描述技术内容也非常重要。你应该能够以可理解的方式绘制体系架构或者用文字描述体系架构。此外,你应该能够进行工作时间管理,以便以最有效的方式确定任务的优先级并对其进行处理。
总结
正如你所见,成为高级软件开发工程师的过程并不容易,并且无法在短时间内实现。这是多年经验很重要的一个原因,但你必须通过专注于上述方面来度过这些年的时间。如果你只有多年的工作经验,但没有作为一个开发者去成长,我认为你不能成为一个高级工程师。
当然,以上只是我的拙见,请告诉我你对高级开发者的定义以及你与他们共事时所获得的经历是什么?