深色模式
Skills Required for Software Engineering 软件工程师所需技能 🛠️💡
学习目标 🎯
观看本视频后,您将能够:
区分硬技能与软技能;
描述软件工程师所需的硬技能;
描述软件工程师所需的软技能。

硬技能 vs 软技能 🤔
1. 硬技能(Hard Skills)
硬技能是执行特定角色所需的实践技能,对于软件工程师来说,这些技能包括设计、构建、维护和修复软件解决方案的技术能力。

硬技能是可以学习的,在学校、大学或通过在线课程、文凭或证书中获得,或者通过多年的行业经验积累获得。
硬技能是可量化的,因此可以衡量一个人是否能够展现出特定技能,并进行认证。

常见的软件工程硬技能包括:
| 技能类别 | 具体技能 |
|---|---|
| 编程语言 | Java、Python、C#、Ruby等 |
| 版本控制 | Git、SVN等 |
| 云计算 | AWS、Google Cloud、Microsoft Azure等 |
| 测试与调试 | 单元测试、功能测试、性能测试 |
| 监控与故障排除 | 使用监控工具追踪系统性能,快速定位并修复问题 |
| 敏捷开发 | Scrum、Kanban等敏捷方法论 |
| 数据库架构 | SQL、NoSQL、数据库设计与优化 |

2. 软技能(Soft Skills)
软技能则是不易量化的个人特质和人际交往能力。它们是你个性的一部分,因而比硬技能更难定义、量化或认证。
由于软技能不是特定于某个业务的,它们可以跨角色、跨行业转移。例如,良好的沟通技巧、团队合作能力和问题解决能力等,都是非常受欢迎的软技能。

任何职位的工作要求通常是硬技能与软技能的结合。

软件工程师的硬技能 🛠️
让我们深入了解一些与软件工程师相关的硬技能。
1. 软件分析与设计
软件工程师必须具备分析用户需求的能力,
并设计出能够有效满足这些需求的解决方案。

2. 计算机编程与编码
计算机编程和编码是软件开发中最基本的技能。
有些工作岗位要求使用特定的编程语言和工具集;
但有时,雇主也会欢迎你有其他语言的经验,并期望你能够快速学习并适应他们的编程语言。

根据Coding Dojo网站的统计,当前最需求的编程语言包括:
- Java、Python、C#、Ruby
了解各种框架和面向对象的设计原则也是软件工程师的关键技能。
3. 测试技能
虽然你希望创建无瑕疵的解决方案,但编写的代码可能无法完全按照预期工作。
你需要测试技能来验证你的代码是否符合功能需求,并且易于使用。当你的代码出现问题时,调试技能就显得尤为重要。你需要查明问题的根源,并修复代码。

5. 部署技能
当软件解决方案完成时,必须将其分发给用户。你需要具备部署技能,这可能包括:
Shell 脚本编写
容器化
**持续集成与持续交付(CI/CD)**工具
监控与故障排除技能:在软件部署后,你需要监控解决方案的性能,并具备故障排除的能力,及时解决出现的问题。

软件工程师的软技能 🧠
接下来,我们来看看软件工程师需要的软技能。
1. 团队合作
团队合作是软件工程师的一项核心软技能。
软件工程师通常会在不同的团队中工作,这些团队有时根据项目而划分,有时则是根据个人角色而组建的。
在敏捷开发(Agile)中,你可能会与其他开发人员组成小型团队(如:Squads),并采用结对编程(Pair Programming)模式共同工作。

团队合作能让你发挥个人优势,同时也提供了学习新知识和技能的机会。
2. 沟通能力
作为软件工程师,你需要与项目中不同的利益相关者进行沟通,包括:
技术同事
非技术人员
例如,你可能需要:
向同行请求支持和建议
向经理寻求指导和方向
向客户确认他们的需求
向用户询问他们希望如何与解决方案互动

3. 时间管理
软件开发通常是时间紧迫的项目,因此,时间管理是至关重要的。你需要合理安排自己的时间,避免延误其他团队成员的工作进度。
随着越来越多的团队在不同的时区工作,以前看似微不足道的本地延迟,可能会为位于世界其他地方的同事造成整整一天的工作丧失。

4. 问题解决能力
软件工程师需要拥有强大的问题解决能力,在以下各个阶段都有应用:
设计阶段:制定合适的解决方案。
开发阶段:编写执行任务所需的代码。
测试与调试阶段:发现并修复任何程序错误。
软件生命周期:解决可能出现的各种问题。

5. 适应能力
随着项目的变化,你需要具备适应能力,以应对需求的变化。举例来说,
客户要求更改或新增某些功能;
经理要求你转移到其他领域以赶上紧迫的项目期限;
用户要求采取其他方式完成特定任务。

6. 接受反馈
最后,作为软件工程师,你需要愿意接受对工作成果的反馈。
大多数软件团队会使用同行评审系统,互相审查代码,以确保符合公司标准并提升代码质量。
在初级职位中,你可能会有一位导师,提供反馈并指出你可以改进的地方。
你的利益相关者也会在软件发布前和最终版本时提供反馈。

接受这些反馈并开放心态地听取,将帮助你不断提升,确保你的解决方案变得更好。
总结 📌
在本视频中,你学到了:
软件工程师需要同时具备 硬技能 和 软技能。
硬技能 是可量化的学习技能,例如编程、测试和故障排除。
软技能 则是个人特质和人际交往能力,如沟通能力和问题解决能力。
成为一名优秀的软件工程师,不仅仅依赖于强大的技术能力,也需要良好的团队合作、沟通、时间管理等软技能。
