软件工程师的道路没有捷径:第一部分

查看我们“软件工程师的道路没有捷径”系列的第 2 部分


大家好!我叫 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 删除了主驱动器并重新开始;幸运的是,我的第二次尝试成功了。我向我的导师发送了 Arch 运行的截图,他回复说:“恭喜你,你将在我的团队获得一份关于 Ansible 安装的技术支持工作。” 我欣喜若狂,简直不敢相信我得到了这个机会!

学习如何阅读错误信息

在接下来的 18 个月里,我了解了软件出现故障的多种方式,以及哪些问题最常让客户感到困难。我还适应了阅读和解析错误信息,这对我后来作为一名开发者很有帮助,因为这是开发者工作的重要组成部分。在我的目前工作中,有些时候,我大部分时间都花在找出某个东西究竟在哪里失败以及阅读错误信息以寻找解决方案的线索上——所以这是一段宝贵的经验。

在这段时间里,我还为 Ansible 的新手举办了一个每月一次的“如何操作”网络研讨会,因为教学是学习最好的方法之一。在最初的几次会议中,我不知道自己在做什么,但随着时间的推移,我对以“行之有效”的方式展示信息越来越自信,这个每月一次的网络研讨会成为我期待的事情。

为开源做出贡献

在支持团队工作了一年后,我开始觉得我已经积累了足够的技术经验,可以尝试做开发工作了。幸运的是,Ansible 完全是开源的,所以我过滤了他们的 GitHub 问题,寻找那些被标记为“适合新手”的问题(一个常见的 GitHub 标签,可以在许多开源项目中找到——它的目的是鼓励对代码库不熟悉的人提交 pull request),并找到了一些可以尝试的问题。

为成熟的开源项目做出贡献,可以成为任何有抱负的工程师的投资组合中不可或缺的一部分。它表明你

  • 浏览了相关代码库

  • 通过修复漏洞、添加新功能、编辑文档等方式主动改进代码库

  • 成功地沟通了反馈请求或代码审查请求

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

利用开源软件来提升你的工程职业生涯,是一个双赢的局面,因为它不仅能让你获得更多经验,还能帮助维护相关代码和相关文档的人员!

什么样的开发?

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

  • 前端(使应用程序和网站对用户体验最佳,具有功能性、效率和良好设计)

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

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

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

由于我在平面设计方面的背景,大多数人认为我更适合做前端工程,但我想要自己去尝试,所以我对每种类型的工程师需要解决的问题进行了广泛的研究,并且确保在一些前端语言(如 JavaScript)中进行了尝试,看看感觉如何。

经过几个月的观察不同的工程师以及阅读他们的代码后,我发现后端工作最像“解谜游戏”(在我看来),而且我非常喜欢逻辑游戏和解谜游戏,所以它最适合我。了解这一点对于实现我作为一名程序员工作的目标非常有帮助。

担任工程师

在我的研究阶段接近尾声时,我看到 Ansible Tower 的 API/后端团队有一个开发者职位空缺,所以我更新了我的简历,并写了一封求职信,其中包含了我之前完成的 pull request 的链接,以及我想要作为一名初级开发者为团队做出贡献的原因。我参加了几次面试,主要集中在我提交的 pull request、我对代码库的了解以及我解决问题的方法/思考问题的方式,我于 2019 年 3 月获得了这份工作!

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

在工作中学习

我要强调的一点是,无论你自学编程多么深入,无论你在训练营或计算机科学学位中学习了什么,你都会在工作中六个月内学到比自学多年还要多。这是因为在编程工作中会遇到一些障碍。当你独自工作时,你可以决定放弃某个功能或使用你认为最好的任何框架/库。然而,当你以初级开发人员的身份在专业领域进行这项工作时,你必须完成一项任务,而不能决定如何设计它。随着经验的积累,你将在决策过程和代码中做出越来越多的贡献,但在那之前,你必须学会应对反复的挫折和障碍,直到你找到正确的方法。

理想情况下,你应该在一个由经验丰富的开发人员组成的团队中工作。这些“撞墙”的情况非常适合问很多问题(无论你认为这些问题有多“愚蠢”!)以及联系队友安排结对编程。在真空状态下学习效率低下,甚至有害;确保你将许多不同的观点融入你的问题解决方法,随着时间的推移,你将自然而然地发展出自己的风格和方法。

准备好感觉自己对任何事情都不够了解。成为一名开发人员与其说是立即知道答案,不如说是好奇、努力学习,并将你学到的知识教给别人,以及如何简化流程。

结论

这几乎是我如何克服一切困难,成长为一名专业开发人员的故事!这需要大量的学习、决心和人际关系的建立。我的工作非常充实,我喜欢每天都能从修复的每一个错误或开发的每一个功能中学到新东西。

如果你正在阅读这篇文章,并立志成为一名开发人员,请知道你可以做到,也知道你不必通过“传统”方式进入这个行业,无论你认为这些方式是什么。

关键要点和建议

以下是针对想要进入编程领域的人士的 TL;DR

  • 考虑每一个机会,即使它不是你认为自己正在寻找的机会,尤其是当你没有先前的经验时。我最初是在一家科技公司担任销售角色,然后转到工程部门;这样的转变是一个缓慢的过程,但你会在这个过程中学到很多东西。每一个打开的门都值得窥视一下,看看它通向哪里。有些人会坚持他们梦寐以求的角色,而这实际上可能比承担一个并非你正在寻找的 *确切* 角色要花费更长的时间。

  • 创建一个 GitHub 帐户!分叉任何你感兴趣的仓库,不要害怕在你的个人资料中展示你创建的任何内容,无论是基于教程还是你从头开始生成的代码。

  • 利用并贡献开源项目!记住,你在 GitHub 上公开的任何内容都可以成为你作品集的一部分。

  • 请那些已经在工程领域工作的人做你的导师。你不必只与一位导师保持联系;你可以定期与多个人交谈,学习许多不同的方法和技巧。这是一种很好的方法,可以帮助你找出自己的风格,并在收到定期反馈时自信地发展它。

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

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

  • 如果你认为自己是科技领域代表性不足群体中的一员,请确保找到有相同身份的同事和社区成员,并互相支持。有时会发生负面互动或与身份相关的自我怀疑,所以请确保你尽可能地围绕着善良的人!如果没有一个你可以或其他人可以访问的既定群体,请考虑创建一个。

  • 教授你所知道的知识 - 这是学习和提高技能的最佳方式,也是了解你所取得的进步的好方法。

  • 你不能急于求成。慢慢来,享受旅程!

与专家交谈

与我们的专家交谈,为你的 AI 之旅寻找解决方案。

与专家交谈