如何成为卓越的软件工程师(无需学位)
作者:John Sonmez
如果你正在考虑成为一名软件工程师(或开发人员——两者非常相似,下文会讨论),本指南将为你提供全面指导。你将获得实现这一目标的完整分步路径。享受你的15步软件工程师路线图吧!
这是你吗?
- 你喜欢解决难题……
作为软件工程师,你将运用智慧和创造力处理复杂问题,通过为雇主或客户解决问题提供巨大价值。 - 你享受沉浸式学习……
要成为软件工程师,你需要学习许多复杂技能,而且学习永无止境。如果你热衷于扩展知识并提升技能,这可能是完美的职业道路。 - 你想与他人合作实现宏伟目标……
独自在地下室编码的开发人员只是神话。大多数时候,你需要领导他人或与他们协作解决方案,还会积极参与会议并展示你的工作。 - 你希望通过这些获得比同龄人更高的收入……
那么,为什么不成为软件开发人员或工程师呢?
什么是软件工程师?
软件工程师是运用工程原理设计、创建、调试、测试、部署和维护软件应用程序系统及代码的计算机专家。与团队合作,软件工程师为各领域客户的问题创建有效的软件解决方案。
软件工程师 vs. 软件开发人员
大多数人将软件工程师和软件开发人员互换使用。实际上它们非常相似。软件工程师从更广泛的角度分析和塑造(即工程化)项目,除了软件开发任务外,还高度参与规划和指导。
软件工程师做什么?
简而言之:作为软件工程师,你负责软件开发生命周期的所有部分。包括定义问题和目标、实现代码、评估和测量部署的软件程序、更改系统和改进程序、提供持续管理和支持。
15个具体任务示例:
- 识别客户需通过新软件应用程序解决的问题
- 测试新软件或现有软件
- 纠正系统或应用程序的问题
- 从零开始构建新程序
- 管理软件工程项目——通常同时管理多个
- 使用模型详细理解和展示项目
- 创建项目概览图
- 迭代新版本的代码
- 对团队输出进行质量控制
- 记录团队流程
- 研究信息和工具以帮助完成任务
- 与客户沟通
- 自己编写高效代码
- 指导年轻开发人员
- 为需要帮助的团队成员提供支持
软件工程师的日常工作是什么样的?
如果你成为软件工程师,工作日可能如下:
- 准备日程:无论是在办公室还是远程工作,你都需要规划自己和团队当天的任务。
- 开始解决软件工程问题:概述和建模客户问题的软件解决方案,并为团队提供实施指导。
- 参加会议:作为软件工程师,你与程序员和测试人员合作实现你建模的解决方案,需要频繁召开会议协调工作。
- 修复应用程序问题:通过测试反馈或自我评估,不断面对新挑战,部分时间用于故障排除:修复无效代码、调试和解决安全问题。
- 发布新软件:在密切监控性能的同时,向世界发布完成的应用程序。
- 维护现役产品:为客户持续测量产品性能,提供技术支持,修复出现的问题,并持续更新软件。
成为软件工程师有多难?
从零学习软件工程、通过挑战性面试过程以及管理工作中的多样化和智力要求高的任务都很困难。但如果你愿意付出努力,就能克服这些困难,享受充实的软件工程师职业生涯。
你将面临的三大挑战
-
需要有耐心和毅力完成教育
aspiring 软件开发者/工程师需要学习很多。基本上,如果你选择成为软件开发者,你将永远是学生,必须不断改进和保持教育。学习第一门编程语言时可能感到特别挑战,如果一切不能立即理解,不要气馁。有时你需要多次解决学习问题,成功掌握一项技能后也不能自满——还有更多技能要获取!但如果你坚持每天学习,必然能胜任第一份开发工作。 -
努力提升沟通、团队合作和领导技能
与所有刻板印象相反——作为软件工程师,你不是孤独的地下室居民!你在工作中承担责任、与团队成员协调和委托、与客户沟通。如果你至今未磨练沟通、演示和公开演讲能力,这将是一项挑战,尤其是对吸引编码的性格类型。但让我告诉你,一旦你提高这些技能(它们是可学习的软技能),就会感到振奋。现在你不仅能工程化解决客户问题,还能良好沟通并领导团队成功实施。软件工程师的生活将轻松愉快10倍。 -
工作需要 mental rigor
首先,任何项目所需的“系统思维”需要大量脑力,但这是你作为软件工程师的独特之处,因此必须反复投入能量。其次,你必须能够应对挑战。无论你是自学(需要最大意志力)、获得学位(截止日期紧迫)、参加课程或训练营(长时间和同伴压力)——你选择了一条艰难道路。面试准备很难,工作中 juggling 多个项目和解决问题也很难。你必须拥有 mental strength 克服所有障碍。但也许你是那种在挑战中茁壮成长的人?
你应该成为软件工程师吗?利弊分析
缺点
- 你将花费数百小时 relentlessly 学习
需要数月学习职业所需编程语言,并花费数月准备求职面试。如果这听起来太 daunting,也许你不应该成为软件工程师。 - 你将投资数千美元于教育
尤其是上大学,你将花费数万美元成为软件工程师。虽然你可以完全自学(下文讨论):即使不上大学,花一些钱也能加速进程,在更短时间内获得更深教育。 - 你将工作相当长时间
但这对于任何高级工作都是正常的。除非你作为自由职业软件开发人员只接受有限客户——你应该期望在软件工程师工作中全职工作。 - 你可能最终支付“拥有好工作”的机会成本
这是考虑成为高薪软件工程师与创业的长期前景。很容易永远留在舒适工作中,而不是冒险在商业中赚更多钱。
优点
- 你将处于高需求
软件工程师的需求近年来翻倍,并将持续增长。根据美国劳工统计局,工作岗位数量到2030年将增长22%——远高于平均水平。这意味着你在这个领域有极好机会获得好工作。 - 你将赚取高薪
软件工程师的薪水在每年36k至265k美元之间,美国平均为120k美元——相当于受薪员工每小时50多美元。自由职业软件开发人员根据客户可能赚取100+美元/小时。这将使你跻身美国专业人士的上层, afford 你大多数人只能梦想的生活方式!- 软件开发人员薪资:2020年中位数为110,140美元
- 入门级薪资:美国入门级软件工程师平均年薪73,691美元
- 首席软件工程师薪资:美国估计总年薪150,667美元
- 你将做激动人心的工作并帮助很多人
如果你喜欢挑战并热爱成为高级问题解决者,你选择了完美职业。更重要的是,你将帮助客户启动项目。在许多情况下,这意味着你改善了数万用户的生活——要么直接通过他们使用你编写的软件,要么间接通过你的代码促进他们受益的产品或服务。
如何从零开始无经验成为软件开发人员:15步路线图
1. 找到你的“为什么”并设定目标
首先,要有清晰而雄心勃勃的理由成为软件工程师或开发人员。确保你的理由足够强大以保持前进。也许你讨厌当前销售或会计工作,想成为开发人员。你想为酷炫的新科技公司工作并获得软件工程师的高薪。我看到许多人停止编程,因为他们觉得太难继续,但如果有强大的“为什么”,在面对障碍时更容易坚持而不是放弃。否则,你实际上不会去做。这很难——从一无所知到真正擅长。这并不意味着你必须热爱编码的每一分钟,但你必须热爱处理和解决难题。你也不能因与和领导他人工作而退缩。如果你真的想要,并愿意全力投入这个职业——你就能成为软件工程师。
2. 选择你的职业路径
软件工程师有不同专业。作为专家,你更可能被雇佣,并能要求更高薪水,因为你的专业知识稀有。所以选择一个你想专精的领域,并开始努力成为优秀专家。
一些软件工程师职业路径专业:
- CRM工程师
- 软件集成工程师
- 质量保证工程师
- 游戏工程师
- 安全工程师
- NLP工程师
- 机器学习工程师
- 区块链工程师
3. 选择你的第一门语言
在跑之前,我们必须学会走。你通过学习单一编程语言来走。不要试图一次学习五千万件事并 spread yourself too thin。
成功开始学习第一门语言的4个步骤:
- 从对你最有用的语言开始
选择单一编程语言,你认为可能围绕它构建职业生涯。编程语言本身不太重要,因为你应该考虑长期。我的意思是你不应该尝试从“简单”编程语言开始。只学习你感兴趣并可以看到自己未来几年编程的语言。你想选择具有持久价值的东西。 - 正确开始学习旅程
一旦选择了要尝试学习的编程语言,尝试找到一些隔离该编程语言的书籍或教程。我的意思是,你不希望找到一次教太多内容的学习材料。你想要专注于仅语言的初学者材料,而不是完整技术栈。期望在点击之前通读书籍或教程三遍。你第一次不会“得到”编程——没有人曾经做到。你需要重复暴露才能开始最终理解。在那之前,你会感到相当迷失,这没关系,是过程的一部分。接受它并前进。 - 立即开始编码
在阅读材料或完成所选教程时,确保实际编写代码。如果可能,做练习。尝试所学内容。尝试将东西组合起来,使用你学到的每个概念。是的,这很痛苦。是的,从头到尾阅读书籍更容易,但如果你真的想学习,你需要做。编写代码时,确保理解你编写的每一行代码的作用。阅读的任何代码也是如此。如果接触到代码,放慢速度确保理解。不理解的内容,查找。花时间这样做,你不会总是感到迷失和困惑。 - 开始构建你的第一个小项目
现在你对单一编程语言有基本理解,是时候将理解付诸实践并找出差距。最好方法是尝试构建一些东西。此时不要过于雄心勃勃——但也不要太 timid。选择一个应用程序想法,简单 enough 你可以通过一些努力完成,但不需要数月完成。尽量将其限制在仅编程语言。不要尝试做全栈(意思是使用从用户界面到数据库的所有技术)——尽管你可能需要利用某种现有框架或API。对于第一个真实项目,你可能想考虑复制已存在的简单东西。寻找简单应用程序,如待办事项列表应用程序,并直接尝试复制它。不要让设计技能阻碍学习编码。
成为软件工程师所需的语言
软件工程师使用的主要语言是Python、Java、JavaScript、TypeScript、C#、C++、Go、HTML、Ruby和Kotlin。它们难度各异——如前所述,选择你所需工作所需的语言。例如,你可以通过查看招聘信息发现这一点。你甚至可以致电广告职位的公司,询问他们 exactly 哪些技能需要被考虑担任该角色。
4. 理解编程基础和最佳实践
你需要学习编写易于理解和维护的干净代码。为此,你需要大量阅读并查看许多好代码示例。
用以下关于编码基础的书籍充实你的图书馆:
- 《代码大全》
- 《干净代码》
- 《重构》
- 《有效处理遗留代码》
- 《编程珠玑》(做练习)
以及语言特定的结构书籍,如:
- 《JavaScript语言精粹》
- 《Effective Java》
- 《Effective C#》
此时,你真正想专注于学习编写好代码和处理现有系统的结构过程。你应该 strive 能够轻松在你选择的编程语言中实现算法,并以易于阅读和理解的方式完成。
5. 学习数据库技术
大多数软件开发人员需要了解一些数据库技术,因为大多数严肃应用程序都有后端数据库。所以确保不要忽视投资这个领域。如果你学习SQL,可能会看到最大 benefit——即使你计划使用NoSQL数据库如MongoDB或Raven,学习SQL将给你更好的工作基础。需要SQL知识的工作远多于NoSQL。不要担心SQL的风味。不同的SQL技术足够相似,如果你知道一种SQL技术的基础,在它们之间切换应该没有问题。只需确保学习关于表、查询和其他常见数据库操作的基础知识。我推荐获取关于你选择SQL技术的好书,并创建一些小型示例项目,这样你可以练习所学——总是练习所学。
当你可以时,拥有良好的SQL知识:
- 创建表
- 执行基本查询
- 连接表以获取数据
- 理解索引工作原理的基础
- 插入、更新和删除数据
此外,你将想学习某种对象关系映射技术(ORM)。学习哪一种取决于你正在使用的技术栈。寻找适合你所学框架的ORM技术。可能有几个选项,所以你最好选择最流行的那个。
6. 决定你将成为开发人员的方式
选择以下5种成为软件工程师的方式之一:
- 获得大学学位
- 参加(面对面)编码训练营
- 获得证书
- 完成在线课程
- 完全自学
学位
这是你最漫长和最昂贵的选择。你将深入学习数学和基础如数据结构和算法。大学毕业时,你比选择更DIY路径的人有更多关于基本计算机科学概念的知识。你将学习计算机架构、数据库和源代码控制。但你可能没有像通过训练营的人那样多的实践编码技能(例如,训练营90%以上是动手实践)。即使走传统大学路线,在空闲时间继续自己构建东西。应用那些理论学习是真正增长发生的地方。这是确保你为“现实世界”软件工程工作做好充分准备的方式。
成为软件开发人员需要什么学位
当你学习成为软件开发人员/工程师时,你可以做副学士学位、学士和硕士,甚至博士学位。开发人员最受欢迎的学习领域是计算机科学——更理论化的研究方向——和软件工程,这更实用,有更多时间实际编码。
课程
今天有数百门在线课程在几周或几个月内教你软件工程的各个方面。如果你是可以单独学习但仍想要易于消费的在线格式的指导和资源,课程很棒。缺少的是大学或训练营的社区方面。另一方面,在线课程通常更负担得起且更容易成功完成。
证书
如果你不确定是否要承诺昂贵的多年学位,你可以选择先获得软件工程证书。这些更便宜,只需要六到十二个月完成。
编码训练营
全力投入一到六个月,准备好你的第一份工作。这是编码训练营的承诺。与其他志同道合的 aspiring 软件开发者一起,你沉浸式学习和编码——每天8-12小时。因为它们如此专注于让你立即执行所学一切,你可以期望在仅几个月训练营后成为 competent 编码员。
自学
没有学位真的能成为软件开发人员吗?
绝对可能成为软件开发人员或工程师而没有学位。你可以 argue 跳过大学使你处于优势:节省的时间和金钱可以投入自主项目、实践密集型课程和面试准备。一些雇主确实要求你有学位,而其他只关注你能展示的技能。再次,作为自学开发者,你在实践应用方面通常领先——尽管你可能不那么精通计算机科学概念、数学问题、数据结构和算法。
7. 通过实习获得经验
我推荐一旦实习机会 available 给你,就开始准备和申请那些,这样你可以准备好并获得入门机会。因为最困难的事情之一是即使你有知识,即使你理解如何编程和编程语言以及如何使用工具和技术:没有人会给你机会。没有经验很难获得入门机会,实习是好方法。
8. 保持信息灵通
永不停止学习。永不停止阅读。总是通读一本书。总是改进自己。你的学习旅程永无止境。你不可能知道一切。如果你在职业生涯中不断学习,你将不断超越同龄人。
你可以通过以下顶级方式保持关于软件工程专业趋势和发展的信息灵通:
- 活动和会议
- 新闻
- 播客
- 书籍
9. 锻炼所有软件工程师技能
确保你改进成为伟大软件工程师所需的所有硬技能和软技能。
这些是你需要的最重要 ones: 软件工程师技能
- 批判性思维和注重细节
- 沟通技能
- 合作心态
- 时间管理
- 多任务处理
- 故障排除
- 测试
- 设计和开发数据库
- JavaScript
- C#
- C++
- HTML
- Python
- OOP
- SQL
- .NET
首席开发人员技能
- 负责任
- 有动力
- 高技术性
- 谦逊
- 有信念
- 良好沟通技能
- 值得信赖
10. 构建你的作品集
在成为软件工程师的路上开始构建你的作品集,以增加你对市场的价值。如果你能展示你已经将所学技能应用于现实世界,它将使你对你未来的雇主或自由职业客户更具吸引力。
做编码项目
从小项目开始,随着技能增长逐步挑战更难项目。同时,记录你所做的一切,这样你可以展示它,并用它建立你作为开发者的权威和个人品牌。
创建你的开发者网站
开始自己的开发者博客门槛低且极其有效。如果你定期和一致地博客,几乎保证有人在互联网上搜索你的名字时会找到你的博客。将博客视为你的广告,日夜工作,而你只需要偶尔喂它。除了博客提供的外部机会,它还提供一些伟大的个人发展机会。我认为没有比写作更好的提高沟通技能的方法。写作教你以他人能理解的方式清晰组织思想。你写得越多,总体上你会成为更好的沟通者。博客还帮助你跟踪自己的职业和进展,并提供一些历史文档和参考材料,你可以回顾以查看过去如何解决特定问题。每个软件开发人员都应该有自己的博客:它就像绝地武士的光剑。
学习营销自己
我认为这如此重要,以至于我围绕这个想法构建了整个课程。学习如何作为开发者营销自己,并在整个职业生涯中持续这样做。找出如何为自己创建个人品牌,并在行业中建立声誉,你将永远不会缺少工作。如果你学会营销自己,你将决定自己的未来。这需要一些工作,但非常值得。
11. 创建你的简历
当谈到它时,简历更多的是关于广告而不是其他任何东西。你可以将简历视为一页关于你的广告。事实上,如果你想拥有好的——不,伟大的——简历,你必须这样想。简单的事实是,对于你申请的大多数工作,任何人 ever 看到的只是对你的简历快速15秒 glance。在那15秒中,你生活的进程 literally 可以被决定。面试或拒绝。喜欢与否,好的程序员简历很重要。最终,你想非常清晰地描绘你的技能和专业知识是什么,你过去如何使用它们取得伟大成果,以及这些技能如何转移到你申请的未来职位。
12. 申请你的第一份软件工程工作
你将面临另一个 hurdle——那就是实际获得工作。这可能甚至是我今天提到的所有事情中最困难的。即使你遵循我谈论的一切并且真正是伟大的程序员,没有人会给你机会,除非你正确定位自己。
13. 掌握面试技能
无论