有意思的问题 ^ ^
根据我自身和周围人的反馈,“写程序的时候可以坚持很久,但是学习数学就很难保持注意力” 的情况的确存在,而且我认为,这种现象是可以被科学解释的。经过思考,我发现,可以从四个方面来解释这个有趣的现象:思考阈值、反馈机制、思路连贯性 和 有效思维长度。
【1】思考阈值
什么是思考阈值呢?就是启动或维持一件事情所需要动用的脑细胞数。
写代码在【大部分时间】是不用动用太多脑细胞的,在确定了整个程序的框架(这需要费点脑细胞)后,大部分时间我们做的事无非是:写顺序语句、写循环语句、写条件判断。这些东西对一个经验丰富的程序员来说很轻松,加上很多代码本来就比较相似,所以并不需要集中太多的精力——一边看电影一边写代码都行。
但学高等数学一样,做一道难题时,我们常常有让周围保持绝对安静的想法。因为它太费神了——每一个关键的解答步骤,都需要经过大量的思考来完成。当然了,也有人能做得很熟练,可是,既然都很熟练了,就该进入下一个章节了,有何必要再刷下去呢?
如图所示。“思考阈值”之上代表的是“有效的思考”,而在阈值之下,则是“无效的思考”。
对于同样的思考深度曲线,对于写程序来说,由于思考阈值低,所以在大部分时间,自身的思考是有效果的,对于学数学来说,由于思考阈值高,所以我们很多时间自己毫无进展。
“有收获” 是前行的鼓励师。在状态不好的时候,写程序尚有一战之力,而学数学则完全歇菜了。而人不可能总是状态好,所以学数学也就难以持续了。
【2】反馈机制
代码编辑器和编译器是程序员的福音。有了它们,你一边写代码,一边发现自己哪里代码写错了,运行一下,就知道代码的逻辑是否通顺——这个反馈是实时的。
但学数学可没这样的编辑器。在你出答案前,没有人会警告你哪一步算错了。直到解完题目,对标准答案,你才会发现自己的错误——这个反馈是延时的。更何况,很多时候我们并没有答案(比如证明题),反馈都不一定有。学了半天,你都不知道自己掌握了多少。
实践表明,及时的反馈能激励我们前行。这是写代码比学数学的优势所在。
【3】思路连贯性
如果有一段代码大概需要连续写十个小时才能完成,给你五天,每天两小时,你能完成吗?
恐怕不能。因为写程序需要思路的连贯性。到了第二天,我可能要花上二十分钟来回顾第一天写了什么。到了第三天,我可能又要花上二十分钟来回顾第二天写了什么……把编程任务分割开,需要较高的边际成本。为什么程序员宁愿加班也不想把事情拖到第二天?因为它们想保持连贯思维的高效。
如果有一系列数学证明大概需要你连续做十个小时才能完成,给你五天,每天两小时,你能完成吗?
通常还是可以的。这不是说学数学的没有连贯性,而是它的连贯性没有那么强。而且,在两小时的高强度思考后,继续思考效率会明显降低,适当的休息反而会使大脑保持一个较好的学习状态中。
【4】有效思维长度
不知道你是否有这样的体会:
为什么会有这种感觉呢?因为写程序和学数学的有效思维长度是不一样的。
如下图所示:
“有效思维长度” 的长短,直接影响到我们的成就感,写程序容易积累有效思维长度,所以促使我们前行。而学数学容易长时间没有进步,所以容易让我们泄气。
综上所述,写程序思考阈值低、反馈及时、比较需要思维连贯、“小成就”接连而至,所以容易让我们沉迷其中;学数学起步费劲、反馈较慢、对思维连贯性要求不那么高、又容易长时间一无所获,所以对大部分人来说,不容易沉迷进去。
#
可以试着用用coq之类的编程语言做形式证明,看看你到底是喜欢编程还是讨厌数学 :)