Python:美国高校中最受欢迎的入门编程语言

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、工作流)

时间: 2024-09-29 09:39:42

Python:美国高校中最受欢迎的入门编程语言的相关文章

美国高校重视移动技术 忽视云计算发展

美国"信息化校园计划"(The Campus Computing http://www.aliyun.com/zixun/aggregation/3022.html">Project)发布的2011校园信息化年度调查报告显示,美国高校都在积极融入移动化趋势,但对云计算的重视度却比较低. 该报告显示,目前有超过半数美国各类高校已经或即将在下一学年提供移动应用,高于去年的30%至40%. 相比而言,云计算在美国高校中的普及速度却比较缓慢,只有4.4%的受访者表示,他们的校园

Python检测字符串中是否包含某字符集合中的字符

  这篇文章主要介绍了Python检测字符串中是否包含某字符集合中的字符,需要的朋友可以参考下 目的 检测字符串中是否包含某字符集合中的字符 方法 最简洁的方法如下,清晰,通用,快速,适用于任何序列和容器 代码如下: def containAny(seq,aset): for c in seq: if c in aset: return True return False 第二种适用itertools模块来可以提高一点性能,本质上与前者是同种方法(不过此方法违背了Python的核心观点:简洁,清

python过滤字符串中不属于指定集合中字符的类实例

  本文实例讲述了python过滤字符串中不属于指定集合中字符的类.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # -*- coding: utf-8 -*- import sets class Keeper(object): def __init__(self, keep): self.keep = sets.Set(map(ord, keep)) def __getitem__(self, n): if n

Python的Django中django-userena组件的简单使用教程

  这篇文章主要介绍了Python的Django中django-userena组件的简单使用教程,包括用户登陆和注册等简单功能的实现,需要的朋友可以参考下 利用twitter/bootstrap,项目的基础模板算是顺利搞定.接下来开始处理用户中心. 用户中心主要包括用户登陆.注册以及头像等个人信息维护.此前,用户的注册管理我一直使用django-registration.只是这个APP有些不思进取,09年发布了0.8alpha版后就一直没什么动静.这次决定尝试另外一个用户模块组件django-u

在Python的列表中利用remove()方法删除元素的教程

  这篇文章主要介绍了在Python的列表中利用remove()方法删除元素的教程,是Python入门中的基础知识,注意其和pop()方法的区别,需要的朋友可以参考下 remove()方法从列表中删除第一个obj. 语法 以下是remove()方法的语法: ? 1 list.remove(obj) 参数 obj -- 这是可以从列表中移除该对象 返回值 此方法不返回任何值,但从列表中删除给定的对象 例子 下面的例子显示了remove()方法的使用 ? 1 2 3 4 5 6 7 8 #!/usr

Python中编写ORM框架的入门指引

  这篇文章主要介绍了Python中编写ORM框架的入门指引,示例代码基于Python2.x版本,需要的朋友可以参考下 有了db模块,操作数据库直接写SQL就很方便.但是,我们还缺少ORM.如果有了ORM,就可以用类似这样的语句获取User对象: ? 1 user = User.get('123') 而不是写SQL然后再转换成User对象: ? 1 2 u = db.select_one('select * from users where id=?', '123') user = User(*

详解在Python和IPython中使用Docker

  这篇文章主要介绍了详解在Python和IPython中使用Docker,Docker是一个吸引人的新系统,可以用来建立有趣的新技术应用,特别是云服务相关的,需要的朋友可以参考下 现在Docker是地球上最炙手可热的项目之一,就意味着人民实际上不仅仅是因为这个才喜欢它. 话虽如此,我非常喜欢使用容器,服务发现以及所有被创造出的新趣的点子和领域来切换工作作为范例. 这个文章中我会简要介绍使用python中的docker-py模块来操作Docker 容器,这里会使用我喜爱的编程工具IPython.

python删除列表中重复记录的方法

  这篇文章主要介绍了python删除列表中重复记录的方法,涉及Python操作列表的相关技巧,需要的朋友可以参考下 ? 1 2 3 4 def removeListDuplicates(seq): seen = set() seen_add = seen.add return [ x for x in seq if x not in seen and not seen_add(x) ] 希望本文所述对大家的Python程序设计有所帮助.

python在shell中运行正常,但在windows中经常报错

问题描述 python在shell中运行正常,但在windows中经常报错 我写了一个获取网页信息的文件,在shell中测试,运行情况良好,但是直接双击打开py文件,则经常闪退.以下是代码.这种情况我不是很了解,求帮助. # -*- coding: utf-8 -*-import urllib2import urllibimport reimport threadimport timeimport json#----------加载处理Steam市场--------------class Spi