软件工程师需要数学的真正理由

原创 2002年02月25日 08:52:00

软件工程师需要数学的真正理由

作者: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) 是斯坦福大学语言及信息研究中心的执行主任

专业软件测试工程师必备之软件测试要学什么技能?

软件测试,作为软件开发最后的关键程序,软件工程师的要求则成为必然。所以作为一名合格的软件测试工程师,则要求掌握程序的方方面面的,虽然不一定各个方面都要精通,但是必须做到了解熟悉。软件测试工程师要学习的...
  • u014021801
  • u014021801
  • 2015年08月31日 20:10
  • 1683

测试职业思考:如何成为一名优秀的软件测试工程师

如何成为一名优秀的软件测试工程师                                                                                   ...
  • zhouyou1986
  • zhouyou1986
  • 2014年01月11日 18:00
  • 5696

模式识别,图像处理工程师的要求

转载:http://blog.csdn.net/houbin01/article/details/8051370
  • u011916318
  • u011916318
  • 2014年09月14日 21:57
  • 4089

身为软件开发人员你愿意做代码工人还是真正的软件工程师?

前两天看了一篇文章,说的是古今社会建筑工人的工作和待遇的对比情况,在古代社会,建筑师这个职业也是很受欢迎的,待遇也还不错,同时要求也高,建筑师不仅要懂设计,也要能把设计变成精美的实物;而当今社会中建筑...
  • niejingyu
  • niejingyu
  • 2012年03月28日 00:13
  • 1363

软件工程师需要计算机科学学位么?

本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2012/05/sweng-cs-degree软件工程师这个角色并不一定需要计算机科学学...
  • ricohzhanglong
  • ricohzhanglong
  • 2012年05月24日 01:28
  • 19294

做软件工程师需要具备怎样的能力和素质

软件工程师主要进行软件前期的项目需求的分析,然后对项目进行风险评估并试图解决这些风险,然后开始进行软件的开发,后期对软件的进度做相关的评估。 一个比较贴切的比喻:把一款软件比做一座大桥,那么软件工程师...
  • mumuzi1314
  • mumuzi1314
  • 2013年09月02日 21:23
  • 2396

嵌入式软件工程师成长---所需要看的书籍

图书   C语言   《C Primer Plus,5th Edition》【美】Stephen Prata著   The C programming language《C程序设计语言》 ...
  • duanfeiteng0814
  • duanfeiteng0814
  • 2016年06月07日 21:06
  • 409

成为谷歌软件工程师你需要准备什么?

http://blog.jobbole.com/79736/#comment-78198 首页 最新...
  • wed110
  • wed110
  • 2014年11月25日 17:23
  • 995

应聘嵌入式软件工程师需要准备些什么?

 嵌入式软件笔试考的一般是c语言、c++、数据结构,其他的很少......   我把我自己如何准备笔试的大概过程分享如下:   首先,《c语言深度剖析》,非常有用的一本书,笔试经常是出里...
  • u014530704
  • u014530704
  • 2014年11月01日 19:24
  • 1012

软件工程师需要知道的通用数据保护GDPR条例

本文要点 你不能忽视GDPR,但也请不要为此感到困扰。在软件开发当中,可以很容易地根据GDPR要求细则来扩充文档。每一款软件都应该考虑到隐私问题。需要小心对待用户的权利。在软件开发当中需要重新审...
  • u011001084
  • u011001084
  • 2017年12月19日 14:21
  • 75
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:软件工程师需要数学的真正理由
举报原因:
原因补充:

(最多只允许输入30个字)