过去 5 年中,我在芝加哥的一些编程训练营做过很多次分享。

听到的问题大多千篇一律:接下来我该学什么语言呢?如何准备技术面试?你们公司招人吗?诸如此类。

但有一个问题直击我的灵魂深处:如果我不想再当程序员了,该怎么办?

关于这个问题我后来思考了很久。我带产品和技术团队将近十年了,我意识到自己遇到了新的挑战。所以今年夏天,我开始了自由技术写作。很快我便意识到,技术写作完全可以作为程序员转型后的职业发展道路之一,而在遇到第一个客户时我甚至还没有意识到这一点。

程序员还能做什么工作?

“除了开发软件外,程序员还能做什么工作?”

意识到技术写作是其中一个选择后,我开始思考有无其他选择。选项出乎意料地多。

这篇文章会历数程序员转型后的职业发展路径,尤其是对最近的编程训练营毕业生而言。我会介绍每份工作的内容、如何起步,以及长期规划。

不管你是因为没有找到程序员的工作还是因为不适合软件开发而开始寻找其他工作,这篇指南会帮你根据自己的技能找到一份适合你自己的工作。

image-2

面向客户工作

程序员会因人际沟通技能而受益颇多,我之前沟通过的一些编程训练营毕业生也不打算整天坐在电脑面前写代码。如果你想做一份能与人更多互动的工作,下面这些选择可能会比较适合你。

1. 开发者关系、开发者布道师

随着越来越多的公司重视与开发者建立关系(这些开发者可能是公司的客户、用户或者布道师),开发者关系领域正在快速发展。

开发者关系专家(有些公司称他们为布道师、社区经理或“DevRels”)协助公司围绕软件产品建立社区。

他们在技术公司中的日常工作是创建演示应用程序、写博客、在会议上演讲,和运营社交媒体账号。许多著名的技术公司(如脸书、谷歌、亚马逊等)都有开发者关系专家团队。

如果你对这个领域感兴趣,可以看看 Mary ThengvallPJ Hagerty 正在做的事情。他们是我在开发者关系领域最喜欢的两位,他们一起推出了 Community Pulse 播客

2. 开发者营销

开发者营销与开发者关系有些重叠,但开发者营销更聚焦外部。

开发者都不喜欢传统的销售方式,所以面向开发者的营销并不好做,很多在其他市场可行的更加激进的营销策略在这个市场行不通。具有技术背景的人可以顺畅地理解开发者们的思维方式,较传统营销人员更具有优势。

SlashData 发表了很多关于开发者营销的内容,比如 2018 年的时候出版了一本相关的书《Developer Marketing Guide: Selling It Softly》。如果你想从事这一领域,学学 SEO、社交媒体、内容营销、影响力营销等在线营销内容。你可以运营自己的博客,练习这些技能,然后再应用到实际工作中。

3. 销售工程师

很多工程师一看到带有“销售”字眼的工作就不感兴趣,但这是因为我们常遇见的销售人员都不合格。

事实是每一个人都或多或少地会做销售。面试找工作、给工程团队介绍新框架等都属于销售。销售的意思是用合适的解决办法匹配消费者的需求。

销售工程师具有技术背景,颇有优势。这对于不想整天写代码、但懂软件工程的开发者来说是一个绝佳的选择。

此外,销售不需要任何专业资格,这是它的另一个好处。你可以在 Hubspot 搜索一些入门技能和资源。随着越来越多的公司开始为工程师开发软件工具、提供服务,未来十年,市场对销售工程师的需求将可能日益增多。

4. 技术招聘人员

另一种不受软件工程师待见的职业是技术招聘。

我遇见过一些诚实的、真诚的技术招聘人员(如我们芝加哥的 Taylor DorsettMatt Hoffman),但我也遇见过一些糟糕的、什么都不懂的招聘人员,只会乱翻简历达成业绩。

若是有软件开发背景,那你就较很多其他技术招聘人员更具同理心和可信度。正如销售,技术招聘要求招聘人员更加外向、关注人际关系,但技术招聘并不需要专业资格或课程。

但不幸的是,很多技术招聘入门级工作需求都是一些比较差的公司发布的,所以,在申请之前,务必查看该公司在 Glassdoor上面的评价

产品工作

如果你想在产品团队,但不确定自己想不想成为一名程序员,你可以试试其他工作。这些工作跟程序员联系紧密,因此你的编程知识会给你提供帮助,但产品工作也需要其他的专业知识。

5. 质量保证工程师(QA)或测试工程师

质量保证和测试工程师的区别较小,在软件正式使用之前,他们都需要做测试工作。

如果你关注细节,想要提出一些创造性方式来自动化重复工作,这可能是一个不错的选择。除去一些手动测试工作外,可能也需要写一些代码。

小型公司会让程序员彼此互相检查代码,大型公司才有专门的测试和质量保证岗位。公司做测试的方式不一,所以一定要问清楚公司使用什么工具做测试,测试自动化达到何种程度,你所应征岗位的手动和自动测试占比各为多少。

6. 商业分析师

产品开发生命周期的另一端是商业分析师,这是商业和技术团队之间的桥梁,可以保证各方理解需求、限制和时间点。在团队结构中,商业分析师还助测试和质量保证一臂之力,所以他们还要具备广泛的产品知识。

如果你有商业、产品开发,或者设计、编程的背景知识,那么你就具备了商业分析师的基础入门资格。如果没有的话,我建议你学习一些在线课程,了解一下商业分析师及其工作内容。

7. 项目经理

正如商业分析师,项目经理必须理解产品的商业需求和技术限制。

但商业分析师和项目经理之间的关键差异在于,项目经理需要深入单个项目。项目经理需要为项目团队分配任务和资源,负责追踪项目进度。

小型公司可能会将商业分析师、项目经理、敏捷专家、产品经理的工作结合在一起,但大型公司可能会具体细分岗位职责。

一名项目经理要想成功,离不开卓越的组织能力、业务理解和人际关系处理能力。这份工作需要你管理预期,激励可能比你资深或有经验的前辈,所以你得快速建立信任。这份工作需要考虑多个方面,很适合不想再写代码的分析、技术人才。

8. 敏捷专家

在敏捷开发团队中,敏捷专家帮助确保每一个人了解并完全相信敏捷理论、最佳实践和规则。

敏捷专家很像项目经理,但特别强调与其他团队的配合,尤其是在大公司中,分工比较细,就更强调这一点。

作为一名敏捷专家,管理预期和局限性的能力十分重要,同时也需要了解敏捷最佳实践,因此我建议大家看一些这方面的课程或者书籍。敏捷在各种规模的组织中均有广泛应用,所以在未来十年这个职业的需求可能会继续增长。

9. 产品经理

image-3

2019 年,我花了大量时间学习产品管理,以改善我们的产品团队的交付流程

产品经理要全面审视公司的产品,确保这些产品是消费者想要的、有商业意义的并且可以被设计出来。站在这种角度思考的能力并不多见,所以如果你有这种能力,还有些技术背景,你也可以成为一名产品经理。

入门级产品经理可以从产品的小模块或在某些组织中担任产品经理起步。这可以让你在负责管理自己产品之前明白产品开发,帮助你和所有的相关人员建立关系。

10. 设计师

如果你有设计或艺术背景,再有一些编程基础,那么你可以成为一名优秀的 UI 或 UX 设计师。这些能力可以让你更有效率地和工程师配合设计出互动性的 HTML 或 CSS,而不仅仅是静态图像文件。

如果你没有太多设计经验,找一个课程学习一下,开始打造作品集。哪怕你没有学历,但只要你有知识和技能,很多公司也愿意聘用你。我经常看到 Dribbble 这个作品集平台,当然你也可以使用其他平台。

11. 零代码或低代码开发者

过去几年零代码和低代码工具爆火,给没有开发团队但想要快速开发软件的公司带来了机会。使用这些工具,你无需花费数周,在数小时内便可创建一款移动或网页应用。这些工具每年都会进步,所以越来越多的公司正在接受零代码应用。

可以在 MakerpadNo Code Jobs 这两个平台找相关工作。因为这是一个新兴领域,需要的技能和所给报酬变化范围较广,但编写代码能力无疑是一项非常重要的技能。

支持工作

很多软件工程师没有意识到幕后有很多员工负责维护服务器、网站和运营工作顺利开展。这其中就有些工作要求员工会写自动化脚本或对服务器管理有较深的理解。如果你想在产品开发之外寻找跟技术相关的工作,这类工作也很适合。

12. 系统管理工程师或 DevOps 工程师

大型软件公司每年都有成百甚至上千的服务器需要修复、升级、轮换。尽管当下广泛应用云计算,上述工作都可以通过 TerraformKubernetes 之类的软件而不是人工操作来实现,但是相关招聘需求还是很多的。

一直以来,工程师团队需要系统管理员负责维护和管理服务器。随着组织扩张并逐渐转用云主机,很多团队开始使用“DevOps 工程师”这一称呼,以反映这些工作的自动化程度越来越高。从实践来看,两者的工作内容有很多重叠之处。

如果想要做这类工作,你需要对操作系统、托管平台、自动化工具、Bash 脚本编程和系统架构有基本了解。在这一领域找一份入门级工作有些难,因为其对技术知识要求广泛。但如果你喜欢解决问题,不想受面向消费者产品的 UI 和 UX 要求束缚,这类工作也值得尝试。

13. 数据库管理员

有些公司将数据库管理员与系统管理员混为一谈,但其实数据库管理员是一个不同的职务。

数据库管理员负责低层次数据存储系统的安全、配置、扩展和优化。你需要懂得 SQL 和 NoSQL 数据库、安全最佳实践和一些基础脚本知识,但无需整天写代码,处理的都是类似修复索引和缓存的小优化问题。

如果你是软件开发的新手,那就开始尽量学习有关数据库的知识吧。你需要知道哪个数据库适合哪个应用,以及如何大规模优化这些数据库。实践起来可能会有些难度。如果你想要找一些工作中使用的大数据集,可以去 Kaggle 看看。

14. 网站可靠性工程师

网站可靠性工程师负责响应并修复产品运行中出现的重要问题,也就是说你需要随时处于待命状态,工作时间会比较特殊。但乐观一点来看,网站工程师将会成为解决各种异常问题、创建自动警示和读服务器日志的一把好手。

由于网站可靠性工程师总是需要人处于随时待命状态,有经验的软件工程师不太可能长时间地一直呆在这个岗位。然而,从另一个角度看,如果你正在寻找你的第一份软件开发工作,但又不知如何是好,网站可靠性工程师可能是一个不错的入门选择。我认识的两个训练营的毕业生在正式从事软件开发工作之前,就是从网站可靠性工程师过渡的。或许在这份工作中,你会发现自己喜欢快节奏解决问题所带来的挑战和激情。

15. 技术支持或客户支持

一些工程师害怕与客户交流,但也有些工程师认为帮助人们解决问题非常鼓舞人心。在需要技术人员解答问题和提出修复建议的软件公司,如果你有写代码的经验,那么你就是客户支持岗位的理想人选。

然而,不好的一面在于,在支持岗位工作,意味着不得不跟处在最糟状态下的用户打交道。如果用户不满意或者感到沮丧,他们很可能不会心平气和地与技术支持团队沟通。所以这份工作需要你耐心十足,且厚脸皮。

教学和写作工作

我一直都对教学怀有热忱,所以如果工程师角色能够让我从事教学相关工作,会对我有莫大的吸引力。如果你喜欢将复杂问题掰开揉碎分析,并把这些展示给其他工程师,那你可以考虑一下下面的几种职业选择。

16. 技术写作者

读大学时,我的第三份实习是在一家大公司担任技术写作者,工作内容就是纯粹写作。我很喜欢,因为每天都能学到新东西。

自那以后,我发现技术写作不仅仅意味着文档写作,还包括技术博客、文案写作、内部或外部文档、示例程序和指导手册。对写作者而言,技术写作收入可观,值得考虑。

如果你决定走这条路线,那么你需要擅长写作(很明显)、组织复杂观点和学习新东西。自我编辑能力越强,产出的作品越有价值,所以要投资那些能帮你变得更好、更高效的工具。

刚开始写作时,你可以给一些有偿社区写作项目投稿,在你建立起人际网络和作品集之后,你可以借助这段经历找到一份全职工作。

17. 老师

有多种方式可以从软件开发中跳出来成为一名老师,比如去训练营任教、去大学或高中任教,可以加入类似 egghead.io 之类的平台,或者可以在 Teachable 或 Educative 创办自己的课程网站。

无论在何种情况下,老师们都需要快速学习新知识,并需要将知识转变成易于学生理解的形式。想要成为一名成功的老师,你需要考虑学生的水平,并与学生建立信任。老师的收入可能比不上软件开发,但这份工作带来的成就感十足。

18. 培训师

企业培训是教学的另一种形式,也值得考虑。在大公司里,培训师可能是独立的咨询师或者员工,会前往客户的办公地点提供专门的软件实践培训。

一般来讲,培训师具有丰富的技术知识,但也有些培训师是具备一定的技术知识,然后沟通能力比较出色。企业培训的收入比教学要好,但企业培训的销售导向也会更强。培训师经常在大会上发言,办社区工作坊,或参加各种沙龙。

如果你喜欢站在舞台上,展示各种技术概念,那么这份工作也是理想的选择。

分析工作

技术公司的大量工作都对分析技能做了要求,有些领域需要专门的教育背景,如果你想从软件开发转行,这些分析岗位也是备选项。分析工作与专注产品的工程师工作的节奏非常不同,类似上面提及的支持工作,分析工作需要与业务的其他部门互动对接。

19. 数据科学家或工程师

这两种职务(一些公司会将这两者混为一谈)都涉及到使用大量数据集帮助业务部门或他们的客户做出更好的决策。

数据工程师通常负责数据获取和组织管道,数据科学家则负责设计实验和算法,以使得数据形成有用结果。数据科学(人工智能、机器学习等)是一个大的领域,扎根于数学、软件工程和统计学。

有许多课程、训练营和大学学位与数据科学和工程相关,但如果你数学背景强大,你也有能力自学一些这方面的基础课程。如果你没有数学背景,可以首先考虑进修数值分析、矩阵代数和统计学。

学习这些知识要花大量时间,当前也对数据科学家有大量需求,因此这份工作收入不菲,也不太可能短时间内就消失。

20. 安全分析师

从事信息安全工作的人一般都很低调,除非出了什么岔子。虽然每个开发者应该都能觉察到安全漏洞和风险,但安全分析师就是专门雇来发现、记录安全问题并提出修复方案的。

有些安全分析师是独立的咨询师,但在大一点的公司,可能会有一个内部安全分析团队。这个岗位很有趣,因为它需要结合技术、沟通、业务和风险评估技能。

安全岗位比较难招聘到合适的人,所以这个工作的稳定性比较高。信息安全是一个很广阔的领域,如果你对这个领域感兴趣,不妨看看这些你可以选择的路径

21. 研发

对有软件开发技能的人而言,在研发部门工作是一份不可多得的经历。谷歌和亚马逊这类大公司把一部分利润点放在了高风险,但同时也具有高回报潜力的实验上,由研发团队负责实施。这些跨学科团队可能包括软件开发人员、数据科学家、商业分析师和项目经理。

加入一个好的研发团队很难,这些工作岗位竞争力十足,对知识的专业性要求很高,而这基本不可能在编程训练营中习得。也就是说,一些公司会雇佣道德黑客、创始人或通晓多种语言的人来整顿团队,提出一些创造性思维。

独立和灵活性

尽管在技术领域工作,我们可以远程办公,有时也有学术休假,但你可能在生活中想要更多的灵活性。如果你有驱动力,想要自己创业,那你可能每周只工作 4 小时,每年出差 6 个月,或者花费一半的工作时间在开源项目上。这并不容易。但作为一名软件开发人员,相比大多数人,你已经具有很大的优势。

22. 自由职业者或咨询师

想要获得更多自由,其中一个方法是辞掉朝九晚五的工作成为一名自由职业者,这样你便可以自己雇佣自己,为一位或多位按时支付薪酬的客户写代码。公司通常也会雇佣自由职业者来负责具体的短期项目、清理技术负债或顶替休假的正式员工。

咨询师是高级的自由职业者,可以为客户解决具体问题。他们可能写代码,但客户更看重的是他们的专业知识或特殊背景。自由职业者与咨询师之间的界限非常模糊,所以不要在两者之间过于纠结。

自由职业者或咨询师起步时期最为艰难。如果你没有强大的人脉积累,你很可能需要依赖 UpworkToptal 等平台来寻找客户。这些平台会从你的收入中收取一笔不小的佣金,而且你要与平台上世界各地的自由职业者直接竞争。

在你不断积累起名声、积攒起客户后,就可以通过转介绍获得更多客户。转介绍非常有效,因为客户与你一开始就建立起了信任关系,而不再是互联网的匿名陌生状态。如果你的自由职业或咨询做得非常不错,你可以提高收费,在接手项目之间也可以适时休息。

23. 创业公司创始人

互联网上有着各种软件工程师创业的故事(1, 2, 3),这可能给你留下了“创业很简单”或“创业是个好主意”的印象。

但真相是,创业有成有败。

创业公司获得收入要花很长时间,所以很有可能在创业的前数个月甚至数年你都没有工资收入。换句话说,如果你想成立自己的软件公司,发展是个未知数。

你也可能在自己的工作时间之外成立一家公司,但是这很难,也可能有些法律风险。如果你能找到一两个合伙人一起承担创业贷款,那成功的几率会高一点。

最后的一些想法

软件工程是一个充满乐趣的领域,但并非所有人都适合从事这方面的工作。即便你离开了,决定去做一些别的事情,你在这个领域积累的知识也并不会浪费。

许多训练营毕业生惧怕在软件开发领域之外找工作,但我鼓励你们沿着自己的路径去发展。平衡好实用性(赚的钱要保证自己生活)和自身兴趣,找到一条并不像是“工作”的职业发展道路还是很有希望的。

我想听到你们的想法。如果你走过的路不同寻常,或者你转行了,我都希望能在推特上了解你的所思所想。

原文:23 Alternative Career Paths that Software Developers Can Grow Into,作者:Karl Hughes