今天是周末,说点正经的话题。
如今新冠疫情仍未散去,大概率它将陪伴地球人得几年了。
年没怎么样就过去了,不少软件开发从业者,比如程序员,工程师,架构师,运维,这些同学会先天有种紧迫感,深怕在某一天陷入一种迷茫不能自己,如果自己某一天不能或不想再干软件开发这一岗位时,该怎么供一家子吃饭?
本文将给有这样想法的同学一些启迪,希望能够打开更多新的窗户和可能性。我会详细说明每个职位能做哪些事情,该怎么样才能跨进这些岗位的大门,我们曾经熟悉的软件开发技能和技术知识能够继续发挥神马优势,还有这些工作的更远前景。
正文现在开始:
在过去五年时光里,我做过几十次的演讲,均属于客座角色。
关于程序员转型,人们经常会问到这样几个问题:“我接下来应该学哪个编程语言?”、“怎样准备技术面试?”、“你们那儿还招人吗?”
当时有一些问题一时也把我问蒙了,没法一下给出最佳答案,问得最多或大多数的想法:——“如果有一天,不想当程序员了,那么我该何去何从?”
最近我也在在思考这个问题,我带过近十年的产品技术团队,我觉得已经做好了迎接新挑战的准备,于是在今年夏天,我开始了技术写作的生涯。
在我和第一个客户签约(订单)时,没有觉得技术写作可以像很多职业一样成为程序员的新岗位,没过多久我就发现这件事确确实实是可行的。
有一个段子,说是请程序员的孩子们来回答是最好的了。网上流传一句顺口溜:“爸爸辛苦买的房,我来考成学区房”。
一张流行于朋友圈的截图:
下面我们就来整理一番。
面向客户的岗位
人际交往与沟通能力是一项软技能,很多职位都能从中受益,程序员也不例外。但有很多人并不甘心于此,我见过一些人不希望整天静静地坐在那儿写代码,如果你希望职业道路有更多机会和人打交道,以下我介绍的工作岗位会更符合这样式儿的。
开发者关系传道师
现在越来越多的公司在努力建立与开发者的关系,而开发人员就是这些公司的客户、用户或拥护者,开发者关系领域也因此迅速地被发展。
开发者关系专家(一些企业称为技术文化传播者、开发人员布道者、社区经理或者叫“DevRels”)负责帮助企业建立一个以软件开发为中心的社区组织。
这些人经常参与应用程序的Demo、撰写技术博客/文章,在技术会议上发表演讲,以及管理技公司的社交媒体账户等。有不少的科技巨头,比如Facebook、谷歌、亚马逊等都聘请了开发者关系专家团队。
开发者营销
听名字,似乎这一职位与开发者关系有一点重合,但是相比来说,开发者营销更侧重于外部环境。
针对开发者进行营销,其实是比较复杂的事情,因为程序员比较不喜欢“卖”东西给自己人,因为我们是一群有信仰的科技知识分子。许多较凶猛的营销团队在其它品类市场或许有效,但在技术领域却变成了瘸腿,玩不转。而作为一个有技术背景的人,我们自然更理解开发人员的思维方式,会比传统营销人员有更大的优势。
销售工程师
话说回来,很多程序员对标有“销售”字样的工作都不咋太感冒,甚至有点不屑,原因是我们没有遇到好的销售人员或榜样。
其实这个星球上的每个人都是销售,无论是在面试过程里,还是在其它任何场合,你都要会“推销”自己,在面试中还要多说自己的团队用什么最新框架,有多强大多先进等。这些都属于销售范畴,销售肯定不是行骗——它是用最恰当的解决方案去满足客户的需求。
技术招聘
还有一份职业在软件工程师中的口碑也不太好,那就是技术招聘者。
我遇到过一些诚实、真诚的技术招聘人员(例如,来自我的家乡芝加哥的TaylorDorsett和MattHoffman),但我也遇到过一些糟糕、无知的招聘人员,他们只是专注于为完成销售指标而去筛选候选人。
好消息是具备软件开发背景的你,会比其他技术招聘人员更有同理心和可信度。和销售一样,这个行业需要更外向、注重人际关系的个性,而不需要专门的证书或课程。
坏消息是,许多技术招聘的入门级职位都是在一些低端公司,所以在求职之前一定要先在网上彻查他们的声誉。
质量保证或测试
虽然质量保证和测试工程师之间存在着细微的差别,但他们的共同点都是在软件上线之前从事测试工作。
如果你眼尖心细,喜欢想些创造性的方法来自动化重复的工作,这可能是一条很好的职业道路。它可能需要一些编码以及一些手工测试工作。
规模较小的公司一般会让软件工程师彼此之间互测,基本上都是在大公司中才能见到专门的测试和QA岗位。公司进行测试的方式有很大差异,所以要清楚他们使用什么工具,他们的测试自动化程度,以及你的岗位需要做多少手工测试和自动化测试。
业务分析师
产品开发生命周期的另一个节点是业务分析师。它们通常充当业务团队和技术团队之间的桥梁,以确保需求、限制和时间安排得到充分的理解。这一部分取决于团队结构,他们还有可能参与一些测试和质量保证工作,因此他们需要具备丰富的产品知识。
如果你具有业务、产品开发或设计方面的背景和一些编码技能,你就可以胜任初级业务分析师的角色。如果还不具备这些条件,我建议你去找一些在线课程来帮助你对这个角色有一个大概的了解,知道它的岗位基本需求是什么。
项目经理
与业务分析师一样,项目经理必须了解产品的业务需求和技术约束。
它们的关键区别在于,项目经理通常会深入参与到某个项目中。他们经常为该项目的团队定义任务和资源,在项目临近发布日期时跟踪项目的进展。
较小的公司可能会以各种方式合并业务分析师、项目经理、ScrumMaster和产品经理的角色,而较大的公司可能会单独定义各自的岗位职责。
产品经理
我在年花了很多时间学习产品管理,以改善我们在Graide网络的产品交付流程。产品经理从整体上看公司的产品,以确保它们是符合预期的(客户想要的),在商业上是可行的(有商业意义的),在技术上也是可行的(我们能做得出来)。像这样能在高层次上思考的能力是很稀缺的,所以如果你拥有这样的能力和一些技术背景,可能会成为一名出色的产品经理。
初级产品经理可以从产品中比较小的组件开始入手,或者先来当当项目经理。
设计师
如果你有设计或艺术背景,可以考虑当一名具有编程能力的UI或UX设计师,这是一个令你在这一领域脱颖而出的好方法。综合运用这些技能将使你能够更有效地与工程师交流,使用HTML/CSS创建交互式模型,而不仅仅是静态图像文件。
如果你在设计方面没有太多经验,那就上上课,动手做一个作品集。许多公司也会雇佣没有相关学位的人,只要他们能展示出自己的知识和技能。在我见过的作品集平台中,最常用的是Dribbble,当然,你也可以选择使用自己的网站。
无代码或低代码开发人员
在过去的几年里,无代码和低代码开发工具的激增使一些公司可以无需雇佣开发团队即可快速构建软件。这些工具可以让你在数小时内就能创建一款移动或网络应用程序,而不必再花费数周的时间。而且,它们每年都在进步,越来越多的公司开始拥抱无代码应用程序。
Makerpad和NoCodeJobs是尝试入手这类工作的不错选择。因为这是一个新的领域,你会发现它有着各种不同的技能要求和工资标准,但你会写代码的背景毫无疑问会是一个竞争优势。
支持类角色
其实,要保持服务器、网站和运维的顺畅运行需要许多员工的帮助,很多新入行的软件工程师都不知道这些幕后的角色。其中一些角色需要编写自动化脚本,或者对服务器管理有深入的了解,但是如果你正在寻找传统产品开发周期之外且又偏技术型的岗位,那么这些角色可能非常适合。
系统管理员或DevOps工程师
大型软件公司每年都有成百上千台服务器需要打补丁、升级和轮换使用。虽然云计算的广泛采用改变了这项工作,将它从物理插拔服务器变成了与Terraform和Kubernetes这样的软件打交道,但这个领域仍有大量的工作要做。
传统上,系统管理员负责根据工程团队的需要维护和管理服务器。随着组织的发展,服务器迁移到云上托管,许多组织都采用了DevOps工程师这个头衔,表示提升了这个过程中的自动化程度。实际上,两个角色之间有很多的重叠。
无论是其中哪一个,你都需要对操作系统、托管平台、自动化工具、bash脚本和系统架构有基本的了解。想在这个领域找到入门级的工作是很困难的,因为它需要大量的技术知识储备,但是如果你喜欢不借助于UI/UX来解决工程问题,这是一个很好的过渡角色。
数据库管理员
一些公司将数据库管理员与系统管理员混为一谈,但其实它们属于不同的角色。
数据库管理员处理底层数据存储系统的安全性、供应、扩展和优化。如果从事这一岗位,你需要具备SQL和NoSQL数据库的知识、安全最佳实践以及一些基本的脚本技能,但整天都去编写代码的可能性不大。你还需要