Skip to content

如何从容应对含有过多 “过早引用” 的知识?

12 / 44

过早引用”(Forward References另译为前置引用”),原本是计算机领域的术语

在几乎所有的编程语言中对于变量的使用都有先声明再使用的要求直接使用未声明的变量是被禁止的。Python 同样如此如果在从未给 an_undefined_variable 赋值的情况下直接调用这个变量比如print(an_undefined_variable)那就会报错NameError: name 'an_undefined_variable' is not defined

python
print(an_undefined_variable)















plaintext
NameError                                 Traceback (most recent call last)

<ipython-input-1-7e0e1cc14e37> in <module>
----> 1 print(an_undefined_variable)

NameError: name 'an_undefined_variable' is not defined

充满过早引用的知识结构在大脑中会构成类似 M.C. Escher 善画的那种不可能图形那样的结构”。

在上图中前三个椎形一般不会造成视觉困惑 —— 尤其是第一个

若是加上虚线比如第二个和第三个那么由于我们预设虚线表示原本应该看不见的部分”,于是C 点的位置相对于 B D 应该更靠近自己C' 的位置相对于 B' D' 应该更远离自己……

然而在第四个椎形中由于 B"D" A"C" 都是实线于是我们一下子就失去了判断依据不知道 C" 究竟是离自己更近还是更远

对一个点的位置困惑连带着它与其它三个点之间的关系可若那不是锥体而是立方体呢每个点的位置困惑会造成对它与更多点之间的更多联系的困惑…… 若是更多面体呢

把这些令人困惑的点比喻成过早引用”,你就明白为什么很多过早引用的知识结构会那么令人困惑处理起来那么令人疲惫了吧

过早引用就是无所不在

可生活学习工作都不是计算机它们可不管这套管它是否定义过管它是否定义清晰直接甩出来就用的情况比比皆是

对绝大多数不懂事的小朋友来说几乎所有痛苦的根源都来自这里:“懂事的定义究竟是怎样的呢什么样算作懂事什么样算作不懂事弄不好即便整个童年都在揣摩这个事到最后还是迷迷糊糊他们的父母从未想过对孩子说话也好提要求也好最好先声明再使用”,或者即便事先声明过也语焉不详…… 于是这些可怜的孩子能做的只有在惶恐中摸索就好像在黑暗中拼图一样

可事实上他们的父母也不容易因为确实有太多细节给小朋友讲了也没用或者讲也讲不清楚又或者拼命解释清楚了但小朋友就是听不进去…… 所以令人恼火的过早引用”,有时候真的是只能那样的存在

谈恋爱的时候也是这样太多的概念千真万确地属于过早引用爱情这东西究竟是什么刚开始的时候谁都弄不大明白并且事实证明身边的绝大多数人跟自己一样迷糊至于从小说电影里获得的知识”,虽然自己看心神愉悦但几乎肯定给对方带来无穷无尽的烦恼 —— 于对方来说你撒出来的是漫天飞舞的过早引用……

到了工作阶段技术岗位还相对好一点其他领域哪哪儿都是过早引用并且还隐藏着不可见搞得人们都弄出了一门玄学叫做潜规则”。

人们岁数越大交朋友越来越不容易最简单的解释就是每个人的历史对他人来说都构成过早引用”。所以理解万岁太难了吧幼儿园小学的时候人们之间几乎不需要刻意相互理解都没觉得有这个必要中学的时候相互理解就已经开始出现不同程度的困难了因为过早引用的积累大学毕业之后再工作上几年不仅相互理解变得越来越困难还有另外一层更大的压力 —— 生活中要处理的事情越来越多脑力消耗越来越大遇到莫名其妙的过早引用哪儿有心思处理

不懂也要硬着头皮读完

这是事实大多数难以掌握的技能都有这个特点人们通常用学习曲线陡峭来形容这类知识只不过这种形容只限于形容而已对学习没有实际的帮助面对这样的实际情况有没有一套有效的应对策略呢

首先是要学会一个重要的技能

读不懂也要读完,然后重复很多遍。

这是最重要的起点听起来简单甚至有点莫名其妙 —— 但以后你就会越来越深刻地体会到这么简单的策略绝大多数人竟然不懂也因此吃了很多很多亏

充满了过早引用的知识结构就不可能是一遍就读懂的别说这种信息密度极高的复杂且重要的知识获取了哪怕你去看一部好电影也要多刷几遍才能彻底看懂不是嘛比如,Quentin Tarantino 导演的 Pulp Fiction (1994)、David Fincher 导演的 Fight Club (1999)、Christopher Nolan 导演的 Inception (2010)或者 Martin Scorsese 导演的 Shutter Island (2010)……

所以从一开始就要做好将要重复很多遍的准备从一开始就要做好第一次只能读懂个大概的准备

古人说读书百遍其义自见道理就在这里了 —— 只不过他们那时候没有计算机术语可以借用所以这道理本身成了过早引用”,对那些根本就没有过读书百遍经历的人绝对以为那只不过是在忽悠自己……

有经验的读书者拿来一本书开始自学技能的时候他会先翻翻目录(Table Of Contents),看看其中有没有自己完全没有接触过的概念然后再翻翻术语表(Glossary),看看是否可以尽量理解而后会看看索引(Index),根据页码提示直接翻到相关页面进一步查找…… 在通读书籍之前还会看看书后的参考文献(References),看看此书都引用了哪些大牛的书籍弄不好会顺手多买几本

这样做显然是老到 —— 这么做的最大好处是尽力消解了大量的过早引用”,为自己减少了极大的理解负担

所以第一遍的正经手段是囫囵吞枣地读完”。

囫囵吞枣从一开始就是贬义词但在当前这个特殊的情况下它是最好的策略那些只习惯于一上来就仔细认真的人在这里很吃亏因为他们越是仔细认真越是容易被各种过早引用搞得灰心丧气相应地他们的挫败感积累得越快到最后弄不好最先放弃的是他们 —— 失败的原因竟然是因为太仔细了”……

第一遍囫囵吞枣用个正面一点的描述就是为探索未知领域先画个潦草的地图”。地图这东西有总比没有好虽然说它最好精确但即便是不精确的地图也比完全没地图好一万倍对吧更何况这地图总是可以不断校正的不是吗世界上哪个地图不是一点一点校正过来才变成今天这般精确的呢

磨练只字不差的能力

通过阅读习得新技能尤其是尽量只通过阅读习得新技能”),肯定与通过阅读获得心灵愉悦很不相同

读个段子读个小说读个当前热搜文章通常情况下不需要精读” —— 草草浏览已经足够顶多对自己特别感兴趣的地方慢下来仔细看看……

但是若是为了习得新技能去阅读就要施展只字不差地阅读这项专门的技能

,“只字不差地阅读是所有自学能力强的人都会且都经常使用的技能尤其是当你在阅读一个重要概念的定义之时你就是这么干的定义中的每个字都是有用的每个词的内涵外延都是需要进行推敲的它是什么它不是什么它的内涵外延都是什么因此在使用的时候需要注意什么……

很有趣的一个现象是绝大多数自学能力差的人都是把一切都当作小说去看随便看看粗略看看……

你有没有注意到一个现象人们在看电影的时候绝大多数人会错过绝大多数细节但这好像并不会削减他们的观影体验并且他们有能力使用错过了无数细节之后剩下的那些碎片拼接出一个完整的故事” —— 当然通常干脆是另一个貌似完整的故事”。于是当你在跟他们讨论同一个电影的时候常常像是你们没坐在同一个电影院看的不是同一个电影似的……

所谓的自学能力差很可能最重要的坑就在这里

每一次学习新技能的时候很多人只不过是因为做不到只字不差地阅读于是总是会错过很多细节于是最终就好像看了另外一个山寨版电影一样”,实际上习得了另外一个山寨版技能”……

在学习 Python 语言的过程中有个例子可以说明以上的现象

Python 语言中for 循环可以附加一个 else 部分你到 Google 上搜索一下 for else python 就能看到有多少人在追问这是干什么的还有另外一些链接会告诉你 “for... else” 这个秘密的含义将其称为语法糖什么的……

其实官方教程里写的非常清楚的并且还给出了一个例子

Loop statements may have an else clause; it is executed when the loop terminates through exhaustion of the list (with for) or when the condition becomes false (with while), but not when the loop is terminated by a break statement. This is exemplified by the following loop, which searches for prime numbers:

python
>>> for n in range(2, 10):
...     for x in range(2, n):
...         if n % x == 0:
...             print(n, 'equals', x, '*', n//x)
...             break
...     else:
...         # loop fell through without finding a factor
...         print(n, 'is a prime number')
...
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3

只有两种情况

  • 要么干脆就没读过
  • 要么是读了却没读到这个细节……

—— 后者更为可怕跟花了同样的钱看了另外一个残缺版本的电影似的……

为什么说只字不差地阅读是一项专门的技能呢你自己试过就知道了明明你已经刻意让自己慢下来也刻意揣摩每个字每个词的含义甚至为了理解正确做了很多笔记…… 可是当你再一次只字不差地阅读的时候你经常会惊讶地发现”,自己竟然有若干处遗漏的地方这就是一种需要多次练习长期训练才能真正掌握的技能绝对不像听起来那么简单

所以到了第二遍第三遍就必须施展 “只字不差地阅读” 这项专门的技能了只此一点你就已然与众不同

好的记忆力很重要

就算读不懂也要读完的更高境界就算不明白也要先记住”。

人们普遍讨厌死记硬背”…… 不过说实话这很肤浅虽然确实也有擅长死记硬背却就是什么都不会的人”,但是其实有更多记忆力强的人实际上更可能是博闻强识”。

面对过早引用常见的知识领域好记忆力是超强加分项记不清记不住甚至干脆忘了 —— 这是自学过程中最耽误事的缺点尤其在有过早引用知识点存在的时候更是如此

然而很多人并没有意识到的是记忆力也是一门手艺而已并且事实上它是任何时候都可以通过刻意练习加强的手艺”。

更为重要的是记忆力这个东西有一百种方法去弥补 —— 比如最明显最简单的办法就是好记性不如烂笔头”……

所以在绝大多数正常情况下所谓的记不清记不住甚至干脆忘了”,都只不过是懒的结果 —— 若是一个人懒且不肯承认自己懒又因为不肯承认而已就不去纠正…… 那就算了那就那么活下去罢

然而提高对有效知识的记忆力还有另外一个简单实用的方法 —— 而市面上有各种快速记忆法”,通常相对于这个方法来看用处并不大

这个方法就是以下要讲到的整理归纳总结” —— 反复做整理归纳总结,记不住才怪呢!

尽快开始整理归纳总结

从另外一个角度这类体系的知识书籍对作者来说不仅是挑战还是摆脱不了的负担

Python 官方网站上的 The Python Tutorial是公认的最好的 Python 教材 —— 因为那是 Python 语言的作者 Guido van Rossum 写的……

虽然 Guido van Rossum 已经很小心了但还是没办法在讲解上避免大量的过早引用他的小心体现在在目录里就出现过五次 More

  • More Control Flow Tools
  • More on Defining Functions
  • More on Lists
  • More on Conditions
  • More on Modules

好几次他都是先粗略讲过而后在另外一处再重新深入一遍…… 这显然是一个最尽力的作者了 —— 无论是在创造一个编程语言上还是在写一本教程上

然而即便如此这本书对任何初学者来说都很难当个好作者不容易

于是这只能是读者自己的工作了 —— 因为即便是最牛的作者也只能到这一步了

第一遍囫囵吞枣之后马上就要开始总结归纳整理组织 关键知识点的工作自己动手完成这些工作是所谓学霸的特点他们只不过是掌握了这样一个其他人从未想过必须掌握的简单技巧他们一定有个本子里面是各种列表示意图表格 —— 这些都是最常用的知识概念整理组织归纳工具这些工具的用法看起来简单的要死

这个技巧说出来看起来都非常简单然而也许正因为它看起来如此简单才被绝大多数人忽略…… 与学霸们相对绝大多数非学霸都有一模一样的糊弄自己的理由反正有别人做好的拿过来用就是了!—— 听起来那么理直气壮……

可实际上自己动手做做就知道了 —— 整理归纳组织再次反复是个相当麻烦的过程非学霸们自己不动手做的真正原因只不过是嫌麻烦怕麻烦一个字总结就是可是谁愿意承认自己懒呢没有人愿意于是都给自己找个冠冕堂皇的理由比如上面说的反正别人已经做好了我为什么还要再做一遍呢?” 再比如,“这世界就是懒人推进的!”

久而久之各种爱面子的说法完美地达成了自我欺骗的效果最后连自己都信了于是身上多了一个明明存在却永远找不到的漏洞 —— 且不自知

我在第一次粗略读过整个 Python Official Tutorial 中的第五章之后顺手整理了一下 Containers 的概念表格

可这张图错了!

因为我最早合理囫囵吞枣的时候Bytes 这种数据类型全部跳过而后来多轮反复之后继续深入又去读 The Python Language Reference 的第五章 Data Model 之后 发现 Set 也有 Immutable, Frozen Set…… 当然最错的是整理的过程中一不小心把 “Ordered” 给弄反了

于是肯定需要再次整理若干次改进之后那张图就变成了下面这个样子

另外 Python 3.7 开始,Dictionary insertion ordered
https://docs.python.org/3/library/collections.html#ordereddict-objects

这个自己动手的过程其实真的很麻烦”,但它实际上是帮助自己强化记忆的过程并且对自我记忆强化来说绝对是不可或缺的过程习惯于自己动手做罢习惯于自己不断修改罢

再给你看个善于学习的人的例子

https://nvie.com/posts/iterators-vs-generators/

作者 Vincent Driessen 在这个帖子里写到

I'm writing this post as a pocket reference for later.

人家随手做个图都舍不得不精致

自学能力强的人有个特点就是不怕麻烦小时候经常听到母亲念叨,“怕麻烦那还活着干嘛啊活着多麻烦啊!” —— 深刻

先关注使用再研究原理

作为人类我们原本很擅长运用自己并不真正理解的物件技能原理知识的……

三千多年以前一艘欧洲腓尼基人的商船在贝鲁斯河上航行的时候搁浅了…… 于是船员们纷纷登上沙滩饿了怎么办架火做饭呗吃完饭船员们惊讶地发现锅下面的沙地上有很多亮晶晶闪闪发光的东西今天的化学知识对当年的他们来说是那一生不可触摸的过早引用”。他们并不懂这个东西的本质原理但稍加研究他们发现的是锅底沾有他们运输的天然苏打…… 于是他们的总结是天然苏打和沙子我们现在知道沙子中含有石英砂被火烧可能会产生这个东西几经实验成功了于是腓尼基人学会了制做玻璃球发了大财……

两千五六百年之前释加牟尼用他的理解以及在那个时代有限的概念详细叙述了打坐的感受 —— 他曾连续打坐 6 今天西方科学家们在深入研究脑科学的时候发现 Meditation 对大脑有特别多的好处…… 这些好处就是好处与宗教全然没有任何关系的好处

你看我们原本就是可以直接使用自己并不真正理解的物件技能原理知识的可为什么后来就不行了呢

或者说从什么时候开始我们开始害怕自己并不真正理解的东西不敢去用甚至连试都不敢去试了呢

有一个相当恼人的解释上学上坏了

学校里教的全都是属于先声明再使用的知识反过来不属于这种体系架构的知识学校总是回避的 —— 比如关于投资与交易的课程从来看不见地球上有哪个义务教育体系把它纳入教学范围虽然投资与交易是每个人都应该掌握都必须掌握的不可或缺的技能某种意义上它甚至比数学语文都更重要然而学校就是不会真教这样的东西

而且现在的人上学的时间越来越长小学初中高中本科加起来 16 …… 这么长时间的熏陶”,只能给大多数人造成幻觉严重深刻甚至不可磨灭的幻觉误以为所有的知识都是这种类型…… 可偏偏这世界上真正有用的真正必要的知识几乎全都不是这种类型 —— 颇令人恼火

现在的你不一样了 —— 你要跳出来养成一个习惯

不管怎么样先用起来反正研究透原理不可能马上做到需要时间漫漫

用错了没关系改正就好用得不好没关系用多了就会好只要开始用起来理解速度就会加快 —— 实践出真知不是空话

有的时候就是因为没有犯过错所以不可能有机会改正于是就从未做对过

尊重前人的总结和建议

生活中年轻人最常犯的错误就是把那句话当作屁

不听老人言吃亏在眼前

对年轻人来讲老人言确实很讨厌尤其是与自己当下的感受相左的时候

然而这种讨厌的感觉更多的时候是陷阱因为那些老人言只不过是过早引用所以在年轻人的脑子里无法执行”,“报错为类型错误”……

于是很多人一不小心就把不听老人言独立思考混淆起来然后最终自己吃了亏可尴尬在于等自己意识到自己吃亏了的时候吧大量的时间早已飘逝是为无力回天”。

你可以观察到一个现象学霸好学生的特点之一就是老师让干啥就干啥”,没废话

比如上面告诉你了,“必须自己动手”,那你就从现在开始老老实实地在一切必要的情况下自己动手去总结归纳整理组织 关键知识点”…… 那你就必然能够学好但针对这么个建议你反复在那里问,“为什么呀?”,“有没有更简单的办法啊?”…… 那你就完了死定了

学写代码的过程中有很多重要的东西实际上并不属于编程语言范畴”。比如如何为变量命名如何组织代码这些规范”,不是违背了就会马上死掉的[1]并且初来乍到的时候这些东西看起来就是很啰嗦很麻烦的…… 然而这些东西若是不遵守甚至干脆不了解那么最终的结果是你永远不可能写出大项目永远是小打小闹 —— 至于为什么可以用那句你最讨厌的话回答你

等你长大了就懂了……

自学编程的好处之一就是有机会让一个人见识到规范”、“建议的好处也有机会让一个人见识到不遵守这些东西会吃怎样的亏往往是现世报)。

Python 中有一个概念叫 PEP,Python Enhancement Proposals,必须找时间阅读反复阅读牢记于心

https://www.python.org/dev/peps/pep-0008/

到最后你会体会到这不只是编程的事这种东西背后的思考与体量对整个人生都有巨大帮助


脚注

[1]也可能真的会死…… 请看一篇 2018 9 月份的一则新闻发生在旧金山的事情Developer goes rogue, shoots four colleagues at ERP code maker

↑Back to Content↑