鲁 琴,曹传晏
(辽东学院 信息技术学院,辽宁 丹东 118003)
摘?要:针对美国斯坦福大学计算机科学系面向全校开设的程序设计入门类课程设置情况,分析该类课程的整个课程体系,包括教学、辅导、作业和考核等各个环节安排,总结其课程设置人性化和科学化、辅导机制完备化、考核手段精细化的课程特点。
教育期刊网 http://www.jyqkw.com
关键词 :计算机科学;程序设计;课程体系;作业宽限日政策;诚信准则
基金项目:辽东学院教改项目“课程教学过程性考核系统”(8888-80306501)。
第一作者简介:鲁琴,女,副教授,研究方向为软件工程和数据库应用, luqin0319@163.com。
0 引 言
美国斯坦福大学地处加利福尼亚州西部的旧金山(San Francisco)和圣何塞(San Jose)之间,位于著名的“硅谷”中心,是世界科研和高等教育领先机构之一。隶属于斯坦福大学工程学院的计算机科学系始建于1965年,如今引领着世界计算机科学的科研和教育前沿。
笔者最初接触到斯坦福大学的计算机课程是在2009年主讲数据库原理双语课程时,当时选用了一本原版教材A First Course in Database Systems,这是由斯坦福大学的两名计算机教授(Jeffrey D. Ullman和Jennifer Widom)合作编写的。读过之后发现,国内的同类著名教材可以说就是这本教材的翻译本和节选本,从此开始关注斯坦福及其计算机课程。
笔者再次接触斯坦福大学的计算机课程是2010年底。当时,网易正式推出“全球名校视频公开课项目”,其中由斯坦福大学计算机科学系教授麦兰?萨哈米(Mehran Sahami)讲授的编程方法学(programming methodology)引起笔者的关注,于是由此展开对斯坦福大学的计算机课程研究和探索。
1 斯坦福大学计算机程序设计入门类课程概述
斯坦福大学计算机科学系面向全校开设了5门计算机程序设计入门类课程,供全校学生选修,这5门课程分别是CS101 、CS105、CS106A、CS106B和CS106X。
1.1 CS101——计算机理论入门(introduc-tion to computing principles)和CS105——计算机入门(introduction to computer science)
这两门课程主要是计算机科学中主要领域的通识教育,平均每年度有大约500名学生选修。课程主要讲授计算机基础知识以及JavaScript、HTML、CSS等简单的程序设计。学习CS101和CS105[1-2]花费的时间和精力相比其他程序设计入门课程要少很多,如果只是为了完成斯坦福对通识教育的要求,选修这两门课非常适合。CS101于春季学期开课,CS105于秋季、冬季学期开课。
1.2 CS106A——编程方法学(programming methodology)
编程方法学[3-4]是斯坦福选修人数最多,也是教学规模最大的计算机程序设计入门课程,在2012年秋季学期中,有650名学生选修CS106A。 CA106A教授的是良好的软件工程思想,同时结合使用较广泛的Java程序设计语言,比单纯程序设计的知识范围要大得多。该课程适合所有专业的学生学习,事实上,选修该课程的大多数是工程学院以外专业的学生。该课程不需任何程序设计经验,但课程要求严格,需要花费大量的精力。CS106A于每年的秋季、冬季、春季和夏季学期开课。
1.3 CS106B——抽象编程(programming abstractions)
该课程是CS106A的直接后续课程,涵盖高级程序设计主题,如递归、算法分析和数据抽象等。CS106B[5]采用C++程序设计语言,C++类似于C和Java的结合。如果学生已经参加了计算机科学高级课程考试并取得了4分或5分的成绩,或在一门专业课程中取得了好成绩,则可以从CS106B开始学起。CS106B要求学生已经对好的程序设计风格以及软件工程思想非常熟悉(达到CS106A的水平),在此基础上,可以学习解决程序设计和数据抽象中的新问题。CS106B于秋季、冬季、春季和夏季学期开课。
1.4 CS106X——抽象编程(高级)(progra-mming abstractions(accelerated))
CS106X[6]是CS106B的提高版本,它使用C++程序设计语言,讲授的主题与CS106B完全相同,只是进行更深层次的探讨。由于课程内容很多,因此课程进度非常快,适合已通过计算机科学高级课程考试或有扎实的程序设计基础的学生。不要错误地认为真正的工程师都会直接选修CS106X,实际上,大多数计算机科学家和工程师(包括2012—2013秋季学期CS106A的授课教师Mehran Sahami教授)都是从CS106A开始学习。CS106X通常于秋季学期开课。
许多斯坦福的学生在高中阶段或是在他们本身从事的与计算机相关的工作领域中已经获得相当多的程序设计经验,这种情况下,即使从CS106X开始学习程序设计类课程也很浪费时间,但是根据以往的经验,每一届新生中只有10~15位应该从程序设计类更高起点的课程开始学习。对于大多数学生来说,还是应该从CS106课程开始学习。大多数高中的计算机课程对现代软件工程技术涉及不多,学生通过CS106可以学习科学的程序设计理念,为更高级的工作打下坚实的基础。
2 课程体系——以CS106A为例
2.1 课程安排
总共上课11周,每周3节,每节50分钟。除上课以外,学生每周必须参加50分钟的小组讨论。
2.2 课程组成员
(1)1位授课教师(instructor)。课程的负责人,主讲课程,另外每周有2小时的课程辅导。
(2)1位首席助教(head ta)。辅助教师完成课程所有任务,每周两次(每次2小时)的课程辅导。
(3)多名讨论小组长(section leaders)。 讨论小组长主要负责组织每周一次的小组讨论,每个小组6~8名成员。小组长还要履行下列职责:与组员一同上课,每周一次的课程组会议以及针对每次作业与每名组员面对面交流后评分,辅助期中、期末考试成绩考核,每周2小时在公共机房进行辅导答疑。
(4)多名课程辅导者(course helpers)。每周在公共机房进行2~10小时课程辅导答疑。
2.3 课程网站
课程通过网站发布课程最新公告,提供详细的课程资料并根据课程进度随时更新,网址为http://www.stanford.edu/class/cs106a/或http://cs106a.stanford.edu/。
2.4 学分
本科生选修CS106A可获得5学分,研究生选修这门课可获得3学分,但是对两者的要求完全一样。
2.5 教材和课堂讲义
(1)该课程有两本教材。第1本名为Karel the Robot Learns Java,这是一本35页的书,以一个极其简单的机器人世界为背景,介绍程序设计的主要思想。卡罗尔是一个友好的小机器人,生活在一个格子世界中。在课程的第1周,学生将和卡罗尔一起探索程序设计,解决问题和体会软件工程思想。这本教材对于学生完成第一次作业非常有用,学生可以登录课程网站下载该教材电子版,也可以在斯坦福书店买到这本书。
第2本名为The Art and Science of Java,作者是Eric Roberts。熟悉了机器人卡罗尔的世界后,学生可从第2周开始学习用Java程序设计语言构建更大、更详细的程序。该教材非常好地介绍了Java中的软件工程思想。
(2)课堂讲义(handouts)。除了教材,教师还会以课程讲义的形式发放课程附加材料,作为教材的补充材料。每次上课时,学生都可以在教室入口处的讲义箱领取,也可以从课程网站以PDF格式直接下载。
2.6 课程主要联系方式Email
这门课程要求学生拥有Email帐户。在斯坦福,所有学生通过LaIR都可取得Email帐户,师生之间课后的主要交流都是通过Email完成,包括作业的提交、讨论组的注册等。
2.7 程序设计作业
(1)教学大纲已经列出本门课有7次程序设计作业,每次作业都有截止时间。随着课程进度的推进,作业会越来越难,时间花费也将越来越多,因而后面作业的权重比前面的要稍重一些。除了学期期末的作业,学生针对每个作业都要与小组组长一对一地交流10~15分钟进行互动评分,包括作业中的闪光点、仍需改进的地方、在程序设计思想方面的欠缺。通过这些,学生可以获得更详细的信息,也可以提问评分等级及依据。
(2)作业评分等级。作业等级由高到低分别为++、+、√+、√、√-和√--6级,作业成绩主要由讨论小组长评定,但是其中的最高级++代表着“绝对完美”,必须经由课程教师和助教同意才能给出,这种成绩很稀少且不可多得,每学期只会出现有限的几个。
(3)作业宽限日政策。每次作业必须在指定的时间前提交电子版,但是学生有时还会遇到些意外而导致作业不能按时提交,因此采取作业宽限日政策,规定每学期可以有两个作业宽限日。当宽限日用完后,上交迟到的作业(最多迟到3个上课日)会随着迟到的时间每天降低一个级别(如√+降至√,依此类推)。与小组长的面对面交互评分将在作业上交截止日期后的两周内完成,超过3个上课日上交的作业将不会被评分。只有极特殊的情况出现(如因病、家庭紧急情况和宗教原因等),才有可能延长宽限日,这必须在作业到期日前的24小时内经由助教同意,小组长没有这种权力。
2.8 课程考核方式及分数比例
课程可在实践的过程中不断地改革考核方式及分数比例,以两个学期为例。
(1)2012年冬季学期。除了7个程序设计作业外,还有2次中期考试,其中程序设计作业占55%,第1次期中考试占20%,第2次期中考试20%,小组参与占5%。
(2)2010年秋季学期。除了7个程序设计作业外,还有1次中期考试和1次期末考试,其中程序设计作业占45%,期末考试占30%,期中考试占15%,小组参与占10%。
2.9 诚信准则
早在1921年,斯坦福的学生学术委员会便制定《斯坦福大学诚信准则》,通行至今。作为计算机课程的学生,在学术诚信方面应该做到:①在提交的作业中注明在完成作业过程中接受的帮助;②不要与其他学生共享实际程序;③不要看往届学生的程序解决方案和代码;④做好对提交的程序进行解释说明的准备;⑤所有提交程序都要经过自动抄袭检测程序的检测。
3 几点体会
3.1 课程设置多样——人性化
同一门课程按不同的深度分层开设,每位学生可以结合自身的实际情况选修适合的课程。国内大部分高校的程序设计入门课程比较单一(如只开设C程序设计),这样容易造成两极分化的现象,一是学生对程序设计没有很大兴趣或是能力不足,却没有第二种选择,造成学习困难,成绩不好;二是学生对程序设计兴趣浓厚,学习起来游刃有余,希望有更高的起点,却被禁锢在一定的课程范式中。
3.2 课程安排合理——科学化
(1)程序设计类课程的导向及重点清晰。这类课程首先强调的是软件工程思想,而不是一开始就单纯地学习一门程序设计语言,学会的仅仅是语言结构,实际上,学习软件系统开发过程中实用的软件工程思想才是最重要的。
(2)课程体系结构完善。斯坦福大学计算机系的每门课程都有完善的课程体系,关于课程的基本情况在学期一开始的第一次课,课程主讲教师就会向全体学生介绍清楚并开始执行。
3.3 课程辅导具体——完备化
课程相关资料全部上网,包括教材电子版、课堂资料、相关软件、作业和授课视频等。一门课程除了有主讲教师和助教,讨论组组长和课程辅导者(均由高年级的学生担任)还为学生学习提供全方位的帮助,每周的周日至周四晚上都在公共机房为学生完成作业提供帮助。登录http://cs198.stanford.edu/,点击“辅导时间表”链接,学生便可得到最新的辅导时间安排。
3.4 考核机制全面——精细化
首先对交作业的时间有严格的规定,宽限日的政策具体明确,可操作性极强;然后设计多个评分等级,同时对作业进行面对面交流评分;最后要求学生诚信地完成作业,并且有严格的检测手段。
4 结 语
课程设置人性化、课程安排合理化、课程辅导完备化、课程机制精细化是斯坦福大学程序设计入门类课程的特点,这值得国内大学相关课程学习。如何借鉴斯坦福的经验,探索出一套更适合各高校培养目标的课程体系,值得我们进一步研究。
教育期刊网 http://www.jyqkw.com
参考文献:
[1] CS101: introduction to computing principles [EB/OL]. [2014-09-25]. http://www.stanford.edu/class/cs101/.
[2] CS105: introduction to computer science (winter 2013) [EB/OL]. [2014-09-25]. https://courseware.stanford.edu/pg/courses/332835/cs105-winter-2013.
[3] CS106A: programming methodology[EB/OL]. [2014-09-25]. http://web.stanford.edu/class/archive/cs/cs106a/cs106a.1152/.
[4] CS106A: programming methodology[EB/OL]. [2014-09-25]. http://www.stanford.edu/class/cs106a/.
[5] CS106B: programming abstractions [EB/OL]. [2014-09-25]. http://www.stanford.edu/class/cs106b/.
[6] CS106X: programming abstractions [EB/OL]. [2014-09-25]. http://www.stanford.edu/class/cs106x/.
(编辑:宋文婷)