在过去的五年里,我在芝加哥的许多编程训练营做了几十次客座讲座。
有几个问题总是会被提出来:接下来我应该学习哪种语言?我如何为技术面试做准备?你在招聘吗?
但有一个问题让我不知所措:如果我不想成为一名软件开发人员怎么办?
我最近一直在想这件事。在领导了近十年的产品和工程团队后,我意识到我已经准备好迎接新的挑战,所以今年夏天,我开始了自由职业的技术写作。当我得到我的第一个客户时,我并不知道这一点,但我很快意识到,对于前软件工程师来说,技术写作是许多有效的职业道路之一。
这个认识让我思考:软件工程师除了写软件还能做什么工作?
这篇文章将介绍许多软件开发人员的职业道路,特别是新近毕业的训练营毕业生。我会解释每一份工作是做什么的,你如何才能踏入这扇门,以及长期的前景。
无论您是因为还没有找到工程师的工作,还是因为意识到软件开发不适合您,所以正在寻找替代职业道路,本指南都将帮助您找到与您的技能相匹配的职业。
虽然软件工程师受益于与人交往的技能,但我采访过的一些训练营毕业生并不期待整天安静地坐着写代码。如果你想要一条能提供更多与人互动机会的职业道路,这些工作可能适合你。
随着越来越多的公司努力与作为其客户、用户或倡导者的开发人员建立关系,开发人员关系领域正在快速增长。
开发人员关系专业人员(一些公司称他们为开发人员倡导者、开发人员传道者、社区经理或DevRels&34;)帮助围绕他们公司的软件建立和建立社区。
他们经常参与为专注于技术的公司创建演示应用程序、撰写博客文章、在会议上发言以及管理社交媒体账户。许多大牌科技公司(Facebook、谷歌、亚马逊等)。聘请开发人员关系专业团队。
如果你对这个领域感兴趣,请仔细阅读玛丽·腾瓦尔和PJ·哈格蒂正在做的事情。他们是我在这个领域最喜欢的两位有影响力的人,他们一起推出了社区脉搏播客(Community Pulse Podcast)。
对开发商的营销是特别棘手的,因为我们不喜欢被出售,所以许多对其他市场有效的更激进的营销策略在这里是禁忌的。作为一个有技术背景的人,你自然会理解开发人员的思维方式,你会比传统的营销者拥有更大的影响力。
SlashData发布了很多关于开发者营销的精彩内容,包括2018年的一本关于这一主题的书。如果你想在这个领域开始,学习在线营销:SEO,社交媒体,内容营销,影响力营销等等。你可以在你的博客上练习这些技能,在申请工作之前展示你的知识。
许多工程师对任何职称为销售的工作都望而却步,但那只是因为我们都遇到过糟糕的销售人员。
事实是,每个人都在做销售。无论你是在面试过程中以求职者的身份推销自己,还是在你的工程团队中倡导新的架构,销售都意味着将客户的需求与正确的解决方案相匹配。
销售工程师的独特之处在于他们拥有一定程度的技术专长。对于那些不想整天写代码但了解软件工程的开发人员来说,这可能是一个绝佳的匹配。
销售的另一个好处是,你不需要任何专门的认证就可以做到这一点。HubSpot提供了一些你可以开始学习的技能和资源的很好的介绍。随着越来越多的公司为工程师提供软件工具和服务,销售工程师在未来十年可能会变得更加紧俏。
我见过一些诚实、真诚的科技公司招聘人员(例如,来自我家乡芝加哥的泰勒·多塞特(Taylor Dorsett)和马特·霍夫曼(Matt Hoffman)),但我也遇到过一些糟糕的、毫无头绪的招聘人员,他们纯粹专注于从应聘者中筛选人才,以达到他们的配额。
好消息是,有软件开发背景的你会比许多其他技术招聘人员更有同情心和可信度。和销售一样,这个领域需要更加外向、注重人际关系的个性,但它不需要专门的证书或课程。
不幸的是,技术招聘中的许多入门级工作都在低质量的公司,所以在申请之前一定要检查一下他们在GlassDoor上的声誉。
如果你想留在产品团队,但是你不确定你想成为一名软件开发人员,有很多领域你可以过渡到。这些角色与工程师密切合作,因此您的编码知识将对您有所帮助,但它们还需要其他专业知识。
虽然质量保证和测试工程师之间有细微的区别,但两者都是在软件上线之前处理测试的。
如果你有细枝末节的眼光,并且喜欢想出创造性的方法来自动化重复的任务,这可能是一条很好的职业道路。它可能需要一些编码以及一些手动测试工作。
较小的公司让他们的软件工程师测试彼此的代码,因此专门的测试和QA角色在大型组织中最为常见。公司如何进行测试之间有很大的差异,所以一定要询问他们使用的工具,他们的测试自动化程度,以及您的角色需要多少手动测试与自动测试。
产品开发生命周期的另一端是业务分析师。他们通常充当业务团队和技术团队之间的桥梁,以确保了解需求、限制和时间表。根据团队结构的不同,他们可能还会参与并帮助进行测试和质量保证,因此他们需要具备广泛的产品知识。
如果您有业务、产品开发或设计方面的背景,并具备一定的编码技能,那么您可能有资格担任入门级业务分析师角色。如果没有,我建议你研究一些在线课程,帮助你对这个角色和它需要的内容有一个基本的理解。
关键的区别在于,项目经理通常深入单个项目。他们经常为从事项目的团队定义任务和资源,并在项目即将发布时跟踪项目的进度。
较小的公司可能会以各种方式组合业务分析师、项目管理、Scrum主管和产品经理的角色,但较大的公司可能会定义单独的职责。
优秀的组织能力、对业务的理解和人际交往能力是项目经理取得成功的关键。这个角色取决于你管理期望和激励可能比你更资深或更有经验的人的能力,所以你必须迅速建立信任。这个角色的多面性使其非常适合不想再写代码的分析型、技术型人员。
在敏捷团队中,Scrum Master帮助确保每个人都了解并接受Scrum理论、最佳实践和规则。
这看起来很像项目管理,但特别强调为参与构建产品的其他团队提供服务。再说一次,这并不总是它自己的工作,但在更大的组织中,它可能是。
管理期望和限制的能力对于您成为Scrum大师的成功至关重要。您还需要了解敏捷最佳实践,所以我建议您在这个主题上找到合适的课程或书籍。敏捷已经在各种规模的组织中被广泛采用,因此这条职业道路在未来十年可能会继续增长。
2019年,我花了很多时间学习产品管理,以改善我们在Graide Network的产品交付流程。
产品经理从整体上看公司的产品,以确保它们是可取的(客户想要的)、可行的(具有商业意义的)和可行的(我们可以制造它)。像这样从高层次思考的能力是罕见的,所以如果你有这种能力和一些技术背景,你可能会做得很好,成为一名产品经理。
入门级产品经理可能从产品的较小部分开始,或者在某些组织中担任项目经理。这可以让你尝到产品开发的滋味,并帮助你在被指派管理自己的产品之前,与所有必要的利益相关者建立关系。
如果你来自设计或艺术背景,成为一名有一定编程经验的UI或UX设计师是在你的领域脱颖而出的一种很好的方式。这种技能的结合将使您能够更有效地与工程师交谈,并用HTML/CSS创建交互式模型,而不仅仅是静态图像文件。
如果你在设计方面没有太多经验,那就选修一门课程,然后开始建立一个投资组合。许多公司会雇佣没有学位的人,如果他们能展示自己的知识和技能的话。Dribble是我见过的最常见的投资组合平台,但你也可以使用你自己的网站。
过去几年,无代码和低代码开发工具的激增为那些希望在不雇佣开发团队的情况下快速构建软件的公司打开了机会。这些工具可以让你在几个小时而不是几周内创建一个移动或网络应用程序,而且因为它们每年都在变得越来越好,越来越多的公司正在接受无代码应用程序。
Makerpad和No Code Job是开始寻找这类工作的好地方。因为这是一个新领域,你会发现需要的技能和薪水范围很广,但你的代码编写背景无疑会被证明是一项资产。
许多新上任的软件工程师并没有意识到幕后有许多帮助保持服务器、网站和运营平稳运行的员工。其中一些角色需要您编写自动化脚本或对服务器管理有深入的了解,但如果您正在寻找传统产品开发周期之外的工作,但有技术爱好,这些可能是非常合适的。
大型软件公司全年都有成百上千台服务器需要打补丁、升级和轮换。虽然云计算的广泛采用改变了这项工作,从物理上插入服务器转变为使用Terraform和Kubernetes等软件,但这一领域并不缺乏工作岗位。
传统上,系统管理员负责根据工程团队的需要维护和管理服务器。随着组织的发展并转向云托管,许多组织采用了DevOps工程师的头衔,以反映此过程中使用的自动化程度的提高。实际上,这些角色之间有很多重叠之处。
无论采用哪种方式,您都需要对操作系统、托管平台、自动化工具、bash脚本和系统架构有基本的了解。这个领域的入门级工作可能很难找到,因为它需要如此广泛的技术知识,但如果你喜欢解决问题的工程学方面,而没有大多数面向客户的产品所需的UI/UX要求,那么这是一个很好的过渡角色。
一些公司将数据库管理员与系统管理员混为一谈,但这可能是一个截然不同的角色。
数据库管理员负责低级数据存储系统的安全性、资源调配、扩展和优化。您将需要SQL和NoSQL数据库的知识、安全最佳实践和一些基本的脚本编写技能,但是您不可能整天都在编写代码。您还将担心非常细微的优化问题,比如修复索引和缓存。
如果你是软件开发的新手,那就从学习一切关于数据库的知识开始吧。您需要知道哪个数据库适合哪个应用程序,以及如何大规模地优化每个应用程序,因此您可能很难独自实践这一点。如果您想要找到一些大型数据集来处理,请查看Kaggle。
现场可靠性工程师负责响应和修复生产中出现的关键问题。这通常意味着他们轮流在待命名单中轮换,所以你可能会有一些奇怪的工作时间。好处是,您将真正擅长解决各种不寻常的问题、构建自动警报和读取服务器日志。
由于这项工作的高度反应性,可能很难让有经验的软件工程师长期担任现场可靠性角色。也就是说,如果你在寻找你的第一个软件开发职位时遇到困难,这可能是一个很好的入门之处。我认识两个训练营的毕业生,他们在过渡到软件开发之前,先是担任SRE的角色。你甚至可能会发现你喜欢快节奏解决问题的挑战和刺激。
虽然一些工程师害怕与客户互动,但另一些工程师发现,整天帮助人们解决问题是一件很有活力的事情。您的编码经验将使您成为软件公司客户支持角色的理想人选,这些公司需要具有技术背景的人员来回答问题并提出修复建议。
在支持部门工作的不利之处是,你可能不得不与处于最糟糕状态的人互动。不满意或沮丧的用户可能不乐意与技术支持团队交谈,所以你需要极大的耐心和厚脸皮才能长期担任这个角色。
我一直都很喜欢教书,所以我发现自己被工程师的角色吸引住了,这样我才能做到这一点。如果你喜欢把复杂的话题分解并展示给其他工程师,有几条职业道路可以选择。
我在大学里的第三份实习工作是在一家大公司做技术撰稿人。这是相当枯燥的写作,但我喜欢每天学习新东西。
从那以后,我发现技术写作不仅仅意味着文档。您可以撰写技术博客或撰写文案;可以创建内部或外部文档;可以创建演示应用程序和教程。这是作家收入最高的领域之一,因此值得考虑。
如果你走这条路,你需要擅长写作(显然)、组织复杂的想法和学习新事物。你越能自我编辑,你的工作就越有价值,所以投资于帮助你做得更好、更有效率的工具吧。
你可以开始为一些付费的社区写作程序写作,并在建立网络和投资组合的过程中将这些经验转化为一份全职工作。
有几种方法可以让您从软件开发职业转向教师职业。你可以在编程训练营找到一份教书的工作,你可以在大学或高中教书,你可以加入像egghead.io这样的平台,或者你可以创建自己的课程网站,网站是teacable或Education。你选择的道路取决于你的背景和风险承受能力。
在任何情况下,教师都必须快速学习新信息,并将其以易于理解的形式呈现给他们的学生。你必须与你的听众见面,与他们建立信任,才能取得成功。教学的报酬可能低于软件开发,但它也可以是一条非常有成就感的职业道路。
企业培训是另一种教学形式,但也值得考虑。培训师可以作为独立顾问或大公司的员工工作,他们通常会前往客户的办公室,提供专业软件的实践培训。
培训者可能有深厚的技术知识,但有些人只是精通技术的沟通者。企业培训通常比教学报酬更高,但它也可能更多地是由销售驱动的。培训人员经常在会议上发言,举办社区研讨会,或在培训期间出差参加小组会议。
如果你喜欢站在舞台上展示技术概念,这可能是一条理想的职业道路。
科技公司中的许多职位都需要分析技能。虽然这些领域中的许多都需要专业教育,但如果你想把职业重心从软件工程转向其他领域,那么考虑一下这些领域也是值得的。你将以不同于大多数专注于产品的工程师的速度开始工作,就像上面的一些支持角色一样,你可能会与业务的其他部分进行互动。
这两个角色(有些公司将它们结合在一起)涉及使用大型数据集来帮助企业或其客户做出更好的决策。
数据工程师通常致力于数据获取和组织管道,而数据科学家则设计将这些数据压缩成有用结果的实验和算法。数据科学(人工智能、机器学习等)。是一个植根于数学、软件工程和统计学的巨大领域。
有数据科学和工程的课程、训练营和大学学位,但如果你有很强的数学背景,你也许可以自己学习一些基础知识。如果没有,可以考虑先温习一下数值分析、矩阵代数和统计学。
因为这些技能需要很长时间来学习,而且数据科学家的需求量很大,所以这个职位报酬很高,而且短期内不太可能消失。
在出现问题之前,信息安全角色通常不会引起注意。虽然每个开发人员都应该意识到安全漏洞和风险,但安全分析人员被明确聘请来查找、编目和建议安全问题的修复。
一些人以独立顾问的身份工作,但在较大的公司,可能会有内部团队。这个角色很有趣,因为它需要技术、法规遵从性、业务和风险评估技能的混合。
安全工作也是技术领导者最难填补的工作之一,所以你在这里会有工作保障。信息安全是一个广阔的领域,如果你有兴趣追求它,那么看看你可以采取的许多途径中的一些吧。
对于具有软件工程技能的人来说,从事研发工作可能是一种独特的经历。谷歌(Google)和亚马逊(Amazon)等大公司将部分利润投入研发团队进行的高风险、潜在高回报的实验。这些跨学科团队可能包括软件开发人员、数据科学家、业务分析师和项目经理。
进入一个优秀的研发团队是很困难的。这些角色往往竞争激烈,需要高度专业化的主题知识,而这些知识很可能是你在编程训练营中学不到的。也就是说,一些公司聘请有道德的黑客、创始人或通晓多种语言的人来帮助完善团队,并在其中加入一些创造性的想法。
虽然我们的职业通常允许远程工作,有时甚至允许休假,但你可能希望在生活中有更大的灵活性。如果你有创业的动力,你也许可以每周工作4个小时,一年中有6个月的时间出差,或者花一半的时间在开源项目上。这并不容易,但作为一名软件开发人员,你比大多数人都有很大的优势。
获得更多自由的一种方法是辞去朝九晚五的工作,成为一名自由职业者。作为一名自由职业者,你会把自己雇给一个或多个客户,他们会按小时付钱给你为他们写代码。公司经常雇佣自由职业者从事特定的短期项目,清理技术债务,或者在员工休息时填补空白。
顾问是为客户解决特定问题的高端自由职业者。虽然他们可能会写代码,但他们经常会被带进来。
.