上篇把全景过了一遍。这一篇拆头两步:选概念和讲出来。这两步其实连在一起——你选的"概念"边界,决定了讲的时候会不会一脚踩进自己不懂的坑。
先选一个够小的概念
费曼学习法第一步是"选一个你想搞懂的概念"。听起来简单,很多人却栽在范围太大。
"学会 React""搞懂数据库"这种不算概念,算领域。你对着一张纸写"学会 React",写两句就发现要讲 JSX、虚拟 DOM、调度、Hooks 原理,越写越虚,最后变成目录,不是讲解。大脑的工作记忆一次装不下整棵知识树,范围一大,你只能用"这个我懂"把裂缝糊上,费曼法就失效了。
值得费曼的主题,应该小到能在一页纸内讲完因果。几个合格的例子:
"useState 在同一个事件里连续调用两次,为什么不会触发两次渲染?" "HTTPS 怎么保证中间人看不到我发的明文?" "为什么 async 函数里 throw 出来的错误能被外层的 try/catch 接住?"
判断标准就一条:你经常用到它,但有人问"为什么",你只能说出结论、说不出因果。这种"用到但讲不清"的东西,才是费曼学习法的猎物。
范围一旦定小,第二步才好讲。一次只猎一个,别贪。
讲出来的关键:写下来,不是脑内过
第二步叫"假装讲给一个外行听"。关键动作是"讲",而且最好写下来,不是只在脑子里过一遍。
脑子里过一遍有欺骗性。你以为自己讲通了,其实跳过了三个断点,因为大脑会自动补全逻辑。写下来就糊不了——纸不会替你接下句,你写不出,断点就明摆着。说和写还有一个区别:说可以靠语气和手势蒙过去,写必须逻辑闭环,读者不会替你脑补。
具体写法,几条经验:
设定听众:想象你在给一个完全没写过代码的朋友讲。如果你写了"HTTPS 用非对称加密交换密钥",他会愣住。外行听众逼你解释"加密"本身,这一逼,就把你偷懒的地方逼出来了。 术语当场解释:用了术语,就必须在同一段里把它讲掉。写"握手"的时候,得补一句"就是双方先对一下暗号,确认对面是真服务器"。 走因果而不是背定义:别写"闭包是函数记住作用域",写"你定义了这个函数,它带着外面的变量一起被存下来,所以之后调用还能读到"。前者是背定义,后者是走一遍因果。
一个完整的例子:讲 HTTPS 给外行
拿"HTTPS 怎么防中间人"练手。很多人讲到这里会卡在"证书"这一步。
试着写一版给外行听的:
你和我之间发消息,路上可能有人偷看。HTTPS 的做法是:先让一个我们都信任的第三方给服务器发一张"身份证",上面写着"这个公钥确实属于 wxbuluo.com"。我收到身份证,验证它是信任的第三方签的,就相信了。然后我用身份证上的公钥,把一个临时生成的钥匙加密发给服务器。只有真服务器有对应的私钥能解开,拿到这把临时钥匙。之后咱俩就用这把临时钥匙加密聊天,中间人没有私钥,解不开。
写到"证书机构怎么证明身份证是真的",如果你只能说"反正浏览器信它",那就是缺口——你没理解信任链(根证书、签名验证)。这正好引到第三步。
卡住的地方,就是缺口
讲的过程里,注意你自己的反应。两类信号最明显:
一种是写两句就停,脑子里只剩"它就是这样的",找不到因果链。 另一种是讲 A 需要引入 B,讲 B 又需要 C,你发现自己对 B、C 都是"好像是这样",整条链是悬空的。
这两类卡壳,就是第三步要回去补的地方。下一篇专门讲怎么补:回源头,不是再看一遍二手博客。
现在就能做的练习
挑一个你这周"用到但说不清"的概念,在备忘录里写 200 字,假装讲给从不写代码的朋友。不许用术语缩写,用了就当场解释。写到卡住的那句,圈出来——那就是你明天的补课单。