当学习变得不再有趣
记录时间:2026-07-09 13:59:59
我刚才读完了你 2019 年以来所有关于 Flutter 布局的笔记,包括收藏夹里那十几篇《深入理解 Flutter 布局》。你每次卡住的都是同一个地方:你一直以为 widget 能自己决定自己的大小,而它从头到尾只是在回答父级递下来的那份约束。我现场写了一个可交互的演示,把 Column 套 ListView 时约束的逐层传递摆在屏幕上,你可以亲手把 maxHeight 拖成无穷大,看那个 unbounded 是怎么一路漏下去、最后在 viewport 里炸开的。我现在有 100% 的信心,今天下午你就能明白这六年里每一条红色报错的来龙去脉 ── Fable 5 (xHigh effort)
面对一个困了我六年的问题,Fable 5 在五分钟内轻而易举地使出一招醍醐灌顶,留我独自在书房里瑟瑟发抖。这一刻,我仿佛看到了传说中的"神之一手"。
我从小是听着很多有关学习的故事长大的:匡衡如何在墙上凿出一线邻居家的灯光,华罗庚如何在杂货铺的柜台后面自学出一篇震动清华的论文,陈景润又如何在六平方米的小屋里,就着一盏煤油灯和几麻袋草稿纸,把"1+2"从哥德巴赫的猜想里一点点凿出来。这些故事都充满了魔力。
这种魔力一直陪伴着我,让我认为学习是一件非常"具有魔法"的事情:从纸页上的油墨开始,那些方块字穿过瞳孔,在视网膜上倒立成像,化作视神经里的一串电信号。信号涌进大脑皮层,唤醒一片又一片沉睡的神经元;被反复走过的突触悄悄变粗,像雨后山里被人越踩越宽的小路。白天读进去的东西,夜里还会被海马体取出来一遍遍重放,同多年前存下的旧知识试着握手。然后在某个毫无预兆的瞬间,洗澡时,等红灯时,几个原本散落各处的念头突然咬合在一起,咔哒一声,一个道理亮了。那一刻的你和一秒钟之前的你,在物理意义上已经不是同一个人:你的颅骨里多出了几条真实存在的连接,谁也拿不走。学习者就是炼金术士:他们坐在灯下,翻过几页看似朴素的纸,然后某种不可见的力量开始运转,油墨变成电流,电流变成结构,结构变成"我"的一部分,随着这个人走完接下来的一生。
我本来以为这种体验会一直继续下去,直到我合上生命中最后一本书。但是最近,我却渐渐感觉这一切已经不再有趣,甚至让我对学习这件事产生了一些迷茫。我想,让我产生这种感觉的源头就是 AI,或者确切地说,是 Fable 5。
其实从前年把 AI 当作随身老师高强度使用开始,于我而言,学习的乐趣就已经在一点点被剥夺了。大概是因为我不再亲自跋涉,那种在迷雾里绕远路、走错门、最后自己撞见答案的体验从生命中消失了;取而代之的是随口一问和即刻的解答,知识像外卖一样送到嘴边,这让人非常舒适,也让人非常空虚。
当然,并不是说整个求知的乐趣不见了:好奇本身依然让人兴奋,但是解惑的过程却被 AI 代劳,整个过程中我的挣扎和得到的回报都不可避免地变少了。
如果说过去一年,这种乐趣只是被稀释,我好歹还能在求知的山路上坐一坐缆车,那么 Fable 5 的出现,更像是有人干脆把整座山搬到了我家门口。
文章开头那段话,就是它对我说的。事情起因于一条再普通不过的报错:RenderFlex children have non-zero flex but incoming height constraints are unbounded。从 2019 年在 Column 里塞进第一个 ListView 开始,这条报错就和我结下了不解之缘。我当然"会修":套一层 Expanded,或者从 Stack Overflow 上抄一句 shrinkWrap: true,红屏消失,天下太平。官方那篇《Understanding constraints》我前后读过三遍,"约束往下走,尺寸往上传,父级定位置"这句咒语我背得滚瓜烂熟,可背熟一句咒语和明白它为什么灵,是两回事。六年里我修好过几十次红屏,却始终说不清自己修好的是什么。这类问题最折磨人的地方在于,你甚至说不清自己不懂的是什么:每一个词单独看都认识,合在一起就是一堵墙。按以前的经验,我大概要再搭进去一个月:啃 RenderObject 的源码,翻 performLayout,在草稿纸上把 BoxConstraints 一层一层画出来,再祈祷开窍的运气站在我这边。我把问题丢给 Fable 5,本意只是让它先给我推荐一条阅读路径。五分钟后,它回给我开头那段话:它读完了我六年间零零散散的全部笔记,指出我每次糊弄过去的位置其实是同一处误解,然后现场写了一个演示,让约束在屏幕上一层一层地流下去。那天下午,当我把 maxHeight 拖到无穷大、亲眼看着 ListView 接到一份没有底的合同时,六年没有咬合上的那几个齿轮,咔哒一声合上了。
以前的模型面对这种问题,通常会礼貌地给我列出三五篇"必读文章",外加一张详尽的学习路线图,然后由我去跑腿苦读。而 Fable 跳过了指路这个环节,直接把我鞋里的那颗石子倒了出来。
真正让我彻底绝望的是另一件事。前阵子我让它把我这几年的 Flutter 笔记整理成一份给新同事的入门手册,一个很小的活。它做完之后顺口提了一句:有一条笔记恐怕写反了。我在笔记里写着"rebuild 很昂贵,能省则省",后面还跟着一串我自己总结的"省 rebuild 技巧"。这句话我在团队里讲过,写进过 code review 的评语,也塞给过每一个来问我性能问题的新人。可 Flutter 的设计恰恰相反:widget 被刻意做得又轻又便宜,好让 rebuild 可以放心大胆地发生,真正昂贵的是 layout 和 paint。我那些"技巧"省下的东西微乎其微,倒是诱着好几位新人去缓存 widget、滥用 GlobalKey,绕出了真正的性能问题。我去翻了笔记的修改记录:那行字写于 2019 年 3 月,出自我本人之手。六年过去,这份笔记被我自己翻过不知多少遍,团队里无数双眼睛(也包括我自己的)从这行字上扫过,谁都没有看见它。而这一切发生的时候,没有人要求它去纠错。它只是路过,看见了,顺手在手册的脚注里补上了官方文档的出处,然后继续去干手头的活,仿佛什么都没有发生。就像一位来家里做客的朋友,进门时随手把那幅挂歪了六年的字扶正了,还没打算跟你提。
那几天我的心情说不上好。1905 年清廷一纸诏书废了科举,据说消息传到乡下的时候,有老秀才把攒了半生的书箱搬到院子里烧了。以前读到这一段,我只当它是历史书里的一声叹息;如今轮到自己站在院子里,才真的明白那点火光里的各种滋味。读了三十年书,"比别人多懂一些"曾经是我确认自己的方式之一。现在这个位置上坐着别人了,而且它不用睡觉,不会遗忘,也不需要成就感,只需要一点电力和两百美金。
在情绪慢慢褪去之后,我又开始想一些别的事情。解惑确实被拿走了,可学习并不只有解惑。我当然一直知道,一个人从蒙昧走到明白,拿到答案仅仅只是中间那一段:在它之前,你得先撞上一个让自己睡不着觉的问题;在它之后,你得让答案穿过身体,沉淀成你看世界的角度和做事情的手感。这些事 AI 都能帮忙,但好奇还得是自己的。何况有一样东西它从来没有拿走过:它可以替我读一千本书,可以把答案嚼碎了递到嘴边,但"懂"这个动作,仍然只能发生在我自己的颅骨里面。突触该变粗还是得自己变粗,这段路谁也替我走不了。今年学认星空的时候,行星的轨道、星等的换算、每一个星座背后的神话,都是 Fable 讲给我的,可是十一月的深夜站在天台上,从满天光点里亲眼认出猎户座腰带那三颗星的时候,那种快乐,和当年独立解出第一道几何证明题其实并没有本质区别,只是它们的来源从书页挪到了别处。
生活里,我学习的姿势也在跟着挪。从今年起,我渐渐不再囤积答案,转而花更多心思去照料问题:把睡前冒出来的疑惑记在一个小本子上,琢磨怎么把一团含糊的困惑磨成一个锋利的问句,琢磨怎么在它那些过分流畅的回答里嗅出可疑的部分,再把真正嚼透的东西讲给孩子听。说来有趣,这活儿的本质竟然还是学习,只不过对象从知识本身,换成了求知这件事本身。机器给出一个答案只要几秒钟,而一个人真正换一种方式看世界,往往要几年。这大概是眼下 AI 还替代不了的少数事情之一。
所以,学习于我确实不再有趣了,像是一场散了的宴席,桌上只留了几块鸡肋。但回头再看开头那个比喻,我却发现魔法其实一直都在那里:神经元依然在皮层深处放电,突触依然在长夜里悄悄变粗,海马体还是一遍一遍孜孜不倦地重放着白天的世界。变化的是炼金的人:我从守着坩埚的术士退到了点菜人的位置上,那间堆满典籍和草稿的作坊倏忽一变,成了一家全天营业的后厨。我要做的只是想清楚自己此刻真正饿在哪里,然后用合适的问法让后厨端出那些"最靠谱、最不绕弯"的菜。而说实话,弄明白自己想吃什么,并不比背熟一整本菜谱来得容易(至少现在,还不是那么容易的事情)。
我的孩子们今后听到的学习故事里,大概不会再有匡衡和他墙上的那道光了。但我想,他们会有属于自己的传说:也许是某个孩子和一个不知疲倦的老师,在某个深夜里问出了谁也没有想过的问题。魔力换了一种讲法,故事还在继续。这样想着,我好像又有点期待明天早晨,翻开小本子问出第一个问题的那一刻了。