为什么一遍一遍地重复,是大多数学习的必由之路?
作者:Jian Shuo Wang 发表于:2023-07-29 22:21 · 未分类
我对于任何我在乎的系统的核心的代码,最喜欢琢磨的方法,是打开开发环境,写一遍代码,完成功能,跑通,然后全选,删除(当然可以先备份一下),然后开始写第二遍。然后再全选,删除,写第三遍。一般说来,当一个系统自己写了超过十遍以后,会接近于自己的能力的极限,也会写出写出最优的代码,同时自己对于这个领域,可以自信的说,真的懂了。
让我试着回答这个问题:「为什么同一件事情,做很多遍,经常是学会它的必由之路呢?」
注意力平衡点的转移
代码写第一遍的时候,自己面对的世界是一张未知的世界,很多方法的选择,都是以完成功能为目标,充满了冗余,不合理,缺失的部份。
第二次开始,因为脑子里已经有过前一个版本作为一张模糊的地图,再次出发的时候,大到整体的结构,小到变量命名,都有机会重新来过。这个时候,我们可以在「小处着手」的同时,脑子里面有一张全图「大处着眼」,相当于有了一个上帝视角再来审视同样的问题。走第二遍,答案和走第一遍时肯定会不一样。
我们被宏观和微观两种视角拉扯着,找一个最佳的平衡。之后的每一次,都是这个平衡重新调整的过程。
我的感觉这个平衡点随着每一遍重写,从微观渐渐地拉向宏观。
如果说大脑的注意力可以分配一个百分比的话,在最早写的几次,70% 的精力在微观,就是每一行怎么写,每一个函数怎么写,每一个类怎么写。。。而在后面的几次中,这些已经很熟悉,肌肉记忆一样就可以写出来,脑子会把尽量多的注意力放在宏观,关注到每个写法背后的更深层,更长期的东西,同时以此为出发点调整前面已经写好的程序。
我们做任何复杂的事情,不都是这样的吗?
要想成为足球明星,是需要踢几千场,几万场球的。
开始的时候,球员的专注点全都在控球上面,能带着球跑起来就已经耗费了全部的精力,至于自己在全场什么位置,其他球员在哪里,哪里顾得上呢?要说全场的战术思想,更是无从谈起。
但是当踢了几百场以后,控球已经游刃有余,才会腾出时间考虑更宏观的事情。让一个控球还做不到的球员思考足球战术不切实际。
这样的例子太多了。学开车,学骑自行车,学习任何一件事情,一遍一遍的重复,看似是在做同一件事情,但从来不是一成不变地重复同一件事情,而是一层一层的深入。把简单的事情搞定,再来一遍,搞定稍微复杂一点的一层,一层一层的如同刷墙一样的刷,才能形成厚厚的认知。
这让我想起来程序员世界非常有效的「结对编程」方法。两个程序员,坐在一起,写同一段代码。经验相对少一些的做驾驶员,掌握键盘;相对有经验一点的在旁边当副驾驶。但是两个人的关注度是不一样的。驾驶员关注一行一行的代码,而副驾驶(Copilot)关注全局,给出方向性的反馈。这个方法证明是行之有效的原因,就是让一个人同时关注两件事情太难,而让两个脑子用某种方式协作,是现在我们能找到的最好的扩展大脑的方法。
但不是所有的事情都有机会两个人结伴,很多事情还是要自己掌握。如果对于自己需要训练的部份,刻意的,一次一次的重复,是学习很重要的一种方法。
这就是我对一次次重复的意义的思考。