Python成为最受欢迎语言的动机
Python逐渐成为教授初学者编程的第一选择。三年前,Mark Guzdial通过博客预测Python作为一门教学语言将会越来越受欢迎。MIT和UC Berkeley的计算机系最近将他们入门课程的教授语言改成了Python。最大的三个MOOC(Massive Open Online Courses)提供商edX,Coursera和Udacity也全都提供了Python语言的入门课程。并且,不同子领域的教授们(比如说Lorena Barba)在也致力于教授初学者Python。
在过去四年中,我开发了一些教学工具,在这些工具中Online Python Tutor (www.pythontutor.com)在使用人数上取得了突飞猛进的增长,这得益于越来越多的人使用Python。
尽管各方面都在说Python越来越受欢迎,但是我并没有看到一个数字上的确切统计。所以我决定统计在美国Top高校的计算机系中有多少使用Python来教授他们的入门课程,由此得出Python是不是越来越受欢迎。在统计过程中,其他受欢迎的教学语言也被一同列出。
为什么我要做这个研究?这是因为选择不同的语言不仅反映了不同学校计算机系的教育哲学,更为重要的是,它影响了许多学生对计算机科学的第一印象。被这些Top高校选择的语言暗示着计算机科学教育的发展趋势,要知道,这些Top高校实际上就是趋势的制定者。
利用方法论进行研究
在研究中,根据U.S. News 在2014年给出的排名,我选取了Top39高校中的计算机系作为研究对象。有8所学校的计算机系排名并列第40名,这就是为什么我选择Top39作为研究对象的原因。不管谁给出的排名都有瑕疵,并且排名会随着时间不断发生变化。我采用的这份排名中,只考虑了那些能够授予博士学位的大学,还有很多我尊敬的大学没有包含在这39所之内,包括我的母校。
对每一所大学,我挑选出CS、CSE、EECS这三个专业的CS0和CS1课程。在我的研究中,CS1代表CS专业的学生最需要学习的课程,CS0代表一门入门的编程课,上这门课的可能是还没有定专业的学生或者是在上CS1前需要额外准备的学生。学习CS0和CS1都不需要其他任何CS方面的预备知识。要不然他们也不会是学生选择的第一门CS课程(学习CS1之前也不一定要学CS0)。请注意对于CS0和CS1并没有一个严格的官方定义,所以我必须使用一些个人的看法,当然,我会尽量遵守每个系关于课程的官方描述。
尽管一些老师认为CS1指的就是入门编程课程,在我的研究中,我特意将CS1和CS0放在一起,因为对许多学生来说,是在大学学习的第一门编程语言。鉴于美国K-12(相当于国内的小学到高中)教育在计算机科学教育方面的不幸状态,这些大学课程可能是许多学生,特别是女性和少数民族,第一次接触到编程语言。即使学生事先有编程经验,编程语言第一次正式出现在大学课程中仍然具有很大的影响力。我认为CS0和CS1同样重要,因为随着编程在科学领域变得无孔不入,越来越多的非专业人士也开始学习CS0课程。再者,少部分CS专业的学生在学习CS1之前会先学习CS0,特别是那些之前没有任何编程经验的学生。所以,对学生来说,CS0课程作为通往计算世界的大门起着极其重要的作用,没有这门课程,他们可能都不会知道自己在这方面有着如此巨大的热情。
研究结果
下面这张表展示了七种最受欢迎的语言在Top39高校中的使用情况。将每个柱形代表的数字加起来和大于39,这是因为许多学校同时提供了CS0和CS1的课程。
继续探讨
尽管我是一个Python语言的拥护者,但我会尽我最大的努力去不带评价地陈述事实。在这个表格中,Python是最受欢迎的语言,Java排第二。Java语言在过去的十年中在入门课程教学中一直占有主宰地位。但是现在,一些学校完全摒弃了Java,全部使用Python,还有一些学校采取了一个混合的方法,在CS0中使用Python,而在CS1的教学中使用Java。在高中,AP(Advanced Placement)课程中使用的仍然是Java语言。
排在Python和Java之后的语言是MATLAB,MATLAB经常在CS0课程中使用。跟在MATLAB之后是C++,在过去十年中,C++的重要地位被Java完全取代。在2003年,高中的AP课程甚至都用Java取代了C++。从这个表格来看,C语言和C++语言受欢迎的程度一致。一些学校在使用C语言教授入门课程的时候,将C语言和其他的语言结合起来使用,比如说哈佛大学。
Scheme-based 语言在一部分教育工作者和编程语言研究者中相当受欢迎。最引人注意的是,两个哲学校园SICP 和 HtDP已经围绕Scheme生态系统建立了广受好评的教科书和相应课程。但是最近几年,比如在MIT和UC Berkeley,Python已经取代了Scheme的地位。表格显示,Scheme仅仅只在四所学校中使用。
表格中列出来的七种语言中,Scratch是唯一的一种可视化的、基于块的编程语言,Scratch是这种类型的语言中最受欢迎的一种,使用Scratch完成的项目有Alice、App Inventor、Etoys、Kodu、StarLogo和 TouchDevelop 等等。这种类型语言的创造者将精力主要放在K-12教育上,这或许能够解释为什么这种类型的语言没有在大学中获得广泛的使用。
写在最后
最后, 注意到三个有趣的语言集合没有出现在这个表中,因为这些语言仅仅只被一所学校选用,或者根本没有学校选用:
静态类型的功能性语言,比如说 Haskell 和 OCaml,这些语言在PL研究者中非常受欢迎。 动态类型的语言,比如说JavaScript,Ruby和PHP,这些语言在网络编程者中非常受欢迎。 广泛使用的工业语言,这些语言一般和特定的平台相关联,包括苹果的 Objective-C和微软的C#/Visual Basic。
如果我们在五年,十年或者二十年以后再回顾这篇文章,届时,哪一种语言会是时代的宠儿?
文章相关课程 NoSQL之Redis高性能的key-value数据库
深入浅出(分布式应用+简单微博系统) Python实战开发之Pyramid Web框架在商城项目中的应用(模版引擎、布局引擎、JSON) 云计算课程:基于PaaS通用校园办公云平台的设计与实现(流程控制、ztree、工作流)