31. 培养学生解决复杂工程问题的能力,不能简单地理解为让学生参加几个复 杂工程的设计开发,而是要将其分解落实到日常的教学活动中。而这一点正好 与课程教学重在落实毕业要求,而毕业要求聚焦的是解决复杂工程问题能力的 培养是吻合的。 承担课程教学任务的教师要在课程教学活动的各个环节中落实培养学生解 决复杂工程问题的能力,首先必须深入理解工程教育中复杂工程问题的内涵, 然后将其分解落实到课程教学的各个环节中。 为此,本章首先详细讨论复杂工程问题的特征,然后讨论解决复杂工程问 题能力培养的分解落实。 复杂工程问题的特征 《中国工程教育专业认证标准》通用标准中明确地给出了复杂工程问题的 定义。复杂工程问题具体包括如下7个特征: (1)必须运用深入的工程原理经过分析才可能解决。 (2)需求涉及多方面的技术、工程和其他因素,并可能相互有一定冲突。 造性 ( 。 3)需要通过建立合适的抽象模型才能解决,在建模过程中需要体现出创 (4)不是仅靠常用方法就可以完全解决的。 (5)问题中涉及的因素可能没有完全包含在专业标准和规范中。 (6)问题相关各方利益不完全一致。 (7)具有较高的综合性,包含多个相互关联的子问题。 这7个特征既给工科本科教育提出了基本要求,也使教师在组织教学内 容、开展教学活动、评价教学产出时能够对照检查解决复杂工程问题能力的培 养的分解落实和实施情况。由此可见,不仅专业负责人要领会复杂工程问题的 7个特征的要义,每一名承担教学任务的教师都必须深入地领会这7个特征的 要义。只有深入地理解了,才能比较好地在教学活动中落实。 首先必须强调,解决复杂工程问题的能力最突出的特点是通过基于深入工 程原理的分析和设计完成问题的求解,体现出强烈的创新要求,特别是很好地 体现了工程师承担的工作的特征及其与技术员、技术工人承担的工作的根本区 别。第(1)点是复杂工程问题的本质特征,第(2)~(7)点是复杂工程问 题本质特征的6种表现。 第(1)点无须讨论。 第(2)点的关键是涉及多方面的因素及这些因素之间的冲突。通常来说, 这些因素两两之间的冲突往往已经有一些可供参照的例子,但在实际场景中更 多因素相互冲突往往无例可循,所以绝大多数时候还是需要运用深入的工程原 理通过分析寻找解决方案。 第(3)点,对实际问题建立抽象模型。通常,已经被解决的实际问题不 需要重新建立模型。所以,要么是有新的思路,要么是面对新的问题,所以都 需要运用深入的工程原理通过分析去解决。从这一点可以看出,建立模型,而 且是建立抽象模型,并且基于抽象模型解决问题,对工科学生来说是极为重要 的。所以,工科学生学好数学、自然科学是非常重要的。 第(4)点,既然仅靠常用方法不能完全解决问题,也就是说,要想完全 解决问题,就需要有新的方法,新的方法需要从基于深入的工程原理的分析和 设计中来,或者需要打破常规重新寻找。 第(5)点,作为一项工程,为了保证其设计开发的合理性、安全性等, 通常都需要依据标准进行。如果一项工程中涉及的因素没有完全包含在专业标 准和规范中,那么很可能这项工程还没有成熟的解决方案。这类问题的求解往 往也必须基于深入的工程原理进行分析和设计,甚至一些相关的经验也需要经 得起基于深入的工程原理的分析。 第(6)点,问题相关各方利益不完全一致时,就必须站在工程开发全局 的立场上折中解决,这时同样需要通过基于深入的工程原理的分析和设计去 解决。 第(7)点,“ 综合性”和“相互关联”体现了“系统”的要求,需要设计 开发者能够站在系统的高度去考虑问题,对基本原理和相关的问题求解思想和 方法能够综合运用,这同样需要基于深入的工程原理的分析和设计作为基础。 下面逐条进行讨论。 3.1.1 必须运用深入的工程原理经过分析才可能解决 总体上讲,这句话体现了工程师工作的基本特征。那就是,他们能够针对 某一项实际需求,运用深入的工程原理,通过深入的分析和恰当的设计去解决 该问题。也就是说,这类问题的解决没有固定的、简单重复的规程、方法,而 是需要从深入的(不是浅显的)基本原理出发,且需要经过分析(不是直接套 用)才可能解决。这就要求理论教学必须包括足够深入的基本原理,而且要强 调使学生学会分析和使用典型思想和方法,从而使学生具备扎实的理论基础 (基础理论和专门知识)以及分析问题的能力。相应地,实践教学要给学生提 供在理论指导下开展实践的机会,不仅使他们经历相应的实践,而且还要在实 践中加强对相关原理的理解,并能更好地掌握相应的思想和方法。 基于深入的基本原理、经过分析等要求从另一个角度清晰地提出了本科教 育面向未来、面向创新的基本追求,也否定了那些认为“学了很多理论知识” “动手能力弱”、要“回归动手”的片面说法和做法。而那些以“职业培训” “产品教育”替代本科教育的做法更是与本科教育格格不入的。 对于理论基础,要追求“学会”。教了不等于学了,学了不等于学会了, 学会了的标准就是会应用。本科生作为未来的工程师,必须强调理论指导下的 实践,而不是简单的实践。我们必须强化这样的意识,那就是在解决复杂工程 问题的层面上, “ 动手能力差”很可能是“动脑能力差”。因为在解决复杂工程 问题上,无论从哪方面讲,动脑必须比动手占据更大的比例。 那么,有哪些基本原理呢? 根据“工程是包括数学、自然科学和工程知 识、技术和技能整体的、有目的性的应用”这一基本定义,从课程体系来讲, 数学类(如高等数学、线性代数、概率与数理统计、数值分析、工程数学、数 学建模,以及与专业相关的数学,如计算机类专业的离散结构、组合数学、形 式语言与自动机理论等)、自然科学类(如大学物理、大学化学、大学生物 等)、学科专业基础类、专业类课程是必需的,而且它们包括的不仅仅是基本 概念和结论,更有思想和方法。 《中国工程教育专业认证标准》要求:数学、自然科学的教学内容不能低 于总学分的15%,数学与自然科学类课程要能够使学生掌握理论和实验方法 , 为学生表述工程问题、选择恰当数学模型、进行分析推理奠定基础。工程基础 类、专业基础类和专业类课程不能低于总学分的30% 。专业基础类课程也可 以说是学科基础类课程,包括学科的基础内容,能体现数学和自然科学在本专 业应用能力培养中的作用;专业类课程及实践环节能够体现系统设计和实现能 力的培养。工程实践与毕业设计不能低于总学分的20% 。此外,作为工程, 不能脱离社会。所以,人文社科类课程(不少于总学分的15%)要能够使学 生在从事工程设计时考虑经济、环境、法律、伦理等各种制约因素。 因此,在专业课程体系中,以所谓“专业的需要”为理由过度削减数学类 课程、取消自然科学类课程、弱化专业基础类课程、用“职业培训” “ 产品教 育”替代专业课程都是十分错误的,是达不到本科教育基本要求的。 教育有两个基本矛盾,那就是学生在校时间的有限性和知识的无限性之间 的矛盾和教育的基础性和探索与创造的未来性之间的矛盾。要有效地利用4年 有限的时间为学生面向未来解决实际问题、迎接一个又一个挑战奠定坚实的基 础。本科教学对深入的工程原理的要求正好为解决好教育的这两个基本矛盾提 供了路径。 对理论课来说,课程必须保证对基本原理的涵盖,绝不可以因为某些内容 太难,学生不容易学明白,甚至教师自己也解释不清楚或者解释起来比较困 难,就将其删去。另外,照本宣科式的授课也不能满足要求,那种“念念 PPT 、读读教材”的做法是不能满足要求的。教师的授课重点应该是引导学生 不断地发现问题、分析问题、解决问题,甚至在一个问题被解决后,新的问题 又出现,又对新的问题进行分析并解决之。要做到教师在对问题的分析中教 , 学生在对未知的探索中学,这既是研究型教学的核心要义,又能很好地体现科 学和技术的不断进步,使学生在这些进步中学到更多的东西。 对实践课来说,一个重要的问题是,选择的项目作为培养学生解决复杂工 程问题的载体必须能够使学生在理论的指导下完成。所以,项目不能是简单的 动手(操作), 而是要基于原理、通过分析、经过设计去解决问题。也就是说, 解决复杂工程问题,动脑是动手的前提。在这个层次上表现出来的“动手能力 差”,其实质很可能是“动脑能力差”。有必要在这里澄清一个说法:“ 有的学 生课程(理论)学得(成绩)很好,就是动手能力弱一些。”这种说法实际上 是不准确的,甚至是错误的。就目前来看,“ 课程(理论)学得(成绩)很好” 不一定是真的学得好,很可能是教师所给的成绩出了问题,也就是说这个成绩 并没有真正表明学得有多好,也许学生只是记住了考试要求的内容。按照 OBE 的理念,真正学会了,必须是会用的。 所以,对学生来说,要想真正学会,简单地记住是不行的,必须通过能够 体现“运用深入的工程原理经过分析解决问题”的训练,运用所学,经过分析 去解决问题。 2021 年开始执行的《中国工程教育专业认证标准》中的《计算机类专业补 充标准》要求:“ 必须保证学生受到足够的训练,包括课程作业与专业实践环节。 专业课程,特别是基础类课程必须有数量和难度与培养学生解决复杂工程问题能 力相适应的作业。”其目的是要保证学生的训练是到位的。而且必须注意到,学 生的训练并不是部分人理解的“实验室类环境下简单的动手”,而是要根据不同 课程的不同要求,开展相应的训练,这就是专(“) 业课程,特别是基础类课程必须 有数量和难度与培养学生解决复杂工程问题能力相适应的作业”所表达的含义。 例如,高等数学、离散数学、形式语言与自动机理论等数学类课程就不适宜安排 学生进行上机实验。因为这类课程追求的是让学生学习科学研究三大范型中的理 论范型,学习如何用符号表达对象,用符号的变换(包括其值的变化)表达对象 的运动和变化,用抽象模型表达事务,并通过对抽象模型或基于抽象模型的分 析、推理实现对事务本质的探索,以此实现对学生抽象思维能力和逻辑思维能力 的不断强化。而这种能力的培养,要求学生能够耐得住寂寞,不怕难题,不怕枯 燥,能够坐得住板凳,能够独立地解决问题。 3.1.2 需求涉及多方面的技术、工程和其他因素,并可能相 互有一定冲突 对于复杂工程问题的第二个特征,有以下几点需要注意。 第一,课程体系和课程内容需要包括本专业的基本内容,要努力体现多学 科背景和多学科环境,特别要考虑有关应用领域和学科的相关内容,甚至要求 和鼓励学生跨专业选修课程,要避免把专业教育限定在非常窄的方向甚至技术 上。例如,对计算机科学与技术专业来说,就不能把学生培养成诸如“我是学 Java的”“ 我是学.NET 的”那种于只会使用一种语言(开发工具)进行程序 实现的人。 第二,相应的教学内容要包含多因素、多技术,要讨论它们的长处与短 处,让学生学会选择和折中、借鉴和综合,学习局部服从全局,从全局的角度 考虑问题,追求系统性能的总体最优。 第三,要注意“可能相互有一定冲突”这一点。一个工程会涉及方方面面 的问题,不仅在技术问题上会有冲突,而且在社会、环境、法律,甚至伦理、 道德等等方面也可能会有冲突。所以,让学生学会解决矛盾、化解冲突是工程 教育必须考虑的,特别是对承担设计任务的未来工程师来说,在这方面必须得 到足够的训练,让学生体验如何站在系统的全局处理这些冲突,并通过对这些 冲突的化解,设计和构建一个全局最优且对相关各方都在受限条件下给予了充 分考虑的方案。具体地,教师还可以在教学案例、学生的常规练习题等的选 择、设计中体现“需求涉及多方面的技术、工程和其他因素,并可能相互有一 定冲突”这一特征的要求。 此外,前面已经提到,不同的专业对多学科背景和多学科环境的要求是不 同的。有时需要跨二级学科,有时需要跨一级学科,有时甚至需要跨诸多学科 领域,这需要根据实际情况确定。另外,很多专业本身就处于多学科背景下, 离开了多学科,就失去了专业的本质特征。 3.1.3 需要通过建立合适的抽象模型才能解决,在建模过程 中需要体现出创造性 建立抽象模型时,必须基于深入的工程原理、经过分析,通过去伪存真、 去粗取精,抓住主要矛盾,提取主要关键特征,并用以符号表示为特征的形式 化模型对某一未曾具体求解过的实际问题进行表示,并基于这种表示对问题进 行研究和处理。所以,“需要通过建立合适的抽象模型才能解决,在建模过程 中需要体现出创造性”这一特征进一步体现了复杂工程问题“必须运用深入的 工程原理经过分析才可能解决”的本质特征。 所以,培养学生理解抽象模型,能够根据实际需要选择抽象模型,通过形 式化处理并基于基本的抽象模型来构建抽象模型以表示问题(系统的状态和状 态的变化规律), 基于抽象模型进行问题分析,基于抽象模型进行问题求解, 甚至基于抽象模型研究问题的性质,基于抽象模型进行工程设计与实现,等 等,都应该作为工科本科教育的基本要求。例如,编译原理中的LR 分析方法 就是非常典型的基于语言的抽象描述模型文法进行语法分析系统的设计与实现 的例子。 说到培养工科本科生建立抽象模型能力的要求,《华盛顿协议》在关于工 程知识的要求中有这样一段描述,“WK2(数学与计算机):适用于本专业所属 学科的、用于支撑分析和建模的、以概念为基础的数学、数值分析、统计学及 计算机与信息科学的通识内容”,可见数学和计算机在支撑分析和建模上有着 重要意义。前面提到,目前被科学研究界广为认可的三大研究范型包括理论、 实验、计算,而抽象模型在其中所占的地位绝对是基础性的。从一定的意义上 说,数学就是基于以符号表示为主要特征的抽象模型描述来研究问题的学科, 抽象模型是其进行分析推理的基础。物理学的重要特征就是通过实验发现规 律,建立模型,并基于模型进一步研究相关的问题及其性质,获得对事物的新 认识和对新事物的认识,发现新的规律,而这些新的认识、新的规律往往都是 以抽象模型的形式或者基于抽象模型表示的。计算的基本特征就是抽象和自动 化,而抽象则是自动计算的基础。 在对编译原理的研究中,Knuth就是通过提出语义的属性表示和计算实现 了先进的属性文法,提高了编译系统中语义分析的效率。所以,对于将计算学 科作为其基本(第一)支撑学科的计算机类专业来说,培养学生建立抽象模型 和基于模型建立处理系统、对问题进行分析、实现问题的求解的能力是极为重 要的。所以,计算机类专业学生的培养,特别是解决复杂工程问题能力的培 养,必须强调数学和自然科学的教育。而数学和自然科学课程的基本课程目标 应该是“使学生掌握理论和实验方法,为学生表述工程问题、选择恰当的数学 模型、进行分析推理奠定基础”,而绝对不应该只是为学生准备数学工具,只 让他们求求极限、算算微分和积分。 计算机类专业的学生需要在数学和自然科学课程中获得关于抽象模型的基 本知识、基本模型以及基于模型的演算、推理、分析的基本思想和方法,然后 在专业基础类、专业类课程中运用,实现数学和自然科学在本专业应用能力培 养中的作用。 实际上,在专业基础类和专业类课程中都有大量描述专业问题的抽象模 型,例如,高级语言程序设计课程中描述数据的简单变量、数组、结构,描述 程序控制流的结构,数据结构与算法课程中的各类数据结构和算法模型,数据 库系统课程中的关系模型及其建立在此模型上的分析和操作,编译原理课程中 的文法、自动机,操作系统课程中的进程状态以及描述进程的PCB,等等。承 担专业基础类和专业类课程的教师一定要强化模型意识,要引导学生在分析问 题的基础上建立相应的抽象模型,然后基于这些模型设计处理方法和过程,而 不是简单地讲讲定义所指的概念。通过这样的教学,学生就能够比较好地学习 专业的基本知识、典型模型、典型思想和方法。另外,专业类课程的教师要有 意识地在课程设计、实习、毕业设计等实践环节,甚至在理论课程的习题中安 排相应的内容。一个基本追求是要让学生有机会基于基本原理完成模型理解、 模型选择、模型构建、模型处理甚至模型计算和基于模型的工程实施。 停留在简单地套用模型的层次上是无法满足要求的。 3.1.4 不是仅靠常用方法就可以完全解决的 常用的方法无法完全解决问题,就需要综合,需要寻求新的方法。当然, 新的方法可以是受已有方法的启发、由已有方法改造而来的,也可以是多种方 法综合而来的。这体现的是对学生综合能力和开发能力的要求。 毕业要求第5条指出:“ 能够针对复杂工程问题,开发、选择与使用恰当 的技术、资源、现代工程工具和信息技术工具,包括对复杂工程问题的预测与 模拟,并能够理解其局限性。”其中“恰当的技术、资源、现代工程工具和信 息技术工具”往往不是现成的,无法通过选择来解决,此时就需要开发。复杂 工程问题“不是仅靠常用方法就可以完全解决的”这一特征与其是吻合的。 这方面的教育需要多环节协同。 例如,在课程内容选择上,要注意引入体现这种性质的问题,在教学实施 中引导学生通过综合一些方法甚至一些问题求解思想获得问题的求解思路。对 这类问题,还可以注意体现不同的求解过程、不同方法和思想的综合利用等。 在学生的训练上,专业类课程和专业基础类课程要有相应的难题,不能是直接 套用定理、定义、方法的题,要引导学生深入思考,综合运用已经学过的内 容。所以,一定要安排更多综合性和设计性习题。 在实验的安排上,需要从验证性实验开始,更多地强调综合性实验和设计 性实验,让学生递进地在可完成的层面上学会根据目标、基于原理寻求方法 , 实现问题的求解。课程设计、科研实习和毕业实习,尤其是毕业设计,一定要 选择“不是仅靠常用方法就可以完全解决”的问题,给学生相应的练习机会。 实际上,无论是一般的习题还是实践项目,都需要根据课程目标达成的需 要进行设计,不是随便拿来就可以的。包括很多来自企业生产实践的实际题 目,也不一定能够直接满足教学的要求。 3.1.5 问题中涉及的因素可能没有完全包含在专业标准和规 范中 前面已经提到,一个工程为了保证其设计开发的合理性、安全性等,通常 都必须依据标准进行。但是,工程又是解决实际问题的,如果某一工程已经存 在了,就不存在设计开发的问题。所以,工程的设计与开发通常都是在新的环 境下或者面向新的需求进行的,是“新的工程”,往往会涉及很多新的东西, 这些新的东西往往还没有被完全包含在专业标准和规范中。实际上,很多专业 标准和规范也是在实施的过程中不断丰富、不断改进的。 虽然复杂工程问题具有问(“) 题中涉及的因素可能没有完全包含在专业标准 和规范中”的特征,但问题求解都是符合基本原理的,这就要求学生能够根据 工程实际,灵活运用所学,同时考虑与工程相关的社会、环境、伦理、道德等 因素,统筹地、创造性地进行问题求解。 与第4个特征一样,在教学中对本特征的体现也需要进行设计。这不仅涉 及教得是否到位,也涉及学得是否到位。 应该承认,在高等教育处于以扩充规模为主要特征的外延式发展阶段,存 在着一些教师和学生达不到本科教育的基本要求的情况。包括极少数学生缺乏 刻苦学习、勇于探索的精神,甚至有的学生只求及格,不愿意碰难题,甚至不 愿意去碰稍有难度的题。久而久之,就退化到只会“照葫芦画瓢”的状态。在 这种情况下,教师高标准、严要求的想法也渐渐消失,加上担心学生考试不及 格、不能毕业,使得课程越变越“水”,对人才培养的质量和水平产生了很大 的影响。一些专业甚至出现了市场需求远远大于毕业生的总量,但很多毕业生 仍然找不到工作的情况。 3.1.6 问题相关各方利益不完全一致 与复杂工程问题的“问题相关各方利益不完全一致”这一特征对应的原则 主要是利益均衡与折中,局部优化服从于全局优化,次要服从于主要。 从这一点也可以看到,本科教学完整的内容体系绝不仅仅是专业知识,学 生还需要学习相关的学科方法学的内容。本特征直接涉及的就是计算学科方法 学中方法论意义上的12 个基本概念中的“折中”。 要实现合理的折中,就必须站在系统(工程)全局的视角协调各方不同的 利益,因此,对相关各方利益的基本评估是基础工作之一。教学中要使学生形 成这种意识,学习相应的方法。例如,毕业要求第3条(“ 能够设计针对复杂 工程问题的解决方案,设计满足特定需求的系统、单元(部件)或工艺流程, 并能够在设计环节中体现创新意识,考虑社会、健康、安全、法律、文化以及 环境等因素”)、毕业要求第7条(“能够理解和评价针对复杂工程问题的工程 实践对环境、社会可持续发展的影响”) 和毕业要求第11 条(理(“) 解并掌握工 程管理原理与经济决策方法,并能在多学科环境中应用”) 都要求学生考虑相 关的因素,协调相关各方的利益。 3.1.7 具有较高的综合性,包含多个相互关联的子问题 这一特征体现问题和系统的规模、难度、复杂度、综合性,同时涉及分治 这一典型的问题求解方法以及自顶向下、逐步求精的系统设计思想。 要强调培养学生的系统观,不断增强其系统能力。所谓系统能力,就是要 强化学生的系统观,主要内容包括3方面。 第一,使学生能够站在系统的高度,以系统的视角看问题,全局地掌控系 统,适应错综复杂的场面。 第二,努力追求问题的系统求解,而不是把眼睛定在实例上。对很多问 题,甚至需要先建立问题的(抽象)模型,然后再基于建立的模型完成问题的 求解,以保证工程实现的完备性,实现问题的系统求解,而不至陷于局部,也 不至只能针对一些现象而忽略了对整个问题空间的覆盖。 第三,能够面向系统进行子问题求解,具备胸怀全局的设计能力。这就要 求学生即使没有承担整个系统的设计任务,也应该在设计和实现子系统的时候 从系统的全局出发考虑问题,保证设计实现的子系统能够很好地融入整个系 统。这样也能够很好地与系统设计与实现中的同行进行有效的意见沟通和交 流,并能够顺畅地获得符合整个系统性能优化要求的结果。 根据上面的要求,学生不仅要学习系统、分系统,还要学习它们的设计和 实现,通过设计和实现得到相应的锻炼。这包括两部分内容。一部分是对有关 系统及其设计和实现原理的学习。例如,对计算机类专业的学生来说,操作系 统原理、编译系统原理、数据库系统原理、计算机组成原理、计算机体系结构 等都已被证明是培养系统观的最佳知识载体。另一部分是相应的实践/实验环 节,例如,操作系统核心模块的设计与实现、受限语言编译系统的设计与实 现、指定的信息管理系统的设计与实现、简单CPU 的设计与实现等。这里作 为例子所列举的系统的设计与实现,基本上是计算机类专业培养方案中都包含 的。需要注意的是,无论哪一个系统,都必须在难度、规模、完成质量上有适 当的要求,特别要注意要求“在理论指导下的实践”,而不是简单的、设计成 分很少的实践。例如,信息管理系统的设计与实现就不能只弄几个表简单地查 查填填,至少应该包括基于函数依赖分析的关系模式规范化等内容,有条件的 甚至可以要求对多值依赖问题、系统不断更新升级等方面的内容。 从以上7个特征可以看出,解决复杂工程问题,要求学生能够灵活地、综 合地、创造性地运用所学的知识、技术、思想方法。对学生进行包括创新意 识、创新能力在内的培养必须落实到第一课堂中,而且这是主战场、主渠道。 这需要大家有意识地在第一课堂的教学过程中具体落实。那种觉得创新高不可 攀,只是一个笼统的口号,或者将创新能力培养简单地放在隶属于第二课堂的 科技活动中都是不对的,而将学生在科技竞赛中获得的奖项作为对学生创新能 力培养水平的重要标志也是不可取的。尤其是那些为了参加竞赛“拿名次”而 牺牲正常的课程学习的做法更是错误的。 每门课程都承担着培养学生解决复杂工程问题能力的任务,包括最基础的 离散数学、程序设计、数据结构与算法以及高等数学、线性代数、概率与数理 统计、大学物理等。相应的课程教学在这方面的作用发挥到什么程度,与对上 32. 述7个特征的体现程度密切相关。因此,教师应该对照这7个特征,重新审视 自己承担的课程,评价一下体现了哪些特征,怎么体现的,有效性如何,哪些 地方还有潜力可以挖掘,等等。不断地总结经验,不断地进步,使学生解决复 杂工程问题的能力得到高水平的培养。 解决复杂工程问题能力培养的分解落实 根据《中国工程教育专业认证标准》,本科工程教育的基本定位是培养学 生解决复杂工程问题的能力。而本科教育实现的主渠道、主战场是培养方案规 定的所有教学环节,包括要求的所有理论课和实践课。也就是说,每一门课 程,无论是公共基础课、专业基础课还是专业课,无论是必修课还是选修课, 无论是理论课还是实践课,都应该承担培养学生解决复杂工程问题的能力的任 务,也就是说,它们都必须对培养学生解决复杂工程问题的能力作出贡献。所 以,学生解决复杂工程问题能力培养必须通过整个培养体系实现。要将此任务 进行分解,落实到培养的各个环节中。 特别需要指出的是,“复杂工程问题”和“解决复杂工程问题的能力 ” 是 两个不同的概念,不能将培养学生“解决复杂工程问题的能力”狭义化为参加 具体复杂工程的开发,甚至仅仅依靠毕业设计、综合实践等一两个实践环节 实现。 因此,必须从课程体系设计、课程内容设计、课程教学实施、课程教学结 果评价各方面都将培养学生解决复杂工程问题的能力作为基本追求。关于课程 体系设计的问题,将在第4章中进行讨论,这里只讨论课程内容的设计问题。 3.2.1 理论课程内容设计 按照培养学生解决复杂工程问题能力的需要设计理论课程内容。 这里的设计包括选择和组织恰当的知识载体,知识载体所承载的典型问题 求解思想和方法等教学内容,而且在设计中要注意体现复杂工程问题的特征。 第一,课程内容必须包含相应领域的深入工程原理,而不仅仅限于其简单 内容。要包括完整的基本内容,而不是简单地知道、简单地计算等,必须达到 一定的深度。决不能因学生学起来不是很容易,或者教师不太容易讲清楚,就 将基本内容删除。实际上,学习难度较大的内容,不仅可以锻炼学生的思维能 力,而且可以锻炼学生的意志品质,而不怕困难、迎难而上的意志品质对解决 复杂工程问题是非常重要的。一名学习中怕困难、坐不住板凳、不愿意读书的 学生,未来就不能够沉下心去解决别人解决不了的问题。实际上,在高等教育 规模扩张的过程中,确实存在一些专业和课程“一味地迁就”,使得很多课程 成了“水课”,根本达不到本科教学的要求。 第二,课程内容要包含问题求解的思想和方法。本科教学中,知识在很大 程度上起着载体的作用,学生通过对知识及其发现过程的探讨学习相关的思想 和方法。由于在解决实际问题的过程中,除了需要综合运用知识外,还必须选 择和使用恰当的思想和方法,这些思想和方法就是知识作为载体的精髓。所 以,除了选择恰当的知识外,更重要的是要包含相应的思想和方法,特别是学 生在其职业生涯中将反复用到的本学科典型的思想和方法。对于高水平课程的 建设来说,这也是必要的。例如,对计算机类专业来说,自顶向下、自底向 上、逐步求精、递归求解、模块化、分治等典型方法需要作为基本的教学内容 包含在相应的课程中。同时在设计中要给学生提供解决问题的锻炼机会,使他 们有机会学习如何利用这些思想和方法解决问题,以进一步体会这些思想和方 法的精髓,并取得宝贵的应用经验。 第三,课程要有充分的分析内容。通过分析引导,促使学生掌握分析的基 本方法,形成分析意识,养成分析习惯,学会分析,并通过分析能得到有效结 论。这样才能唤醒知识的灵魂,使深奥的知识活起来。这一点对一些抽象程度 比较高、学习起来比较枯燥的课程来说更为重要。而且这类课程对本科生的成 长,尤其是他们的可持续发展是非常重要的。例如,高等数学、概率与数理统 计、大学物理等公共基础课,计算机科学与技术专业的离散数学、形式语言与 自动机理论、编译原理、数据库系统原理等学科基础课,都是非常重要的,又 是比较难学的。它们难就难在抽象和形式化,难就难在其问题的求解需要用与 以前不一样的思路和方法,甚至需要不同的思维习惯,难就难在让人感到比较 枯燥,而且初学者又很难体会到它们的内容是非常有用的。 也许有人会说,分析的内容会随着教学经验的积累自然形成。这种说法有 一定的道理。但是,有意识、有目标地做一件事情,显然会比无意识、凭感觉 做一件事要做得更到位。尤其是对在这方面经验不是很丰富的教师来说,事先 进行适当的设计是很有必要的,可以使课堂教学更快地从必然王国走向自然 王国。 无论是知识还是思想和方法,都应该在课程的教学大纲中给予具体描述。 在传统的教学大纲中,教学内容仅仅是一些知识点,这是不够的。如果把教学 内容描述成教材目录的形式,仅仅给出各章各节的题目,就更不能满足要 求了。 适当的理论课程内容的设计,使课程教学强调以知识为载体,让学生在学 习基本概念和基本结论的同时学会学科方法论的相关内容,并掌握相应的专业 技能,形成专业能力,这就是OBE 理念所追求的主要产出。既然是要体现在 学生身上的产出,就必须考虑实际需求与效果。所以,虽然我们强调深入的基 本原理,但不是单纯地、不切实际地(脱离毕业要求达成的需要)追求更多、 更深、更新的知识而忽略效果。 另一个主要问题是对选定的教学内容的组织,要在注意知识的逻辑性的基 础上,瞄准课程的教学目标来组织内容,以便更好地达成课程教学目标。 在教学大纲中,还必须将课程的教学目标与相应的毕业要求关联起来,以 便将课程真正置于整个培养体系中,摆脱“教师为本、课程为本、教材为本” 的传统课程教学模式。关于课程教学目标的设计,将在4.5节进行具体讨论。 当然,在选择教学内容的时候,既不能“因难而删”,也不能简单地追求 新与深。一切以有效利用有限的时间取得更好的教学效果为目标。也就是能以 这些知识为载体,更好地培养学生解决复杂工程问题的能力。需要牢牢记住的 是,我们追求的是学生身上的产出,而不是教师教学中的输出。 3.2.2 理论课程教学实施 按照培养学生解决复杂工程问题能力的需要开展理论教学活动。 首先是“教”要引导到位。课程教学要落实教学大纲的规定。所以,引导 到位的第一个基本要求是要向学生讲清楚本课程的课程目标,以及课程目标与 专业毕业要求达成的关系,并讲清楚达成课程目标的各级标准。这样使学生能 够在明确的课程目标的引导下,更高效地开展课程学习。第二个基本要求是使 学生通过本课程的学习能够掌握一些深入的基本原理,理解其精髓,掌握相关 问题的求解思想和方法,并能够将基本原理与工程实践问题有机地结合起来, 探讨应用的方法,体验应用的乐趣。 在整个教学过程中,绝不能照本宣科、满堂灌,要有充分的分析内容。要 采取研究型教学,通过“教师在对问题的研究中教”和学(“) 生在对未知的探索 中学”的有机结合,尽可能多给学生一些有效的引导。引导他们积极探索和思 考,促使学生掌握分析的基本思想和方法,使他们逐渐养成分析、探索的习 惯,学会分析和探索,并能得到有效结论。要适时、适当地归纳总结,将知识 和方法等“串”起来,以利于学生综合使用。还要设计恰当的环节,给学生提 供解决问题的锻炼机会。 其次是“学”一定要深入。“师傅领进门,修行在个人。”教师的“教”, 并不等于学生的“学”,只有通过学生有效深入的“学”,才能最终达成课程目 标。要深入地“学”,就必须训练到位。就一门具体的课程来说,训练包括直 接针对基本理论的各种习题以及课程目标要求完成的课程实验或者相关的课程 设计。 因此,教师并不是为“教”而教,而是要引导学生学习,不仅要学会本课 程讲授的内容,而且要想到学生应该在未来有能力学习更多的、更新的内容, 适应社会不断发展的需要。以此来助力解决“学生在校时间的有限性与知识无 限性”和“教育的基础性和探索与创造的未来性”这两大矛盾。 学习除了听教师讲解、得到适当引导外的“学”,必须包括预习、复习、 练习的“习”,通过“习”将书本中的内容和教师的讲解变成学生自己的东西, 这是必不可少的训练过程。所以,要想达成课程目标,必须强化对学生的训 练。2021 年实施的《中国工程教育认证标准》中的《计算机类专业补充标准》 就特别指出:“ 必须保证学生受到足够的训练,包括课程作业与专业实践环节。 专业课程,特别是基础类课程必须有数量和难度与培养学生解决复杂工程问题 能力相适应的作业。”以此来强调学生必须具备扎实的基本功,要求他们深入 读书、严格训练。绝不能倡导“快餐文化”,更不能倡导“产品教育”,它们与 本科教育强基础不相容。 例如,编译原理曾经是计算机软件专业的一门专业课。而计算机技术发展 到今天,对绝大多数计算机科学与技术专业的人才来说,他们的工作范围早已 不限于编译系统、操作系统、数据库管理系统等基础软件系统和计算机基本硬 件系统的设计开发,而主要是进行应用系统的设计、开发、部署,因此,从一 定的意义上说,编译原理可以作为专业技术基础课程来安排教学。作为专业技 术基础课程,其课程目标就应该做适当调整。作者就是将“掌握终生受用的基 本思想与方法,在系统级上再认识程序和算法,提升计算机问题求解水平,增 强系统能力,体验实现自动计算乐趣”作为编译原理这门课程教学的最基本课 程目标。具体地,学生要努力掌握程序变换的基本概念、问题描述和处理方法 (具体包括自顶向下、自底向上、逐步求精、递归求解、目标驱动、问题的抽 象与形式化描述、算法设计与实现、数据结构的选择与使用、系统构建、模块 化等); 要养成“问题→形式化描述→计算机化”的问题求解习惯,推进从实 例计算到类计算和模型计算的跨越(探讨处理一类问题的方法,而不是处理某 个语言的方法;实现一种语言描述的程序的翻译,而不是某个程序、某个语句 的翻译;等等); 要增强算法设计与实现能力(课程教学仅仅给出分析算法的 基本思想,学生需要完成具体的算法设计,然后基于设计的算法,选择恰当的 程序设计语言来实现); 要从整体到局部、从局部到整体,提升系统能力(系 统视角、系统结构和系统把握,完成整个受限语言的编译程序的设计与实现); 要强化理论结合实际的能力(受限语言的编译程序的设计与实现必须基于编译 原理才能完成), 鼓励学生探索未知,获得更多的巅峰体验(难题突破、未知 探明、自信树立), 为未来解决实际问题奠定扎实的基础。 3.2.3 理论课程教学结果评价 按照培养学生解决复杂工程问题能力的需要进行理论课教学结果评价。 首先,好的成绩是每个学生和老师都乐于见到的。什么是好的成绩? 如何 获得好的成绩? 评价学习的成绩是一个非常重要和非常有效的指挥棒,对学习 具有非常重要的导向作用,主要表现在以下3方面:第一,利用恰当的评价, 是督促和激励学生学习,甚至强化对学生的学习要求的有效手段;第二,有效 地利用评价的导向作用,可以有效地引导学生学习,特别是引导学生理解对于 课程要求的内容,包括重点和难点,至少要学到什么程度才算合格,学到什么 程度才是优秀;第三,利用评价,可以强化学生解决复杂工程问题能力的形 成。前面已经讨论过复杂工程问题的7个特征,评价所选用的问题(例如考试 题目、实践题目、练习题目)在充分体现课程内容的同时,还要能够有效体现 复杂工程问题的某些特征,以便引导学生综合运用所学的知识解决这些问题, 并从解决的过程中积累经验,提升能力。 通常,每门课程都有主要的课程目标,这些课程目标与专业毕业要求的内 涵表达是密切相关的。作为保障学生达成专业毕业要求的主战场、主渠道,每 门课程的课程目标都会明确地体现对专业毕业要求的具体支撑,会直接体现专 业毕业要求内涵表达的某个具体的点。所以,瞄准课程目标的评价也体现了对 学生解决复杂工程问题的某一方面能力的测量。所以,它们之间是没有矛盾 的;如果有矛盾,一定是课程目标有问题,或者是对专业毕业要求的理解和表 达有问题。 所以,恰当的评价最终还可以不断促成和引导专业毕业要求更好地达成。 评价包括两类,一类是形成性评价,另一类是结果评价。形成性评价主要 在课程教学的过程中完成。典型的有课程作业、课程实验或者实践、课堂表 现、平时测验等。结果评价通常包括考试、答辩、报告、成果验收等方式。各 式各样的题目是评价的主要形式。所以,教师在设计评价用的题目时,一定要 明确要用什么样的题目,什么题目能够有效针对某一个目标(或者某个考核 点)的评价。在实际运行过程中,不少课程将学生的课堂考勤纳入形成性评 价,这种做法不能说完全没有道理,但是根据评价所需数据的有效性来看,考 勤并不能直接体现所有课程的主要教学目标的达成情况。因此,作者认为,在 目前情况下,考勤可以作为督促学生走进课堂吸取课程的精华,衡量学生学习 总体情况的数据;但在进行具体的课程目标达成评价时,还是应该忽略这些数 据,以避免考勤数据影响专业毕业要求达成情况的评价。 当然,要有明确的评价标准,尤其是合格的标准。特别提醒,这里要评价 的是课程目标的达成情况,所以,评价标准一定是针对每一个具体的课程目标 的,而不是针对某个评价环节(开题、中期检查、论文评阅、论文答辩)或者 某种评价人(例如导师、评阅人、答辩委员会)的。 教学活动的价值体现为其对毕业要求达成的支持,所以,采用什么样的评 价方式,以什么(题目等)为载体,测试点是什么,都要根据课程所承担的毕 业要求达成任务来定。而这些任务都是由该课程的各个课程目标具体表达的, 所以,一定要瞄准课程目标达成情况的有效测量选择测试点,设计相应的考 题,只有这样,才能保证评价结果有效反映其对承担的毕业要求达成任务的实 际贡献度。之所以这样要求,是因为这里给出的评价结果是毕业要求达成评价 的基础数据,如果该数据不可信,那么毕业要求达成的评价结果就不可信。所 以,必须保证考核内容、方式以及评分体系等能够充分体现毕业要求达成评价 的需要。 还应该强调的是,产出导向要求最终聚焦于学生解决复杂工程问题的能 力,所以,考试必须尽量降低概念解释、填空、单选、多选、判断、简述等客 观性、复述性题目所占的比例,更要杜绝简单追求及格率的倾向,真正按照教 学大纲规定的课程教学目标进行考核。当然,为了获得有效的评价数据,还必 须避免考试题目在最近几年间的重复。因为重复出现的考题,一般都已经失去 了评价的价值。 3.2.4 实践课程内容设计 按照培养学生解决复杂工程问题能力的需要安排实践教学内容。 这里讨论的实践课程包括课程实验、课程设计、实习实践、毕业设计等。 很多时候,作为初学者的学生总会感觉理论课程有点不着边际,常常质疑 这些课程有什么用,特别是一些基础理论课。这些课程多是在一、二年级开设 的,这个时期,学生特别渴望“了解自己的专业”“ 能干点专业的事情”,而这 些课程的内容又特别容易使学生感到似乎离专业很远,甚至和专业没有什么关 系,再加上这类课程一般来说难度比较大,比较抽象、枯燥,更容易让学生产 生“无用”的感觉,导致其学习积极性不足。不解决这个问题,就会导致学生 因厌学而放弃。实际上,在这个阶段,学生的体验还非常肤浅。一个比较好的 解决途径是安排学生进行相应的实践,让他们“亲口尝尝梨子的滋味”,让他 们能够感觉到,如果没有良好的基础理论的支撑,很多有意思、高水平的专业 实践是很难(高质量)完成的。早期的实践活动应该在这方面发挥作用。而到 了后期,则可以重点引导学生在理论的指导下开展实践。这个问题在实践课程 内容的设计上需要得到充分考虑。 关于整个实践体系的设计,需要注意以下几方面。 第一,实践教学必须选择恰当的载体,使学生经历复杂工程(系统)构 建,并在构建过程中体现知识、技术、方法的综合应用。实践的主要目的是让 学生进一步体验所学理论的精妙之处。所以,要尽量做到在理论指导下进行实 践,而不是简单地动手;要能够通过相应问题的求解使学生更深入地掌握理 论,而不是简单地操作。除了用一些验证性实验让学生感受某些重要结论,了 解前辈们是如何获得这些重要结论的以外,更多地要强调设计型和综合型实 验,要努力保证设计型和综合型实验的比重。要求学生从基于深入的基本原理 进行设计开始,并且在这上面需要花费较多的时间和精力,并能使他们在实验 过程中透过一些基本现象分析问题的本质;要包括设计、实现、分析(系统分 析、结果分析); 要能够有效地促使学生掌握深入的工程原理,结合工程实际, 避免单纯“为了实践而实践”;要给学生创造机会,使他们得到更全面的锻炼。 第二,实践要构成体系。人们的认知水平、实践能力都是从低到高、从弱 到强逐渐发展的,不可能一蹴而就。所以,在整个实践体系的规划中,要从简 单到复杂,从小规模到大规模,循序渐进,经过一系列实践,不断提升学生的 能力。 计算机类专业人才的4大专业能力都是需要逐渐形成和强化的。首先是建 立初步的计算思维能力(也许就是朴素的计算思维能力), 形成基本的程序设 计能力,能够进行程序的设计,能够理解算法,并能设计基本的算法;然后逐 渐推进到系统的设计与实现,不断强化问题求解的系统观。 因此,对计算机类专业来说,一、二年级的时候,可以做一些程序设计 类、基础硬件知识类的实验,通过这些实验,使学生掌握基本的实验方法,体 会基本的自动计算思想等。然后可以开展一些与系统相关的实践,如数据库应 用系统的设计与实现、操作系统功能模块的设计与实现、编译系统的设计与实 现、简单CPU 的设计与实现、网络系统的设计与实现。 通常,学生要有机会参与基础硬件系统、基础软件系统、应用硬件系统、 应用软件系统或者应用软硬件系统的实践。到了毕业设计阶段,选题就要更有 综合性,要更多地体现复杂工程问题的特征,要能够让学生综合运用所学的知 识解决实际问题,并在解决问题的过程中学习新的知识。要特别注意的是,毕 业设计选题要更多地体现复杂工程问题的特征。例如,简单的信息管理系统的 设计与实现,包括以信息管理为主要功能的网站的设计与实现,就很难达到这 一要求。那种连函数依赖分析都没有,甚至基本的统计功能都没有,仅仅是创 建几个表,查查填填的系统,是不可能达到要求的。 第三,设计实践教学的内容,要站在人才培养的高度,根据该课程承担的 支撑毕业要求达成任务设计内容。除了与技术相关的要求外,还要关注一些非 技术要求的达成,例如,学习协作、沟通、表达、组织,学习如何在工程实践 中考虑社会、环境、法律、伦理、道德等问题。 编译原理通常被认为是计算机科学与技术专业比较难的课程之一。尽管如 此,该课程的内容很好地体现了计算学科最本质的抽象和自动计算两大基本特 征。正是由于该课程的基本内容比较抽象,所以无论是教师讲解还是学生理 解,都有比较大的困难,造成不少历史比较短的计算机科学与技术专业点不再 开设这门课程,许多计算机类的其他专业点的开设比例更低。我们必须认识 到,抽象和难度大也正反映了编译原理的基础理论比较扎实、成熟,而比较扎 实、成熟的基础理论正是本科教育内容中的基本原理最重要的成分。图灵奖得 主AlfredV.Aho和JefreyD.Ulman在他们编著的被大家称为“龙书”的 《编译原理》开篇就说:“编写编译器的原理和技术具有十分普遍的意义,以至 于在每个计算机科学工作者的职业生涯中,本书中的原理和技术都会反复用 到。”编译原理对高水平计算机类专业人才的培养具有特别重要的意义。 在2020年图灵奖的颁奖词中,评委们高度评价了AlfredV.Aho和 JefreyD.Ulman这两位大师在程序设计语言及其处理领域的卓越贡献。他 们从1967年在贝尔实验室就开始了合作。几十年间,他们奠定了程序设计语 言理论、程序设计语言实现及算法设计和分析的基础,他们通过技术创新和影 响甚广的教材为程序设计语言领域做出了重大贡献。这些教材深刻影响了数代 计算机科学家以及程序员。世界计算机协会主席GabrieleKotsis说:“计算机 程序设计的实践和日益先进的软件系统开发几乎支撑了在过去50年中社会上 所有的技术变革。虽然无数研究人员和实践者为这些技术做出了贡献,但 Aho和Ulman的工作尤其具有影响力,他们帮助我们理解了算法的理论基 础,并为编译器和程序设计语言设计的研究和实践指明了方向。自20世纪70 年代初以来,Aho和Ulman一直是这一领域的思想领袖,他们的工作指导着 一代又一代的程序员和研究人员,直到今天。”谷歌公司高级研究员、谷歌公 司人工智能高级副总裁JefDean说:“Aho和Ulman在算法、形式语言理论、 编译器和数据库方面确立了基本概念,这些概念对当今编程和软件领域的发展 起到了重要作用。他们还向人们展示了这些不同领域的研究是如何紧密联系在 一起的。Aho和Ulman为计算机科学引入了关键的技术性概念,包括必不可 少的特定算法等。在计算机科学教育方面,他们的教材一直是培养学生、研究