APP下载

顺应时代需要面向能力培养突出问题导向

2018-01-04臧斌宇

中国大学教学 2018年10期
关键词:实践体系知识体系问题导向

臧斌宇

摘 要:当前互联网+、云计算、大数据、机器学习技术不断成熟,从基础设施、计算模式、信息资源、信息应用等多个维度的技术进步来看,信息社会走进了一个全新的时代。在新的时代背景下,新的机遇和挑战要求我们对中国的计算机类本科专业课程体系进行新的思考、评估与重构。本文旨在以上海交通大学软件工程專业为具体案例,讨论并探索当前中国计算机类本科专业课程体系改革。本文首先分析了计算机类本科专业知识体系发展的三个阶段,然后详细介绍了上海交通大学软件工程本科专业的专业课程体系,最后介绍了该课程体系的三个特色。

关键词:软件工程;课程体系;知识体系;实践体系;系统能力;问题导向

一、计算机类本科专业知识体系发展的三个阶段

进入21世纪以来,互联网技术迅速发展,互联网时代的到来极大地改变了人们的日常工作和生活方式。当前支持互联网时代的核心技术是:云计算、大数据和机器学习。这些技术的迅速兴起和广泛普及,深刻地影响了计算机类本科专业的知识体系,将计算机类本科专业的知识体系带入互联网时代。回顾过去,计算机类本科专业知识体系的发展,总的来说可以分为三个阶段。前两个阶段均处于20世纪,那是典型的单机时代的知识体系;而第三阶段则是兴起于21世纪初的互联网时代的知识体系,与前两个时代有着明显的区别。

具体而言,计算机类本科专业知识体系的第一阶段为20世纪70年代中期至80年代中期,那个时期呈现出百家争鸣之局面。由于计算机学科的理论和技术均未成熟,其间教学内容不得不面面俱到,从而呈现出纷繁多样的“百科全书”式的特点。例如:因为有小型机,所以有了“计算机组成”课程;因为有大型机和巨型机,所以有了“计算机体系结构”课程;因为有了微型机,所以有了“微机原理”课程。另外,由于没有主流的系统,因而缺乏足够的、合适的实验题目让学生得到充分训练,从而导致了课程体系呈现偏重理论和概念、缺乏具体实践的特点。该阶段典型的教材有名为《编译原理》的“龙书”和名为《操作系统概念》的“恐龙书”。

计算机类本科专业知识体系的第二阶段为20世纪80年代中期至20世纪末期。在这一时期以单机为主的技术逐渐成熟,例如:处理器设计技术、操作系统技术、程序设计语言和编译技术、关系型数据库、TCP/IP,等等。因此,计算机教学方面也有了主流的理论和平台。该阶段的教科书具有以实际系统为主线的特点,代表性教材有被称为“虎书”的《现代编译原理》以及《计算机组成与设计——硬件软件接口》《计算机体系结构:量化研究方法》等。该阶段的理论教学更加深入,与此同时课程实验的地位显著提高,主流课程的实验呈现出难度大、强度高的特点。

我国于改革开放之初引进了大量西方的教材和教学体系,因此国内的计算机类知识体系也是脱胎于第一个阶段的。21世纪初,部分“985工程”高校开始学习国外的先进经验,着手改革教学内容,这些学校的知识体系进入了计算机教学的第二阶段。但总的说来,还没有进入21世纪以互联网为代表的新时期。

计算机类本科专业知识体系的第三阶段为21世纪初期至今。与科学研究采用化繁为简的还原论不同,工程技术多采用由简入繁的综合方法。随着将过去单个的计算机通过网络互联构成了更大规模的计算平台,计算机领域迎来了互联网时代。互联网时代无论是硬件平台,还是支撑软件平台,或者应用领域的规模都比单机时代有了显著增大。因此,在互联网时代,计算机类本科专业的知识体系总体上呈现出“上浮”的趋势,所涉及的系统规模显著扩大,并逐渐转为面向整个互联网,特点是更加注重软件本身。我国由于在21世纪初设立了软件工程本科专业,因此可以很好地适应互联网时代计算机知识越来越软件化的趋势。软件构造是工程问题,而工程问题都必然遵从综合论的法则,必然从简单向复杂发展,因此软件愈加复杂是必然的趋势。

软件系统的复杂性增加,意味着有更多的知识需要讲授。但是大学四年的时间是有限的,原有的计算机本科专业知识体系已被单机系统撑满,要增加新的内容就必须舍弃部分旧内容,课程重构是达到这一目标的有效途径。进入新世纪以来,卡耐基梅隆大学、斯坦福大学、麻省理工学院等高等学府开始了课程重构,课程内容浓缩了单机基础,更加面向互联网。课程目标更加关注培养学生对于问题、数据、系统的抽象能力。其典型课程不再为单一系统,转而向更加综合的方向发展,典型教材有《C++程序设计:基础、编程抽象与算法抽象》《深入理解计算机系统》《计算机系统设计原理》等。该阶段仍在不断演化,以适应云计算、移动计算、大数据、机器学习等技术。

当主流的计算机教学日益呈现软件化的趋势后,计算机硬件类的人才如何培养?这时电子工程本科专业开始出现“上浮”现象,它依然是工程技术遵循综合论法则的必然结果。传统的电子工程领域随着数字电路模块化规模的提高,开始进入传统的计算机体系结构领域,CPU芯片设计既需要电路基础也需要体系结构的基础,甚至为新的CPU编写操作系统、编译器、运行环境都成为芯片设计公司自己的责任。因此新的计算机工程专业由电子工程专业孕育而生,该专业必然将主宰传统的以单CPU为主的教学领域。

二、上海交通大学软件工程本科专业课程体系

为了适应新时代软件人才培养需要,上海交通大学软件学院对软件工程本科专业课程体系改革进行了积极的探索。本文通过介绍上海交大软件工程本科专业课程体系,希望能够对新工科背景下计算机类本科专业课程体系如何进行改革起到抛砖引玉的作用。

上海交大软件工程本科专业课程体系设计的指导思想是:适应新时代的技术发展,使学生在软件领域的知识和能力得到很好的培养,毕业后成为优秀的软件工程师。

在课程体系设计上,我们首先采用了“核心课+方向课+综合课(Capstone course)”的模式,这是国际上计算机类本科课程体系普遍采用的模式。与我国传统的计算机类本科专业课程体系相比,该模式首先精简了必修课程,增加了非常综合的整合式课程,同时将大量传统的必修课改为方向课。其次,增加了大量的实践环节,最后一年只安排毕业设计,这样就保障了学生有充足的时间进行企业实习。上海交通大学的学期为两长一短,春秋两个学期各18周(含两周考试周),暑期学期为4周。我们在大一、大二的两个小学期都安排了实践类课程。大三的小学期和第七学期的企业实习连在一起。再次,我们增加了企业课程,这既可以满足卓越工程师计划的要求,也能更好地满足工程教育认证中对非技术能力的培养要求。

核心课程是软件工程专业全部学生都必须完成的专业基础课程。理论课部分有四个模块:问题求解、系统基础、应用基础、软件工程,共有10门课程,计36学分(含实验与习题课学分)。问题求解模块包括:程序设计与数据结构、算法原理、机器学习;系统基础模块包括:计算机系统基础(上、下)、計算机系统工程;应用基础模块包括:基于平台的开发、数据库设计;软件工程模块包括:软件工程基础、软件测试。几乎所有的课程均配备了充实的实验内容供学生进行实践。核心课程设置的特色是:第一,根据互联网大数据时代的特征,结合学习美国计算机四大名校的课程体系,重构了传统的多门计算机基础课程,致力于保证学生计算机软件相关知识框架的整体性和先进性,强化基本功的训练;第二,新设了应用基础模块,强化应用能力的培养;第三,突出了软件工程模块,强调软件工程的专业特色;第四,增加了“机器学习”课程,以适应智能化时代的发展。

核心课程还包括两门暑期实践课。第一门课要求每个学生使用复杂数据结构开发一个文件型数据库,其中也包含了初步的软件开发流程体验;第二门课要求学生以团队协作的方式完成一个软件开发项目,该项目从需求开始到最终的部署运维结束。

必修课程还有部分是企业课,旨在培养学生成为合格软件工程师的非技术能力,共设置6门课程(各1学分)。其具体包括设置在第二学期的“软件工程职业素养”,第五学期的“软件工程经济学”“ 企业软件过程与管理”和“企业软件质量保证”,以及第六学期的“软件知识产权保护”和“软件产品设计及用户体验”。这些课程的教学由软件行业的专家进行教学,保证课程与行业实际的紧密结合。

方向课程将技术细节进行分类,在高年级按类介绍技术细节,强化学生在某一方面的专门知识。共设立三个方向的课程,每位学生必须选择一个方向并完成该方向的所有课程。三个方向分别为:系统软件方向、数字媒体与应用方向、信息系统方向,每个方向设有4门方向课,每门课3学分。其中,系统软件方向课有“编译原理与技术”“数字部件设计”“操作系统”“计算机体系结构”。数字媒体与应用方向课有“计算机视觉”“计算机图形学”“操作系统”“人机界面与交互”“游戏设计与开发”。信息系统方向课有“信息系统工程”“信息系统分析与设计”“企业级应用系统体系架构”“数据仓库与数据挖掘”。

综合课程也是按三个方向开设,每门课3学分。它们分别是:“分布式系统”“游戏设计与开发”“企业信息系统综合设计与实现”。综合课程有少量的课程讲解,课程的主要目标是要求学生团队协作,完成一个复杂的软件系统设计与开发,包括问题的调研、分析、建模、开发、测试。主要强调培养学生的分析、评价与创造能力。

表1给出了上述各个专业主干课的学期安排情况。

三、上海交通大学软件工程本科专业课程体系三大特色

1.以课程融合的方式实现互联网时代系统能力的培养

我们注重培养每一位学生在互联网时代的系统能力。因此我们对传统计算机系统类课程进行重构。具体而言,传统的计算机系统类课程包括“汇编”“计算机组成”“体系结构”“操作系统”“编译原理”“计算机网络”。我们将这些课程融合为三门计算机系统类课程。这些课程从两个维度设计。第一个维度是程序员的角度,开设了“计算机系统基础(上)、(下)”两门课程;第二个维度是系统设计者的角度,开设了“计算机系统工程”。两个维度互为补充,相得益彰。课程融合使得传统教学内容大为凝练,互联网时代下系统能力的新知识得以增添。融合后的三门课程,更加贴近技术的新发展,课程前后融会贯通一气呵成,成为计算机系统能力培养的通识教育。

“计算机系统基础”课程采用了卡耐基梅隆大学的《深入理解操作系统》作为主要教材,威斯康星大学的《操作系统——三个轻松的篇章》作为补充教材。该课程深入浅出地介绍了计算机系统中的重要知识,涵盖了传统多门系统类课程的内容。这门课程的教学内容更加关注现代处理器和操作系统细节,以及并发和网络程序设计,主要包括以下四个方面。

(1)汇编篇:主要介绍二进制、汇编以及链接的技术;

(2)计算机组成篇:主要介绍CPU流水线、超标量技术、存储层次、程序优化相关知识;

(3)系统与网络程序设计篇:主要介绍系统调用(进程与I/O相关系统调用)、套接字编程、多线程程序设计、并发数据结构。

(4)操作系统篇:介绍操作系统中进程、虚存、I/O抽象,介绍进程调度、页面淘汰策略,介绍关于锁、条件变量、信号量的实现机制。

“计算机系统工程”课程采用的教材是由两位美国工程院院士、麻省理工学院的Jerome H. Saltzer教授和Frans Kaashoek合作编写的《计算机系统设计原理》。我们面向互联网时代的计算机系统能力培养需求,将课程改造为培养学生“大”系统观。这门课程培养学生的复杂系统控制能力,即如何使用模块化、层次化、抽象等方法分析、控制以及设计复杂庞大的计算机系统。与此同时,该课程也结合工业界和学术界的实际系统介绍并分析互联网时代下大系统的固有属性:互联性、容错性、原子性、一致性、安全性。

这门课程以虚拟化技术和分布式系统等互联网时代的主流技术为主线,以系统虚拟化,以及分布式系统的计算模块、存储模块、通信模块等为案例,展开对大系统属性的介绍。例如,该课程会以“杭州光纤被挖断,支付宝瘫痪两小时而同期的淘宝却能正常工作”的新闻引出阿里巴巴数据中心的“异地双活”特性,进而介绍大系统的容错性、数据一致性等内容。

通过课程融合培养学生大系统能力的方式与传统计算机课程体系形成鲜明对比。传统的计算机课程,仅局限于单机系统的能力培养,流行的思路是:所有学生都要在FPGA上开发处理器,在该处理器上开发操作系统,进而在学生自己的处理器和操作系统上完成一个编译器的开发。然而,我们的课程体系将系统能力的培养与具体而深入的系统开发相分离:所有软件工程专业的本科学生都将接受贴近互联网时代的系统能力训练,而高年级后只有选择系统软件方向的学生才会进行处理器、操作系统、编译器等的具体开发。

2.以新技术为导向培养学生解决问题的能力

问题求解能力主要是指学生能够将物理世界的问题转化为数字世界的问题,因此我们在核心课程中设计了问题求解课程模块。这些课程传统上包括程序设计、数据结构以及算法设计。这些课程内容趋于老化,很多学校的教學内容和三十年前没有太大的区别。应当紧密地围绕新技术进行设计安排,否则学生学完之后依旧感觉与现实脱节,不知道所学的知识在现实中如何应用。

在设计问题求解模块时,我们首先还是注重课程融合,例如教授程序设计的同时教授数据结构相关知识;其次我们除了讲授传统的数据结构与算法外,还强调了并发数据结构与并行算法;最后,我们突出了数据结构与算法的应用,在课程中有大量的包括了大数据与机器学习的案例,具体案例如下。

一是传统的数据结构应用。(1)实现文件型数据库。①采用文件型数据持久化保存整个系统信息;②将B+树或Hash表等数据结构保存到文件中;③实现数据的插入、修改、删除、查找。这些内容可以让学生了解复杂数据结构在数据库管理系统中的核心作用。(2)mini-basic解释器。①采用多叉树和线性表等数据结构进行程序的中间表示;②采用自顶向下法则分析语句;③采用逆波兰解析法将表达式转化为二叉树的形式。这些内容可以培养学生开发简单程序设计语言解释器的能力,既涵盖了编译原理中的部分内容,又能够充分理解数据结构在编译器中的重要性,以及类与子类的巧妙运用。

二是大数据存储与分析。(1)键值分离存储。①采用并发数据结构Cuckoo Hash;②实现该数据结构上的并行Get/Put;③针对不同数据集分析算法的性能。(2)复杂网络分析。①采用最小生成树并行算法,进行社区分析以及消息传播途径分析;②采用不同的数据结构实现并行算法,如基于矩阵的并行实现或者基于邻接链表的并行实现。(3)PageRank算法。①介绍基本算法;②介绍基于矩阵以及基于图结构的两种不同的实现方式;③采用该方法进行社交网络中的影响力分析以及网页相关性搜索。

这些内容以大数据存储和分析为案例,突出了数据结构在大数据中的作用,也让学生了解了并行算法如何在实际问题求解中发挥作用。

三是人工智能应用。(1)路径导航算法。①Dijkstra算法;②A*算法;③并发A*算法。(2)车型识别。①矩阵数据结构;②最简单的卷积神经网络;③通过数据集训练;④识别指定汽车的车型。

这些内容以人工智能应用为案例,突出了数据结构在人工智能中的作用,也让学生初步了解了一些人工智能算法。

3.结合工程教育认证设计新的实践体系

工程教育认证要求按层次培养学生的技术能力。一般技术能力的层次可以按照BLOOM分类法,将能力由低到高分为:记忆、理解、应

用、分析、评价、创造六个层次。然而传统的教学多停留在前三个低层次的能力培养上,鲜有教学环节培养学生的分析、评价和创造能力。

当前我们正在致力于建立一套多层次循序渐进的面向能力培养的实践体系。我们将能力分为基础、应用、分析、综合这四个由高到低的层次。表2简要介绍了这四个层次的内涵:它们从记忆和理解起步,逐渐向应用能力、分析能力、评价与创新能力发展。这四个层次要求学生学习不同规模的软件开发,由低到高分别是:功能设计、模块设计、系统设计和工程设计。

下面以系统软件为例介绍这四个层次。

第一层为基础层。基本教学要求是使学生掌握系统的安装和使用,通过工具和仿真感知运行机理,通过功能设计和应用优化系统理解工作原理。在具体实践方面,学生需要能够自主完成一些功能设计,诸如小型语言解释器、小型汇编器、C语言库函数、简单CPU仿真器、进程控制台、Web代理等。

第二层为应用层。基本教学要求是让学生掌握构建平台的能力。例如:利用多个docker容器构建分布式平台,该平台拥有处理、存储和一致性容错模块;让学生掌握将实际问题映射到具体系统的能力,比如能够应用PageRank算法分析社交网络(微博)中用户的影响力。在具体实践方面,学生还需要能够独立完成一些系统中的模块设计,比如文件型数据库、键值存储系统、路径规划、RPC模块和分布式锁服务、分布式文件系统、基于一致性协议的分布式容错服务等。

第三层为分析层。基本要求是培养学生分析问题和优化系统性能的能力。例如:要求学生能够将第二层的问题移植到公有云平台上,并且能够在移植后对该问题进行行为和性能分析,进而发现各模块内和模块间的性能瓶颈和互操作问题,最后对基于分析发现的问题进行系统层和应用层的优化。其中系统层优化需要根据应用特征和数据特征调整系统各模块的参数,应用层的优化需要根据各模块的行为和性能特征调整和优化应用程序。在具体实践方面,还要求学生能够进行原型系统设计,如设计小型操作系统、设计小型语言编译器、在FPGA上设计小型CPU等。

第四层为综合层。基本要求是培养学生具有如下能力:分析具体业务问题,在不同的方案中进行评估选择,并且最终完成整个工程项目。它要求学生能够针对特定应用需求、基于受限系统级平台进行模块选型,并且确立设计方案、完成系统实现。在具体实践方面,学生需要完成例如基于电商用户购物数据的商品推荐,平台限制是基于特定配置的公有云。在此过程中,学生需要能够独立自主地根据问题特征(问题规模、应用特性、数据特征)和系统特征(系统架构、公有云环境约束)进行模块选型,然后对各个设计方案进行分析、对比、仿真、预测、优化,最终完成系统实现。

[责任编辑:余大品]

猜你喜欢

实践体系知识体系问题导向
谈中职德育课程实践内容体系的建构
CS2013指导下的程序设计课程实践教学实施方案设计与翻转实验教学实践
构建知识体系的专题课程教学改革实践和探索
面向复杂工程问题的计算机人才创新能力培养体系研究
智能信息处理实验课程建设
信息技术支持下的小学数学问题导向式教学策略研究
克拉玛依区社区服务型党组织建设研究
十八大以来党的纪律检查体制改革:理念、思路与路径
课后延续教学模式在单片机课程中的应用
大学英语教学中PBL教学模式的实施研究