在撰写本文时(2014年7月),Python是目前美国一流院系教授计算机科学入门课程最流行的语言。
具体来说,前10名CS院系中的8个(80%)和前39名中的27个(69%)在CS0或CS1入门课程中教授Python。
Python作为教授新手的第一门语言越来越受欢迎。三年前,马克Guzdial博客关于Python作为教学语言的崛起,以及对未来教学语言的预测。麻省理工学院(MIT)和加州大学伯克利分校(UC Berkeley)顶尖的计算机科学系最近将他们的入门课程换成了Python。最大的三家MOOC提供商(edX、Coursera和Udacity)都提供Python编程入门课程。以及不同子领域的教授(例如,罗瑞拉头发)现在提倡向新手教授Python。
就我个人而言,我在过去四年里开发的教育工具,在线Python导师(www.pythontutor.com),由于这门语言的日益流行,它的使用量迅速上升。
然而,尽管有许多趣闻轶事,我还没有看到任何近期的数据来量化Python在编程教学中的受欢迎程度。因此,我试图通过记录有多少美国顶尖的计算机科学系使用它来教授他们的入门课程来找出答案。在此过程中,我还将其他流行教学语言的使用情况进行了分类。
为什么要做这样的分析?因为语言的选择首先反映了各个系的教学理念影响许多学生对计算机科学的第一印象.美国顶尖院系选择的语言可能预示着计算机科学教育的更广泛趋势,因为这些语言通常是教育界其他学科的潮流引领者。
方法
我认为排名前39的院系《美国新闻与世界报道》2014年排名第一.(随着《美国新闻与世界报道》发布新的排名,这个链接可能会过时。)为什么我止步于39?因为8对40是平局,所以那个点的分化信号很弱。没有一个排名方案是完美的,排名会随着时间的推移而变化。特别的是,这个排名只考虑了美国的博士学位授予大学。我的39所剔除了许多我尊敬的大学,包括我的母校。我们可以无休止地讨论应该包括哪些学校,以及如何对它们进行排名。但我必须做出选择一些排名方案和截断,这感觉很合理。
对于每一所大学,我查找了CS、CSE或EECS系的CS0和CS1课程,无论哪个系是计算机科学的故乡。我定义一个CS1课程是计算机科学专业的第一门必修课CS0为非专业或需要在CS1课程前进行额外准备的学生开设的入门编程课程(而不仅仅是基本的计算机读写能力)。CS0和CS1都不应该有任何CS的先决条件,否则它们就不能成为学生们选修的第一门CS课程。(特别是CS0应该不是CS1的先决条件。)我没有计算迷你课程、CS1+特别加速课程、数量较高的选修课或其他院系提供的编程课程。注意,CS0或CS1没有严格的官方定义,所以我必须进行一些个人判断。我尽量遵守每个系的官方课程描述和先决条件表。
尽管有些老师认为编程入门为了表示CS1,在本分析中我有意将CS0和CS1归为一类,因为这两门课程是许多学生在大学中学习的第一门编程语言,无论他们的专业或最终的职业是什么。考虑到K-12计算机科学教育的不幸状态在美国,这些大学课程是许多学生,尤其是女性和少数族裔,可能接触到的第一门编程语言。即使学生们带着编程经验在美国,他们在大学期间第一次被官方认可的曝光仍然很有影响力。我想给CS0和CS1同等的地位,因为随着编程在科学、工程甚至非stem学科中变得越来越普遍,越来越多的非专业学生选择了CS0。此外,有相当一部分CS专业的学生在CS1之前选修CS0,尤其是那些之前没有太多编程经验的学生。因此,CS0课程是学生进入计算领域的重要途径,否则他们可能永远不会知道自己有这样的热情。
结果
下图显示了排名前39的院系中有多少院系使用七种最常见的语言教授CS0或CS1课程。因为许多学校同时提供CS0和CS1课程,所以平均分加起来超过39分。
即使我是一个大Python支持者我将尽我所能不偏不倚地陈述事实。
Python是这个列表中最流行的语言。它以微弱优势超过了Java,后者在过去十年中一直是主要的入门教学语言。一些学校已经完全切换到Python,而另一些学校则采取混合方法,在CS0中提供Python,在CS1中保留Java。然而,在高中阶段,Java仍然被用于AP(先修课程)课程.
其次最受欢迎的语言是MATLAB,它经常在CS0课程中使用,向科学家和工程师介绍编程。C和c++紧随其后,但在过去的十年中,它们已被Java牢牢取代。高中AP课程甚至在2003年用Java取代了c++。此外,一些介绍性课程使用C语言(如哈佛的CS50)和其他语言一起教授,而不是让它成为唯一的语言。
基于方案的语言在教育工作者和编程语言研究人员中很受欢迎。最值得注意的是,两个(有些竞争对手哲学阵营——SICP和HtDP——围绕该计划的生态系统创建了备受好评的教科书和课程。但近年来,Scheme在一些地方逐渐被Python取代,例如麻省理工学院和加州大学伯克利分校.在这份名单中,只有五所学校在使用它。
刮伤是唯一的视觉,blocks-based语言它榜上有名。它是这一类型中最受欢迎的语言之一,包括相关的项目,如爱丽丝,应用程序发明家,Etoys,Kodu,StarLogo,TouchDevelop.这类语言的创造者主要关注K-12教育,这也许可以解释为什么它们在大学层面没有那么多的采用。
最后,请注意,有三种有趣的语言没有出现在这个图表中,因为它们在我们的样本中没有一所大学使用:
如果我们在5年、10年或20年后重新审视这一分析,那么哪种语言会处于领先地位呢?
以下是生成本文主要图表的原始数据。2014年7月,我通过浏览院系和课程网站手动收集了所有这些数据,主要是2013-2014学年的数据。(这个表格有点难读,因为我不能使用ACM的博客软件添加适当的行和间距。)
我没有链接到单独的课程网页,因为这些链接通常是指过去的课程,很快就会过时。但在可预见的未来,课程名称应该保持稳定。
请注意,许多学校同时提供CS0和CS1课程(通常是两个课程的多个版本),并且有些课程使用多种编程语言教授。
排名 | 大学 | Python | Java | MATLAB | C | c++ | 计划 | 刮伤 |
1 | 卡内基梅隆大学 | 15 - 110, 15 - 112 | 15 - 122 | |||||
1 | 麻省理工学院 | 6.00, 6.01 | ||||||
1 | 斯坦福大学 | CS106A成员 | ||||||
1 | 加州大学伯克利分校 | CS61A | CS10 | |||||
5 | 伊利诺斯 | CS103 | CS125 | CS101 | CS101 | |||
6 | 康奈尔大学 | CS1110 | CS1112 | |||||
6 | U.Washington | CSE140 | CSE142 | |||||
8 | 普林斯顿大学 | COS126 | ||||||
9 | 佐治亚理工学院 | CS1301, CS1315 | CS1371 | |||||
9 | 但奥斯丁 | CS303E | CS312 | |||||
11 | 加州理工学院 | CS1 | ||||||
11 | 美国威斯康辛麦迪逊 | CS302 | CS202 | |||||
13 | 加州大学洛杉矶分校 | CS31 | ||||||
13 | 美国密歇根 | EECS182 | EECS182 183 | |||||
15 | 哥伦比亚 | 工程师E1006 | COMS W1004-1 | COMS W1005-1 | ||||
15 | 加州大学圣地亚哥分校 | CSE8A | CSE7 | CSE5A | ||||
15 | 马里兰大学帕克分校 | CMSC 198 c, D, E | CMSC131 | |||||
18 | 哈佛大学 | CS50 | ||||||
19 | 美国宾夕法尼亚大学 | 独联体110、120 | ||||||
20. | 棕色(的) | CSCI0931 | CSCI0150 | CSCI0040 | 0170年,0190年 | 0080 | ||
20. | 普渡大学 | CS17700 | CS18000 | CS15900 | CS15800, CS15900 | |||
20. | 大米 | 140年薪酬 | ||||||
20. | 南加州大学 | 去找找CSCI 101 | 去找找CSCI 103 | 去找找CSCI 103 | ||||
20. | 耶鲁大学 | CPSC112 | CPSC201 | |||||
25 | 杜克大学 | CompSci 101 | ||||||
25 | 马萨诸塞大学阿默斯特 | CMPSCI 119 | CMPSCI 121 | |||||
25 | 北卡罗来纳大学教堂山分校 | 110年薪酬 | 401年薪酬 | |||||
28 | 约翰霍普金斯大学 | EN600.107 | ||||||
29 | 纽约大学 | CSCI-UA.2 | CSCI-UA.0101 | |||||
29 | 宾夕法尼亚州立大学 | CMPSC 121 | ||||||
29 | 加州大学欧文分校 | CSE 41 | ||||||
29 | 美国明尼苏达州 | 去找找CSci 1001、1901 | 去找找CSci 1103 | 去找找CSci 1901 | ||||
29 | 美国维吉尼亚州 | CS 1120 | CS 1110、1111 | |||||
34 | 西北大学 | EECS110 | EECS110 | EECS111 | ||||
34 | 俄亥俄州立大学 | CSE201 | CSE 205 | CSE 202 | ||||
34 | 罗格斯大学 | CS111 | ||||||
34 | 加州大学戴维斯分校 | ECS 10 | ||||||
34 | 加州大学圣芭芭拉分校 | 密室第8章 | ||||||
34 | 美国芝加哥 | CMSC 12100, 12200, 12300 | CMSC 12100, 12200, 12300 | CMSC 12100, 12200, 12300 | CMSC 10500、11500 | |||
总计 | 27 | 22 | 8 | 7 | 6 | 5 | 3. |
以下是该表格在2014年7月7日首次出版后,由于读者提交的修改,所做的修改:
非常有趣的分析。然而,我认为一些数据元素具有误导性。我在德克萨斯大学奥斯汀分校完成了计算机科学学位课程,并选修了CS105 Python入门课程。CS 105课程是一门选修课,没有多少德州大学计算机科学专业的学生选择这门课。
当我在德克萨斯大学的时候,CS105并不是一门真正的入门课程。对谷歌的简短搜索表明,它仍然不是。相反,它是某种特定语言的“入门”课程。有c++版本,Java版本,PHP版本等等。参加这些课程的学生通常有各种各样的经历,从大一新生到研究生。
据我所知,目前的三门入门课程是:CS 303E, CS 305J和CS 312。前两个似乎是为非专业人士和/或之前没有接触过编程的人准备的。
你好,
我想纠正你们讨论部分的一个信息。就c#而言,认为c#“拥有特定的专有平台”是一种短视的观点。c#是一种ISO/ECMA标准语言,在Linux/iOS/Android中被广泛实现(在Mono项目的名称下,http://www.mono-project.com/Main_Page)。
把Visual Basic和c#混为一谈是错误的,因为前者是专有的,就像Java一样,不符合任何标准(只有供应商标准)。VisualBasic。Net已经在Linux/Android/iOS上实现了,尽管没有c#那么完整。当然,Visual Basic(非。net)既过时又专有。
这对于向学生介绍Python非常有用。我是UCSD的,但在斯克里普斯海洋研究所工作。我教一年级的博士生Python,从海洋生物学到地球物理学我都很感兴趣。
虽然我完全支持python,但我对用博士级别的排名来确定编程语言入门样本集的前39所学校感到不满。用教育环境的最终产物来过滤过程的开始是不合逻辑的。有些大学可能拥有一流的本科课程,但因为它们不是主流,没有一流的名气,所以不被考虑。一个更好的例子可能是看看每个州前三名的大学项目(例如:德克萨斯大学奥斯汀分校、德克萨斯农工大学大学城分校、德克萨斯理工大学卢伯克分校),看看他们提供什么。
卡耐基梅隆大学不将Python用于计算机科学专业或相关学科(如ECE)专业的入门编程。我们确实为非专业人士提供了一门基于Python的服务课程,但它与核心CS课程没有任何关系,核心CS课程是基于ML和(一种安全的语言)c。甚至我们的入门数据结构和算法课程现在也基于ML中的函数式编程,强调并行性和持久数据结构。
我谨在Bob的评论中补充一点细微差别:Python *在CS和ECE专业(15-112)的入门课程中使用,但学生可以通过展示之前的编程经验跳过这门课程。大多数(据我所知,可能是75%)一年级的CS学生确实跳过了这门课,但有相当一部分学生选择了这门课,而更大比例的ECE学生选择了这门课。15-112是ML和safe-C入门课程的“可跳过的”先决条件。Bob说的没错,拥有丰富编程经验的一年级计算机专业本科生会直接进入更正规的核心课程,学习命令式和函数式编程。
这是一个不幸的趋势。Python有它的用途和位置,但作为CS和编程的入门,它并不比BASIC好多少,在很久以前。
虽然Java仍然被广泛教授,但它也有缺点。这两种语言都不能被认为是通用编程语言。每一种都有一个范例,在通用编程的基础上,每一种都可以得到更好的理解。
是的,朋友们,好的C语言是介绍编程的理想语言。它是一种通用语言,实际上是一种标准(与c#不同,尽管有党派主张相反),并且不局限于任何一种编程习惯或方法。
尽管这可能不是最好的职业准备。语言、工具和平台来来去去。但是一个良好的基础可以让一个人在更大的世界中继续学习。
像Java、Python、Ruby、c#等“高级”语言隐藏得太多了。在人们可以“手工操作”之后,有了这些语言的便利和支持是件好事。
编程的核心是思考。过早地使用太多“魔法”是有害的。
我不确定你说的“Python…”以微弱优势超越Java”。Python的得分大约是27分,Java大约是22分,所以虽然5分的差距看起来“很窄”,但事实上,几乎高出23%,如果这样的样本大小使这样的比较相关的话?当然,任何下注的人都会认为这很重要,很难“狭隘”。
我们需要的是有人恢复更全面的年度调查,我相信简·e·萨姆特在几十年前曾做过,但现在让它自我报告——比如在SIGCSE网站上?
高级语言的设计有两个目的:1)更有效、更准确地完成工作,并且成本更低;2)通过这种语言,架构对程序员来说是可见的。(1)点具有商业方面,而(2)点可能具有长期的商业方面,但更重要的是:它帮助程序员如何在计算机内部工作,如何安排内存,如何获取和释放内存,在哪里分配(在cpu或RAM),数据结构如何与物理内存相关,底层操作如何实际执行,算法如何实际工作,等等。
特性(1)在c++、Java、Fortran、Perl、Python等语言中很流行,而特性(2)在C语言中以一种最美丽的方式流行,在其他任何地方都没有这种程度。因此,在我看来,C语言将继续统治工程和技术领域,而且速度快的轻量级程序是主要标准。因此,这门语言应该作为第一门课程教授给所有工程师,最好是第一门。换句话说,用其他东西替换C就像替换三角函数或微积分一样困难!!