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