KarlHughes 译者
冬雨 策划
蔡芳芳 很多学过、做过软件开发的人不想再从事软件开发工作,这篇文章将向软件开发人员介绍许多可行的职业道路。我会解释每一份工作是做什么的,你可以怎样跨入这一职业的大门,你已经掌握的开发技能和知识在其中能够发挥什么优势,以及这些工作的长期前景。
本文最初发布于freeCodeCamp.org,经原作者及网站授权由InfoQ中文站翻译并分享。
在过去的五年里,我做过几十次客座演讲。大家总会问到这几个问题:“我接下来应该学哪种语言?”、“如何准备技术面试?”、“你们招人吗?”
但是当时有一个问题我一直无法给出很好的答案,那就是,“如果我不想当个开发人员去编写软件,那么该何去何从呢?”
最近,我一直在思考这个问题。在带过近十年的产品和工程团队后,我意识到自己已经做好了迎接新挑战的准备,于是今年夏天,我开始进行自由的技术写作。
当我签下第一个客户时,还没觉得技术写作可以像许多职业道路一样成为前软件工程师的新职业,但没过多久我就意识到了这确实是可能的。
软件开发人员还能做什么?这一发现令我陷入沉思:“除了写软件,软件工程师还能做什么?”答案之多令人咋舌。
这篇文章将向软件开发人员介绍许多可行的职业道路。我会解释每一份工作是做什么的,你可以如何迈入这一职业的大门,以及从长远来看前景如何。
不管你是因为没有找到合适的软件工程师工作,还是因为你意识到软件开发不适合你,正在寻找另一条职业道路,这个指南都会帮你依据自己的能力找到合适的职业。
面向客户的岗位人际交往能力是一项软技能,很多职业都能从中受益,软件工程师也不例外。但有很多软件工程师并不甘于此,我采访过的一些人不希望整天静静地坐在那里写代码。如果你希望你的职业道路有更多的机会与人交流,可能以下工作会适合你。
1.开发者关系,宣传,或传道现在越来越多的公司在努力建立与开发人员的关系,开发人员就是他们的客户、用户或拥护者,开发者关系领域也因之迅速发展。
开发者关系专家(一些公司称他们为开发人员提倡者、开发人员传道者、社区经理或“DevRels”)负责帮助建立一个以公司软件为中心的社区。
他们经常参与开发应用程序Demo、撰写博客文章、在会议上发言,以及管理科技公司的社交媒体账户。许多知名科技公司(如Facebook、谷歌、亚马逊等)都聘请了开发者关系专家团队。
如果你对这个领域感兴趣,可以了解一下MaryThengvall和PJHagerty现在正在做什么。他们是这个领域中我最喜欢的两个人,具有很高的影响力,一起推出了社区脉搏播客。
2.开发者营销虽然这一工作与开发者关系有一些重叠,但相比而言开发者营销更侧重于对外。
针对开发者进行营销特别棘手,因为我们不喜欢人家给我们“卖”东西,所以许多较激进的营销策略在其他市场或许有效,但在这里却成了禁忌。作为一个有技术背景的人,你自然更理解开发人员的思维方式,会比传统的营销人员有更大的优势。
SlashData发布了很多关于开发者营销的内容,包括在年就这一主题出版的一本书。如果你想在这个领域起步,可以学习一下网络营销:SEO、社交媒体、内容营销、影响者营销,等等。你可以在你的博客上练习这些技能,在应聘岗位之前先把自己的能力展示出来。
3.销售工程师许多工程师对任何标有“销售”字样的工作都不感兴趣,但那只是因为我们遇到过的都是些糟糕的销售人员。
其实,每个人都在做销售。无论你是在面试过程中身为求职者“推销”自己,还是鼓吹你的工程团队采用的新框架,这些都是在做销售。销售,就是用恰当的解决方案去满足客户的需求。
在一定程度上,拥有一些技术专长的销售工程师会很独特。对于那些不想整天写代码但又了解软件工程的开发人员来说,这是一个很不错的选择。
从事销售的另一个好处是你不需要任何专业认证。Hubspot做了一份很不错的简介,里面介绍了一些技能和资源,你可以据此进行入门学习。由于越来越多的公司在围绕工程师开发软件工具和服务,使销售工程师在未来十年可能会变得更加抢手。
4.技术招聘还有一份职业在软件工程师中的口碑也不太好,那就是技术招聘。
我遇到过一些诚实、真诚的技术招聘人员(例如,来自我的家乡芝加哥的TaylorDorsett和MattHoffman),但我也遇到过一些糟糕、无知的招聘人员,他们只是专注于为完成指标而去筛选候选人。
好消息是,具备软件开发背景的你,会比其他技术招聘人员更有同理心和可信度。和销售一样,这个行业需要更外向、注重人际关系的个性,而不需要专门的证书或课程。
坏消息是,许多技术招聘的入门级职位都是在一些低端公司,所以在求职之前一定要先在网上查查他们的声誉。
面向产品的岗位如果你想继续留在产品团队,但又不确定是否想成为一名软件开发人员,那么也有许多领域可以考虑。这些角色在工作中需要与工程师紧密协作,所以你的编码知识会有所帮助,但这些岗位也需要具备一些其他的专业知识。
5.质量保证或测试工程师虽然质量保证和测试工程师之间存在着细微的差别,但他们的共同点都是在软件上线之前从事测试工作。
如果你眼尖心细,喜欢想些创造性的方法来自动化重复的工作,这可能是一条很好的职业道路。它可能需要一些编码以及一些手工测试工作。
规模较小的公司一般会让他们的软件工程师彼此之间互测,所以基本上都是在大公司中才能见到专门的测试和QA岗位。公司进行测试的方式有很大的差异,所以一定要问问他们使用的工具,他们的测试的自动化程度,以及你的岗位需要做多少手工测试和自动化测试。
6.业务分析师产品开发生命周期的另一个端点是业务分析师。它们通常充当业务团队和技术团队之间的桥梁,以确保需求、限制和时间安排得到充分理解。取决于团队的结构,他们还有可能参与一些测试和质量保证,因此他们需要具备丰富的产品知识。
如果你具有业务、产品开发或设计方面的背景和一些编码技能,你就可以胜任初级业务分析师的角色。如果还不具备这些条件,我建议你去找一些在线课程来帮助你对这个角色有一个大概的了解,知道它的岗位基本需求是什么。
7.项目经理与业务分析师一样,项目经理必须了解产品的业务需求和技术约束。
它们的关键区别在于,项目经理通常会深入参与到某个项目中。他们经常为该项目的团队定义任务和资源,在项目临近发布日期时跟踪项目的进展。
较小的公司可能会以各种方式合并业务分析师、项目经理、ScrumMaster和产品经理的角色,而较大的公司可能会单独定义各自的岗位职责。
作为一名项目经理,优秀的组织能力、对业务的理解和人际交往能力是其取得成功的关键。在这个职位上,要具备管理期望的能力,并且,能够激励那些可能比你更资深或更有经验的人,所以你必须与他们迅速建立起彼此信任的关系。这个角色的多面性使得它非常适合那些不想再写代码的分析型、技术型人员。
8.ScrumMaster在敏捷团队中,ScrumMaster帮助确保每个人都了解并认同Scrum理论、最佳实践和规则。
看起来这很像是项目管理,但需要特别注意的是,它是为其他构建产品的团队提供服务的。与上述很多角色一样,这个岗位不一定总是只负责这些工作,可能还要肩负其他的职责,但在较大的组织中,可能会设有专岗。
管理期望和约束的能力对能否成为一名成功的Scrum管理员至关重要。你还需要了解敏捷的最佳实践,因此我建议你就这一主题找一些合适你自己的课程或书籍。在各种规模的组织中,敏捷已经得到了广泛的采用,因此在未来的十年中,这条职业道路可能会继续发展下去。
9.产品经理我在年花了很多时间学习产品管理,以改善我们在Graide网络的产品交付流程。
产品经理从整体上看公司的产品,以确保它们是符合预期的(客户想要的),在商业上是可行的(有商业意义的),在技术上也是可行的(我们能做得出来)。像这样能在高层次上思考的能力是很稀缺的,所以如果你拥有这样的能力和一些技术背景,可能会成为一名出色的产品经理。
初级产品经理可以从产品中比较小的组件开始入手,或者先来当当项目经理。这可以让你对产品开发有一个初步的了解,并在被委派管理你自己的产品之前,帮你与所有必要的利益相关者打好关系。
10.设计师如果你有设计或艺术背景,可以考虑当一名具有编程能力的UI或UX设计师,这是一个令你在这一领域脱颖而出的好方法。综合运用这些技能将使你能够更有效地与工程师交流,使用HTML/CSS创建交互式模型,而不仅仅是静态图像文件。
如果你在设计方面没有太多经验,那就上上课,动手做一个作品集。许多公司也会雇佣没有相关学位的人,只要他们能展示出自己的知识和技能。在我见过的作品集平台中,最常用的是Dribbble,当然,你也可以选择使用自己的网站。
11.无代码或低代码开发人员在过去的几年里,无代码和低代码开发工具的激增使一些公司可以无需雇佣开发团队即可快速构建软件。这些工具可以让你在数小时内就能创建一款移动或网络应用程序,而不必再花费数周的时间。而且,它们每年都在进步,越来越多的公司开始拥抱无代码应用程序。
Makerpad和NoCodeJobs是尝试入手这类工作的不错选择。因为这是一个新的领域,你会发现它有着各种不同的技能要求和工资标准,但你会写代码的背景毫无疑问会是一个竞争优势。
支持类角色其实,要保持服务器、网站和运维的顺畅运行需要许多员工的帮助,很多新入行的软件工程师都不知道这些幕后的角色。其中一些角色需要编写自动化脚本,或者对服务器管理有深入的了解,但是如果你正在寻找传统产品开发周期之外且又偏技术型的岗位,那么这些角色可能非常适合。
12.系统管理员或DevOps工程师大型软件公司每年都有成百上千台服务器需要打补丁、升级和轮换使用。虽然云计算的广泛采用改变了这项工作,将它从物理插拔服务器变成了与Terraform和Kubernetes这样的软件打交道,但这个领域仍有大量的工作要做。
传统上,系统管理员负责根据工程团队的需要维护和管理服务器。随着组织的发展,服务器迁移到云上托管,许多组织都采用了DevOps工程师这个头衔,表示提升了这个过程中的自动化程度。实际上,两个角色之间有很多的重叠。
无论是其中哪一个,你都需要对操作系统、托管平台、自动化工具、bash脚本和系统架构有基本的了解。想在这个领域找到入门级的工作是很困难的,因为它需要大量的技术知识储备,但是如果你喜欢不借助于UI/UX来解决工程问题,这是一个很好的过渡角色。
13.数据库管理员一些公司将数据库管理员与系统管理员混为一谈,但其实它们属于不同的角色。
数据库管理员处理底层数据存储系统的安全性、供应、扩展和优化。如果从事这一岗位,你需要具备SQL和NoSQL数据库的知识、安全最佳实践以及一些基本的脚本技能,但整天都去编写代码的可能性不大。你还需要