作为入门级软件工程师的经验教训

已发表: 2022-08-30

如果一年前你问我软件工程师是做什么的,我会说“通过代码解决问题”。 这是一个简单的答案,指出了如何评估我们制作的工作。 对于产品驱动团队的工程师来说,这些问题可能包括如何实现客户一直要求的新功能,或者如何提高现有功能的性能。

如果你今天问我同样的问题,我会给出稍微不同的回答。 软件工程师的任务是通过代码解决正确的问题——如果得到有效解决,他们就能实现业务目标。 弄清楚要解决哪些问题以及如何解决这些问题是作为开发人员最重要的部分,而实际的实现细节则是次要的。

我的软件工程之路

在大学一年级前的那个夏天参加了 Upperline Code 的课程后,我开始对编程产生了兴趣。 我通过一个名为 The Opportunity Network 的大学和职业准备计划获得了这个机会。

Upperline Code 是我第一次接触编程,我很快意识到我对学习编程很感兴趣。 那年夏天晚些时候,我收到了我的圣母大学入学资料,并从艺术与文学学院转到了工程学院,这样我就可以主修计算机科学 (CS)。

我最喜欢的一些 CS 课程是算法设计/分析、云计算和编程挑战。 这些问题很有趣,教授们很擅长提出新想法和解释概念。

在整个本科期间,我知道我想成为一名软件工程师并使用我获得的技术技能。 值得庆幸的是,在我大四之前的那个夏天,我有机会在 Kantata 实习,担任软件工程师,并与其他工程师结对编程以帮助交付功能。

我的实习经历,以及教授们的鼓舞人心的演讲,让我有信心在我刚开始申请工作时不会满足于任何其他角色。 在办公时间花费了大量时间后,我于 2021 年毕业并获得了计算机科学学位,并接受了在 Sprout Social 担任助理软件工程师的工作。

朱利叶斯·博阿滕和来自 Sprout Social 的一群同事

融入新芽社会

作为新角色和公司新人的一部分是必须同时发展通用软件工程技能和特定于 Sprout 的领域知识。 我发现需要一般编程知识才能理解的任务对我来说是最容易解决的。 但是,需要了解 Sprout 架构的任务需要我花时间来解决,我不得不依靠我的团队寻求帮助。 虽然您可以通过在线阅读文档来解决一些问题,但您并不总能找到与您正在做的工作相关的信息——能够向他人寻求指导至关重要。

当我加入 Sprout 时,让我印象深刻的第一件事就是开发过程的协作程度。 我知道需要整个团队来开发功能,但我不知道在实践中会是什么样子。 我很快意识到发布一个成功的功能需要许多不同角色的人一起工作——从定义项目需求的产品经理到创建模型的设计师和实现功能的工程师。 协作不是可有可无的,而是实现我们团队目标的必要条件。

朱利叶斯划船和斯普劳特同事在芝加哥市中心考尔德火烈鸟雕像外的照片

学习如何浏览各种代码库并建立一个不同服务如何相互交互的心智模型是一个陡峭的学习曲线。 由于 Sprout 的核心业务是软件,因此其架构在很大程度上取决于其业务需求。 随着我的进步,我必须了解开发人员试图解决的业务问题以及为什么要做出以前的架构决策。

最初,我有点害怕拉取请求需要审查才能合并到代码库中。 了解代码审查的主要目的是知识共享和维护代码标准有助于改变我的观点。

通过代码审查有助于提高我的技术技能并提高我的拉取请求的质量。 让同行给我关于改变什么的建议,向我介绍新模式,并指出我代码库的相关领域真的很有帮助。 阅读其他工程师的拉取请求也让我对我不直接从事的其他服务有宝贵的了解。

你以前的经历很重要

有一种流行的观点是,当你进入人生的新阶段时,你以前的经历不再重要。 一旦你进入大学,你的高中经历就不再重要了。 一旦你进入劳动力市场,你的大学经历就不再重要了。

但经常被忽视的是,我们的经验、知识和习惯会产生复合效应。 我们通常只能通过我们之前所做的工作才能实现新事物。 我之前获得的知识和技能极大地影响了我作为入门级软件工程师应对新挑战的方式。

本科期间对我在 Sprout 的日常工作产生最直接影响的课程是编程挑战和数据库概念。 前者教会了我如何将大问题分解成更小的部分,以便更有效地解决它们。 它帮助我更加专注于如何构建我的代码并提高了我的代码的可读性。

数据库概念教会了我基本的关系数据库概念,并涵盖了数据库模式设计和 SQL 等主题。 我学会了如何编写查询,这非常有用,因为我经常需要查询我们的数据库来解决问题或回答问题。

TurtleBot 机器人套件的​​ GIF 动画。

我在课堂外获得的机会同样宝贵。 Java 不是我的大多数课程中涵盖的语言,但是我有机会为我的一位教授领导的商业项目工作。 我获得了编写 Java、使用 MySQL 数据库和创建 Docker 映像的实践经验。 学习 Java 尤其有用,因为 Sprout 的大部分服务都是用它编写的。

我在本科期间获得了许多其他我认为理所当然的技能,比如导航命令行和理解核心编程概念。 一个常见的误解是,由于本科所涵盖的大多数主题本质上都是理论性的,因此它们不会让您为软件工程职业做好准备。 然而,我认为情况正好相反——你在本科期间学到的技能很重要,即使它们并不直接适用于你的日常工作。

计算机科学是一个极其广泛的领域

CS涵盖多种专业,如人工智能、机器学习和数据科学。 您在本科期间获得的经验可以作为基础知识,可以很好地为您提供各种入门级角色,而不仅仅是软件工程。 从本科生跳到全职职位提供了一个机会来探索什么样的角色和专业最适合你。

如果您想开始从事软件工程的职业,Sprout 是一个很好的起点。