如何成为卓越的软件工程师(无需学位?)
作者:John Sonmez
如果你正在考虑成为一名软件工程师(或开发人员——两者非常相似,我们将在下面讨论)……本指南将教你所有相关内容。
你将获得一个完整的逐步路径,告诉你如何实现这个目标。 享受你的15步软件工程师路线图!
这是你吗?
你喜欢解决棘手的问题…… 作为软件工程师,你将运用你的智慧和创造力来解决难题,并通过为雇主或客户解决问题来提供巨大价值。
你喜欢沉浸在一个主题的研究中…… 要成为软件工程师,你需要学习许多复杂技能。之后你也永远不会停止学习。如果你热衷于扩展知识和提升技能,这可能是你的完美职业道路。
你希望与他人合作共同实现雄心勃勃的目标…… 独自在地下室解决编码问题的开发者是个神话。大多数时候,你需要领导他人或与他们合作解决问题。你还将积极参与会议并就你的工作做演示。
你希望通过这样做赚取比大多数同龄人更多的钱…… 那么为什么不成为软件开发人员或工程师呢?
什么是软件工程师?
软件工程师是使用工程原理设计、创建、调试、测试、部署和维护软件应用程序系统和代码的计算机专家。
与团队合作,软件工程师为各个领域的客户问题创建有效的软件解决方案。
软件工程师 vs 软件开发人员
大多数人将软件工程师和软件开发人员互换使用。 实际上它们非常相似。
软件工程师从更广泛的角度分析和塑造(即:工程化)项目。除了软件开发任务外,他们还高度参与规划和指导。
软件工程师做什么?
简而言之,软件工程师的工作:作为软件工程师,你负责软件开发生命周期的所有部分。
定义问题和目标。实施代码。评估和测量部署的软件程序。更改系统和改进程序。提供持续的管理和支持。
15个你将做的事情示例:
- 识别客户需要通过新软件应用程序解决的问题
- 测试新的或现有的软件
- 纠正系统或应用程序的问题
- 从零开始构建新程序
- 管理软件工程项目——通常是同时管理多个项目
- 使用模型详细理解和呈现项目
- 创建项目的概览图
- 迭代新版本的代码
- 对团队产出进行质量控制
- 记录团队流程
- 研究信息和工具以帮助完成任务
- 与客户沟通
- 自己编写高效代码
- 指导年轻开发人员
- 为团队中任何需要帮助的人提供帮助
软件工程师的日常工作是什么样的?
如果你成为软件工程师,你的工作日可能是这样的:
你准备日程安排。无论你在办公室还是远程工作——你都需要安排好你和团队当天的任务。
你开始处理软件工程问题。你正在为客户的问题概述和建模软件解决方案——包括为团队提供如何实施此解决方案的指导。
你参加会议。作为软件工程师,你与协助你实现建模解决方案的程序员和测试人员一起工作。你需要经常召开会议来协调这项工作。
你修复正在处理的应用程序的问题。通过测试人员的反馈或你自己的评估,你不断面临新的挑战。你花费部分工作时间进行故障排除:修复无效代码、调试和解决安全问题。
你发布新软件。在密切关注其性能的同时,你将完成的应用程序发布到世界。
你维护实时产品。在为客户工作时,你持续测量已完成产品的性能。你提供技术支持,修复出现的任何问题,并持续更新软件。
成为软件工程师有多难?
从零开始学习软件工程、通过具有挑战性的面试过程以及管理工作中的多样化、智力要求高的任务是很困难的。
但如果你愿意付出努力,你将克服这些困难,享受作为软件工程师的充实职业生涯。
你将面临的三大挑战:
-
你需要有耐心和毅力来完成教育
一个有抱负的软件开发人员/工程师需要学习很多东西。基本上,如果你选择成为软件开发人员,你将永远是一名学生,你必须不断改进和保持教育。
当你学习第一门编程语言时,你可能会感到特别有挑战性。如果一切不能立即理解,你不能气馁。
有时你必须多次解决学习问题。在你成功将一项技能添加到你的技能库后,你也不能自满——还有很多技能需要掌握!
但如果你日复一日地坚持下去,你变得足够胜任开始申请第一份开发工作是必然的。
-
你需要努力提升沟通、团队合作和领导技能
与所有刻板印象相反——作为软件工程师,你不是一个孤独的地下室居民!
你在工作中承担责任 你与团队成员协调和委派 你与客户沟通
如果你到目前为止还没有磨练好沟通、演示和公开演讲能力,你有工作要做。这些对于被编码吸引的性格类型来说可能是一个挑战。
但让我告诉你,一旦你提高了这些技能,这是令人振奋的——这些是可学习的软技能,任何开发人员都可以掌握。你现在不仅可以设计解决客户问题的方案,还可以很好地沟通并领导团队成功实施。
你作为软件工程师的生活将轻松10倍,也更愉快。
-
你需要在工作中保持精神严谨
首先,任何项目所需的"系统思维"需要大量脑力。但是,这是你作为软件工程师与众不同的地方,所以你必须一次又一次地投入这种能量。
其次,你必须能够战胜挑战。无论你是自学(需要最大的意志力),还是获得学位(截止日期迫近),或是参加课程或训练营(长时间和同伴压力)——你在这里选择了一条艰难的道路。面试准备很难。
在工作中同时处理多个项目并解决一个又一个问题也很难。你必须拥有克服所有这些障碍的精神力量。但也许你是那种在挑战中茁壮成长的人?
你应该成为软件工程师吗?利弊分析
缺点
-
你将花费数百小时 relentlessly 学习
你需要几个月的时间来学习在这个职业工作所需的编程语言。并且需要几个月的时间来准备你的工作面试。 如果这对你来说太令人生畏,也许你不应该成为软件工程师。
-
你将投资数千美元用于教育
特别是如果你上大学,你将花费数万美元成为软件工程师。虽然你可以走完全自学的道路(我们稍后会讨论): 即使你选择不上大学,通过花一些钱,你将能够加快进度,在更短的时间内获得更深的教育。
-
你将工作相当多的时间
但是,这对于任何更高级别的工作来说都是正常的。除非你作为自由职业软件开发人员工作并且只接受有限数量的客户——你应该期望在你的软件工程师工作中全职工作。
-
你最终可能会支付"拥有一份好工作"的机会成本
这是如果你考虑成为高薪软件工程师与创办自己企业的长期前景。很容易永远留在那个舒适的工作中,而不是抓住机会在商业中赚更多钱。
优点
-
你将处于高需求状态
近年来对软件工程师的需求翻了一番,并且将继续增长。根据美国劳工统计局的数据,工作岗位数量到2030年将增长22%——这远高于平均水平。这意味着你在这个领域获得好工作的机会很大。
-
你将赚取丰厚的收入
软件工程师的薪水在每年36,000美元到265,000美元之间。美国的平均工资是120,000美元——对于受薪员工来说,这相当于每小时50多美元。根据客户的不同,自由职业软件开发人员每小时可以赚取100美元以上。这将使你跻身美国专业人士的上层。它将为你提供大多数人只能梦想的生活方式!
软件开发人员薪资 软件开发人员在2020年的中位薪资为110,140美元。
入门级薪资 美国入门级软件工程师的平均年薪为73,691美元。
首席软件工程师薪资 美国首席软件工程师的估计总年薪为150,667美元
-
你将做令人兴奋的工作并帮助很多人
如果你喜欢挑战并且喜欢成为高级问题解决者,你选择了完美的职业。更重要的是,你将帮助客户启动他们的项目。
在许多情况下,这意味着你正在改善数万用户的生活——要么通过他们使用你编写的软件直接改善,要么通过你的代码促进他们受益的产品或服务间接改善。
如何从零开始成为无经验的软件开发人员:15步路线图
1. 找到你的为什么并设定目标
首先是要有一个清晰而雄心勃勃的理由来实现你成为软件工程师或开发人员的目标。确保你的理由足够强大,能够让你坚持下去。
也许你讨厌目前作为销售员或会计师的工作,想成为开发人员。你想为一家酷炫的新科技公司工作,并获得软件工程师的高薪。
我看到很多人停止编程,因为他们觉得继续下去太难了,但如果你有一个强大的"为什么",在面对障碍时继续推进比简单地放弃更容易。
否则,你实际上不会去做。这很困难。从对任何事情一无所知到真正擅长它是很困难的。
这并不意味着你必须喜欢编码的每一分钟。
但你必须喜欢解决难题。
你也不能因为与他人合作和领导他人而感到厌烦。
如果你真的想要,并且愿意全身心投入这个职业——你将能够成为一名软件工程师。
2. 选择你的职业道路
软件工程师有不同的专业方向。作为专家,你更有可能被录用。并且你将能够要求更高的薪水,因为你的专业知识很罕见。
所以选择一个你想专攻的领域,并开始努力成为其中的佼佼者。
以下是一些软件工程师的职业道路专业:
- CRM工程师
- 软件集成工程师
- 质量保证工程师
- 游戏工程师
- 安全工程师
- NLP工程师
- 机器学习工程师
- 区块链工程师
3. 选择你的第一门语言
在我们能跑之前,我们必须学会走路。
你通过学习用单一编程语言编程来走路。你不是通过试图一次学习5000万件事并将自己分散得太开来学习走路的。
以下是成功开始学习第一门语言的4个步骤:
-
从对你最有用的语言开始
选择一门你认为可能围绕其建立职业生涯的单一编程语言。编程语言本身并不那么重要,因为你应该从长远考虑。我的意思是你不应该尝试从一门"简单"的编程语言开始。
只需学习你感兴趣并且可以看到自己在未来几年内编程的语言。你想选择一些具有持久价值的东西。
-
正确开始你的学习之旅
一旦你选择了要尝试学习的编程语言,尝试找到一些隔离该编程语言的书籍或教程。
我的意思是,你不想找到会一次教你太多的学习材料。你想找到只关注语言而不是完整技术栈的初学者材料。
期望在理解之前通读书籍或教程三遍。你不会在第一次尝试时就"理解编程"——没有人能做到。你需要反复接触才能开始最终理解并明白发生了什么。在此之前你会感到相当迷茫,这没关系,这是过程的一部分。
接受它并继续前进。
-
立即开始编码
当你阅读材料或完成你选择的教程时,确保你实际编写代码。如果可能的话做练习。尝试你学到的东西。尝试将东西组合起来并使用你学到的每一个概念。
是的,这很痛苦。是的,从头到尾阅读一本书更容易,但如果你真的想学习,你需要动手做。
当你编写代码时,确保你理解你编写的每一行代码的作用。对于你阅读的任何代码也是如此。如果你接触到代码,放慢速度并确保你理解它。对于你不理解的任何东西,去查找。
花时间这样做,你就不会一直感到迷茫和困惑。
-
开始构建你的第一个小项目
既然你对一门编程语言有了基本了解,是时候将这种理解付诸实践并找出你的差距了。最好的方法是尝试构建一些东西。
此时不要太雄心勃勃——但也不要太胆小。选择一个应用程序的想法,它足够简单,你可以通过一些努力完成,但不需要几个月才能完成。
尽量将其限制在编程语言范围内。不要尝试做全栈的事情(意思是,使用从用户界面到数据库的所有技术)——尽管你可能需要利用某种现有的框架或API。
对于你的第一个真实项目,你可能想考虑复制一些已经存在的简单东西。寻找一个简单的应用程序,比如待办事项列表应用程序,并直接尝试复制它。不要让你的设计技能阻碍学习编码。
成为软件工程师需要的语言
软件工程师使用的主要语言是Python、Java、JavaScript、TypeScript、C#、C++、Go、HTML、Ruby和Kotlin。它们的难度各不相同——如前所述,选择你所需工作需要的那个。例如,你可以通过查看职位发布来了解这一点。
你甚至可以打电话给招聘公司,询问他们你需要哪些技能才能被考虑担任该职位。
4. 理解编程基础和最佳实践
你需要学习如何编写易于理解和维护的干净代码。为了做到这一点,你需要大量阅读并看到许多好代码的示例。
用以下关于编码基础的书籍充实你的图书馆:
- Code Complete
- Clean Code
- Refactoring
- Working Effectively With Legacy Code
- Programming Pearls(做练习)
以及特定语言的结构书籍,如:
- JavaScript: The Good Parts
- Effective Java
- Effective C#
此时你真的想将学习重点放在编写好代码和使用现有系统的结构过程上。
你应该努力能够轻松地用你选择的编程语言实现算法,并以易于阅读和理解的方式完成。
5. 学习数据库技术
大多数软件开发人员需要了解一些数据库技术,因为大多数严肃的应用程序都有后端数据库。所以确保你不要忽视在这个领域的投资。
如果你学习SQL,你可能会看到最大的好处——即使你计划使用像MongoDB或Raven这样的NoSQL数据库,学习SQL将为你提供更好的工作基础。需要SQL知识的工作比NoSQL多得多。
不要太担心SQL的变体。不同的SQL技术足够相似,如果你了解一种SQL技术的基础知识,在它们之间切换应该没有问题。只需确保你学习关于表、查询和其他常见数据库操作的基础知识。
我建议为你选择的SQL技术找一本好书,并创建几个小样本项目,这样你就可以练习你正在学习的东西——总是练习你正在学习的东西。
当你可以做到以下时,你就对SQL有了很好的了解:
- 创建表
- 执行基本查询
- 连接表以获取数据
- 理解索引工作原理的基础知识
- 插入、更新和删除数据
此外,你将需要学习某种对象关系映射技术(ORM)。你学习哪一个取决于你正在使用的技术栈。
寻找适合你所学框架的ORM技术。可能有几个选项,所以你最好的选择是尝试选择最受欢迎的一个。
6. 决定你将成为开发人员的方式
选择以下5种成为软件工程师的方式之一:
- 获得大学学位
- 参加(面对面)编码训练营
- 获得证书
- 完成在线课程
- 完全自学
学位
这是你最耗时和最昂贵的选择。
你将深入学习数学和数据结构与算法等基础知识。从大学出来后,你比选择更DIY路径的人对基础计算机科学概念有更多了解。你将学习计算机架构、数据库和源代码控制。
但你可能没有像通过训练营的人那样多的实际编码技能(例如,训练营90%以上是动手实践)。
即使你走传统的大学路线,也要在空闲时间自己构建东西。应用那些理论学习是真正成长发生的地方。这是确保你为"现实世界"中的软件工程工作做好充分准备的方式。
成为软件开发人员需要什么学位
当你学习成为软件开发人员/工程师时,你可以获得副学士学位、学士和硕士学位,甚至博士学位。
开发人员最受欢迎的学习领域是计算机科学——一个更理论化的研究方向——和软件工程,它更实用,有更多时间实际编码。
课程
今天有数百门在线课程在几周或几个月的时间内教你软件工程的各个方面。如果你是一个可以独立学习但仍然需要易于消费的在线格式的指导和资源,课程是很好的选择。
缺少的是大学或训练营的社区方面。另一方面,在线课程通常更实惠且更容易成功完成。
证书
如果你不确定是否要承诺昂贵的多年制学位,你可以选择先获得软件工程证书。这些更便宜,你只需要六到十二个月就能完成一个。
编码训练营
全力以赴一到六个月,为你的第一份工作做好准备。这是编码训练营的承诺。
与其他志同道合的有抱负的软件开发人员一起,你沉浸在学习