# Software Engineering Soft Parts

<https://addyosmani.com/blog/software-engineering-soft-parts/>

软技能------非专业技术知识。

作者分享一些自己在 Google Chrome 工作 10 年以来的软技能。反思自己 10 年来的经验教训，并希望能够读者带来启发。

> 成为好的工程师需要经验。每个项目，甚至是很小的那些，都是一个向你的工具箱添加新技术和工具的机会。从一个项目中学习到的工具，能够应用到另一个项目中，如果能够这样解决问题，就能传递更多价值。经历过的项目不会白费的。 {.is-success}

1. 掌握技术能够提高生产效率。
2. **批判性思考是使用认知技能独立思考的能力** ，它能帮助我们做出合理的决定。投资这项技能，使得我们的思路更加清晰。
3. 掌握基础并不断应用它们来获得新技能。
4. 通过学习基础获得技能组合和工具，然后忽略基础得到成长。
5. 对宏观和微观的基本原理有很好的理解可以帮助你做出更好的决定。
6. 从用户体验开始，然后回溯到所需要的技术。
7. 最好的软件是由那些对用户有同情心的工程师构建的。

---

1. 选择适合你的用例，而不是本月的流行。
2. 利用新项目学习新技术。
3. 保持好奇，从不停止学习。
4. 在学习的时候记笔记。这样做使得你更理解学习的内容。当你试着向其他人解释的时候，你对这些知识的理解会增加。没有人读也没关系。你只是把这些内容写下来就对自己有很多好处。
5. 承认自己不知道某件事是很难但值得做的一件事。
6. 承认自己犯错也是很了不起的一件事。
7. 做一个 caretaker，而不是owner。

---

1. Consider if being a jack of all trades and a master of one is right for you.
2. 当学习某一新的编程语言时，关注用它做一些能够带给我成就感的一些东西。
3. 为手头具体的问题写代码，但是努力让代码能够解决更为普遍的问题。
4. 编写代码，为其他开发人员解决复杂的问题，但通过清晰的界面公开功能。
5. 在旧系统中处理遗留代码时，要了解应该保留的代码和应该删除的代码之间的区别。
6. 尝试，创新，快速失败，更好地解决问题。
7. 定义”已完成”的内容可以节省时间，因为它可以帮助您估计所需的工作量，为开发制定计划，并避免以后进行不必要的修改。

---

1. 一个单一的大型发布可以分为一系列风险较低、易于理解的发布。
2. 在调试时，您应该尝试系统地、严格地解决问题，以解决所有测试条件。
3. 设计文档不应该是事后的想法，而应该是软件工程过程不可分割的一部分。
4. 协调设计文档的评审，并将设计与原始文档进行比较，以验证所有相关约束都得到了解决。
5. 谦逊，清晰的沟通，尊重他人。善良不需要付出任何代价，但其影响是无价的。有些人可能会说，良好的沟通需要精力和深思熟虑。应该有更多的能量来激发同情心。
6. 使用与听众相关的语言、概念和详细程度。
7. 对他人友好是一种超能力------运用它。

---

1. 大方地赞美那些做出杰出工作的人。
2. 拒绝比承诺过多更好。
3. 你不可能取悦所有人------在说”是”和”不是”的时候要非常小心。
4. 承认不了解某事，并对积极寻求帮助，甚至是比自己经验少的初级工程师。
5. 利用会议和问答环节提出正确的问题，交流知识并通知团队。
6. 为你的观点大声辩护，但是每次你有新的证据反驳他们的时候也要回顾一下。
7. 在一次非正式会议之后，一封友好的电子邮件有助于重申讨论中的要点或承诺。

---

1. 知道什么时候保持安静，观察游戏中的动态。
2. **在不确定的情况下，不要不做决定或不采取行动。**
3. 领导者拓宽了自己的视野，从战略的角度思考问题，并为他人制定了路线图。
4. 教你的队伍钓鱼。不要总是为他们解决问题，而是温和地引导他们发展自己解决问题的技能。
5. 在评估具有挑战性的问题时，你以身作则，并在有人提出解决方案时提出相关问题。
6. 承认犯错误、不知道答案或寻求指导都是可以的，这有助于克服冒名顶替综合症。
7. 通过及时提供信息来保护你的学员，这样他们就不会陷入完全错误的境地，而是通过自己做事来掌握。

---

1. 确保指导关系是高级工程师职责的一部分，当有人进入其他团队、职位或组织时也能帮助保留关键领域知识。
2. 导师可以为你提供建议，但你是唯一一个可以采取主动和行动的任何建议，以管理你的职业生涯和成长。
3. 信任可以使团队成员团结起来，朝着共同的目标努力，而官僚主义会使他们产生分歧。
4. 了解变更对业务的影响。
5. 对业务-软件等式的洞察力和敏锐性增加了工作的影响。
6. 为深度工作优化你的日历。
7. 避免破坏你的工作时间。

---

1. 超负荷工作不是好的职业道德的一部分。
2. 不断尝试超越自己的标准是不现实的。
3. **时间是有限的。与其试图寻找更多的时间，不如消除不必要的任务。**
4. 你没必要知道所有的事情。
5. 最好是积极主动地从疲惫中拯救自己，学会说不，知道什么时候停止，并计划你的时间包括工作之间的休息。
6. 鼓励你和你的团队休息、度假和休假。


相关：[[coding|coding]]

相关：[[how-to-think-like-a-front-end-developer|how-to-think-like-a-front-end-developer]]
