什么是软件工程师?
软件工程师负责复杂的工作,使我们能够享受高效的软件解决方案。他们创建我们在工作或个人生活中使用的数字工具背后的系统。
这需要强大的逻辑思维和解决问题的能力,以及深厚的计算机科学和编程知识。这是一个具有挑战性但令人兴奋的职业,而且——正如我们稍后将讨论的那样——也是一个高利润的职业。
如果你对技术有亲和力,拥有分析思维,并喜欢为人们具有挑战性的问题创建巧妙的解决方案,软件工程师可能是一个充实的职业选择。
什么是软件工程?
软件工程是计算机科学的一个学科,专门致力于计算机程序的架构、开发、测试、部署和维护。它被称为软件工程,因为工程概念与计算机编码一起被用来创建满足用户需求的软件。
软件工程师做什么?
软件工程师在工作中需要执行多种任务。他们不仅设计软件——还创建其代码、测试和调试它,并部署(发布)软件。最终,他们需要持续监控和更新"已完成"的产品。
任务与职责
- 软件架构/设计:软件工程师创建软件的架构——其不同部分如何协同工作以创建最终产品的蓝图。他们还设计软件的每个独立部分。
- 软件开发:利用深厚的计算机编程知识,软件工程师还创建构成软件程序的代码。
- 软件解决方案分析:他们擅长使用高层次的工程师视角分析自己或他人创建的软件。
- 代码测试:工程师以不留下任何机会而闻名,软件领域也是如此。在每一步都编写和执行测试,以确保每个软件功能按预期工作。
- 软件调试:一旦在代码中发现错误,工程师将尝试通过解决其根本原因来"修复错误",以避免在以后引起其他问题。
- 软件优化:很多时候,软件运行速度不如它可能达到的那样快,或者通常以低效的方式设计,代码库臃肿。软件工程师的任务是检测这些低效率并清理它们,优化软件的性能、可扩展性和可维护性。
- 监控软件性能:他们有责任确保软件在现实条件下以最佳状态运行。必须在正常和系统压力情况下测量和跟踪性能。
- 与团队成员和客户咨询:与刻板印象相反,软件工程不是孤立的事情。为了在公司中最高效地工作,并符合客户要求,协作和沟通是工作的关键部分。
- 维护和更新软件:成功部署新的软件产品后,工程师的工作并未完成。大多数软件必须不断适应新的需求,无论是附加功能、兼容性更改还是新出现的安全威胁。
软件工程师在哪里工作?
- 科技公司:软件工程师在像FAANG(Facebook、Amazon、Apple、Netflix、Google)这样的大公司工作,也在中型和小型科技公司工作。这些工作伴随着高水平的责任、具有挑战性且通常是尖端的工作任务。
- 传统公司:如今,即使是农业或建筑等传统领域的公司也已经将其部分业务数字化。他们使用软件工程师来创建处理其企业内部各种任务的软件。
- 国家机构:像IRS、DoD或NASA这样的机构寻求软件工程师为其需求构建最安全的软件。
- 初创公司:科技初创公司雇用软件工程师来开发他们想要推向市场的新软件。这些职位让你有机会在快节奏、创造性的环境中工作,致力于可能改变行业或世界的解决方案。
- 教育:需要工程师为研究机构或大学开发程序。他们也可以成为软件工程或计算机科学的教师或教授。
受薪就业与自由职业
为 paycheck 和福利工作并不是软件工程师的唯一方式。作为软件工程自由职业者也可以拥有有利可图的职业。无论哪种方式,工作的性质意味着它非常适合远程工作和设定自己的工作时间。
软件工程师创建的软件类型
- 桌面软件:这些是在代码上运行并通过图形界面与用户交互的PC程序。这可以是任何东西,从计算器应用程序到音乐播放器。
- Web应用程序:软件工程师还创建可以通过Web浏览器访问的在线应用程序。在线商店、电子银行或几乎任何软件即服务(SaaS)应用程序都属于此类。
- 移动应用程序:平板电脑和移动电话的应用程序也必须由专业工程师设计,因此软件工程师被要求开发导航应用程序、个人发展应用程序、移动游戏等。
- 嵌入式系统:嵌入式系统是基于微控制器的系统,如警报器、家用机器或数码相机。
- 操作系统:系统开发人员或工程师致力于现代个人计算的基础:操作系统。
- 管理软件:对于较大的公司,软件工程师正在创建用于管理客户数据、人力资源或公司资产等的软件系统。
为什么选择软件工程师?
薪资
软件工程师工作的最大好处之一是它可以为你带来的令人印象深刻的薪水。根据Dice科技薪资报告,美国软件工程师的平均薪资为111,000美元。
软件工程师的确切薪资取决于不同的因素:
- 公司的地点和规模
- 专业领域/特殊技能
- 经验
例如,作为一名经验不足一年的QA工程师,在田纳西州的一家公司工作,你可能每年只赚约50,000美元。
另一方面,作为一名拥有5-10年经验的云工程师,在加利福尼亚州工作,你的年薪可能在130,000美元到150,000美元之间。
工作满意度
根据conisar.org的数据,软件工程师对他们工作的满意度平均为3.69 / 5。
Stack Overflow发现,他们最喜欢的工作方面是"薪资(60%)、工作与生活平衡(58%)、灵活性(52%)、生产力(52%)和成长机会(49%)"。
70%的软件工程师对他们的工作总体感到满意。这比美国平均工作满意度高出5%。
远程工作能力
远程工作使软件工程师更有效率。而且由于他们所有的任务都可以通过互联网完成,这是实现远程工作的完美职业。如今,大约80%的软件开发人员和工程师正在远程工作或在混合环境中工作。
工作前景
根据劳工统计局(BLS)的数据,软件开发工作岗位在十年内将增长25%——相比之下,所有行业的平均增长率仅为5%。随着区块链、网络安全和机器学习等新兴领域为软件工程师提供新的机会,与其他领域相比,就业前景继续看好。
职业路径
今天,软件工程师有相当多的职业选择:
- QA/测试工程师
- 数据工程师
- 云工程师
- 全栈工程师
- 机器学习/人工智能工程师
- 游戏工程师
- 嵌入式系统工程师
- iOS/Android工程师
- 安全工程师
- 技术项目经理
软件工程师 vs 软件开发者
软件开发者的职位描述与软件工程师非常接近。两者都使用编程语言来创建软件项目所需的代码。
但他们的不同之处在于,软件工程师还承担设计软件架构的更大规模任务——这是所需工程技能发挥作用的地方。
如何成为软件工程师
成为软件工程师有不同的途径——获得学位、参加课程或完全自学。无论你选择哪条路径:要在竞争激烈的软件工程就业市场中拥有机会,结果需要是你已经掌握了某些硬技能(包括一种或多种编程语言)和软技能。
基本软件工程师技能
要成为一名优秀的软件工程师,需要将许多技能发展到高水平。一方面是技术或"硬"技能,另一方面是更无形的、(人际间的)个人"软"技能。两者对于软件工程的成功职业都至关重要。
硬技能
- 算法
- 面向对象编程
- 软件开发方法论
- 软件架构
- 数据库知识
- 对平台、编程语言和框架的掌握
- 清洁代码原则
- 设计模式
- 测试
- 调试
软技能
- 批判性思维和解决问题的能力
- 情商和同理心
- 沟通和自信
- 团队合作
- 谈判技巧
- 创造力
- 生产力和时间管理
编程语言
软件工程师使用各种编程语言来完成他们的项目。最受欢迎的包括:
- Python
- JavaScript
- C++
- C
- Java
- PHP
- SQL
- Rust
- Go
课程
有许多高质量的在线课程供软件工程师学习行业工具并提升他们的技能。
一些最受欢迎的平台包括Codecademy和Udemy。
**Udemy的《从A到Z的软件开发》**是初学者从头开始学习编码软件的完美课程。
Codecademy的全栈工程师职业路径是一个为期6个月的前端和后端开发深度探索。
请记住在编码教育的同时继续从事自己的项目。
没有学位能成为软件工程师吗?
在其他条件相同的情况下,拥有软件工程学位的候选人很可能比自学成才的人获得工作。但是,绝对有可能在市场上竞争并获得作为软件工程师的有利可图职位,即使没有学位。雇主最看重的是可证明的硬技能和软技能,以及相关经验——自学成才的开发人员可以通过在业余时间完成的编程项目来证明这一点。令人印象深刻的作品集加上其他营销策略可以为你赢得软件工程师的工作,即使你从未上过大学。
协会和组织
对于任何软件工程师或渴望从事该工作的人来说,加入一个志同道合的专业人士组织以进行学习和网络目的是个好主意。
- 敏捷联盟
- 计算机协会(ACM)
- 计算技术行业协会(CompTIA)
- 信息系统安全协会(ISSA)
- 网络专业人士协会(NPA)
- 建模与仿真国际学会(SCS)
常见问题
我应该成为软件工程师吗?
你是否应该成为软件工程师取决于你的分析能力、对计算机科学主题的亲和力、坚持克服挑战的意愿、沉浸式学习的渴望以及对解决问题的热情。如果你有兴趣成为软件工程师,并且你拥有部分或全部这些特质,你应该去追求它。这无疑是你可以选择的最有利可图的职业之一。
成为软件工程师需要多长时间?
根据你选择的教育路径——以及你付出的努力——你可以在6个月到4年内的任何时间成为软件工程师。传统的大学路线需要4年,而自学或参加编码训练营的人可能只需6个月就可以开始申请工作。
如何成为更好的软件工程师?
成为更好的软件工程师最重要的建议是寻求指导,成为测试驱动开发(TDD)的专家,并且永不停止学习。软件领域变化很快,所以你应该把时间分配在完善基础知识和学习新概念和技能上。
软件工程师是什么样的?
软件工程师是聪明、高度分析和逻辑思维者。他们雄心勃勃且自律。他们喜欢挑战和解决难题。软件工程师重视贡献,这就是为什么他们尽力为客户服务,并通过创建他们需要的软件来改善他们的生活。有时他们会超越自我,让客户对他们的产品感到满意。
软件工程师需要数学吗?
是的,你确实需要良好的数学技能才能成为软件工程师。编程语言和原则基于数学概念——理解它们及其使用对于掌握软件开发和工程至关重要。在软件工程工作面试中,候选人的数学能力通过使用数学的编码问题以及具体的数学问题来测试。