软件工程师需要数学的真正理由
作者:Keith Devlin
翻译:g9yuayon
本文译自 The Communication of ACM 第44卷,2001年第10期
软件工程师们常常宣称他们从来不用在大学里学到的任何数学知识. 说到这个,他们还会说连大学里学到的计算机专业知识都用不了多少。我搞了三十年数学,就让别人来谈计算机专业方面的情况,不过就数学的使用情况而言,我不得不坦白承认那些软件工程师太对了:他们就是用不着大学里学的数学。
但他们也太错了。他们每天都运用着大学里学到的数学。
其实这没什么矛盾。关键在于“运用”这词何解。一种理解是软件工程师们曾在数学课上常碰到的。比如,在高数课上学了分步积分法后,学生们就用该方法解相应的练习题和考试题。这种所谓的“运用”最为常见,而且也是当软件工程师说他们从不用大学数学时所暗指的。不过,这种理解建立在把人的学习方式看作“填鸭”的观点上。
根据这种“填鸭”观,教育主要就是把知识灌到我们头脑中,而运用我们所学主要就是把灌进去的东西再倒出来。我敢说,这种教育观高度简化而且错了。不过,现行教育制度(我也置身其中)下,人们开课,然后设置三小时反刍般的笔试(译注:三小时的笔试是北美很多大学期末考试的标准)来检验课的效果。正是这种方式,一次又一次滋养了教育是填鸭的观念。
相比之下,数十年来所有关于大脑工作方式及学习方法的大量研究都表明,掌握知识和像算法般的系统化做事步骤不过是人们学习过程的表象(我们知道那些是表象,因为我们一般都会在期末考试后飞快地忘记课堂上学到的东西)。教育的真正价值不在于此。我们的大脑或许是世上适应性系统的最佳范例。当我们让大脑经受长期的教育,大脑就会发生永久性的改变。从身体角度讲,大脑中某部分传导神经纤维链进一步生长并得到加强。从功用和经验的角度讲,我们获取了新的知识和技能。学习过程重复得越多,上述的改变就越强越久。
重复学习在数学里展现的效果之强烈,其他学科无出其右。形式化数学大概有五千多岁。5000年在漫漫进化史中不过眨眼工夫,而且肯定只够我们的大脑做出最细微的改变。因此,虽然闪族人在5000年到8000年前提出抽象的数,人类的数学思维当在更久更久前便已发轫。我们在最初的自然选择中发展了思考大自然和社会的能力,但人脑中应数学思考而生的新改变将综合我们的能力,使我们不光能思考具象的世界,还能推演我们头脑所创照的纯粹抽象世界。
要人脑处理新层次上的抽象极度困难。这就是为什么直到18世纪数学家们才能自如地处理零和负数,也是为什么直到今天许多人都不能接受负一的平房根是真正的数。
但是,软件工程全跟抽象相关,它的每一个概念,观点,以及方法,都是完全抽象的。当然,很多软件工程师都不这样觉得,但这正说明了我的观点。他们从数学课上得到的最大收益便是曾对纯粹抽象的物体和结构进行过严格推演。而且,数学课是唯一给他们这种体验的科目。这种体验不在于那些课堂上教的重要东西,而在于其本身是数学化的。日常生活中,熟悉滋生出轻慢,而在学习如何在高度抽象的领域工作时,熟悉培养出的是种感觉,唔,熟悉的感觉 -- 就是说,曾经让人感到抽象的东西开始变得具体,因而变得比较容易对付。
尽管学习数学带给计算机专业人士的回报大过常人,但现今社会里每个人都能由此受益。例如,美国教育部1997年一项研究(The Reilly Report)表明,在高中修过严格的代数或几何课的学生在升学方面表现更加优秀,而且升学后的表现也更好,不管他们在大学里学的是什么。换句话说,看来完成一门严格的数学课 -- 学生们甚至不用学得多好 -- 是让人们提高自己思维能力,变得聪颖的绝佳方法。这种思维能力能让人们在各方面受益。
(我在自己的书,《数学基因:数学思考如何演进及数为什么像闲言碎语》(Basic Books, 2000)中,我更加仔细地分析了本文的观点,并确定了哪些生存优势致使人类有能力进行数学思考。)
如我在这篇短文中所指,学数学对软件工程师们的这种好处比对其他人大得多。其实,这是基本的先决条件。虽然并没在工程系学生的必修数学课的要求里被正式提到,但它的确是数学为什么有用的真正理由。
Keith Devlin (devlin@csli.stanford.edu) 是斯坦福大学语言及信息研究中心的执行主任