第一门编程语言应该学什么? – thenewstack


斯坦福和哈佛象牙塔中的教授们已经跟不上计算机发展形势,但是他们的文凭是敲门砖,这是人类社会系统奇怪特征,这是来自thenewstack文章,现在有两种正反观点,传统观点是认为第一门编程语言学习什么很重要,而另外一种相反观点认为这不重要,那已经是过去信念了。前一种观点以斯坦福和哈佛为主要的传统观点,而后一种以ACM美国计算机协会的新观点:
几十年来,这是一个令教育工作者“着迷”的问题。当学生第一次开始学习计算机科学时——他们应该从哪种编程语言开始?
对此深思熟虑的人是密歇根大学计算机科学教授Mark Guzdial,他也在计算机科学教育领域进行了自己的研究。两个不同的同事最近表示,首先向 CS 学生教授哪种语言并不重要,这让他开始思考。
“我有一个假设,当这个领域还很年轻时,这种信念曾经是正确的,”Guzdial 在最近发表在 ACM 通讯上的一篇文章中写道,ACM 是计算机协会的内部机构。但那是在 1960 年代末期,当时课程刚开始建立是那样,但是在今天,所有年龄和经验水平的学生都在学习如何编程,他们最终有不同的需求。
 
斯坦福与哈佛
2017 年,斯坦福大学对计算机科学专业的入门计算课程进行了一些更改,从而成为头条新闻。据斯坦福大学的学生报纸报道,斯坦福大学计算机科学名誉教授埃里克·罗伯茨 (Eric Roberts) 花了五年时间致力于将课程从 Java 过渡到 JavaScript,他终于创建了该课程的新的基于 JavaScript 的试点版本。(因此该课程被命名为“CS106J”而不是 CS106A。)这一变化包括创建新的教科书和作业,以及培训新的助教,而罗伯茨本人则退休后教课。
以前,斯坦福大学的入门课程是基于 C 编程语言(在此之前,是 Pascal)。罗伯茨将 JavaScript 誉为“互联网语言”,早在 2002 年,他就帮助将课程切换到 Java,编写教科书并与其他教职员工合作重组课程和作业。但 15 年后,他告诉学生报纸,“现在是 2017 年,Java 正在暴露其衰老年龄。”
然而,如果您今天查看他们的教学大纲,您会发现CS106A现在似乎使用 Python(和 PyCharm IDE),而CS106B 教学大纲表明他们使用的是 C++。
与此同时,哈佛大学自己的介绍性课程 CS50 多年来一直坚持使用多语言方法。在第一周,学生实际上用 Scratch 编写程序,这是一种基于块的可视化编程语言,由麻省理工学院媒体实验室为教年轻人而开发,然后切换到 C——然后在几周后再次切换到 Python,然后是 JavaScript。“CS50 不是只教授一种语言,而是向学生介绍了一系列‘过程’编程语言,每一种都在概念上建立在另一种之上,”课程的官方常见问题解答解释道
解释者继续说道,“最终的目标是让学生觉得他们不是'学会了如何在 X 中编程',而是他们'学会了如何编程'。”
 
为什么要从 C 开始呢
但是为什么要从 C 开始呢?该课程的讲师David J. Malan教授曾在 Quora 上写道:“在拥有汇编语言之前,C 几乎与计算机硬件非常接近,(我认为这对于介绍性的介绍来说太神秘了。当然像 CS50)。在 C 中,没有魔法。如果你想把某些东西放在内存中的某个地方,你必须自己把它放在那里。如果你想要一个哈希表,你必须自己实现它。”
“我认为,在一周内用 C 语言实现一个哈希表(或特里树),然后在一周左右后仅用一行 PHP 或 JavaScript 代码实现相同的东西,这也是一件强大的事情,”他写道。此外,C 也是一种相对较小的语言,因此“到学期中期,学生几乎已经看到了所有内容(例如联合和函数指针除外)。”
不足之处是啥?马兰承认,与使用 Python 或 Java 等高级语言相比,早期创建引人入胜的问题集可能更难。也许更难,“但并非不可能!”
然而,根据ACM Communications 的一篇文章,据报道,到 2014 年,Python 已经成为美国顶级计算机科学课程(包括麻省理工学院和加州大学伯克利分校)的入门课程中最受欢迎的语言。
 
不一定要从学习数学开始
根据英国研究人员的说法,向初学者教授什么仍然是一个重要的问题。“无法轻松掌握编程几乎肯定意味着计算机科学无法取得进步,”他们的论文认为,并指出首先教授哪种语言的问题“自大学开始计算机科学教学以来一直在激烈争论。”
密歇根大学教授 Guzdial 仍然认为,我们让学生开始使用哪种语言很重要——但他也希望教育工作者重新审视一个形成性的假设。
在他的 ACM 文章中,他回忆了1979 年的一项研究,该研究认为,一旦学生学习了更广泛的语义概念,他们就可以将它们应用于任何后续语言(只需要掌握相对容易的语法差异)。但 Guzdial 指出,在那个时代,大多数计算机科学专业的学生都是传统的大学生——他们可能比文科专业或今天的 K-12 学生拥有更多的数学知识。
因此,早在 1970 年代后期,教育工作者可能高估了切换编程语言的难易程度,因为他们最终只是根据已经了解的数学知识教授编程,正如 Guzdial 所说,“新的语法只是一种新的数学形式主义。”
但是在今天,如果我们不期望学生首先了解数学,我们则可能能够教更多的人编程。
banq注:教育工作者再不改变僵化教条的观念,将延缓编程逻辑普及的覆盖面,当然如果要改变教条主义观点,必须有严格的证据证明,但是对于一个不断在发展的创新复杂系统,哪来那么多严格的证据?即使有了,很可能被否定。