CodeLab与计算机程序教学
2009-03-06张玥
张 玥
编者按:在2008年11月15日召开的第四届全国计算机教育论坛上,一位从大洋彼岸远道而来的特殊嘉宾为我们带来了西方的教育教学理念,引起了普遍关注。他就是美国纽约市立大学布鲁克林学院(CUNY)计算机与信息系教授David M. Arnow。David教授是计算机科学课程改革的主要倡导者,主要研究领域包括实验性分布式计算软件和计算机科学教育。在这次论坛上,他详细介绍了自己开发的基于Web的交互式程序设计编程语言学习系统——CodeLab,与各位老师交流了自己的教学经验和体会,赢得与会者的好评。本刊记者(以下简称记)在会议期间采访了David教授(以下简称D),就计算机教育教学等内容进行了深度访谈,以资国内同行了解和借鉴。
David M. Arnow(arnow@acm.org),美国纽约市立大学布鲁克林学院Brooklyn College (CUNY)计算机与信息系教授,Turings Craft公司创始人和总裁。David教授于1973年在Oberlin大学获得化学学士学位,工作几年后,在纽约州立大学(SUNY)计算机系获得博士学位。David教授发表了大量学术文章,所编著的《Java面向对象程序设计》一书广受好评,并
被翻译成中文、意大利文和西班牙文等语言。在布鲁克林学院,David教授是计算机科学课程改革的主倡者,获得过300多万美元的联邦科研基金。David教授的主要研究领域包括实验性分布式计算软件和计算机科学教育。David教授获得了“Tow Award for Excellence in Teaching”奖。除进行学术研究外,David教授还是一个软件开发项目的顾问,在贝尔实验室、美国电话电报公司(AT&T)、纽约人寿(NY Life)和德意志银行(Deutsch Bank)进行高级程序设计与系统方面的主题讲座。1999年与大学同事创办Turings Craft公司,进行CodeLab系统的开发。CodeLab系统是一个基于Web的交互式程序设计编程语言学习系统,在北美被广泛使用,每学年有10,000多学生用户。
记:您从事软件设计教学多少年了?
D:我从事软件设计教学有很多年了,具体时间从1980年开始:在有互联网之前,在PC之前!
记:在您探究中国的教学体系时,您是否注意到东西方教学实践的显著不同?
D:我所看到的差异性,也许更多的是北美和其他地区的,而不是西方和东方的对比。在北美,我们提供超过半数以上大学教育适龄人群所需的大学教育资源,因此我们可以更多地关注我们如何教学,而不仅仅是我们在教什么。
记:您认为理想的学习软件设计的环境是什么?
D:这是一个好问题。我认为理想的环境是一种均衡的教学环境,学生对学习方法和学习素材的需求是多种多样的,教师应尽可能提供多元化的学习资源给学生。也许是学习教材,也许是教师的讲座视频,也许是实验室的软件开发实践等。总之好的资源是生动的、个性化的,亲身实践的实验室环境和随时指导的实验教师可以帮助学生一起攻克复杂难题。
记:您认为学生在学习编程语言时,面临的最大障碍和挑战是什么?CodeLab是否很好地帮助学生解决了这些问题?
D:问题当然有很多,但我认为最重要的有两点。第一个最大的沟壑是用公式化的方案如何解决问题;第二个问题是精确的数据步骤,如何写程序的步骤。例如,人类是很聪明的,只要被告知目的地的大致方位,你就能到达目的地。而计算机是愚蠢的,我们必须赋予它严格精确的指令语言。学生在学习编程预言时,要学习的是精确的、格式化的、按部就班的步骤。
从某种程度来看,CodeLab确实帮助学生跨越了一些障碍。CodeLab 提供短小的练习,学生可以标准化一个小方案,但那只是一小步。我们需要学生设计一个完整的程序,而在这个过程中,CodeLab所起到的作用是:当你实施标准化解决思路时,你必须用到部分编程语言。通过掌握和理解编程语言的基本要素帮助学生实施标准化解决方法。CodeLab不能完全解决全部问题,但它可以提供有力的帮助。
例如,你学习钢琴的目标是可以弹奏一首著名曲子或即兴创作一曲爵士乐,因此你需要练习节拍、指法、和弦转位等,这些许许多多类似的练习都在学习如何弹钢琴。通过这些演奏基本技巧,你可以演奏成一首曲子或进行即兴表演。CodeLab 就像在钢琴、吉他或其他乐器上的练习,你可以练习节奏、和弦转位等基本技巧。
又例如学习外语,如果我(非中文母语者)想要用中文告诉某人方位,就必须先学习汉字,而后再学习其他中文技能,才能帮助我准确表达方向。如果我不懂汉字,我将没有希望用中文表达方位。CodeLab就可以通过小片段练习帮助学生掌握基础知识点。
记:是什么原因激发您开发CodeLab这个基于Web的交互式程序设计编程语言学习系统?
D:想法来源于课堂。有一天,我突然意识到学生在数学课上有机会获得大量实践练习的机会,而在学习计算机专业知识时却恰好相反,反而没有很多实践练习机会了。实践是教育的基础,尤其对于计算机这样一个应用性和实践性都很强的学科。没有实践,学生不可能掌握更多的知识,永远站在理论层面上。长远地讲,我要经常和学生打交道,我想要找到一个让学生学会学好的高效率的方法,给学生提供及时反馈,让他们尝试把从课堂上学到的方法和知识马上付诸于实践。
记:现在很多老师自己开发课件辅助教学,简称为计算机辅助教学系统,您认为CodeLab是一个计算机辅助教学系统吗?
D:可以说它是一个用于计算机上的指导工具,因此定义它是计算机辅助指导更合适。许多这类产品的工作流程是学习者阅读系统提供的问题,然后作答。这些问题通常是多项选择或简答题,学生从给出的多选答案中选择哪一个代码是最好的。
但请注意,这不是程序设计员的工作方法!程序设计员必须产生代码,而不是挑选代码。而CodeLab不同,它是让学生实践动手产生代码,不是选择已给出的代码。当然,没有人能够只通过CodeLab 来学习编程,他们还需要听课或辅导。希望某天CodeLab 可以组合辅导课程,成为一个标准学习课件。
(未完待续)