程序员超强大脑
上QQ阅读APP看书,第一时间看更新

阅读前文给出的 3 段代码时,大脑内部存在 3 种认知过程。如前所述,不同的困惑涉及不同的认知过程,这些认知过程都与记忆有关。本章稍后会详细解释。

长时记忆(long-term memory)可以无限期存储所有记忆,缺乏知识意味着长时记忆中缺少足够的相关事实。大脑获取的信息暂时存储于短时记忆(short-term memory),但如果需要检索的内容过多,那么大脑可能会遗忘部分已经获取的信息。缺乏信息会影响短时记忆。思维活动在工作记忆(working memory)中进行,当大脑必须加工大量信息时会受到影响。

不同类型的困惑对应于不同类型的认知过程,简要概括如下。

·缺乏知识会影响长时记忆。

·缺乏信息会影响短时记忆。

·缺乏加工能力会影响工作记忆。

上述 3 种认知过程不仅在阅读代码时起作用,而且与包括编写代码、设计系统架构或编写文档在内的所有认知活动都有关系。

程序设计中涉及的第一种认知过程是长时记忆,它可以把记忆保存很长时间。大多数人能够回忆起几年前甚至几十年前发生的事情。无论是系鞋带(肌肉会形成条件反射)还是编写二分搜索程序(大脑能记住抽象算法、编程语言的语法以及如何使用键盘打字),人类的所有活动都与长时记忆有关。第3 章将详细讨论长时记忆的应用,包括这些不同形式的回忆以及如何改善长时记忆。

长时记忆会存储几类相关的编程信息,例如成功运用某种编程技巧的记忆、Java 关键字的含义、英语单词的含义或者 Java中 int 型变量的最大值(2 147 483 647)。

长时记忆相当于能长时间存储信息的计算机硬盘。

APL 程序(代码示例 1):长时记忆

阅读第一段代码时,大脑运用最多的是长时记忆。如果了解 APL 关键字 T 的含义,那么在阅读第一段代码时,你的大脑就会从长时记忆中提取出这个关键字。

第一个代码示例也彰显出掌握相关语法知识的重要性。如果对 T 的含义一无所知,则很难读懂这段代码。相反,如果知道 T 代表二元编码(dyadic encode)函数(用于把某个值转换为不同的数字表示形式),那么阅读这段代码就是小菜一碟:既无须理解任何单词,也不必一步一步琢磨代码的作用。

程序设计中涉及的第二种认知过程是短时记忆,它用于暂时保存大脑接收的信息。举例来说,当我们在电话里听到对方报出的电话号码时,号码不会直接进入长时记忆,而是首先进入容量有限的短时记忆。短时记忆的容量众说纷纭,但大多数科学家认为这种记忆只能存储少量信息元素,通常不会超过 12 个。

例如,在阅读程序时,大脑会把程序使用的关键字、变量名和数据结构暂时保存在短时记忆中。

Java 程序(代码示例 2):短时记忆

阅读第二段代码时,短时记忆起决定性作用。如代码清单 1-6所示,我们首先阅读第2 行代码,得知 n 是一个整数,但此时还无法确定整段代码的作用。不过可以继续阅读其他代码,并记住“n 是整数”这一事实,该信息会在短时记忆中保存一段时间。接下来阅读第4 行代码,根据 toBinaryString() 方法可以判断出该方法的作用是将给定整数的十进制形式转换为相应的二进制形式。用不了一天甚至一小时,我们可能就会忘记这个方法。在解决当前的问题(本例是理解方法的作用)后,大脑便会清空短时记忆。

代码清单 1-6 把数字 n 转换为 Java 的二进制表示

public class BinaryCalculator {
    public static void mian(String[] args) {
        int n = 2;
        System.out.println(Integer.toBinaryString(n));
    }
}

不了解 toBinaryString() 方法的用途很可能会影响大脑理解这段代码。

在第二个示例中,尽管短时记忆是理解代码的决定性因素,但长时记忆同样会起作用。实际上,人类的所有活动都涉及长时记忆,阅读 Java 程序也不例外。

举例来说,熟悉 Java 的程序员(假设大多数程序员熟悉这门语言)知道,忽略“public class”和“public static void main”不会影响大脑理解这段代码的作用,而且他们也许根本没有注意到,示例代码有意把“main”错拼为“mian”。

在本例中,大脑通过假定 main 方法的名称“抄近道”,把两种认知过程合二为一:大脑根据长时记忆存储的过往经验决定使用“main”,而不是使用实际接收并存储在短时记忆中的“mian”。由此可见,这两种认知过程并不像前文讨论的那样泾渭分明。

如果把长时记忆比作大脑用来永久存储记忆的“硬盘”,那么短时记忆就相当于计算机用来暂时存储值的内存或缓存。

程序设计中涉及的第三种认知过程是工作记忆。短时记忆和长时记忆相当于信息存储设备:大脑接收到的信息要么暂时保存在短时记忆中,要么长期保存在长时记忆中。但实际的思维活动不是在短时记忆或长时记忆中进行,而是在工作记忆中进行。工作记忆是孕育新想法、新观点以及新方案的摇篮。如果把长时记忆比作硬盘,短时记忆比作内存,那么工作记忆就相当于大脑的“处理器”。

BASIC 程序(代码示例 3):工作记忆

阅读第三段代码时,大脑利用长时记忆来存储关键字的含义(例如 LET 和 EXIT),利用短时记忆来存储接收到的部分信息(例如“B$ 以空字符串开头”)。

但是,在阅读代码的过程中,大脑还会进行更多活动。程序员会尝试心算并梳理代码的执行结果,这个过程称为追踪,也就是在脑海里编译并执行代码。大脑内部用于追踪以及进行其他复杂认知活动的机制称为工作记忆,这种记忆相当于计算机用来执行计算任务的处理器。

在追踪极其复杂的程序时,大脑或许认为有必要记下变量的值——要么写在代码行旁边,要么写在单独的表格里。

如果大脑感觉需要借助外部媒介来存储信息,则可能意味着工作记忆的负担过重,难以加工更多信息。第4 章将讨论信息过载问题以及如何避免大脑出现这种情况。