起点:地图、学习与提问
这一章讲三件事: 一名新工程师从哪儿出发、要走到哪儿;路上靠什么学、怎么问; 以及两个会让人停在原地的自我认知陷阱。 读完你会拿到全书的地形图——后面十一章讲的全是这张图上的一段路。
1. 这一章讲什么
学校教会了你写代码,但没教你另外一半:代码怎么变成团队里的交付物,以及你自己怎么变成团队里可依靠的人。原书开场就说,知道如何编写代码仅仅是「战斗的一半」,剩下那些技能学校里没有教授1。这一章补的就是这个缺口的第一段:起点在哪里、怎么走。
本章在全书链条里的位置:它是那张旅程地图本身。后面各章按「接手旧代码 → 写新代码 → 管依赖 → 测试 → 评审 → 交付 → 值班 → 设计 → 架构 → 计划 → 晋升」的顺序,把地图上的五个站点一段段走完。
2. 顶层全景:五个站点,一张地图
原书把职业起步期画成一条有五个站点的航线,你现在在第一站2:
新手营 ──→ 试炼之河 ──→ 贡献者之角 ──→ 运维之海 ──→ 胜任之湾
(熟悉环境 (分担真活 (独立开发 (把代码交给 (独立负责
提问学习) 学会流程) 大些的特性) 用户并值班) 小项目/做设计)
图说:五个站点不是职级,是「团队能把什么事放心交给你」的五个档位。
每一站对应原书的若干章;本书的拆解章就按这条线排。
目的地也有明确定义。原书把「资深工程师」拆成四项可对照的能力:技术知识(会用构建、调试、测试、监控这套工具链)、执行力(能构建并部署中小型特性,分担值班)、沟通能力(能给予和接受反馈,能写出清晰的设计文档)、领导力(能在指定范围内独立工作,能帮助新人融入)3。注意:四项里有三项不是纯技术——这就是「战斗的一半」具体长什么样。
3. 核心原理
3.1 先认清起点:能力的四个阶段
先看现象。很多新人入职后有两种相反的强烈感受:一种是「周围的每个人都比我强,我大概是混进来的」;另一种是「公司的技术栈也不过如此」。原书开篇用一个模型同时解释了这两种感受。
教育学者布罗德威尔把人的能力分成四个阶段4:
| 阶段 | 状态 | 你会感觉 |
|---|---|---|
| 无意识的无能力 | 做不了,而且不知道自己做不了 | 还没意识到差距 |
| 有意识的无能力 | 做不了,但知道差在哪 | 焦虑、自觉是冒牌货 |
| 有意识的有能力 | 能做,但要花力气、全神贯注 | 累但可控 |
| 无意识的有能力 | 轻松胜任 | 已经不需要想 |
新工程师几乎都落在前两个阶段——哪怕你在学校里很强,公司的流程、工具、代码库也全是新的5。所以第一种感受(觉得自己是冒牌货)其实是第二个阶段的正常体征,不是能力的证据;第二种感受(觉得公司技术不行)则是第一个阶段的体征:你还没有足够的信息来判断。
原书给的目标很直接:尽快到达第三个阶段6。而这本书剩下的所有章节,讲的就是怎么到。
判断(我们的,不是书里的): 这个四阶段模型真正的用法,不是给人贴标签,而是给「什么时候该求助」定标尺——处在第二阶段的人最容易犯的错是硬扛,因为他以为自己「应该会」。判据很简单:如果你说不出自己不知道的是什么,你在第一阶段,先去补信息;说得出,你在第二阶段,直接去问。 如果错,会错在: 如果差距是「熟练度」问题而不是「知识」问题(比如代码都会写但写得慢),那么问人治标不治本,该做的是刻意练习,四阶段模型会把这类人引向过度求助。
3.2 学习是一门手艺,不是一种天赋
这一节回答:没人给你排课了,学习怎么自己组织?
原书列了七种手段,并且开头就给了警告:不要同时全上——那样只会倦怠,要按自己的现实情况挑7。我们按「花的是谁的时间」分成三类:
花工作时间,向公司学的:
- 前置学习:入职头几个月专门去搞懂一切如何运作,而不是急着上线。原书举的极端例子是 Facebook 曾让新人花 6 周时间只练基本功、不接活(著名的 boot camp)8——前期慢,是为了之后参与设计讨论、值班、评审时不拖后腿。
- 运行实例代码:文档会过期、同事会记错,但跑起来的代码不会骗你。调试器(能让程序暂停、逐行查看变量(程序里存值的具名格子)的值的工具)和日志(程序往外部输出的运行记录)是最常用的两件武器9。
- 阅读:先读团队文档和设计文档建立整体概念,再去钻与任务相关的子系统。读代码时有一条反直觉的忠告:注释会说谎,源代码不会——原书引用了程序员罗恩·杰弗里斯的话「代码从不说谎。注释有时却会」10。
- 跟班与结对:跟着资深工程师做事、记笔记、提问;反过来让资深工程师跟着你、给你的工作当安全网。两名工程师轮流打字一起写代码的方式叫结对编程,原书称它是相互学习最快的方式之一11。
花业余时间,向行 业学的:
- 讲座与会议:讲座可以 1.5 倍速看但要记笔记;会议则要挑剔——原书把会议分成学术会议、兴趣聚会、供应商展示会三类,指出它们普遍「有价值的内容占所有内容的比例」(信噪比)很低,供应商展示会每年超过一次就接近浪费12。
- 副业项目与开源(公开源代码、任何人都能参与贡献的项目):用你想学的工具,去解决你真的有兴趣的问题——原书特别强调「不要根据你认为需要学的领域选项目」,内在兴趣才撑得久13。
几乎不花时间,但最容易被忽略的:
- 在真代码上学:原书作者德米特里曾花数周逐行啃一份变量名全叫 a、b、c 的 Java 代码,心生敬佩;午餐时同事告诉他,那其实是反编译器的输出——正常人不那么写代码14。教训不是「别认真读代码」,而是:为理解而阅读,永远不要相信变量名称。这份故事还有下半句:对代码库的复杂程度心存敬畏之前,先确认它真的是「设计出来的复杂」。