计算机本科教育多范式编程教学新模式研究与实践*
——以浙江传媒学院为例

2022-09-07 12:52林生佑徐芝琦潘瑞芳
计算机时代 2022年9期
关键词:面向对象范式编程

林生佑,曾 昊,徐芝琦,潘瑞芳

(1.浙江广厦职业技术大学信息学院,浙江 东阳 322100;2.浙江传媒学院媒体工程学院)

0 引言

编程范式就是如何组织程序的基本思想,它反映了开发设计人员对程序的基本哲学观。编程范式主要分为两大范式:命令式编程范式、声明式编程范式。这两大范式衍生出最基本的面向过程、面向对象、函数式和逻辑式四个子范式,如图1所示。

图1 编程范式结构图

命令式范式的本质就是编写了一个命令列表,计算机按照列表中的命令顺序执行。其优点是结构简单,易于实现,缺点是不能解决复杂问题且效率较低。此外,在命令式范式的基础上还分出面向过程和面向对象两个子范式。面向过程范式是一种基于过程调用的编程范式,面向过程程序被分成一组称为过程或函数的可执行代码块,其本质是通过多个过程经过顺序、选择和循环等程序结构组合而成。而面向对象范式世界中的实体都由类表示,对象是类的实例,数据和操作被封装在对象中,对象由数据成员和方法成员组成,方法对对象进行操作,而对象接收来自方法的消息请求来执行计算,实现交互,完成任务。

声明式范式注重表达计算的逻辑,而忽略计算的具体流程。命令式告诉计算机如何做(How),而声明式告诉计算机做什么(What)。在声明式范式基础上又可细分出函数式和逻辑式两种子范式。函数式范式是一种基于递归函数计算理论的范式,其程序由一系列数学函数所组成,程序执行便是计算这些函数,并对表达式求值。而逻辑式范式以数理逻辑为基础,采用陈述性的方法表达系统内的事实和规则,并通过这些事实和规则还原现实世界。逻辑式程序由各种断言和推导规则所组成,程序的执行则非常像数学中对命题或定理的证明过程。

计算机本科教育多范式编程教学就是指在编程教学过程中融合多种范式思维,教授多种范式语言,使学生了解不同编程范式的基本思想和适用场合,以便学生在遇到问题时可以找到最适合解决问题的编程范式,从而培养学生求解复杂问题的能力。

1 国内高校编程范式教学存在的问题

编程范式是学习编程语言时必须先理解及掌握的重要概念。编程范式教学的本质是给学生教授范式背后的编程哲学,即编程语言的逻辑和思考现实问题的方式。国内高校对于编程范式的教学存在如下三个方面的问题。

1.1 过度的面向过程编程范式教学

大多数高校的编程课程首先向学生教授面向过程范式,即C 程序设计。通常情况下,学生还会使用C语言学习其他后续课程,比如数据结构,算法分析等。在后续专业课程中,学生也会接触到其他编程范式及语言,但此时学生的思维已经深深地扎根于面向过程范式中了,要想学习新的编程范式是极其困难的。因此,学生应该尽早接触到多种编程范式,避免知识体系缺失,限制约束了学生对问题的理解及想象。

1.2 高校编程教学与行业要求相脱节

高校编程教学侧重语法教学而忽略培养编程思维,基本只涉及到命令式范式中的面向过程和面向对象。多范式融合的编程是当今互联网行业及计算机软件行业的新宠,比如一些传统命令式语言C++,Java都在其最新版本的编译器中加入函数式范式的特性;一些金融科技软件也明确了使用函数式范式进行开发。高校编程教学工作应与行业需求进行有效结合,增强学生毕业后的社会就业竞争力。

1.3 与世界一流高校编程范式教学差距较大

通过研究牛津大学计算机科学本科专业的教学大纲和课程设置发现,该专业从一年级开始就教授学生多种范式的编程语言,如图2所示。“函数式编程”和“命令式编程”这两门课程同时出现在一年级新生的必修课中;三年级的“知识表示和推理”则教授逻辑式范式,借助Prolog语言来学习有关语义方面的知识;“Lambda 演算和类型系统”则对应高级函数式编程,让学生对函数式范式有更深了解;“编程语言原理”则进一步站在全局的视角系统阐述了编程语言及其范式理论。

图2 牛津大学计算机科学专业必修课表

无独有偶,帝国理工学院计算机本科教育在课程设置中也全面施行了多范式编程教学,图3 显示了该校计算机本科专业一年级的“计算机实践”的课程列表,其中“Haskell 函数式编程”,“Kotlin 函数式和面向过程编程”,“Kotlin 和Java 面向对象编程”等都是一年级学生的必修课程。教授逻辑式范式的“Prolog导论”也出现在二年级的春季学期必修课程列表中。

图3 帝国理工学院计算机科学专业必修课表

由此可见,诸如牛津大学及帝国理工学院这类世界一流大学计算机科学专业本科教育,基本囊括了所有的编程范式,反映了世界一流大学计算机科学专业对多范式编程教学及人才培养的重视。国内高校编程教育模式应多借鉴他们的编程教学方法。

2 多范式编程教学新模式实践措施

在借鉴国外一流高校计算机本科编程教育做法的基础上,我们提出了多范式编程教学新模式,如图4所示。它的重点不在于介绍个别课程的教学,而在于通过专业培养计划修订思路来实践我们的多范式编程教学。其思路主要包含以下三个方面。

图4 多范式编程范式教学模式

2.1 强化逻辑思维训练

“离散数学”作为计算机科学专业学生的必修数学课,其中数理逻辑及图论的部分内容比较抽象且难度较高,不易被学生掌握,Prolog恰好是一种建立在逻辑学理论基础之上的语言,通过在离散数学教学中引入Prolog可简化学生对于命题逻辑及一阶谓词逻辑等概念的理解和掌握。还能通过Prolog程序快速的模拟并验证逻辑推导的全过程。学生在学习数理逻辑的同时也学习了以逻辑式范式思维解决问题的能力,达到了事半功倍的效果。此外,Prolog 语言还广泛应用在人工智能的研究中,可以用来建造专家系统、自然语言理解、智能知识库等。在“人工智能基础”课程引入Prolog语言,可以简化课程理解难度,更好呈现课程内容。

2.2 重点教授一门多范式编程语言

从大学一年级开始为新生提供多范式编程经验。选择“Python程序设计”作为教授多范式编程的第一门编程课程,Python作为一种多范式语言兼有面向过程,面向对象及函数式的特性。在Python 教学过程中,先讲授如何使用Python 进行面向过程编程,然后,当更复杂的程序需要进行数据及类型抽象时,自然地引入面向对象思维。接着,由递归的概念及实践引出高阶函数,从而教授与数学思维接近的函数式编程风格。最后通过将多个实例分别由这三种范式实现代码,从思想和代码层面对三种范式进行对比和比较,生动直观地向学生展示不同范式解决同一问题的思考方式和哲学思想。我们还在后续专业课“图像与视频处理”课程中使用Python 语言实现各种算法,将枯燥理论知识与Python 简单易懂的代码方式相结合,检测了学生Python多范式编程的能力。

2.3 在计算机专业核心课程中融入一组编程范式

由于受课时影响,将所有的编程范式语言都囊括在计算机科学专业本科课程中是不现实的,但可以间接地将四种主要编程范式的思想及内容嵌入到其他专业核心课程中,具体措施如下:

首先,“C 程序设计”课程是高校计算机专业的必修入门课程。C 语言是一个典型的面向过程范式语言,为了还原C语言教学目的的本质,在教学中全面结合面向过程范式的思想,着重培养给学生以面向过程思维思考问题的方式,避免C语言教学陷入语法陷阱。

其次,“C++程序设计”和“Java 程序设计”是面向对象编程课程,担负着将面向对象范式的思想融入编程教学的任务。这两门课不仅要涵盖面向对象基本概念,还要涵盖如单继承、多继承、多态和抽象接口等高级面向对象主题。将对象优先思想方法全面在“C++程序设计”和“Java 程序设计”课程中推行,增强学生面向对象思维能力。“设计模式”是软件开发人员在面向对象软件开发过程中面临的一般问题的解决方案,是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。在“设计模式”课程中通过对二十三种经典设计模式的教授并结合实例,进一步让学生对面向对象范式有更深入和直观的理解。

再次,在“数据结构”课程中引入函数式编程范式,嵌入函数式范式的Haskell语言可以更好地呈现课程内容和简化课程难度,比如结合Haskell中的递归和折叠函数等重要的计算思维讲授遍历和排序问题,在简化了数据结构学习难度的同时教授了函数式范式思想,拓宽了学生的视野。

3 多范式编程教学新模式教学成效

我校计算机科学大类包括数字媒体技术、软件工程和网络工程这三大专业,其中数字媒体技术专业学生480 人,软件工程专业学生320 人,网络工程专业学生320 人。多范式编程教学新模式从我校19 级数字媒体技术专业开始进行试点。通过近二年的探索与实践,学生的算法设计及综合开发能力有了一定的提升,主要表现在:

3.1 算法设计能力提升

在每年的编程能力比赛中,教改试点的数技专业学生在前50 名中占37 人,远比软工和网工专业(10人和3 人)人数多。且数技专业的学生能较好地选择并灵活地使用合适的编程范式来解答竞赛试题。在教改试点前的2017-2019 年,我院参加浙江省蓝桥杯获奖人数约每年6 人左右,到了2021 年,获奖人数已增加到22人。

3.2 工科基础得到夯实

通过对比数技专业教改前后近两年的“数据结构”和“离散数学”的学生期末成绩数据,在期末试卷难度相近的情况下,经过函数式和逻辑式范式教学的学生的成绩普遍优于没有融合编程范式教学的其他专业学生,各班平均成绩大约提高4-10分。

3.3 综合开发能力提升

程序设计竞赛考察的是学生的算法设计实现能力,而通过作品参加各类学科竞赛和专业大赛则考察的是学生的分工协作、语言表达和项目开发能力。2020 年全院六个工科专业参加各类学科竞赛和专业大赛省级以上获奖104 人次,其中数技专业学生获奖23 人次,仅2021 年上半年就已达113 人次,数技专业学生获奖达31人次。

4 结束语

在编程课程中引入多范式编程教学新模式是今后编程类课程未来发展的大势所趋。计算机科学专业的本科生应当对主要编程范式有一定了解和掌握,以便更好从事专业工作。多范式编程教学新模式突破了传统程编程类课程的理念,提高编程教学的科学性和有效性,同时也拓阔了学生的视野及思维方式,提升了学生的就业竞争力。

猜你喜欢
面向对象范式编程
以写促读:构建群文阅读教学范式
范式空白:《莫失莫忘》的否定之维
编程,是一种态度
元征X-431实测:奔驰发动机编程
编程小能手
孙惠芬乡土写作批评的六个范式
纺织机上诞生的编程
面向对象的计算机网络设计软件系统的开发
管窥西方“诗辩”发展史的四次范式转换
面向对象的数据交换协议研究与应用