以下内容出现在CS2013(Computer Science Curricula 2013,by ACM/IEEE-CS Joint Task Force ),选译于此供读者参考。当年,译者让12网工的两位女生来完成CS2013的翻译任务,可能直到现在她们都无法理解老师的苦心:让她们看看这些内容,思考一下自己的学习。希望当年她们没有为此翻译任务感到烦恼。 以下内容是经过修改、审阅的草稿(将一直是草稿)。2017年6月14日,译者注。
数学与计算机科学(CS)的许多领域有着深远且美妙的关联。几乎所有的本科CS专业的教学计划都包含多门数学课程,由于许多不同的因素,不同的院校对数学的要求又相当不同。例如,CS专业是否开设于工科学院直接影响了对微积分与(或)微分方程课程的要求。在某些工科学院,这些课程所包括的领域知识甚至远远超出大多数计算机科学专业的要求。同样,在某些院校的专业,比如文科类院校,课程数量会有所限制,也会导致针对CS专业的数学要求有特殊的限定。因此,CS2013 仅仅指定了我们认为与大多数CS专业本科生直接相关的数学要求(例如,基础集合论、逻辑学和离散概率等)。这些数学要求主要由知识体系中的离散结构(DS)知识领域给出。
我们认为,熟练应用数学的能力是对所有CS学生的一种重要要求。然而,CS2013区分两种不同的数学知识:一种是基础数学,它将影响到计算机科学许多领域,而且也包含在CS2013的知识体系中;另一种是领域数学,它们也重要,但是可能只与计算机学科中特定领域直接相关。例如,对线性代数的理解在许多计算领域起着关键的作用;例如,图与图算法的分析。然而,线性代数不一定是所有计算领域的必要要求(确实,许多高质量的CS课程没有明确的线性代数要求)。同样,虽然我们注意到概率与数理统计的应用在计算机学科中的发展趋势(反映在这些内容的核心学时数的增加),而且我们也相信在未来这种趋势将会持续下去,但我们也相信并非所有的CS专业课程计划都必须要求一门完整的概率论课程。
一般而言,我们相信CS课程必须为学生提供某种程度的“数学成熟度” (mathematical maturity)。例如,分析算法效率需要对算术操作有一定的理解,包括简单求和、级数等知识,但是给出大学水平计算机课程必要的基本算术的详细说明则超出了CS2013的范围。也就是说,一些课程规定微积分要求并不是要把它作为一种领域知识,而更多的是在大学教育的早期作为有助开发数学成熟度和数学思维清晰度的一种方法。因此,虽然我们没有指定这种数学要求,但我们注意到,本科CS学生需要有足够的数学成熟度为基础,才能在此之上建立CS专业的数学体系(例如,在离散结构知识体系中指出的知识),它没有明确要求微积分、微分方程或线性代数等重要的大学课程。
学生在进入计算机学科特定领域的高级课程学习时,很可能需要关注于与其特定领域相关的数学课程的学习。我们认为CS课程必须有助于除离散数学外的数学学习,让CS学生获得相关背景知识,帮助他们在所选择的特定研究方向进一步发展。这些课程的要求最好还是留给相应的课程计划和特定的CS领域方向去自行决定。
最后,要注意的是,为完整描述CS课程中的所有数学要求必须给出先修课程链,此时要注意先修课程链的长度不要太长。实际上,数学课程的先修结构可能不在计算机科学部门的管理范围内,但在设计教学计划时,为使得学生在没有更多的数学背景知识依然可以进修CS专业,仍要考虑这种数学的学习结构。将冗长的一系列数学课程作为CS课程的先修课程,会让学生觉得CS更难学习,使得他们在大学生涯的后期转入CS专业更为困难,并且(或)使得他们在大学学习的早期更难接触到CS相关的课程,这些都可能会阻碍学生进入CS领域。
小结文章中的观点:
1、数学很有用,但是有用也不一定要上很多,也不能用数学的难来吓唬学生。
2、数学的“用”也要有所区分,不能仅是单纯的思维训练,也不能仅仅是特定领域的数学。
3、让不同的课程计划和不同的领域方向决定自己的数学教育。以下课程(Rafael Pass的Discrete Structure简短实用,基本涵括CS2013 中明确要求的数学知识,供大家参考。