豆瓣评分 8.7

无论你处于职业生涯的哪个阶段,这本书都非常实用。请保持开放的心态,好学深思,渴望提高,不惧破旧习,不惧提问题。

本书第1~2章讲解当你在公司开启你的职业生涯时会发生什么;

第3~11章会扩展你的工作技能,教你如何使用现有代码库、解决和防止技术债、编写生产级软件、管理依赖关系、有效地测试、评审代码、交付软件、处理On-Call时的事故和构建可演进的架构等;

剩余章节涵盖管理能力和职业阶梯的提升等相关内容,例如敏捷计划、与管理者合作以及成长为资深工程师的必经之路。

本书中非常重要的一部分内容是教你如何应对糟糕的管理,以及如何调整自己的节奏。

1.1 你的目的地

核心领域中所需要的能力:

  • 技术知识
  • 执行力
  • 沟通能力
  • 领导力

2.1 学习如何学习

  • 前置学习
  • 在实践中学习
  • 运行实例代码
  • 阅读
  • 观看讲座
  • 适度地参加会议和聚会
  • 跟班学习并同有经验的工程师结对
  • 用副业项目实践

2.2 提出问题

在“万事都求人”和“独行侠”之间取得平衡

3.1 软件的熵

走向无序的趋势被称为软件的熵。

3.2 技术债

技术债(technical debt)是造成软件的熵的一个主要原因。
技术债是为了修复现有的代码不足而欠下的未来工作。

技术债矩阵

解决技术债:

1.按事实陈述情况;

2.描述技术债的风险和成本;

3.提出解决方案;

4.讨论备选方案(不采取行动也是备选方案);

5.权衡利弊。

3.5 行为准则

第7章 代码评审

高质量的代码评审文化有助于所有具有不同经验水平的工程师的成长,并促进他们对代码库的共同理解。
糟糕的代码评审文化会抑制创新,减慢开发速度,并且导致滋生怨恨情绪。

7.2 当你的代码被评审时

  • 准备工作
  • 用评审草案降低风险
  • 提交评审请勿触发测试
  • 预排大体量的代码修改
  • 不要太在意
  • 保持同理心,但不要容忍粗鲁
  • 保持主动

7.3 评审别人的代码时

  • 分流评审请求
  • 给评审预留时间
  • 理解修改的意图
  • 提供全面的反馈
  • 要承认优点
  • 区分问题、建议和挑剔
  • 不要只做橡皮图章
  • 不要只局限于使用网页版的评审工具
  • 不要忘记评审测试代码
  • 推动决断

9.2 On-Call技能包

一般来说,人们希望On-Call工程师能做出快速反应,但不一定需要快速解决问题。

9.3 事故处理

任何回顾总结文档的关键部分是根本原因分析(root-cause analysis,RCA)。
根本原因分析是利用5个“Why”进行的。这种技巧非常简单:不断地追问为什么。
以一个问题为例,问它为什么会发生。
当你得到一个答案时,再问一次为什么;一直问为什么,直到你找到根本原因。
“5W”只是口口相传的经验——大多数问题要经过5次反复才能找到根本原因。

10.5 协作设计

提出问题和给予建议一样重要,问题会帮助你成长。就像在课堂上一样,你可能不是唯一对某项设计决定感到疑惑的人,所以你的问题也会帮助其他人成长。

10.6 行为准则

12.3 Scrum框架

团队的工作能力是以故事点来衡量的,这是一个约定好的尺度单位(以小时、天或“复杂性”来度量)。

12.7 路线图

“在准备战斗时,我总是发现计划是无用的,但计划是不可缺少的。”

13 与管理者合作

与你的管理者构建工作关系将有助于你发展你的职业生涯、减少压力,甚至交付可靠的软件。

13.2 沟通、目标与成长

一对一面谈(1∶1)和进展、计划与问题(progress-plans-problems,PPP)报告用于沟通和更新项目状态,而目标和关键结果(OKR)以及绩效评估则管理目标和成长。

你要在一对一面谈中设置议程,一对一面谈不是用来更新工作状态的。

PPP是一种常用的更新工作状态的格式。更新工作状态并不是为了计算你的时间,它是为了帮助你的管理者发现问题,找到你需要背景信息的领域,以及提供将你与正确的人联系起来的机会。

顾名思义,PPP中的每个P(进展、计划与问题)都有自己的小节。每个小节应该有3到5个要点,每个要点应该很简短,只有1到3个句子。

13.3 向上管理

  • 接受反馈
  • 给予反馈
  • 讨论你的目标
  • 事情不顺时要采取行动

14.2 职业生涯建议

  • T型人才

    “T型”工程师在大多数领域内都能有效地工作,并且至少是某一个领域的专家。

    请从构建你的基本盘开始。构建基本盘会让你接触到不同的子领域,这样你就能找到自己的激情所在。

  • 参加工程师训练营
  • 主导你自己的晋升

    一旦你了解了评估标准和晋升流程,就进行自我评估,并获得他人的反馈。

    如果你收到了不认同的反馈,试着理解这些反馈来自哪里。其他人可能对你的工作有不完整的视角,或者你工作的价值可能不被认可。

  • 换工作需谨慎
  • 自我调节

14.3 结尾寄语

软件工程师是一个伟大的职业,充满了迷人的挑战。
你可以为任何行业做出贡献,从科学到农业、健康、娱乐,甚至是太空探索。
你的工作可以改善数十亿人的生活。与你喜欢的人一起工作并解决你所热衷的问题,你就可以完成伟大的事情。
我们为你加油,祝你好运!~~