很多学过、做过软件开发的人不想再从事软件开发工作,这篇文章将向软件开发人员介绍许多可行的职业道路。我会解释每一份工作是做什么的,你可以怎样跨入这一职业的大门,你已经掌握的开发技能和知识在其中能够发挥什么优势,以及这些工作的长期前景。
在过去的五年里,我做过几十次客座演讲。大家总会问到这几个问题:“我接下来应该学哪种语言? ”、“如何准备技术面试? ”、“你们招人吗?”
但是当时有一个问题我一直无法给出很好的答案,那就是,“如果我不想当个开发人员去编写软件,那么该何去何从呢?”
最近,我一直在思考这个问题。在带过近十年的产品和工程团队后,我意识到自己已经做好了迎接新挑战的准备,于是今年夏天,我开始进行自由的技术写作。
当我签下第一个客户时,还没觉得技术写作可以像许多职业道路一样成为前软件工程师的新职业,但没过多久我就意识到了这确实是可能的。
软件开发人员还能做什么?
这一发现令我陷入沉思:“除了写软件,软件工程师还能做什么?”答案之多令人咋舌。
这篇文章将向软件开发人员介绍许多可行的职业道路。我会解释每一份工作是做什么的,你可以如何迈入这一职业的大门,以及从长远来看前景如何。
不管你是因为没有找到合适的软件工程师工作,还是因为你意识到软件开发不适合你,正在寻找另一条职业道路,这个指南都会帮你依据自己的能力找到合适的职业。
面向客户的岗位
人际交往能力是一项软技能,很多职业都能从中受益,软件工程师也不例外。但有很多软件工程师并不甘于此,我采访过的一些人不希望整天静静地坐在那里写代码。如果你希望你的职业道路有更多的机会与人交流,可能以下工作会适合你。
1. 开发者关系,宣传,或传道
现在越来越多的公司在努力建立与开发人员的关系,开发人员就是他们的客户、用户或拥护者,开发者关系领域也因之迅速发展。
开发者关系专家(一些公司称他们为开发人员提倡者、开发人员传道者、社区经理或“DevRels”)负责帮助建立一个以公司软件为中心的社区。
他们经常参与开发应用程序 Demo、撰写博客文章、在会议上发言,以及管理科技公司的社交媒体账户。许多知名科技公司(如 Facebook、谷歌、亚马逊等)都聘请了开发者关系专家团队。
如果你对这个领域感兴趣,可以了解一下 Mary Thengvall 和 PJ Hagerty 现在正在做什么。他们是这个领域中我最喜欢的两个人,具有很高的影响力,一起推出了社区脉搏播客。
2. 开发者营销
虽然这一工作与开发者关系有一些重叠,但相比而言开发者营销更侧重于对外。
针对开发者进行营销特别棘手,因为我们不喜欢人家给我们“卖”东西,所以许多较激进的营销策略在其他市场或许有效,但在这里却成了禁忌。作为一个有技术背景的人,你自然更理解开发人员的思维方式,会比传统的营销人员有更大的优势。
SlashData 发布了很多关于开发者营销的内容,包括在 2018 年就这一主题出版的一本书。如果你想在这个领域起步,可以学习一下网络营销:SEO、社交媒体、内容营销、影响者营销,等等。你可以在你的博客上练习这些技能,在应聘岗位之前先把自己的能力展示出来。
3. 销售工程师
许多工程师对任何标有“销售”字样的工作都不感兴趣,但那只是因为我们遇到过的都是些糟糕的销售人员。
其实,每个人都在做销售。无论你是在面试过程中身为求职者“推销”自己,还是鼓吹你的工程团队采用的新框架,这些都是在做销售。销售,就是用恰当的解决方案去满足客户的需求。
在一定程度上,拥有一些技术专长的销售工程师会很独特。对于那些不想整天写代码但又了解软件工程的开发人员来说,这是一个很不错的选择。
从事销售的另一个好处是你不需要任何专业认证。 Hubspot 做了一份很不错的简介,里面介绍了一些技能和资源,你可以据此进行入门学习。由于越来越多的公司在围绕工程师开发软件工具和服务,使销售工程师在未来十年可能会变得更加抢手。
4. 技术招聘
还有一份职业在软件工程师中的口碑也不太好,那就是技术招聘。
我遇到过一些诚实、真诚的技术招聘人员(例如,来自我的家乡芝加哥的 Taylor Dorsett 和 Matt Hoffman ),但我也遇到过一些糟糕、无知的招聘人员,他们只是专注于为完成指标而去筛选候选人。
好消息是,具备软件开发背景的你,会比其他技术招聘人员更有同理心和可信度。和销售一样,这个行业需要更外向、注重人际关系的个性,而不需要专门的证书或课程。
坏消息是,许多技术招聘的入门级职位都是在一些低端公司,所以在求职之前一定要先在网上查查他们的声誉。
面向产品的岗位
如果你想继续留在产品团队,但又不确定是否想成为一名软件开发人员,那么也有许多领域可以考虑。这些角色在工作中需要与工程师紧密协作,所以你的编码知识会有所帮助,但这些岗位也需要具备一些其他的专业知识。
5. 质量保证或测试工程师
虽然质量保证和测试工程师之间存在着细微的差别,但他们的共同点都是在软件上线之前从事测试工作。
如果你眼尖心细,喜欢想些创造性的方法来自动化重复的工作,这可能是一条很好的职业道路。它可能需要一些编码以及一些手工测试工作。
规模较小的公司一般会让他们的软件工程师彼此之间互测,所以基本上都是在大公司中才能见到专门的测试和QA 岗位。公司进行测试的方式有很大的差异,所以一定要问问他们使用的工具,他们的测试的自动化程度,以及你的岗位需要做多少手工测试和自动化测试。
6. 业务分析师
产品开发生命周期的另一个端点是业务分析师。它们通常充当业务团队和技术团队之间的桥梁,以确保需求、限制和时间安排得到充分理解。取决于团队的结构,他们还有可能参与一些测试和质量保证,因此他们需要具备丰富的产品知识。
如果你具有业务、产品开发或设计方面的背景和一些编码技能,你就可以胜任初级业务分析师的角色。如果还不具备这些条件,我建议你去找一些在线课程来帮助你对这个角色有一个大概的了解,知道它的岗位基本需求是什么。
7. 项目经理
与业务分析师一样,项目经理必须了解产品的业务需求和技术约束。
它们的关键区别在于,项目经理通常会深入参与到某个项目中。他们经常为该项目的团队定义任务和资源,在项目临近发布日期时跟踪项目的进展。
较小的公司可能会以各种方式合并业务分析师、项目经理、Scrum Master 和产品经理的角色,而较大的公司可能会单独定义各自的岗位职责。
作为一名项目经理,优秀的组织能力、对业务的理解和人际交往能力是其取得成功的关键。在这个职位上,要具备管理期望的能力,并且,能够激励那些可能比你更资深或更有经验的人,所以你必须与他们迅速建立起彼此信任的关系。这个角色的多面性使得它非常适合那些不想再写代码的分析型、技术型人员。
8. Scrum Master
在敏捷团队中, Scrum Master 帮助确保每个人都了解并认同 Scrum 理论、最佳实践和规则。
看起来这很像是项目管理,但需要特别注意的是,它是为其他构建产品的团队提供服务的。与上述很多角色一样,这个岗位不一定总是只负责这些工作,可能还要肩负其他的职责,但在较大的组织中,可能会设有专岗。
管理期望和约束的能力对能否成为一名成功的 Scrum 管理员至关重要。你还需要了解敏捷的最佳实践,因此我建议你就这一主题找一些合适你自己的课程或书籍。在各种规模的组织中,敏捷已经得到了广泛的采用,因此在未来的十年中,这条职业道路可能会继续发展下去。
9. 产品经理
我在 2019 年花了很多时间学习产品管理,以改善我们在Graide 网络的产品交付流程。
产品经理从整体上看公司的产品,以确保它们是符合预期的(客户想要的),在商业上是可行的(有商业意义的),在技术上也是可行的(我们能做得出来)。像这样能在高层次上思考的能力是很稀缺的,所以如果你拥有这样的能力和一些技术背景,可能会成为一名出色的产品经理。
初级产品经理可以从产品中比较小的组件开始入手,或者先来当当项目经理。这可以让你对产品开发有一个初步的了解,并在被委派管理你自己的产品之前,帮你与所有必要的利益相关者打好关系。
10. 设计师
如果你有设计或艺术背景,可以考虑当一名具有编程能力的 UI 或 UX 设计师,这是一个令你在这一领域脱颖而出的好方法。综合运用这些技能将使你能够更有效地与工程师交流,使用 HTML/CSS 创建交互式模型,而不仅仅是静态图像文件。
如果你在设计方面没有太多经验,那就上上课,动手做一个作品集。许多公司也会雇佣没有相关学位的人,只要他们能展示出自己的知识和技能。在我见过的作品集平台中,最常用的是 Dribbble ,当然,你也可以选择使用自己的网站。
11. 无代码或低代码开发人员
在过去的几年里,无代码和低代码开发工具的激增使一些公司可以无需雇佣开发团队即可快速构建软件。这些工具可以让你在数小时内就能创建一款移动或网络应用程序,而不必再花费数周的时间。而且,它们每年都在进步,越来越多的公司开始拥抱无代码应用程序。
Makerpad 和 No Code Jobs 是尝试入手这类工作的不错选择。因为这是一个新的领域,你会发现它有着各种不同的技能要求和工资标准,但你会写代码的背景毫无疑问会是一个竞争优势。
支持类角色
其实,要保持服务器、网站和运维的顺畅运行需要许多员工的帮助,很多新入行的软件工程师都不知道这些幕后的角色。其中一些角色需要编写自动化脚本,或者对服务器管理有深入的了解,但是如果你正在寻找传统产品开发周期之外且又偏技术型的岗位,那么这些角色可能非常适合。
12. 系统管理员或 DevOps 工程师
大型软件公司每年都有成百上千台服务器需要打补丁、升级和轮换使用。虽然云计算的广泛采用改变了这项工作,将它从物理插拔服务器变成了与 Terraform 和 Kubernetes 这样的软件打交道,但这个领域仍有大量的工作要做。
传统上,系统管理员负责根据工程团队的需要维护和管理服务器。随着组织的发展,服务器迁移到云上托管,许多组织都采用了DevOps 工程师这个头衔,表示提升了这个过程中的自动化程度。实际上,两个角色之间有很多的重叠。
无论是其中哪一个,你都需要对操作系统、托管平台、自动化工具、bash 脚本和系统架构有基本的了解。想在这个领域找到入门级的工作是很困难的,因为它需要大量的技术知识储备,但是如果你喜欢不借助于UI/UX 来解决工程问题,这是一个很好的过渡角色。
13. 数据库管理员
一些公司将数据库管理员与系统管理员混为一谈,但其实它们属于不同的角色。
数据库管理员处理底层数据存储系统的安全性、供应、扩展和优化。如果从事这一岗位,你需要具备 SQL 和 NoSQL 数据库的知识、安全最佳实践以及一些基本的脚本技能,但整天都去编写代码的可能性不大。你还需要关注一些非常小的优化问题,比如调整索引和缓存。
如果你是软件开发方面的新手,那么入门的时候请尽可能学习数据库方面的知识。你需要知道哪款数据库适用于哪类应用程序,以及如何对每个数据库进行大规模优化,因此你靠自己一个人是很难做到的。如果你想找一些大型数据集来使用,可以到 Kaggle 看一看。
14. 网站可靠性工程师
网站可靠性工程师负责解决生产环境中出现的致命问题。这通常意味着他们必须轮流值班,以便时时有人待命以便能“随叫随到”,所以你的工作时间可能会与大家有点不同。积极的一面是,你将真的能够擅长解决各种不同寻常的问题、编制自动预警和看懂服务器日志。
由于网站可靠性的工作要求随时立即做出响应,所以很难做到让富有经验的软件工程师长期担任此类岗位。也就是说,如果你在寻求第一份软件开发的工作时遇到困难,那么它可能是你入行的不错选择。你甚至可能会发现自己喜欢上这种快速解决问题的挑战,喜欢上这种刺激的感觉。
15. 技术或客户支持
虽然有些工程师害怕与客户打交道,但也有一些工程师觉得整天帮助人们解决问题能让他们活力满满。在软件公司中,你的编码经验将使你成为客户支持这一职位的理想人选,这些公司需要有技术背景的人来回答问题并提出解决方案。
在支持团队工作的缺点是,你可能不得不在人家最不爽的时候与人家打交道。心怀不满、满腹怨气的用户可能不愿意与技术支持团队交流,因此你需要极大的耐心和极厚的脸皮才能长期担任这个角色。
教学与写作类角色
我一直都很喜欢教学,所以我很喜欢那些让自己有机会去做这件事的工作岗位。如果你喜欢把复杂的话题拆解简化并介绍给其他工程师,那么下面几条职业道路可能会适合你。
16. 技术写手
我在大学的第三个实习工作是在一家大公司做技术写手。这是一份非常枯燥的工作,但我喜欢每天学习新东西。
我发现技术写作不仅仅意味着写文档。你可以将目光瞄向技术博客或文案;你可以编写内部或外部文档;你可以编写应用程序演示和教程。对于写手来说,这是收入最高的领域之一,所以值得考虑。
显然,如果你走这条路,需要擅长写作,此处还需要能够将复杂的想法有条理地组织起来,并善于学习新东西。你自我改稿的能力越强,你的工作就越有价值,所以一定要在相关工具上投资,让它们帮助你变得更好、更有效率。
一开始,你可以先为一些付费的社区写作项目写作,然后建立和完善你的关系网和作品集,在此过程中把这些经验转化为一份全职工作。
17. 教师
有几种途径可以使你从软件开发的职业转向教师。你可以在编程训练营找到一份教学的工作,你可以在大学或高中教书,你可以加入 egghead.io 这样的平台。或者你可以使用 Teachable 或 Educative 创建自己的课程网站。选择什么道路,取决于你的背景和承担风险的能力。
无论如何,教师必须能够快速学习新知识,并通俗易懂地呈现给学生。你必须适合听众的水平,他们树立起成功的信心,这样才能取得成功。教学的报酬可能比不上软件开发,但它也可以成为一个非常令人满意的职业道路。
18. 培训师
企业培训是另一种教学形式,也是一个很值得考虑的选择。培训师可以是独立的咨询师,也可以是大公司的员工,他们通常会到客户办公场所提供特定软件的实操培训。
培训师可能有深厚的专业知识,但也有可能只是一些技术高超的传播者。做企业培训通常比教学收入高,但它也可能更受销售导向的影响。培训师经常在峰会上演讲,在社区讲习班讲课,或者在培训课程间隙参加些聚会。
如果你喜欢在台上讲述技术概念,这可能是一个理想的职业道路。
分析类角色
科技公司的很多职位都需要具备分析能力。虽然它们大多都需要接受一些专门的教育,但是如果你想不再从事软件工程方向,还是值得考虑一下的。你的工作节奏将与大多数以产品为中心的工程师不同,像上面提到的支持角色一样,你可能要与公司的其他角色进行交互。
19. 数据科学家或工程师
这两个角色(有些公司将它们合并在一起)的主要工作是使用大数据来帮助企业或客户做出更好的决策。
数据工程师通常是围绕数据摄取和数据组织流水线开展工作,而数据科学家则是设计实验和算法,将这些数据处理成有用的结果。数据科学(人工智能、机器学习等)是一个立足于数学、软件工程和统计的广阔领域。
关于数据科学和工程,有一些专门的课程、训练营和大学学位,但是如果你有很强的数学背景,也可以自学一些基础知识。如果没有这方面的背景,可以考虑先温习一下数值分析、矩阵代数和统计。
因为这些技能需要花很长时间才能掌握,而且数据科学家的需求量又很大,所以这个职位薪水很高,而且短期内不太可能消失。
20. 安全分析师
如果不出现问题,信息安全角色通常得不到关注。虽然每个开发人员都应该对安全漏洞和风险有一定认识,但一般都会专门招聘安全分析人员来查找安全问题,对这些问题予以归类,并提出修复建议。
有些工作是请独立的顾问来开展的,但在大公司,可能会有内部的安全团队。这个角色很有意思,因为它既需要掌握技术和法律法规,也需要掌握业务,能够做风险评估。
安全岗位也是最难招聘的岗位,所以你从事这一工作会很有保障。信息安全是一个非常广泛的领域,因此,如果你有兴趣致力于此,可以有很多选择。
21. 研发
对于拥有软件工程技能的人来说,在研发部门的工作会成为一种独特的经历。像谷歌和亚马逊这样的大公司会拿出一部分利润由研发团队进行一些高风险且可能会有高回报的实验。这些跨学科团队可能包括软件开发人员、数据科学家、业务分析师和项目经理。
进入一个优秀的研发团队并不容易。这些岗位往往要面对很强的竞争,并且它需要非常专业的知识,这些知识可能在编程训练营是学不到的。所以说,有些公司雇佣道德黑客、创始人或多语言达人来帮助团队更加完善,并为团队注入一些创造性思维。
独立的、灵活的角色
虽然有些职业常常允许我们远程办公,有时甚至有学术休假,但你可能想让自己的生活更加灵活、自由。如果你有动力创业,可以选择每周只工作4 小时,一年花6 个月的时间来旅行,或者把一半的时间花在开源项目上。创业并不容易,但是作为一名软件开发人员,相比大多数人有很大的优势。
22. 自由职业者或顾问
如果想要更加自由,有个方法是辞掉朝九晚五的工作,成为一名自由职业者。作为一名自由职业者,你可以把自己雇佣给一个或多个客户,他们会按小时付费请你为他们写代码。公司经常雇佣自由职业者从事特定的短期项目,清理技术债务,或者在正式员工休假时补个缺。
咨询师是为客户解决特定问题的高端自由职业者。虽然他们可能会编写代码,但他们的卖点主要是他们的专业知识或独特的背景。自由职业者和咨询师之间的界限是非常模糊的,所以不要在名称上太过纠结。
入行做自由职业者或顾问是最困难的。如果你没有一个庞大的关系网,可能将依靠 Upwork 或 Toptal 这样的平台来寻找客户。这些平台的抽成占你收入的很大一部分,而且你还必须得与世界各地许多其他自由职业者直接展开竞争。
如果你赢得了口碑和声誉,有了自己熟络的客户,他们的推荐能让你得到更多的工作。推荐的好处在于,客户是基于可信的关系来找你的,而不是在网络上盲目搜索。如果你真的很擅长做自由职业者或咨询,可以把你的报酬标准提得足够高,这样每次做完一项工作就可以休息更多的时间了。
23. 创业公司的创始人
互联网上充斥着软件工程师创业的故事( 1 , 2 , 3 ),所以你可能会觉得创业很简单,甚至是个好主意。
事实上,这要视情况而定。
创业通常需要很长一段时间才能产生收益,所以在你取得成功之前,可能几个月甚至几年都没有收入。话虽如此说,但如果你想开一家自己的软件公司,几乎有数不清的好处。
你也可以一边上班,一边开一家公司。虽然这很难做到(可能会有法律后果),但也并不罕见。如果你能找到一两个其他的创始人一起创业,可能会增加成功的机会。
结语
软件工程是一个令人兴奋的领域,但它并不适合所有人。即使你离开这一领域,决定做些别的事情,你已经掌握的技能也不会白白浪费。
许多人对于在软件开发领域之外找工作充满顾虑,而我鼓励你走自己的路。在务实(赚足够的钱来生活)和你的兴趣之间找到平衡,希望你能找到一条让工作感觉不像是“工作”的职业道路。
我们很想听听你的想法。如果你有着不同的职业道路,欢迎在评论区留言。
作者介绍:
Karl Hughes ,前创业公司的 CTO,现转行成为作家。 https://draft.dev 的创始人,帮助打造高质量的软件工程博客。
原文链接:
23 Alternative Career Paths that Software Developers Can Grow Into
译者简介:
冬雨,小小技术宅一枚,从事研发过程改进及质量改进方面的工作,关注编程、软件工程、敏捷、DevOps、云计算等领域,非常乐意将国外新鲜的 IT 资讯和深度技术文章翻译分享给大家,已翻译出版《深入敏捷测试》、《持续交付实战》。