成为软件工程师的方式不止一种:第一部分

查看我们的“成为软件工程师的方式不止一种”系列第二部分


大家好!我叫 Bianca Henderson,是 Anaconda 的一名软件工程师。当人们想到开发人员时,大多数人倾向于想到计算机科学专业的毕业生或数学非常好的人;作为一名单身母亲和有色人种女性,我拥有英国文学的本科学位,我将挑战这些误解,并希望向背景同样非传统的人们表明,如果他们愿意,他们也可以成为软件工程师!

我的背景

从小我就对计算机很感兴趣,喜欢摆弄终端和玩电脑游戏,但从未真正想到编码会成为我的职业。我的母亲是一名建筑师,我的父亲是一名艺术家/平面设计师,所以我创作了很多视觉艺术作品,作为一个爱读书的孩子,我写了很多小说、诗歌和弹吉他。

我在高中时成绩不错,但不幸的是,我没有得到很好的指导和经济支持,所以我不得不在大学期间全职工作以支付学费和生活费。为了养活自己,我白天做办公室助理、仓库经理、技术文案等工作,晚上/晚上上课。

获得学位后,我搬到纽约市,在探索频道从事广告销售工作,然后在普华永道撰写财务报告。我还曾在 D.E. Shaw & Co 工作了几年平面设计师,这个职位包括网页设计,这促使我学习了 HTML 和 CSS(我的第一批正式编程语言)。

自学 Python

在 2010 年代中期,我决定在我的爱好列表中增加一项,并选择了 Python。我的目标是创建基于文本的冒险游戏,并学习如何通过面向对象的语言编程,只是为了好玩。我结合书籍和在线教程自学了基本语法和一些软件设计模式。在我的学习过程中,我发现了 PyGame 和其他框架/库,并完全着迷了。

2017 年,我经历了一些重大的生活变故,包括分居/离婚。最初的几个月非常艰难,因为我不得不在零售和服务行业兼职几份工作,同时照顾两个学龄前儿童。情况一度看起来相当糟糕,直到一个绝佳的机会出现:一位密友告诉我当地一家名为 Red Hat 的公司销售部门有一个职位空缺。在我在那里的其中一次面试中,团队经理说:“你的简历上列出了 Python。你是否有兴趣最终承担技术角色?”我热情地回答说:“是的,当然。”他给了我销售工作,并说我可以将其视为进入这个行业的敲门砖,我可以自由地进行任何必要的社交活动,以便转到技术职位。

在科技行业工作

在我开始在 Red Hat 的新工作后不久,我在 Ansible Tower 技术支持部门找到了一位乐于助人的导师,他每周都会抽出时间与我见面,给我布置研究课题,并解答我关于我一直在学习的内容的问题。我们讨论了广泛的主题:操作系统基础知识、脚本、容器、不同类型的编程语言等等。

经过几个月的定期会议后,他问我是否安装过任何 Linux 发行版,我告诉他我没有。他说:“去安装 Arch Linux,让我知道你学到了什么。”我家里有一台破旧的旧笔记本电脑,我可以随意折腾,所以作为热身,我成功安装了 Elementary OS。我的信心大增,我卸载了 Elementary OS 并尝试安装 Arch Linux,这导致了非常不同的体验!我花了几个小时,但最终还是半途而废;Arch 是从 USB 启动而不是从笔记本电脑的硬盘启动的。我 rm -rf'ed 了主驱动器并重新开始;幸运的是,我的第二次尝试成功了。我给我的导师发送了 Arch 运行的屏幕截图,他回复说:“祝贺你,你得到了我团队的工作,负责 Ansible 安装的技术支持。”我欣喜若狂,简直不敢相信我得到了这个机会!

学习如何阅读错误消息

在接下来的 18 个月里,我了解了软件可能崩溃的多种方式,以及哪些类型的事情最容易给客户带来困难。我还适应了阅读和解析错误消息,这在后来作为开发人员对我很有帮助,因为这是开发人员工作的重要组成部分。在我目前的职位上,有时我大部分时间都花在弄清楚到底哪里出了问题,并阅读错误消息以寻找解决问题的线索——所以这是一次宝贵的经验。

在此期间,我还为 Ansible 的新手举办了每月一次的“操作指南”网络研讨会,因为教学是学习的最佳方式之一。在最初的几次会议中,我不知道自己在做什么,但随着时间的推移,我越来越习惯以“经过检验和真实”的方式呈现信息,每月一次的网络研讨会成为我期待的事情。

为开源做贡献

在支持团队工作一年后,我开始觉得自己获得了足够的技术经验来尝试开发工作。对我来说幸运的是,Ansible 是完全开源的,所以我过滤了他们的 GitHub 问题,查找任何标记为“good first issue”的问题(这是一种常见的 GitHub 标签,可以在许多开源项目中找到——旨在鼓励刚接触代码库的人提交拉取请求),并找到了一些可以尝试的问题。

为已建立的开源项目做贡献对于任何有抱负的工程师的简历来说都是至关重要的补充。它表明你

  • 浏览了相关的代码库

  • 主动通过错误修复、新功能、文档编辑等方式增强代码库

  • 成功沟通了对反馈和/或代码审查的请求

  • 对从事开发工作感兴趣(即使你提交的是文档更改,而不一定是代码)

利用开源软件来提升你的工程职业生涯是一个双赢的局面,因为它不仅给你更多的经验,而且还有助于维护相关代码和相关文档的人们!

哪种类型的开发?

在申请特定职位之前,我确保做的一件事是弄清楚我到底想从事哪种类型的工程。主要类型可以分为

  • 前端(使应用程序和网站功能齐全、高效且设计良好,以获得最佳用户体验)

  • 后端(服务器端设计、构建和维护)

  • 全栈(前端和后端的结合)

  • 质量工程(破坏事物,编写 CI/CD 管道测试)

凭借我在平面设计方面的背景,大多数人认为我最适合做前端工程,但我想亲自看看,所以我对每种类型的工程师必须解决的问题进行了广泛的研究,并且我确保涉足一些前端语言,例如 JavaScript,看看感觉如何。

经过几个月对不同工程师的影子学习和阅读他们的代码,我清楚地意识到后端工作是最“puzzle-y”(在我看来)的,而且因为我喜欢逻辑游戏和谜题,所以它最适合我。理解这一点对于实现我成为程序员的目标是一个巨大的帮助。

作为工程师工作

在我的研究阶段即将结束时,我看到 Ansible Tower 的 API/后端团队开放了一个开发人员职位,所以我更新了我的简历并写了一封求职信,其中包含指向我之前完成的拉取请求的链接以及我想作为初级开发人员为团队做出贡献的原因。我经历了两次面试,主要侧重于我提交的拉取请求、我对代码库的了解以及我如何处理/思考问题,我在 2019 年 3 月获得了这份工作!

由于我的最终梦想是在数据科学/机器学习/AI 研究领域工作,在 Red Hat Ansible 工作几年后,我决定在 2021 年底申请 Anaconda 的软件工程师职位。我从 21 年 12 月开始在这里工作,我非常喜欢它;公司文化非常棒而且我仍然可以参与开源生态系统和社区!

在工作中学习

我想强调的一个主要观点是,无论你自学编程多么彻底,无论你在训练营或获得计算机科学学位时学到了什么,你在工作中六个月学到的东西都比你通过多年的自学学到的东西多。这是因为编程工作中会出现一些障碍。当您自己工作时,您可以决定放弃某个特定功能或使用您认为最好的任何框架/库。但是,当您作为初级开发人员专业地完成这项工作时,您必须完成一项任务,而不一定能够决定如何设计它。随着您获得经验,您将越来越多地参与决策过程以及代码,但在那之前,您必须学会处理反复的挫折和障碍,直到您弄清楚如何正确地完成某件事。

理想情况下,您将与比您更有经验的开发人员组成的团队一起工作。“碰壁”的情况非常适合提出大量问题(无论您认为这些问题有多“愚蠢”!)并与队友联系以安排一些结对编程。在真空中学习是低效的,并且可能是有害的;确保将各种不同的观点融入到您的问题解决方法中,随着时间的推移,您自然会发展出自己的风格和方法。

准备好感觉你永远不知道任何事情的足够多。成为一名开发人员与其说是立即知道答案,不如说是对学习充满好奇和动力,并教导他人你所学到的知识以及如何简化流程。

结论

这基本上就是我的故事,讲述了我如何在重重困难之下成长为一名专业开发人员!这需要大量的学习、决心和人际关系建立。我的工作非常充实,我喜欢我每天都在学习新事物,无论是修复新的错误还是开发新的功能。

如果您正在作为有抱负的开发人员阅读这篇文章,请知道您可以做到,并知道您不必通过“传统”方法进入这个行业,无论您认为这些方法是什么。

主要收获和建议

以下是针对考虑进入编程领域的人员的 TL;DR

  • 考虑每一个出现的机会,即使它不完全是你认为你在寻找的——尤其是当你没有先前的经验时。我从一家科技公司的销售职位开始,然后转到工程部门;这样的转变过程较慢,但您将在过程中学到很多东西。每一个打开的门都值得窥探一下,看看它通向哪里。有些人坚持等待他们梦想中的职位,但这实际上可能比承担一个不是你确切要寻找的职位花费的时间更长。

  • 创建一个 GitHub 帐户!Fork 任何你觉得有趣的存储库,并且不要害怕在你的个人资料中展示你创建的任何东西——无论是基于教程还是你自己从头开始生成的代码。

  • 利用开源并为其做贡献!记住,你在 GitHub 上可见的一切都可以成为你简历的一部分。

  • 邀请已经在工程领域的人成为你的导师。你不需要只坚持一位导师;你可以定期与多人交谈,学习许多不同的方法和技巧。这是找出你自己的风格的好方法,并在你收到定期反馈时自信地发展它。

  • 适应冒名顶替综合症!即使是最优秀和最有经验的工程师也会患上这种综合症;这表明你一直在学习。每个人都会定期遇到难题,但随着时间和经验的积累,你将能够识别重复的模式并更快、更自然地解决问题。

  • 让你的大脑定期休息,以便它有时间处理你正在学习的东西。如果你发现自己一遍又一遍地撞到同一堵墙,请停止思考这个问题。这违反直觉,但通常解决方案会在这些休息期间来到你身边。

  • 如果你认为自己是科技行业中代表性不足的群体的一员,请务必找到具有相似身份的同事和社区成员,并成为彼此的支持盟友。有时会发生负面互动或与身份相关的自我怀疑,因此请确保尽可能多地与善良的人在一起!如果没有你可以或你的角色中的其他人可以访问的已建立的群体,请考虑创建一个。

  • 教你所知道的——这是学习和提高技能的最佳方式,也是看到你正在取得进步的好方法。

  • 学习不能操之过急。慢慢来,试着享受这个过程!

与专家交谈

与我们的专家之一交谈,为您的 AI 之旅找到解决方案。

与专家交谈