跳到正文
从'抄下来'到'讲得出':我摸索出来的笨办法
从'抄下来'到'讲得出':我摸索出来的笨办法

从'抄下来'到'讲得出':我摸索出来的笨办法

大半年学了一堆东西,回头看真正记住的都不是抄过的,而是讲出来过的。这篇不讲方法论,讲我怎么从'狗熊掰玉米'改过来的,以及为什么慢反而是另一种快。

速读#

这篇讲学习方法的转弯:照教程跑通不等于会,能用自己的话讲出来才算进入理解。「先抄通、再改坏、最后讲出来」是目前最笨也最有效的一套流程;慢功夫不是低效,它是在给后面的迁移打地基。

一年下来,我是「狗熊掰玉米」#

这一年我学东西的方式特别像「狗熊掰玉米」——学一个丢一个。三月跟着教程写了个 Flask 小项目,跑通了很兴奋,觉得「会 Web 了」。七月想做个自动化脚本要调接口,翻回去一看,路由怎么写的、请求怎么解析的,全忘了,又从头搜。

类似的事反复发生:五月折腾过 Git 分支,国庆给朋友合代码时分不清 rebase 和 merge;九月配过 Nginx 反代,十一月别人问我 proxy_pass 末尾带不带斜杠,我愣了。

不是没学过,是学完就蒸发了。笔记倒是记了不少,散在四个 app 里,格式乱七八糟,自己都不想翻。

不是记性问题#

一开始我的第一反应是「记性不好,得多复习」。后来慢慢觉得不对——记性差只解释「忘得快」,不解释「为什么当时觉得会」。问题出在激活方式上:照抄教程激活的是手,不是脑子。我跑通了就觉得「学会了」,两周后用到啥也想不起,因为那个「会」从一开始就是错觉,不是我真懂了。

修正后的判断简单到有点笨:照抄 ≠ 会。真正的分水岭不是「跑没跑通」,是「能不能讲出来」。讲不顺的地方,就是其实没懂的地方。

能跑 vs 能讲#

后来读到认知科学里「提取练习」的说法,才知道这不是我一个人的毛病,是被实验反复确认的规律:照着做、得到正确结果,人会高估自己的掌握,而这种掌握消退得很快。真正留得下来的,靠的是主动提取——不看资料复述一遍、用自己的话讲给别人、回答「为什么是这样」。这类动作逼着大脑把知识重新组织,组织过的才是自己的。

这也解释了那个「当时觉得会」的错觉从哪来:跑通给我的是「见过」的熟悉感,可考试考的从来不是「见没见过」,是「能不能取出来」。熟悉感冒充了掌握,骗过的第一个人就是我自己。

我现在摸索出的三步#

  • 先抄通:照教程跑通,确认环境和基本流程没问题;
  • 改坏它:故意改点东西看它怎么报错——报错信息比正确结果教会我的更多;
  • 讲出来:用自己的话写一篇,讲给「半年后的自己」听。

三步里最难也最值钱的是第三步。前两步做完我常常还觉得「差不多懂了」,一动笔就露馅:某个参数为什么非这样配、两种写法到底差在哪,写到那里卡住,才知道那块是虚的。卡住的地方回去补,补完再写——一篇写顺了,那个东西才算真的过到我这边。

这个博客本身就是第三步的产物。写博客是我最高效的学习方式,不是学完了来写,是为了搞懂才写。

底层是通的,啃透一个学下一个会越来越快#

慢慢我发现一条共性:扎实啃透一个,再学相邻的会越来越快。因为很多底层抽象——接口、契约、分层、状态、复用——是跨领域通用的,新东西往往只是同一套抽象换了层皮。所以「慢功夫啃透一个」和「快速学相邻的」不冲突,前者是后者的地基。

  • Python 的接口思维,迁到 Java 的接口、迁到 Docker 网络,是同一种「约定两边怎么对话」的思路;
  • 之前训练 YOLO 模型,数据标注、调参这些脏活慢活,没法靠速成教程跳过去——和学部署时一遍遍踩坑是同一种「慢功夫」;
  • 偶然刷到有人拿 React + shadcn/ui 做组件,手痒试了下,发现之前写 Element-Plus 积累的组件化思维直接能复用。

这套笨办法也有边界#

这套办法有边界,不万能:

  • 「先抄通」只适合入门确认环境和流程。停在抄通这一步,就是我前面「狗熊掰玉米」的状态,必须往后走到「讲出来」。
  • 「改坏它」得建立在已经抄通的基础上,不然改坏了不知道是自己的问题还是环境的问题,信息反而更乱。
  • 不是所有东西都值得讲出来写一篇。我会挑「踩过坑、想了想才通」的写;纯记忆性的(某个命令某参数)写笔记足矣,不必硬凑成文。

慢是另一种快,门槛够低才扛得住长期#

回头看还有个反差挺有意思:年初立的 flag 大多会倒——那个「每天刷一道 LeetCode」的计划活了九天。但「记录」这件事门槛足够低,解决一个问题顺手写一篇,不算额外负担,两个月没断。

同是我,flag 九天就倒,记录却没断。差别不在意志力,在门槛。门槛够低,才扛得住长期。

版权许可

CC BY-NC-SA 4.0 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

相关文章

s1oopX

登录 s1oopX