“学生第一次开始学习计算机科学(computer science,CS)时,应该从哪种编程语言开始学习?”这一问题一直让教育工作者备受困扰。来自密歇根大学的计算机科学教授 Mark Guzdial 也对此进行了大量思考与研究,然而其近期发表在《ACM 通讯》上的一篇文章则指出,他的两个来自不同学校的 CS 同事都认为,学生的第一门课程学习何种编程语言并不重要,重要的是 CS 的学习成果。因为如果学生很好地学习了这些概念,那么他们接下来就可以简单地将其应用到任何要学习的语言当中。

对此,Guzdial 则在文中指出,当这个领域还处于比较早期的阶段的时候,这种想法或许是正确的。但那是在 20 世纪 60 年代末,课程刚刚建立的时候;而今天,所有不同年龄段和经验水平的学生都在学习如何编程,且他们最终都有着不同的需求。

对于这一问题,不同的大学也仍然有不同的答案,这从某种程度反映了他们的教学理念和看法。THENEWSTACK 指出,斯坦福大学在 2017 年就曾因其计算机科学专业的入门计算课程的一些变化引起了强烈的反响。

斯坦福大学的学生报纸报道称,斯坦福大学计算机科学荣誉教授 Eric Roberts 花了五年时间致力于将该课程从 Java 过渡到 JavaScript,并最终创建了该课程基于 JavaScript 的新试验版本。因此,该课程被命名为 CS106J,而不是 CS106A。这一变化涉及到创建新的教科书和作业、以及培训新的助教,Roberts 本人也从退休状态中走出来教授该课。

此前,斯坦福大学的入门课程一直是基于 C 语言编程的(更早之前是 Pascal 语言)。然而在 2002 年,Roberts 通过编写教科书、并与其他教师合作重组课程和作业,帮助学校将课程转向了 Java。根据 Roberts 的说法,Java 很早就被设计为“互联网语言”。但在过渡到 Java 十多年后,他又认为,Javascript 已经取代了 Java 作为网络语言的地位。

现在,再次查看斯坦福大学的教学大纲,你会发现 CS106A 似乎正在使用 Python(和 PyCharm IDE),而 CS106B 的教学大纲则表明他们正在使用 C++。

与此同时,哈佛大学自己的入门课程 CS50 多年来则一直坚持使用多语言方法。在第一周,学生们采用 Scratch 编写程序,之后切换到 C 语言;接着在后面几周再次切换到 Python,再然后是 JavaScript。该课程的官方 FAQ 解释称,"CS50 不是只教一种语言,而是向学生介绍一系列'程序性'编程语言,每一种都是在概念上建立的。最终的目标是让学生觉得他们不是'学会了如何在 X 中编程',而是他们'学会了如何编程'。 "

至于为什么要从 C 语言开始,该课程的讲师 David J. Malan 教授则认为,学习 C 语言的几周让学生有机会了解所有编程语言的一些基本构件,同时也提供了解释缓冲区溢出这一关键安全概念的机会。

"我认为在一周时间内用 C 语言实现一个哈希表(或 trie),然后在一周左右后仅用一行 PHP 或 JavaScript 代码就能实现同样的内容,这也是一件很强大的事情"。此外,C 语言也是一种相对较小的语言,所以 "到了学期中期,学生们几乎已经了了解到了所有的东西(除了 unions 和函数指针)。"

不过,ACM Communications 的一篇文章指出,截至 2014 年,Python 已经成为美国顶级计算机科学课程(包括麻省理工学院和加州大学伯克利分校)的入门课程中最受欢迎的语言。具体来说,排名前 10 位的 CS 系中有 8 个(80%),排名前 39 的系中有 27个(69%)在 CS0 或 CS1 的入门课程中教授Python。Java 紧随 Python 之后,其次分别是 MATLAB、C、C++,然后是 Scheme 和 Scratch。

2016 年,三位英国研究人员进行的一项调查则指出,在英国大学中,使用 Java 的课程是 Python 的两倍多。“尽管事实上,相同的受访者认为 Python 更容易教学和学习”。对此,研究人员引用的一个可能的解释是:由社区指数衡量的长期的行业流行。

而温斯顿-塞勒姆州立大学的三位研究人员在 2019 年为 ACM 的计算机科学教育小组撰写的一篇论文中甚至认为,每个计算机科学学生也应该掌握大数据和云计算的基础知识,并拥有一些在云中部署和管理大数据应用程序的实践经验。还提出,与其单独开设云计算课程,不如将这些材料整合到多个本科计算机科学课程中。

根据英国研究人员的说法,向初级程序员教授什么仍然是一个重要问题。他们的论文认为,不能轻易掌握编程几乎肯定意味着不能在计算机科学领域取得进展。并指出,因此自从大学开始进行计算机科学教学以来,先教哪种语言的问题一直存在着激烈的争议。

密歇根大学教授 Guzdial 则仍然认为,学生从哪种语言开始学习是很重要,但他也希望教育工作者重新审视一个形成性假设。他在自己的 ACM 文章中回顾了 1979 年的一项研究,该研究认为,一旦学生学会了更广泛的语义概念,他们就可以将其应用于任何后续语言(只需要掌握相对容易的语法差异)。

但是 Guzdial 指出,在那个时代,大多数计算机科学的学生都是传统的大学生。早期进入计算机科学的学生通常比今天学习编码的普通学生具有更强的数学背景。因此,早在 20 世纪 70 年代末,教育工作者可能高估了转换编程语言的难度,因为他们最终只是在已经理解的数学基础上教授编程。

Guzdial 认为,如果我们根据学生已经知道的数学来教授编程语言的语义,那么新的语法只是一种新的数学形式主义。我们没有必要让编程与数学有关,如果我们不期望学生首先了解数学,也许早在 40 多年前就能期望更多的人学习编程。

学生的第一门编程语言应该是什么?相关推荐

  1. 只学一门java可行吗,java可以作为第一门编程语言学习吗

    java可以作为第一门编程语言学习吗,语言,课程,入门,计算机科学,都在 java可以作为第一门编程语言学习吗 易采站长站,站长之家为您整理了java可以作为第一门编程语言学习吗的相关内容. 十年前, ...

  2. 第一门编程语言选谁?

    Are You Ready? Go! --第一门编程语言选谁? 金旭亮 说明: 这篇文章是专门针对大学低年级学生(和其他软件开发初学者)写的,如果你己经是研究生或本科高年级学生,请将这篇文章转发给你的 ...

  3. java语言可以编程无人机么_java可以作为第一门编程语言学习吗

    十年前,Java 还是计算机科学的入门课程中的必学语言.如果你想学其他语言,比如 C.Python.PHP,你就得专门选那个语言的课程,或者选相关的应用.但是现在,Java 不再受大学的青睐.根据国际 ...

  4. 第一门编程语言的选择无关紧要?

    作者 | Mark Guzdial 译者 | 弯月     责编 | 张红月 出品 | CSDN(ID:CSDNnews) 最近有两名计算机系的同事(来自不同院校)声称我们不应该担心第一门编程语言课程 ...

  5. php 编程祝新年快乐_第一门编程语言选什么好?

    内容简介 前言 建议 入门推荐 分析 总结 1. 前言 现在 IT 行业越来越火爆,许多朋友都愿意入门「挨踢」,噢,不,当程序员. 那么问题来了,对刚接触这个领域的新人来说,选什么语言作为第一门语言呢 ...

  6. 也谈第一门编程语言应该学什么

    很久了一直思考程序员应该先学哪门编程语言,必须掌握哪些编程语言,如何一个学习顺序.正好看到金老师也在研究第一门编程语言选谁(http://blog.csdn.net/bitfan/article/de ...

  7. 第一门编程语言,我应该学什么?

    作者 | Daniel Bastos 译者 | 弯月 责编 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 软件工程师问我最多的一个问题就是,第一门编程语言应该学什么.这可能是开发人员学习过 ...

  8. 不把C作为第一门语言是个好主意么?

    摘要:不少人认为,第一门语言最好不要学C,而V众投发起人李智勇却不这么看.他认为如果真想做好开发,想更好地实现人生价值(包括现金价值),那么打基础很必要,而从C语言,这种厚积薄发的语言开始学习学起,则 ...

  9. 【畅言】不把C作为第一门语言是个好主意么?

    v 摘要:不少人认为,第一门语言最好不要学C,而V众投发起人李智勇却不这么看.他认为如果真想做好开发,想更好地实现人生价值(包括现金价值),那么打基础很必要,而从C语言,这种厚积薄发的语言开始学习学起 ...

最新文章

  1. mysql limit offset
  2. 程序员面试题准备(1)单链表逆置
  3. 外贸电商选择美国服务器的优势分析
  4. Python创建简单的HTTP服务
  5. Windows XP 系统 使用笔记一
  6. kali linux之edb--CrossFire缓冲区溢出
  7. Silverlight 全屏显示
  8. Rockchip USB转485
  9. bochs x86模拟器
  10. Trick(九)—— ++i 与 i++ 的本质区别
  11. python爬虫文字全是乱码_Python爬虫乱码的解决方案!
  12. vs2019中git提交代码的步骤
  13. 网路岗v1.2简单使用
  14. 谷歌关键字推广操作技巧
  15. Java基础——类与对象
  16. 【视频教程】帝国CMS模板开发制作网站系列教程04
  17. 面试题:写一个左中右布局占满屏幕,其中左右两块是固定宽度200 , 中间自适应宽,要求先加载中间块,请写出结构及样式:
  18. 如何显示密件抄送人员地址_什么是密件抄送,以及为什么不使用它会成为一个可怕的人...
  19. U盘中毒乱码文件还能恢复吗?u盘中毒文件乱码怎么恢复?
  20. 有关爬虫浏览量的问题

热门文章

  1. wordpress一键全站迁移和备份
  2. Flashy Graphs Sans Flash
  3. java生成分享海报
  4. 魅蓝u10Android版本,魅蓝系列的颜值担当—魅蓝U10测评
  5. 录屏时计算机休眠,为什么录屏是黑屏
  6. 任志强点名刘强东:不管真假你影响到了企业形象
  7. iphone12上市时间已定
  8. 《我的宫廷》 用户协议
  9. 最新《海牛的Mysql+java+javase+hadoop+ETL项目》
  10. 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-2.启动项目