# :sunglasses: 中级 C++

## :question: 这是谁？

这是一位开发人员，他了解软件开发的技术背景，并具有为应用程序或组件的功能创建设计和解决方案的能力。即使缺乏足够的需求，也可以创建设计。此人具有商业经验背景，并熟悉开发中常见的业务流程。

总体而言，中级开发人员解决技术任务，并且相对于初级工程师来说，这个人可以在没有高级/首席工程师协助或仅需少量协助下完成工作。

## :computer: 期望具备哪些编码能力？

- 不再将编译器和编程语言视为“魔法盒子”，能够通过生成假设、验证并确认或拒绝它们来解决任何障碍或意外情况。
- 深入理解 C++ 的基础概念以及其他编程语言的知识，并能进行比较。
- 编写可读性强、可扩展性好、易于维护的代码。
- 熟悉设计模式和原则，并能做出技术决策。
- 清楚地了解 C++ 的技术背景，包括：
  - 代码编写过程（如使用 IDE、文本编辑器和遵循最佳实践）
  - 源代码和产品存储（如使用版本控制系统和包管理器）
  - 编译（编译器、构建系统和库）
  - 测试（测试框架和策略）
  - 发货/部署以及在目标系统上执行。
- 具有计算机科学基础知识，包括数据结构、图形、有限状态机和算法。

## :bust_in_silhouette: 期望具备的通用技能

- 能够根据个人技术知识和项目背景做出决策
- 理解“足够好”的解决方案的概念，以防止过度设计
- 具有团队合作精神
- 能够与其他团队成员表达观点并分享意见
- 具有使用各种方法论（如看板、敏捷/Scrum、瀑布等）的经验。
- 愿意协助和支持其他团队成员。

## :eyes: 提示和建议

### :arrow_forward: 学习

如果想成为高级开发人员，则提高软技能至关重要。技术专业知识变得次要，与他人建立关系并找到妥协的能力变得更加重要。优秀的开发人员不是写很多代码的人，而是知道如何在最小化损失的情况下有效地解决问题的人。理想情况下，您应该能够在不编写任何新代码甚至删除数十或数百行代码的情况下解决问题。
中间角色是最具挑战性且难以掌握的。您必须同时专注于硬实力、软实力和业务问题解决。这意味着您需要同时集中注意两个方面。
注重软技能可以增加您在市场上成为备受追捧职业者的机会。您可以选择专注于成为高度专业化开发人员并忽略软技能，但请记住此类专家并非总是供不应求，并且他们之间竞争极其激烈。如果你准备好与市场上最优秀的专家竞争，请继续前进。然而，我们仍然建议考虑多样化自己所拥有 的 技能。

### :arrow_forward: 经验

许多中级开发者陷入了成为某项技术、框架、设计模式或方法论“铁粉”的陷阱中。在处理项目任务时更加务实非常重要，不能只是试图采纳最新思路来添加简历上 的 另一项 技 能。中间角色可能导致过度设计或频繁更改框架。
如果认为库或框架对项目必需，则最好先与资深工程师或首席工程师进行讨论。建议创建一个“概念验证”，在其中测试所有假设后再添加新依赖项。不要试图背着团队去做这件事，因为它可能会导致增加维护 成本 和未预料到 的 后果。

---

[**返回**](Overview.md) | [**回到主页**](../README.md)