我希望在开始我的计算机科学专业时就知道编程职业的四件事

2025-05-25

我希望在开始我的计算机科学专业时就知道编程职业的四件事

大学二年级时,我选修了一门 Web 开发课程,并深深地投入其中,布置了一系列家庭作业,比如用 PHP 搭建一个小型社交网站,以及用 Google Maps API 开发一个 Web 应用。通过这样的项目,我了解到自己只用一个学期的学习就能创造出多么有创意的东西,我立刻意识到 Web 开发就是我想要从事的工作。于是,在三年级的时候,我宣布了自己的计算机科学专业,并在塔夫茨大学计算机科学系的 Facebook 小组里发布了这篇帖子,宣布加入该专业。

我在 2012 年发的帖子。里面有一张我手里拿着一只浅蓝色小熊软糖的照片,旁边还有两只深蓝色小熊软糖,图片说明如下

仅凭这门课,我就能构建出一些相当专业的东西,我以为这个专业已经板上钉钉了。然而,我不得不在短短两年内加上暑期课程,补上计算机科学专业的课程。由于这些原因,我不得不在算法等理论性更强的课程上投入更多精力,这个专业最终与我的预期大相径庭。大四那年,我花了很多时间思考如何将即将获得的学位转化为一份工作,同时又因为还在学校而感到筋疲力尽。

现在我已经在科技行业工作了六年,所以想分享四件我希望在进入计算机科学专业时知道的事情。开始之前先声明一下,这条建议主要针对即将进入软件工程领域的人们,因为我从未在博士阶段做过学术性的计算机科学研究。所以,如果你更关注学术性的计算机科学,我非常希望你能留言分享你对计算机科学职业以及你所从事的工作的看法!

1. 了解什么是冒名顶替综合症,并学习如何应对它

当我开始学习更高级的计算机科学课程时,我身边围绕着许多才华横溢的开发者,他们四年都在学习这个专业。虽然我的课程成绩不错,但我看到同学们在 GitHub 上开发着数百颗星的业余项目,从事着令人兴奋的实习,并在 StackOverflow 上解锁了金牌。正因为如此,我感觉自己非常落后,觉得自己毕业后会找不到工作。大四那年,我花了很多个晚上喝着能量饮料,试图完成一些业余项目来赶上我的同学们。这让我精疲力竭,在实际课程中成绩下滑,并且感到沮丧,因为我看到了很多“10 倍工程师”的神话,这些神话让我觉得自己很平凡。这种感觉一直伴随着我,直到我进入麻省理工学院担任计算生物学工程师,至今我仍然经常遇到这种情况。

那种感觉,觉得每个人都比你做得好,你觉得自己的成功是蒙蔽了别人的眼睛,这种感觉有个名字,叫做“冒名顶替综合症”,在科技行业很常见。“冒名顶替综合症”擅长欺骗别人,夸大他们能做什么、能为社区做出什么贡献,让他们觉得自己不属于这里。就我个人而言,这种综合症让我无法申请到像在会议上发言这样的职位,也无法用最快的学习策略之一——尽早并经常地构建东西——来学习新技术因为我有强烈的完美主义。

不过,好消息是,由于这种症状在科技界非常普遍,即使是非常成功的人也患有冒名顶替综合症,所以很多人都公开地分享自己的经历。所以,如果你真的患有冒名顶替综合症,要知道你并不孤单,这没什么可羞耻的,而且有很多方法可以自我照顾。每个人应对冒名顶替综合症的方法都不一样,所以在这篇文章的最后,我会分享一些我看过的关于冒名顶替综合症以及如何在科技界拥有更多自我同情的优秀博客文章和资源的链接。

就我个人而言,我主要做的事情是找到真正支持我的社区,加入一个文化氛围轻松、不居高临下、不居高临下的人,这样就不会有成为“10x”工程师的压力。我参与的一些社区包括Go 社区以及 #CodeNewbie和 #CodersTeach推特聊天。此外,为了摆脱那种非得在一个周末内在宿舍里打造出完美架构的“下一个 Facebook”固定思维模式,我尝试重新审视自己不了解的东西,思考自己正在学习和构建多少不同的东西。这样,我在学习过程中就能拥有更强的成长心态。

无论你如何应对冒名顶替综合症,都要相信自己在进入这个新职业时已经很棒了,即使你觉得自己像个菜鸟,你也能为科技社区带来很多东西。顺便提一句,你其实不需要了解人们谈论的每一项技术。如果一个项目用到了所有这些技术,那听起来就像一套难以维护的微服务😉。

2. 了解软件工程和计算机科学之间的区别和联系

我在塔夫茨大学主修计算机科学,因为我知道我想开发应用程序。大学期间,我阅读了大量科技推特,了解专业人士是如何构建他们的网络应用程序的。因此,令人惊讶的是,除了COMP 40(机器结构和汇编语言编程)之外,核心课程通常更侧重于数学,而且看起来并不像我在推特上读到的工具。同样令人惊讶的是,当我开始在工作中编写代码时,我并没有直接使用课上学到的许多算法技能。正因为如此,我往往需要付出更多努力才能理解数学的、抽象的计算机科学概念,而不是像我在网络编程中学到的那样。

这些课程与在职编程如此不同的原因是,这些核心课程教授的是计算机科学,而软件开发则以软件工程为基础。这两个领域虽然不同,但却紧密相连。计算机科学专注于使计算机和软件运行的数学,例如如何表示数据并高效地访问数据。这意味着计算机科学的工作涉及设计算法和证明定理。而软件工程则更侧重于编写用于构建技术的代码和架构;它是计算机科学的一种应用

如果你觉得与计算机科学的数学知识联系起来很困难,那么了解它的应用可以帮助你更好地理解数学概念能够解决的问题。例如,图论是像Webpack JavaScript 打包器这样的工具引入代码依赖项的方式,也是某些编程语言中的垃圾收集器知道哪些内存可以释放的方式。此外,在数学方面,线性代数是许多激动人心的领域的基础,例如自然语言处理、计算机图形学和机器学习。

此外,软件工程的一个重要组成部分是了解如何不同的工具和代码组合在一起,以构建大型软件系统。因此,您需要处理软件每个组件所使用的算法。因此,熟悉某项技术背后的计算机科学有助于您推理团队正在构建的系统不同部分的数学保证和局限性。在工程领域,大多数时候您不会直接证明定理或大O符号运行时,但计算机科学可以帮助您理解代码所基于的抽象概念。如果您熟悉某种抽象概念,除了帮助您解决手头的问题之外,这种熟悉程度还有助于将该抽象概念应用于其他问题。

3. 探索如何学习“越野”

说到数学和代码之间的联系,由于计算机科学和软件工程都涉及大量抽象概念的处理,因此您需要一种强大的方法将每个抽象概念和概念集成到您的整体知识体系中。

这在工作中尤其重要,因为在软件工程领域,当你学习新概念(例如框架或算法类别)时,学习过程通常不像在课堂上那样正式和线性。与其像阅读教科书那样阅读框架文档,不如深入研究文档,了解哪些问题能帮助你最快地运用所读内容。这些问题可能是“使用这个包的核心概念是什么?”,“它的代码库中有哪些数据类型和接口?”,以及“我可以用这个包开始构建的最基本的东西是什么?”。

这种“越野式”学习方式有助于提高学习的主动性和专注度,并让你更早地在编写的代码中运用概念。这对于工程团队来说非常重要,你也可以将其应用于正式的课程。虽然工作中的学习方式与课堂学习不同,但在这两种情况下,尝试找到最佳的学习方式都会获得回报。了解了这一点,你就可以充分利用自己的学习方式,更快地迭代你所理解的内容,从而积累更多知识。你还可以避免被细节分散注意力,因为在掌握了全局之后,你可能会学得更快。

以我自己的学习风格为例,我是一个非常注重视觉化、具体化和实践的学习者。对我来说,这意味着,当我学习代码概念时,一旦我了解了抽象概念在代码中的实现方式以及在实践中的应用方式,它就真正地联系在一起了。因此,帮助我理解例如 JavaScript 事件循环的方法是做一些实验来观察事件的实际处理时间,这成为了本教程的一部分。此外,在吸收新概念时,边构建边学习对我帮助很大。当我学习如何在前端 Web 应用的构建过程中使用 Webpack 时,我首先为我的应用编写一个最小的 Webpack 配置,然后研究如何扩展它以支持诸如在测试覆盖率中使用 Webpack 之类的功能,这对我帮助很大。这就是我后来学习如何使用 Webpack 更高级功能的方式。最后,在做笔记时,我会记录我遇到的问题,以便找到我理解的“边缘”,这有助于我弄清楚接下来要阅读什么或与同事讨论什么。

Lola the Micropanda,一只哈瓦那犬,长得像熊猫,戴着眼镜,正在读报纸

4. 继续提升工程师的沟通技巧

在我看来,沟通是帮助我作为一名初创软件工程师提升水平的一项技能。在开发团队中,每个人都在使用不同的工具来解决问题的不同领域。此外,每个人的工作都有一套复杂的权衡和细节,如果不了解代码库中某个部分是如何构建的,就很难理解。这就是为什么打破沟通孤岛的重要性,尤其是在每个工程师有时都需要修改他们不经常处理的代码的情况下。

除了与其他工程师沟通之外,与产品团队成员交流也很重要。负责将产品交付给客户的人员通常与用户联系最为密切。因此,用户反馈对于决定产品需要支持哪些功能和用户体验至关重要。而这最终将影响工程师的工作内容。正因如此,我经常参加工作中的产品会议以及工程会议,以便全面了解最终构建的产品。这些信息对工程团队至关重要,因为它让他们能够权衡解决同一问题的不同方法之间的利弊;你当然希望采用最容易支持客户所需功能的方法。

对于帮助队友来说,以下几种沟通方式确实至关重要:

  • 文档形式多样;代码注释是经典示例,但也有描述性的Git 提交信息、README 文件、易于理解的测试覆盖率以及工单中的工作描述。这些对于解释您正在解决的问题和您正在做出的设计决策非常有帮助。
  • 重构代码,使人们能够更直观地正确使用不同的功能和数据结构。
  • 了解你的哪些工作可以“解锁”其他人的工作。这有助于为更多人完成工作,并且当你的队友开始使用你的代码时,你通常可以得到关于如何改进它的良好反馈。
  • 在脑海里构思你正在做的事情以及它要解决的问题,但不要太深入实施细节。这在规划会议时尤其重要。

这些沟通技巧都可以帮助您和您的团队构建产品;成为 10x 工程师的最佳方法是让另外 9 个人更容易地使用您的代码!

如果你正在转型从事科技行业,虽然这可能会让你感到不知所措,但这无疑是一个令人兴奋的转变。希望我的建议能帮助你提升工程师的水平。祝你职业转型一切顺利!

关于冒名顶替综合症和自我护理的资源

还要感谢我的狗 Lola,它戴着这副眼镜,真是个好风度!😂

文章来源:https://dev.to/andyhaskell/four-things-in-coding-careers-i-wish-i-knew-starting-my-cs-major-22d0
PREV
无缝 Web 工作者和工作线程 -threads.js
NEXT
如何从 yarn / npm 迁移到 pnpm