APP下载

美国高校计算机程序设计课程介绍及启示

2019-12-05许真珍

计算机教育 2019年3期
关键词:编程语言上机程序设计

许真珍

(大连理工大学 软件学院,辽宁 大连 116620)

0 引言

程序设计课程是高校计算机相关专业的重要课程,中国高校计算机专业通常会以C语言、C++语言或者Java语言作为载体,为学生讲授程序设计思想和奠定程序设计技术基础。

美国在计算机领域取得的研究成果一直处于领先地位,这无疑离不开美国高校优质的计算机教育水平。不少学者利用在美国访学等机会深入了解美国高校的教学机制,学习其先进的教学理念,给出不少启示,关注的课程有软件工程[1]、计算机科学原理[2]、电路与电子技术[3]、操作系统[4]、程序设计[5-6]等。文献[5]和文献[6]分别介绍美国罗格斯大学和斯坦福大学程序设计课程的教学体系,不同大学的教学体系设置也各不相同。笔者利用在美国德州农工大学访学一年的机会,通过旁听课程以及与授课人员交流,对该校计算机程序设计课程的教学进行调研,总结其课程特点,分析对国内相关课程的教学启示。

1 美国德州农工大学

美国德州农工大学(Texas A&M University,TAMU)是一所世界著名的公立研究型大学,全美规模第六大的大学。学校成立于1876年,主校区位于美国德克萨斯州的卡城(College Station)。德州农工大学在2018年US News发布的大学排名中位列第69位,在美国公立大学中排名第25位。

工程学院是德州农工大学最大的一个学院,拥有教师650人以上,学生19 000人以上,2018年在US News发布的全美最佳工程学院排名中位列第12位。工程学院下设14个系,计算机科学与工程系是其中的一个系,该系在机器人、机器视觉、人工智能等研究领域成果卓著。和国内大学类似,德州农工大学也将程序设计课程分为基础课程和高级课程,供不同基础的学生进行修读。

2 程序设计基础课程

2.1 课程目标

程序设计基础课程的课程名为程序设计与概念导论(introduction to program design and concepts),课程编号为CSCE121[7]。学习该门课程只需要有一些基本的编程经验,如高中阶段学过编程课程即可。课程目标是以C++语言为载体,让学生了解计算机程序结构、设计和开发的概念,人们如何与计算机沟通,计算机如何影响社会,并理解面向对象的编程概念(对象、类、继承、多态、封装等),学会用高级编程语言C++编写计算机程序,进行算法设计与实现,提高解决问题的能力,培养计算思维。

2.2 课程安排

1)课堂讲课。

课程在每年的春季学期开设,每周2次课堂讲课,每次75 min,共计15周。每次课程的讲义资料和程序源码都可以在课程网站上下载。授课内容主要是通过各种示例介绍面向对象的程序设计方法。在第一节课上,主讲教师给学生提供Linux和Git之父Linus Torvalds写的一篇文章“The Beauty of Programming”,很好地激发学生的学习兴趣。在第二节课上,主讲教师将C++的操作符、注释方式、输入输出、变量、程序结构、预编译指令等语法层面的内容全部罗列出来,供有一定编程基础的学生与之前学过的编程语言进行对比。与国内大学对C++每个语法知识点细细讲解不同,美国大学该课程的教学结合程序示例重点讲解指针、抽象、容器、模板等面向对象难点内容,学生课下必须提前进行预习,才能跟上课程节奏。

2)课后作业。

每次课都会有课后作业。课后作业主要基于已经学过的知识,但也会覆盖即将学到的内容,要求提交到学校的eCampus管理系统中,课堂上将针对课后作业中的问题进行充分讨论。

3)上机实验。

课程每周都配套安排1次上机实验课,每次50 min,在机房进行;除了刚开始的两周以及期中考试周,其余每周上机课都在后半段安排上机测试环节,注重每节课学生学习效果的反馈。上机课由助教进行指导,助教通常为主讲教师的博士生。每次上机课的内容都非常详尽地展示在课程网站上,包括这节课的目标、上机任务、参考资料、扩展思考题、致谢等。

上机课的任务难度随着课程进度逐步递增,其中很多任务都带有启发性,如给定一个实际问题,补充完整某个函数,或者给定某一段代码,让学生发现代码中的缺陷并进行修订,这些缺陷往往不是简单的语法层面的错误,而是更高级别的程序设计层面的问题,如缺乏程序安全性考虑等。上机课程的设计考虑到不同学生的基础,对于比较难的上机题目,在题目下方点击一个可以展开的“提示”按钮,即可看到对该题目解决方案的提示信息,给完成编程实验有困难的学生使用。此外,针对能快速完成实验任务的学生,额外提供扩展思考题供学生提高练习。

4)课后答疑。

除了上课和上机之外,主讲教师和每位助教每周均有1次60 min的答疑时间,此外,每门课程还特别配备几位同行教师(peer teachers),这些同行教师同样可以在每周指定的时间段内为这门课有困难的学生提供指导和帮助。由于美国大学的学生多数是住在校外的,为了便于师生沟通,美国很多高校都在使用Piazza网站搭建师生课后沟通的桥梁。该网站是一款专门为教师、助教和学生服务的问答互动平台,集wiki和论坛模式为一体,可以实现随时随地的师生线上互动,支持移动手机IOS和Android应用[8]。主讲教师会在Piazza上为自己的课程创建一个问答中心,并在第一节后告知学生加入课程,之后学生和教师可以在上面分享问题和答案,平台也能方便地查找问题和答案。不同的用户可以对同一个问题进行回答,而每位用户的问答记录也都会保存。如果学生急需一个问题的答案,可以对问题设置标签;教师可以查看问题标签的数量,有选择地在课堂上详细讲解某些问题。

5)教学资源。

课程没有指定的教材,只有参考书目,包括《A Computer Science Tapestry》《Programming Principles and Practice Using C++》以及经典的《C++ Primer》。主讲教师的讲义是最主要的教学资源,教师会经常更新讲义内容,使学生获得最新的知识和信息。

2.3 评分机制

课程的成绩组成:上机测验占15%,两次期中考试各占20%,期末考试占45%。课程网站上显示,往年第一次期中考试的最高分为100分,最低分为0分,平均分为68.5分;第二次期中考试的最高分为100分,最低分为0分,平均分为50.4分。综上可见,评分总体是偏低的。

期中和期末考试都是纸卷考试,主要以程序设计题为主,也有少量的多选题。考试允许学生携带参考资料,但对携带的材料有明确规定,学生可以携带5张A4尺寸的纸张,正反面均可以做笔记,并且告知学生考试的题目基于平时课后作业和上机练习的内容,但不会是类似的题目。

3 程序设计高级课程

3.1 课程目标

程序设计高级课程的名称是编程语言(programming language),编号为 CSCE314[9],要求具有一定的计算机基础并且已经完成数据结构与算法这门课的学生学习。课程介绍两种不同的高级编程语言,一种是函数式编程语言Haskell,另一种是面向对象编程语言Java。课程的教学目标是使学生在学完课程后能够更有效地使用现代编程语言,更容易地学习其他新的编程语言,并对语言结构、通用抽象机制和程序运行效率有更深入的理解。

Haskell是一种标准化的、通用纯函数式编程语言,有非限定性语义和强静态类型,主要的执行环境是GHC。国内很少有高校会教授Haskell这门编程语言,往往只介绍更加大众化的C、C++、Java编程语言,而将Haskell和Java放在同一门课程中讲授也很特别,旨在对比两种不同编程思想的语言,让学生学会用函数式编程方法设计和实现程序,同时了解面向对象语言的主要特征,获得自主学习更多编程语言的能力。

3.2 课程安排

课程在每年的春季和秋季学期均可以选修,每周3次课堂讲课,每次75 min,共计15周。1—7周介绍Haskell语言,第8周进行期中考试,9—15周介绍Java语言。

课程共安排10次课后作业,在课程网站上有每次作业的详细要求,包括作业目标、指导建议、作业题目、致谢和测试用例。每次作业都由若干编程题组成,多数题目提供代码框架或部分代码,甚至有的题目为了使学生更清楚题目要求,还提供示例代码。比较特别的是,教师为每道题目提供测试程序,学生只需下载并导入测试程序,便可以自动执行测试用例对自己的程序进行测试,判断程序的运行情况。作业中的题目有一些是经典的数学编程题(如中国余数理论),课程网站上会给出详细的问题背景资料,并在致谢中列出问题来源,甚至对首次将该问题作为编程练习题的人加以感谢,体现美国对知识产权的重视。

课程的参考书目包括剑桥大学出版社的《Programming in Haskell》以及Ken Arnold等人撰写的《The Java Programming Language》。学校图书馆可以下载参考书的电子版,还提供大量与课程有关的网络资源链接供学生参考,因此,学生课后自主学习的工作量很大。

3.3 评分机制

课程的成绩组成:课堂测验占10%,课后作业占30%,期中考试占30%,期末考试占30%。实际上,主讲教师对自己所授课程的评分机制有绝对的自主权,每个学期都可以进行调整,但通常期末考试都不会超过总成绩的50%,更看重学生平时的阶段性表现,注重学习过程。如果学生超过截止日期提交作业,除非有学校认可的不可抗力原因,否则每迟交一天,成绩将减少25%。

学校对学术诚信非常重视,明确规定学生之间可以接受的合作和不可接受的合作。可以接受的合作包括讨论题目以理解其含义、讨论解决该问题的可行解决方案,但具体的解决方案必须由学生独立构建和编写,还要明确说明别人给予的任何帮助以及引用的任何资源,包括人、书、论文、解决方案、网页或其他。不可接受的合作包括剽窃他人和给他人提供剽窃。他们认为剽窃是最严重的学术不端行为,破坏同事之间的信任,影响研究的正常传播,在学生守则中明确规定对学术不端行为的处罚条例。德州农工大学的学生自称为Aggie,每一位Aggie在入学时都要签署一份学术诚信声明:每一位Aggie都不会撒谎、欺骗、偷窃和容忍做这些事的人。在上交任何学术相关的材料之前,每位学生还会要求打印并签署诚信誓词:以我的名誉担保,作为一名Aggie,我在这份学术工作中既没有给予也没有接受任何未经授权的帮助。

4 课程分析与启示

1)重视培养学生的计算思维能力。

程序设计课程不能过多关注某个编程语言本身的语法知识,而忽略对学生计算思维能力的培养。国内程序设计课程往往对编程语言本身介绍过多,要求学生熟练掌握编程语言的每一个知识点,而对具体问题解决时的算法设计、方案对比、性能分析都做得不够,往往直接抛出具体的算法,让学生学习如何将算法变成代码。只有多让学生分析问题、设计算法,才能更好地锻炼学生的逻辑思维能力。

2)重视不同编程思想语言的对比教学。

程序设计课程的教学主旨是让学生学会如何用计算机程序结构和逻辑框架解决实际问题,然而,编程语言更新换代非常快,让学生快速掌握不同的编程语言思想并能在今后的工作中快速学习新的编程语言非常重要。国内高校每门程序设计课程只专注某一门编程语言,如C、C++或Java,没有将不同的编程语言放在一起进行对比教学。不同编程思想语言的对比教学,可以将学生的注意力从某一门语言的语法规则转移到不同语言的编程思想上,体会不同语言的特性和优缺点。

3)注重学生平时学习过程。

考核上程序设计课程期末考试成绩不会超过总成绩的50%,而是更注重每个阶段的学习验收,将大量的随堂测试、上机实验、上机测试、课后作业、期中考试均作为学生的评分依据。国内很多高校仍然以期末考试作为主要的考核手段,期末考试通常会占比70%以上,这样很容易导致学生不注重平时积累,只想着期末考试前突击,对学习以动手实践为主的程序设计课程是非常不利的。

4)照顾不同编程基础的学生。

美国很多高中开设计算机课程,不少学生具有一定的编程基础,因此课程网站上的作业布置会考虑到不同编程基础的学生需求。对于编程基础薄弱的学生,有难度的题目都会提供解题提示信息,但开始提示信息是隐藏的,也并不鼓励学生在充分思考前查看;而对于编程基础较好的学生,扩展的思考题会极大地激发学生的学习热情,丰富有趣的问题背景资料也能极大地拓宽学生的知识面。

5)注重课下师生互动交流。

每门课程都安排教师、助教、同行教师每周有固定的办公室答疑时间,都开设Piazza课程问答中心,可以实现充分的师生互动交流,便于及时解答学生的疑问。国内高校教师课后主要通过Email和学生进行联络,有些教师也建立课程的QQ群或者微信群,但是QQ群或微信群中学生的提问和教师的回答不能有效保留,因此,很可能会出现重复回答同一问题或者学生没有看到答案重复提问的情况,问题和答案也不方面查找,浪费师生的宝贵时间。

6)自主灵活调整教学计划。

主讲教师具有绝对的自主权,每学期教师的教学计划都会作出调整,包括课件、案例、参考资料、作业、评分标准等,以确保教学内容紧跟最新技术和知识。国内高校的教学计划调整往往是由上至下的,学院领导要求调整教学大纲和教学计划时,所有教师在同一节点进行调整,并且教授同一门课程的教师讲什么内容、做什么作业、怎么评分都要保持严格一致,不利于教师发挥各自优势,作出新的教学尝试。

7)注重知识产权和学术诚信。

美国非常注重知识产权,哪怕是某个数学问题用计算机编程实现,都会注明谁第一个将这个问题用计算机实现,潜移默化地培养学生对知识产权的尊重。此外,非常注重学术诚信,对哪些属于正常合作、哪些属于抄袭都有明确的定义,并通过让所有学生签署诚信承诺书强化诚信意识,对违反学术诚信的处罚非常严厉,而一般学生也不会触犯诚信守则。

5 结语

计算机程序设计课程是高校计算机相关专业的核心基础课程,学好程序设计课程是学习其他专业课程的基础。总体而言,我国高校计算机专业学生的编程能力要强于计算思维能力,算法实现能力要优于算法设计能力,在程序设计课程的教学中更好地培养学生的计算思维能力,仍然是学校和教师努力的方向。一方面,对于教师而言,在课堂上要注重培养学生的计算思维能力,可以考虑将不同编程思想的语言放在同一门课中进行对比教学,注重学生平时学习过程和兼顾不同基础的学生;另一方面,对于学校而言,要加大课程辅助教学平台、师生互动交流平台的建设,并支持教师能够自主灵活调整教学计划,发挥个人的教学特色,还要建立有效机制保护知识产权和确保学术诚信。

猜你喜欢

编程语言上机程序设计
周金应
基于JavaScript编程语言之 闭包技术在焦点轮播上的应用
医学专业“Python程序设计”课程教学改革总结与思考
基于Visual Studio Code的C语言程序设计实践教学探索
计算机软件开发中JAVA编程语言的应用
从细节入手,谈PLC程序设计技巧
上机数控“可疑”的高毛利率
Java编程的现状与发展前景
计算机应用软件开发中编程语言的选取
高中信息技术教学实效探究