查看我们“成为软件工程师没有错误的方式”系列的第一部分。
因此,您或您认识的人有兴趣成为一名软件工程师,或从事许多相关的职业之一(例如,数据科学家、系统管理员、技术支持等)。好吧,这是一个不算秘密的秘密
成为软件工程师没有错误的方式。
每条道路都充满挑战和机遇,并且可以根据时间表、需求和愿望进行定制。有些人可能会选择走一条曲折的道路,沿途有各种停靠站,而另一些人可能会走高速公路直奔代码之城。
无论您选择哪条道路,请记住,无论您最初为自己规划什么路线,您作为学生的职业生涯将始终与您作为软件工程师的职业生涯大相径庭。此外,道路永无止境;总有更多东西要学习!
我将相关的学习路径分为三个大致的轨道
-
学术界:主要由高等教育定义,更侧重于理论而非技能
-
训练营/教程:专注于特定语言、框架和技能的强化多月课程或有针对性的培训
-
黑客:自学和独立驱动的培训,依靠任何可用资源,“摸索”和在实践中学习(例如,使用浏览器中的开发者工具来了解网页的工作原理)
开始我的旅程
轨道:学术界
虽然我的工程起源故事主要以学术界为中心,但首先应该归功于美国童子军的计算机优异奖章(后来被数字技术取代),因为他们在更像黑客空间的环境中向青少年时期的我介绍了 HTML。
尽管早期接触过,但直到多年后我才意识到软件开发是多么有意义。我很幸运有几位老师和教授,他们出色地将编码从一系列单调的任务转变为有趣的解决问题的练习,这些练习与编码竞赛一起,让学生保持参与。作为莱斯大学的计算机科学专业学生,我发现保持学习的原始渴望,弄清楚如何让计算机做我想做的事情,就足以成为我继续在这个领域发展的动力。
无论您喜欢哪种参与方式,都要接受它!软件工程非常灵活,可以适应各种方法和观点。您有艺术或创造性的方法吗?太棒了!将编码视为一种艺术媒介,而您就是试图塑造解决方案的艺术家。
> 开始入门
实习
轨道:训练营/教程、黑客
我再怎么强调实习对确认软件开发实际上是我希望专业从事的事情有多么有帮助也不为过。我也承认,实习并非总是每个人都渴望或能够获得的;并非每个人都能获得高质量的实习机会,或者有时间和资源来参加实习。对于那些将软件开发作为第二职业或在学术界之外从事的人来说,尤其如此,这没关系!还有其他方法可以尝试软件开发是否适合您!(请参阅 Bianca Henderson 的“成为软件工程师没有错误的方式:第一部分。”)
在 2013 年我在 OpenStax 的第一次实习期间,我被投入到 Web 开发的深水区。这特别有意义,因为我在课程中没有学习过 Web 开发,所以我不得不通过教程、网络广播和其他培训资源快速入门。
接下来的夏天,我在一家能源公司的高性能计算 (HPC) 中心实习。这个团队更信奉自启动文化;完全由我来确定最佳技术,设计和实施实习问题的解决方案。虽然我可以利用我已经熟悉的技术,但我不得不深入研究更细分的领域,如搜索算法、用户身份验证和数据库集成。始终寻找扩展理解的方法。如果您以前使用过特定技术,请确定可以加深学习并走出舒适区的领域!
通过我的实习,我学到了两个宝贵的教训
-
大型独立项目是快速学习的绝佳方式。
-
大型独立项目的长期维护成本很高。
在您职业生涯的早期,将大型独立项目作为学习工具来接受,但如果项目没有获得有意义的进展,也不要过于沮丧。
> 开始入门
在工作中
轨道:黑客
我们都曾听说过,在工作中最初几个月学到的东西比在学术界多年学到的东西还要多。这可能是因为学术界通常旨在教授实践背后的历史和理论,而不是当前的行业实践本身。毕业后,我重新加入了 HPC 中心,最初几年的工作以快速的项目为标志,从支持遗留的 Fortran 和 C 代码,到帮助建立新的 Python 技术堆栈(恰好是基于 Conda 的),再到彻底改革团队的版本控制方法(Git 来救援!)。
科技行业内的一个常见做法是贡献开源软件 (OSS),以提升您的形象并提升您的职业生涯。虽然这是出于好意,但我发现这个建议存在一些问题。首先,我们很少有人愿意为大型公司倾向于依赖的项目志愿付出我们的空闲时间,而很少考虑成本。其次,由于 OSS 项目是公开的,因此往往会有更多社区参与到项目的各个方面。社区参与通常对 OSS 项目的成功至关重要,但也可能非常有毒且令人情绪疲惫。因此,绝对不要为了曝光而感到有压力去贡献 OSS。
话虽如此,我非常幸运能够抽出工作时间与我们在 HPC 中心使用的几个 OSS 项目进行互动和贡献。这为我提供了日常工作之外的学习途径(我对版本控制、代码审查和可持续发展的许多理解都来自我与 OSS 社区的互动)。最终,我对 OSS 项目的参与和兴趣激发了我的兴趣,当时 Jannis Leidel(现在是我的同事)在 2021 年 6 月在 Twitter 上发布了 Anaconda 的职位空缺。
找到让您的工作为您服务的方法;您的职业生涯应该始终向上发展到您希望采取的下一步。不可避免地,您会发现自己在某个时候停滞不前,这意味着您已经学到了当前职位中可以学到的一切。在这一点上,您有几个选择
-
对您的成功感到满意。
-
寻找新项目、新团队或新公司,任何一个都会为您提供独特的学习机会。
- 回到三个学习机会轨道
-
重新回到学术界,参加额外的课程甚至获得额外的学位
-
参与训练营/教程并参加研讨会/会议
-
参与自主学习(例如,通过职业发展书籍)
> 开始入门
让自己变得“过时”
轨道:黑客
我从来不喜欢重复性的任务,尤其是那些需要每隔几个月重新审视的任务(间隔时间刚好足以开始忘记具体细节)。这意味着我喜欢自动化任务;我渴望让自己变得“过时”。如果我能以一种授权他人解决他们问题的方式解决问题,我就认为这项工作做得很好。因此,我非常重视代码的可维护性和可读性以及降低技术债务。
我也非常讨厌使技术堆栈复杂化——尤其是当这样做剥夺了本可以解决相关问题的人的权利时(即,有时添加数据库是多余的,而 JSON 文件完全足够)。一个简单的技术堆栈让我有信心,未来的问题或期望的更改不一定会导致紧急电话要求我介入。
话虽如此,长期的软件支持至关重要,软件开发人员必须能够舒适地维护现有代码。我在这里提倡的不是试图在代码中构建任何隐含的职位保障;不要设计其他人无法理解或维护的糟糕代码来为自己提供职位保障。这样做肯定会为项目的最终失败埋下伏笔。
让自己变得“过时”的好处是我可以不断追求新的问题。我也更有可能避免之前提到的学习高原期。了解学习价值并不断拓展技能的软件工程师对他们的公司和团队来说是宝贵的;他们通过成为有责任感的思想领袖而享有强大的职位保障。寻求让自己变得“过时”可以让您做出最符合项目长期利益的选择,并且您将从中受益。
> 更进一步
永不止步地学习
轨道:所有
技术创新的步伐似乎呈指数级增长。提醒一下,莱特兄弟于 1903 年完成了他们的首次成功飞行,而阿波罗 11 号仅在 66 年后就登上了月球——所有这些都轻松地发生在现代人类的生命周期内。我们许多人可以在自己的家庭中追踪类似的进步;我的祖先,包括我的祖父母,是挪威农村的农民/与农业相关的人,在两代人的时间里,我们移民到美国并从事了以前难以想象的工程职业。
您将获得的最重要的技能是学习。如果您停止学习,您将牺牲保持日常工作令人兴奋和新鲜的机会以及您跟上不断变化的世界的能力。明天的技术堆栈尚不存在,项目管理方法也在不断变化。您今天进入的劳动力市场将与您多年后离开的劳动力市场不同。
学会学习,学会适应,学会拥抱变化。尽早并经常尝试新技术,不要太固执或墨守成规。请记住,当您学习和您周围的世界学习时,以前解决的问题可以使用不同的技术、理论或视角再次解决,并可能产生更优雅的解决方案。
> 更进一步
TL;DR