来源:thenewstack.io
编译:西西艾弗
这是一个几十年来一直引发教育工作者探讨的问题,当学生一开始接触计算机科学时,他们应该从哪种编程语言开始学习呢?
对这个问题进行过长久思考和研究的人是马克·古兹戴尔(Mark Guzdial),他是美国密歇根大学工程学院的教授,也是美国计算机协会(ACM)会士,在计算机科学教育领域有着极其丰富的研究经验。▲马克·古兹戴尔
他的两位同事最近给出了一些想法:将哪种编程语言作为教授计算机科学专业的学生的第一种编程语言,并不那么重要。这个观点引发了他的思考。
古兹戴尔在《美国计算机协会通讯》(Communications of the ACM)上发表的一篇文章中写道:我有一个假设,当这个领域还“年轻”的时候,这个观点曾是正确的。但那是在20世纪60年代末了,当时课程刚开始建立。而今天,不同年龄以及不同学习阶段的学生都在学习如何编程,他们肯定有着不同的需求。对于这个问题,不同的大学也有着不同的答案,这反映出他们的教学理念以及认为哪种语言对毕业生来讲最为重要。有趣的是,这些年随着计算机科学的发展,对于学生来讲关键的“第一种编程语言”也在不断变化。
2017年,斯坦福大学(Stanford University)对计算机科学专业的计算机入门课程做了一些改动,登上了头条。据斯坦福大学计算机科学专业名誉教授埃里克·罗伯茨(Eric Roberts)介绍,他花了五年时间将课程从Java过渡到JavaScript,并最终创建了一个新的基于JavaScript的试点课程(因此,课程名为CS106J,而不是CS106A)。这一变化所涉及的问题包括编写一本新的教材、布置新的课后作业以及培训新的教学助理,罗伯茨本人也在退休后重新出来任教。
以前,斯坦福大学的入门课程是基于C语言的(再往前是Pascal)。罗伯茨称赞JavaScript是“互联网的语言”,他曾在2002年帮助学校将课程改为Java,编写教科书,并与其他教师合作重组课程和作业。但15年后,他说:“现在是2017年,Java已经老了。”
但是如果看过教学大纲,就会发现CS106A的教学似乎正在使用Python(和PyCharmIDE),而CS106B的教学在使用C++。与此同时,哈佛大学的热门课程CS50在多年来一直坚持采用多编程语言教学的方法。第一周,学生们学着用Scratch编写程序,然后会转到C,接下来的几周里又转到Python,最后是JavaScript。
▲CS50授课现场
CS50不是只教一种编程语言,而是向学生介绍一系列‘过程式’的编程语言,每种编程语言在概念上都是由另一种编程语言构建的——这来自于官方的常见问题解答。官方解答中还提到:最终的目标不是让学生觉得自己“学会了用xxx编程”,而是“学会了如何编程”。
哈佛大学教授、CS50讲师大卫·马兰(David Malan)曾在Quora上写道:除了汇编语言,C语言是最接近计算机硬件的编程语言(我认为对于像CS50这样的入门课程来说,汇编语言太神秘了)。
在C中,没有“魔法”,如果你想让某样东西存在于某个地方,你就必须实实在在地把这样东西放在那个地方。比如你想要一个哈希表,你就必须自己一步步实现它。马兰认为,学习C的那几周时间,使学生有机会理解所有编程语言的一些基本组成部分,同时也有机会了解“缓冲区溢出”这一安全性方面的关键概念。
我认为,在一周时间里用C实现(或尝试实现)哈希表,然后再用一周左右的时间在PHP或JavaScript代码中实现同样的项目,这也是一件非常厉害的事情。
此外,C语言也是一种相对“较小”的语言,因此到了学期中期,学生们几乎已经了解到C所包含的所有内容(除了共同体和函数指针)。
据《美国计算机协会通讯》上的一篇文章显示,2014年,Python已经成为美国顶尖计算机科学项目(包括麻省理工学院和加州大学伯克利分校)入门课程中最流行的编程语言。
更具体一些,排名前10的院系中有8个(80%),排名前39的院系中有27个(69%)在CS0或CS1的入门课程中教授Python。当时,Java落后于Python,紧随其后的是MATLAB、C、C++,然后是Scheme和Scratch。
2016年,三个英国研究人员进行的一项调查的发现,在英国大学,用Java授课的班级是用Python授课的班级的数量的两倍多,尽管大学内的受访者(教师和学生)普遍认为Python更容易教授也更容易学习。
研究人员认为,选择Java可能是因为学校将编程语言在行业内的知名度作为了衡量标准。这种以“行业知名度”为准的案例也并不少。比如,温斯顿-塞勒姆州立大学的三位研究人员在2019年发表的一篇论文中甚至提出:每个计算机科学专业的学生都应该具备大数据和云计算相关的“基础知识”,并拥有一些部署和管理云中的大数据的实践经验。
选择某种编程语言进行学习的因素有很多:或是从底层语言学起,打牢基础,了解本质;或是从规则简单的编程语言入手,易于入门,激发兴趣;或是出于对某种编程语言的特殊兴趣;或是迎合人才市场上的热门需求……三位英国研究人员也在论文中指出,“如果不能很好地掌握编程,那么几乎可以肯定,计算机科学就没有进步。”同时也指出,“从大学开始计算机科学的教学以来,应该先教授哪种编程语言的问题一直在被激烈地争论,并会持续下去”。马克·古兹戴尔表示:让学生从哪种编程语言开始学习很重要,但也希望教育工作者能重新审视这个问题,做一个形成性的研究。
相关资源