我当软件工程师已经 5 年多了。我父亲在 20 世纪 90 年代成为一名软件工程师,虽然我小时候从未学过编程,但我从小看着他无休止地摆弄各种电脑和数字工具。这就是我在大学学习物理时选修 C++ 和 HTML/CSS 入门模块的原因。我非常喜欢它,毕业后,我转向软件工程,从此再也没有回头。
多年来,我帮助过一些朋友转行做软件工程。在本指南中,我想分享我给他们的建议——不仅仅是技术技能,还包括在这个领域取得成功的心态、资源和策略。
无论您是从零开始,还是从其他职业转型,或者只是好奇成为一名软件工程师需要什么,本指南都适合您。我将带您了解基本技能、学习路径和实用步骤,这些可以将您对技术的兴趣转化为令人满意的职业。在此过程中,我还将分享一些我的个人经历和教训,以帮助您更顺利、更轻松地踏上旅程!如果在本文结束时,您对这个行业很认真,请报名参加我们的Python 软件工程原理课程。
了解软件工程师的角色
让我们分析一下软件工程师的角色。
什么是软件工程?
软件工程是设计、开发、测试和维护软件系统以满足用户需求和解决实际问题的过程。
这是一门结合创造力、分析思维和技术专长的学科,旨在创建可靠、高效且可扩展的软件解决方案。软件工程的核心是编写代码,但它也涉及理解复杂系统并通过技术创造价值。
值得注意的是,虽然软件工程师、软件开发人员和程序员这些术语经常互换使用,但在实践中它们有细微的区别:
软件工程师:关注软件系统的全局。他们考虑架构、可扩展性和可维护性,通常在整个软件开发生命周期内工作,以确保最终产品满足技术和业务要求。
软件开发人员:专门编写代码来构建特定功能或应用程序。虽然他们也可能参与设计和测试,但他们的主要职责是将想法和规范转化为可运行的软件。
程序员:通常强调编码行为本身。他们擅长用特定编程语言编写高效代码,但可能并不总是参与更广泛的设计或系统级考虑。
每个角色在软件项目的实现中都发挥着一定的作用,并且根据公司或项目的不同,这些角色可能会重叠或有所不同。
软件工程师的主要职责
软件工程师负责设计、构建和维护软件系统,以解决问题并为用户带来价值。虽然该职位的具体内容可能因行业或公司而异,但有几点是共同的:
编码和开发
编写简洁、高效且可维护的代码是软件工程的核心。工程师通常使用多种编程语言,例如 Python、JavaScript、Java 和 C++,具体取决于项目需求。
Python:在数据科学、自动化和 Web 开发中很受欢迎。
JavaScript :创建动态和交互式 Web 应用程序所必需的。
Java:广泛用于Android应用程序开发和企业级后端系统。
C++ :通常用于性能关键型应用程序,如游戏、嵌入式系统和实时系统。
学习多种语言对于保持灵活性和适应不同挑战和行业非常重要,但如果你是一名初学者,请专注于其中一种。当我开始编码时,我犯了一个错误,试图同时学习 Python、Javascript 和 Java,结果却分身乏术!
系统分析
理解用户需求并将复杂问题分解为可管理的部分是一项非常重要的技能,也许是最难掌握的技能。这里的目标是分析软件系统如何与用户和其他系统交互,以确保它们满足性能和功能要求。
调试与维护
软件工程师必须解决问题、修复错误并更新软件以适应不断变化的需求或技术。
作为软件工程师你应该知道的事情
当然,作为一名软件工程师,你应该了解许多编程概念、语言和设计模式,但也有一些更广泛的概念可以帮助你找到第一份工作。
软件开发生命周期 (SDLC)
软件开发生命周期是一个结构 WhatsApp 号码数据 化的框架,用于指导软件系统的创建和维护。这有助于确保效率、一致性和质量。SDLC 的关键阶段如下:
规划
在此初始阶段,团队确定项目目标、收集需求并评估可行性。规划通过定义时间表、预算和项目范围奠定基础。
设计
工程师根据需求创建详细的软件架构和系统设计。此阶段通常涉及选择技术、定义数据流以及概述组件如何交互。
发展
实际编码在这里进行。工程师负责软件各个组件的设计、编写和测试。这通常是最耗时的阶段。
测试
严格的测试可确保软件功能齐全、安全无缺陷。使用单元测试、集成测试和用户验收测试等技术来验证系统是否满足其要求。
部署
测试完成后,软件将发布给用户。此阶段可能包括设置环境、配置服务器或通过应用商店或网站分发应用程序。
维护
部署后,软件需要持续更新和修复错误,以适应用户反馈和不断变化的需求。
理解并遵守 SDLC 可确保项目按时交付并满足质量标准。它还可以帮助工程师更有效地进行团队合作、管理风险并适应开发过程中的变化。
SDLC 框架可以使用不同的方法来实现,每种方法都针对特定的项目需求量身定制。您可能已经听说过敏捷方法和瀑布方法,或者前者的子集,如Scrum或Kanban。我们不会在本指南中深入介绍它们,但如果有时间,我建议您阅读一些相关内容。它们将教您了解在工程团队中可能遇到的不同工作方式,并让您在加入公司时立即开始工作,而不会被流程所困扰。
版本控制
版本控制是软件开发中必不可少的工具,它使团 执行合伙人和配额持有人:了解差异 队能够有效协作并管理代码库的变更。它确保多个开发人员可以同时处理同一个项目,而不会覆盖彼此的工作。
当今使用最广泛的版本控制系统是Git。要掌握它可能需要一些时间,所以我真的建议你尽快开始使用它。我认识的大多数工程经理在雇用初级工程师之前都会查看他们的版本控制技能,因为经常被误删除或覆盖的工作会严重拖慢团队的速度!
如果您是 Git 新手,我推荐您参加GitHub Foundations 认证。这是一门适合初学者的课程,您将在其中学习 Git 和 GitHub 基础知识,并向潜在雇主保证您可以从一开始就与您的团队合作。
解决问题和分析能力
解决问题和分析思维是软件工程中最重要的技能。想象一下调试棘手的问题、优化代码以提高性能或设计复杂的系统。其理念是系统地处理每个 印度号码 问题:定义问题、集思广益、评估权衡利弊并进行彻底测试。
如果这对你来说不是自然而然的事情,不要惊慌。有很多方法可以练习,就像生活中的大多数事情一样,你做得越多就会变得越容易。
编程挑战是培养解决问题思维的最佳方式之一。练习这些技能的最佳平台是CodeWars、HackerRank和LeetCode。它们提供从初级到高级的各种问题,并涵盖算法和数据结构等关键主题。另外,你会在面试中遇到同样的编程挑战。因此,通过练习你的分析技能,你也将练习那些能让你通过面试的编程挑战!
成为软件工程师的教育途径
成为一名软件工程师的方法有很多,而最适合您的方法取决于您的独特情况和多种因素,例如您的自我激励和坚持的能力、您愿意花在学习上的时间以及您可用的金钱数额。
传统路径:计算机科学学位
最佳情况:您想要打下学术基础并且拥有时间和资源。
计算机科学学位一直被认为是软件工程的经典切入点。
学位提供以下方面的结构化教育:
编程基础:Python、Java 或 C++ 等语言课程。
数据结构和算法:有效解决计算问题的核心概念。
系统知识:操作系统、网络和数据库模块。
软件工程原理:模拟现实世界开发的团队项目。
一些公司仍然要求员工拥有正式的计算机科学学位。在大多数国家,如美国或英国,文化已经发生了变化,你无需学位就可以成为软件工程师。
优点 缺点
深入了解计算机科学基础知识 耗时(3-4年)
轻松打开实习和入门级职位的大门 价格昂贵,取决于地点和机构
简明路径:训练营
最佳情况:您希望在结构化的指导下快速进入该行业。
训练营通常持续 3 至 6 个月,全日制。
根据训练营的重点,您可能会学习移动或 Web 开发,但课程始终会包括编码、调试和部署应用程序等主题。
其中大多数都适合初学者,价格差异很大。我刚从大学毕业就参加了英国的一个训练营,很幸运地获得了全额奖学金,所以一定要检查一下你是否有资格获得这种资助。
训练营通常提供职业服务,例如展示技一名软件工程师能的投资组合建设项目、模拟面试和简历审查,以及与招聘合作伙伴建立联系的机会。这意味着您很有可能很快找到第一份工作。一些训练营甚至提供保证,确保您在毕业后 3 个月内找到工作。
优点 缺点
快速通道 成本高
实践学习 深度有限
自主学习之路:在线课程和认证
最佳情况:您是一位重视灵活性和成本效益的独立学习者。
自学是软件工程领域最灵活、最实惠的学习方式。你可以按照自己的节奏学习,因此可以在短时间内完成所有学习,或者在保持现有工作的同时学习,或者兼顾其他职责。
DataCamp 提供许多很棒的课程,费用仅为训练营或大学学位的一小部分。例如,我们的Python 软件工程原理课程涵盖了使用 Python 的基础知识,而且价格非常实惠。我们的案例研究:用 Python 构建软件也非常有帮助。
如果你决定自学,并且认识一名软件工程师,我强烈建议你请他们指导你。他们可以为你提供一般指导、职业建议,并提供代码反馈等。
自学的最大问题是,你没有训练营或学位所带来的信誉,而且你可能更难找到第一份工作。这时,建立人脉网和用自己的项目或开源贡献建立你的投资组合才能真正发挥作用。
优点 缺点
经济高效 找工作可能很困难
非常灵活 没有个性化的结构或指导一名软件工程师
获得实践经验
无论您选择哪条道路成为一名软件工程师,您都需要有一点实践经验来展示您的技能,建立信心,并了解您知道理论概念如何应用于现实世界的问题。
投资组合项目
建立作品集是展示你作为软件工程师的技能的最有效方法之一。一份出色的作品集不仅能展示你的技术能力,还能凸显你解决问题的思维方式和创造力。雇主和客户通常更看重看到你能创造的真正例子,而不是仅仅阅读简历,尤其是在申请你的第一份软件工程工作时。
例如,你可以构建:
Web 应用程序:构建功能性 Web 应用程序,例如待办事项列表管理器、电子商务网站或社交媒体仪表板。这可以展示您的前端和后端开发技能。
数据可视化工具:创建交互式仪表板或复杂数据的可视化表示。如果您对数据科学或分析感兴趣,这将特别有价值。
自动化脚本:开发解决日常问题的脚本,例如抓取网络数据、自动执行重复任务或设置自定义通知。
正确记录项目与构建项目同样重要。尽量包括:
问题陈述:明确定义您的项目要解决的问题和您想要实现的目标。
代码示例:在 GitHub 等平台上分享您的代码,并附上解释关键部分的评论。使用README文件概述您的项目及其功能。
结果:突出结果,例如项目如何提高效率、解决特定问题或提供其他见解。
专业提示:从小处着手,但要瞄准能反映您个人和职业兴趣的项目。例如,如果您对移动应用开发感兴趣,请尝试使用 React Native 或 Swift 构建一个基本应用。
实习和自由职业
实习和自由职业都是获得实践经验、建立专业网络和提高就业能力的绝佳切入点。您将有机会参与实际项目并培养与行业相关的技能。
实习是有组织的,通常是短期职位,可以让你了解软件开发在组织内的运作方式。你将有机会在现实生活中学习很多东西,专业人士会帮助你做到这一点。你将扩大你的人脉,甚至可能从中获得工作机会!如果无薪实习提供了大量的学习机会并符合你的职业目标,我通常建议你接受。但是,一定要优先考虑那些尊重你的时间和精力的职位。
如果您已经感到自在,您可以以自由职业者的身份为客户承担独立项目。对于那些想要探索不同行业或远程工作的人来说,这是理想的选择。常见的自由职业平台包括 Upwork、Fiverr 和 Topta,但不要忽视人际网络和直接联系初创公司或小型企业的力量。我现在全职担任自由顾问,几乎所有客户都是通过口口相传找到的!
认证和持续学习
在软件工程领域,快速学习和适应的能力往往比你目前拥有的特定技能更有价值。由于科技行业瞬息万变,持续学习对于保持竞争力和相关性至关重要。
我建议订阅技术新闻通讯、博客、substack、reddits 和 stack overflow 群组。您将了解最新技术、安全实践或工程软技能。您还将看到人们在那里分享的精彩项目!
认证也很有用,因为它们可以帮助展一名软件工程师示你在特定工具、语言或方法方面的专业知识。有很多针对不同专业领域的认证,例如:
AWS 认证开发人员 – 助理:此认证非常适合对云计算感兴趣的人,它证明了对核心 AWS 服务、架构和部署的了解。
认证 Scrum Master (CSM) :对于希望进入项目管理或敏捷环境的工程师,此认证可验证您对 Scrum 原则和实践的理解。
SQL 助理认证:证明您能够使用 SQL 从数据库中提取适当的数据,并使用它来回答常见的数据问题。
它们对于您找到第一份工作来说并不是必需的,但之后可能会有用!
培养软技能
软技能与技术专长相得益彰,让你成为一名全面发展的工程师。请记住,编程可能会让你走进大门,但软技能会让你留在房间里,并帮助你爬得更高。
软件工程师的一些关键软技能包括:
团队合作:与他人和谐合作以实现共同目标的能力。例如,敏捷方法需要密切合作。
适应性:技术领域发展迅速;乐于接受变化并学习新工具或方法是一项重要资产。
时间管理:平衡多项任务、按时完成任务、确定工作优先顺序。
同理心:了解用户和团队成员的观一名软件工程师点可以带来更好的设计、解决方案和关系。
软件工程师被锁在黑暗的房间里喝着罐装能量饮料的刻板印象只是一种刻板印象。拥有出色软技能的优秀工程师始终比那些无法或不想与团队其他成员互动的优秀开发人员做得更好!
申请软件工程职位
获得第一份软件工程工作可能会让人感到有点害怕,但只要做好正确的准备并制定策略,你就能脱颖而出。
准备一份好的简历
突出技术技能、项目组合、认证和任何相关经验。包括一份简明的技术摘要,展示您的专业知识。
关注成就而不是责任。例如,不要写“开发了一个 Web 应用程序”,而要写“开发了一个 Web 应用程序,将用户保留率提高了 15%” 。
过去几年,我很少看到这个行业的求职信。如果你必须写求职信,请在招聘启事中说明具体资格,并说明你的技能如何与公司的目标相符。利用这个机会展示对这份工作的热情和热情。