学习新知识是一件困难的事,而如果不经常运用,记住所学更是难上加难。这个关于学习和记忆的难题,自人类诞生之日起就一直存在。为了改善这种状况,我们做出了一些努力。我们发明了助记技巧,使建立和保持记忆变得更容易;我们发明了文字,让我们能够将信息从头脑中释放出来,与他人分享,并在遗忘时重新检索;随后,我们又发明了互联网,似乎让我们完全不需要记忆知识,因为我们可以随时在几秒钟内查找任何信息。...但真的是这样吗?
这似乎是我们所有教育材料的发展趋势。我在高中和大学修过几门物理课,在所有这些课程中,我们不再需要记忆牛顿物理学的公式;每次考试时,我们都会得到一张列有所有公式的卡片,我们只需要弄清楚如何将这些公式应用到具体问题中。诚然,这并不意味着物理学习变得容易了,尤其是对那些缺乏物理学习经验的人来说(这就是为什么市面上有如此多的「解决应用题」教材为苦恼的代数学生而编写,而且这些问题比一年级代数的问题要复杂得多)。物理学培养的批判性分析和解决问题的能力是非常宝贵的,而且可以广泛应用于其他学科。因此,我能理解为什么教育工作者更倾向于让学生专注于培养这些能力,而不是纠结于公式的记忆。
其实,那些看似烦人的需要记忆的公式,本质上就是牛顿物理学的精髓所在。当我百无聊赖地观察周遭世界并产生疑问时,正是这些公式能够帮我找到答案。设想一下,当我在公路旅行中,想要快速估算还需多久才能到达下一个休息站,又不想在驾驶时分心操作手机,这时我就需要运用「距离等于速率乘以时间」这个公式;单凭分析能力在这种情况下可能帮不上太大忙。如果我熟知公式,就能清晰地理解这三个要素之间的关系,从而轻松回答问题。公式的作用远不止于此。它还能告诉我,当我触碰小提琴弦的不同位置时会发出什么音高,以及为什么它们会有不同的音色;卡车相比摩托车会对公路造成多少倍的磨损;在电脑运行的同时,我能否将吹风机插入厨房插座而不会烧断保险丝(没错,我的公寓仍在使用老式热熔断器)。如果你学过物理,却对这些公式一无所知,我不得不说,你可能并没有真正理解物理学最根本的部分。
好吧,也许我只是个爱发牢骚的二十几岁「老头子」。我们那个年代上下学可是得在山路上跋涉,还要每天背诵十个新公式,哪像现在的年轻人这么轻松。难道我们就不能简单地查一下这些公式吗?
让我们来探讨一下「简单地查一下」这种思维方式存在的两个问题。第一个问题,也是在讨论记忆时常被提及的,就是记忆知识会更加便利。我之前举的开车和用电的例子就很好地说明了这种便利性的价值。诚然,只要我知道有公式可以联系距离、时间和速度,或者功率与电路的电流容量,我就可以在需要计算时去查找。但实际上,我可能不太愿意这么做。如果我不经常需要用到这些公式,为了省去记忆的麻烦,这种权衡或许是值得的。然而,如果我经常使用这些公式,那么最好还是把它们牢记在心。这就像大多数学生仍然会记忆乘法表一样,因为即便在计算器盛行的今天,如果不记住乘法表,进行任何复杂的数学运算都会非常麻烦。
然而,我们面临着一个更大的问题:我们无法利用未知的信息进行创造性思考。这恰恰是人类仍然(普遍)胜过计算机的少数领域之一:识别模式并在不同概念之间建立富有创意的联系。在理想条件下,我们能够轻松地产生新的想法和洞见,而这是当前技术水平下的预编程计算机所无法实现的,至少不会在不产生大量错误结果的情况下做到这一点。但是,如果没有输入,我们就无法进行创造性思考。正如俗语所说,「垃圾进,垃圾出」,或者在这种情况下更贴切地比喻为「/dev/null 进,EOF 出」。互联网仅仅为我们提供了获取信息的可能性,而非随时可用的信息。如果我们希望在创造过程中运用某些信息,就必须能够即时获取这些信息,这意味着我们需要记忆它们。仅仅知道某处存在一些可能有帮助的模糊信息是毫无价值的,因为如果我们不清楚这些信息的具体内容,就无法在新的情境中认识到它们的相关性。
我想这一点我们心知肚明。近 40% 的美国人无法说出他们的第一修正案权利中的任何一项,这难道不是一个令人担忧的问题吗?如果我们连这些权利是什么都说不清楚,我们又怎能真正珍视这些最基本的自由呢?如果我们不了解公民应当拥有的权利,我们又如何能识别出他人的权利正在遭受侵犯呢?仅仅能够查阅第一修正案的条文是远远不够的——只有当你真正内化了这些原则,它们才能影响你的行为和决策。(当然,如果你不能解释每一部分的含义,那么仅仅将第一修正案的文本一字不差地背诵出来也是不够的。这是另一个问题,虽然经常被混为一谈——对于不理解的内容进行死记硬背确实毫无意义[1],但是仅仅因为未经消化的死记硬背知识无用就全盘否定记忆知识本身的价值,这同样会导致我们低估那些真正被理解和整合到知识体系中的记忆信息的重要性。)
最近,我在工作中遇到了一个问题。我正试图在一台新电脑上运行一些古董软件(有多「古董」?这软件陈旧到可能还需要修复千年虫问题)。我输入了一个大致如下的命令:
myprogram c:\myfolder\myfile.bat
(简而言之,这是指示 myprogram
执行 myfile.bat
文件中的命令。)然而,系统返回了这样的错误信息:
‘ÿþc’ 不被识别为内部或外部命令,也不是可执行程序或批处理文件。
搞什么鬼?我明明没有输入过这种内容,myfile.bat
文件中也绝对不包含这些字符!
尽管问题看似棘手,但我只用了不到半小时就找到了解决方案。诚然,像所有 IT 专业人士一样,我在解决问题时也利用了互联网,但那只是整个过程中很小的一部分。我并非在网上找到了现成的解决方案。下面,让我简要介绍一下我是如何一步步排查并解决这个问题的:
- 计算机的运作基于二进制系统,即只使用 0 和 1。因此,文本在计算机中实际上是以一系列数字的形式存在的。我们把字母(以及其他字符)与数字之间的对应关系称为文本编码。在本例中,
myprogram
这个程序相当老旧,它只支持两种编码方式:ASCII 编码(仅能表示 127 个不同的字符)和 Latin-1 编码(可以表示 255 个不同的字符)。显然,255 个字符是远远不够用来表示世界上所有语言中的所有字符的。为了在文件中包含更多的字符,人们开发了各种不同的编码方案。这些方案中,有些明显优于其他方案。
- 我使用 PowerShell 创建了名为
myfile.bat
的文件。然而,PowerShell 默认会以 UTF-16 编码格式保存文件,而这种编码与较旧的 ASCII 或 Latin-1 编码不兼容。
- UTF-16 格式的文件通常以一个特殊的标记开头,这个标记被称为字节顺序标记。它在文件中以十六进制数字
0xFFFE
的形式出现。这个标记的主要作用是指示文件的编码方式,但在我们的问题中,它成了关键的「罪魁祸首」。因为当这些数字被错误地按照 Latin-1 编码来解读时,它们会在屏幕上显示为「ÿþ」这两个奇怪的字符。(将 UTF-16 格式的文本按照 Latin-1 格式来解读是一个完全没有意义的操作,永远不会得到任何有用的结果。这就像试图把构成罗马数字的字母当作英语单词来理解一样荒谬 —— 你可能会把「XIV」(罗马数字的 14)读作「xiv」,但这显然毫无意义。)
- 下一个字符是
c
,它在 UTF-16 中的编码是0x0063
...
- ...然而,在 Latin-1 编码中,一个字符是由两个而非四个十六进制数字表示的,而且读取顺序是先读第二个字节,再读第一个字节。因此,接下来被读取的字符实际上是
63
(对应字母 C)和00
。
- 在计算机领域,一个只包含零的字节被称为空字节,通常用来标识文本的结束。因此,这个老旧的应用程序误以为已经到达了文件的末尾(实际上它甚至还没有读到第一个命令的第二个字母),然后试图寻找并运行一个名为
ÿþc
的程序。毫无疑问,我的电脑上并没有这样一个程序,所以它就崩溃了。
解决方案?只需让 PowerShell 使用 ASCII 编码而非 UTF-16 编码来写入文件,这个小修复仅需两分钟。
言归正传。通常来说,做我这份工作完全不需要了解任何文本编码的知识。不过,作为一个技术迷,我曾为了大学里的项目和工作之外的其他任务学习过一些基础知识。正是这些基础知识让我意识到应该查看 ÿþ 的十六进制表示(即 0xFFFE
),并在 Google 上搜索它。通过搜索,我发现这是一个字节顺序标记,于是我检查了文件中是否存在这个字符,进而发现文件使用了错误的编码。解决问题的思路就这样逐步明晰起来。
通常情况下,我的工作并不要求掌握文本编码方面的知识,因此大多数管理者可能会认为深入学习这方面知识没有必要。毕竟,如果真的需要用到,我随时可以查阅资料。然而,如果我不了解不同编码的存在,不知道旧程序经常使用不兼容的编码,也不清楚可以通过查看原始十六进制数据来分析问题,我又怎么能意识到这个问题与文本编码有关呢?在弄清楚问题所在之前,我可能已经浪费了好几个小时。其实,解决这个问题所需的文本编码知识,只需一小时就能学会。我认为每个程序员都应该学习这些知识,因为类似的问题迟早会困扰到他们。提前掌握这些信息,能让你在遇到问题时迅速识别出需要运用哪些知识,这往往是解决问题最关键的一步。如果你总能准确知道解决问题需要什么信息,那么等到需要时再查找也无妨。但实际上,如果你能精确地知道解决问题需要什么信息,那就意味着你已经找到了解决方案!遗憾的是,提前学习带来的生产力提升几乎无法量化,因此在当今这个数据驱动的世界里,这种做法很容易被忽视。
当你面对前人未解、网上也找不到答案的新问题时,能够轻松获取网络上浩如烟海的信息无疑是一大优势。然而,仅有海量信息是不够的,你还需要自身的知识储备来整合这些信息。这里的知识包括技能和方法,通常被称为「批判性思维技能」——这一点的重要性至今无人质疑。同时,它还包括陈述性知识(也就是「事实」,或者可以说是需要记忆的基础知识):比如不同的文本编码方式,使用错误编码会导致乱码,空字节常用于终止字符串,美国宪法第一修正案保障所有美国人的宗教自由,距离等于速度乘以时间等。尽管获取和保持这些知识有时会让人感到吃力,但没有这些基础知识,你将无法发挥作用。而且,你掌握的陈述性知识越多,你的能力就越强。因此,不要畏惧寻求知识,也不要犹豫要求他人这样做。
在接下来的几个月里,我们将深入探讨多种学习、保持和运用陈述性知识的策略。
Thoughts Memo 汉化组译制
感谢主要译者 claude-3.5-sonnet,校对 Jarrett Ye
原文:Why You Still Need To Know Things - Control-Alt-Backspace (controlaltbackspace.org)
作者:Soren Bjornstad