學生的第一門編程語言應(yīng)該是什么?
“學生第一次開始學習計算機科學(computer science,CS)時,應(yīng)該從哪種編程語言開始學習?”這一問題一直讓教育工作者備受困擾。來自密歇根大學的計算機科學教授 Mark Guzdial 也對此進行了大量思考與研究,然而其近期發(fā)表在《ACM 通訊》上的一篇文章則指出,他的兩個來自不同學校的 CS 同事都認為,學生的第一門課程學習何種編程語言并不重要,重要的是 CS 的學習成果。因為如果學生很好地學習了這些概念,那么他們接下來就可以簡單地將其應(yīng)用到任何要學習的語言當中。
對此,Guzdial 則在文中指出,當這個領(lǐng)域還處于比較早期的階段的時候,這種想法或許是正確的。但那是在 20 世紀 60 年代末,課程剛剛建立的時候;而今天,所有不同年齡段和經(jīng)驗水平的學生都在學習如何編程,且他們最終都有著不同的需求。
對于這一問題,不同的大學也仍然有不同的答案,這從某種程度反映了他們的教學理念和看法。THENEWSTACK 指出,斯坦福大學在 2017 年就曾因其計算機科學專業(yè)的入門計算課程的一些變化引起了強烈的反響。
斯坦福大學的學生報紙報道稱,斯坦福大學計算機科學榮譽教授 Eric Roberts 花了五年時間致力于將該課程從 Java 過渡到 JavaScript,并最終創(chuàng)建了該課程基于 JavaScript 的新試驗版本。因此,該課程被命名為 CS106J,而不是 CS106A。這一變化涉及到創(chuàng)建新的教科書和作業(yè)、以及培訓新的助教,Roberts 本人也從退休狀態(tài)中走出來教授該課。
此前,斯坦福大學的入門課程一直是基于 C 語言編程的(更早之前是 Pascal 語言)。然而在 2002 年,Roberts 通過編寫教科書、并與其他教師合作重組課程和作業(yè),幫助學校將課程轉(zhuǎn)向了 Java。根據(jù) Roberts 的說法,Java 很早就被設(shè)計為“互聯(lián)網(wǎng)語言”。但在過渡到 Java 十多年后,他又認為,Javascript 已經(jīng)取代了 Java 作為網(wǎng)絡(luò)語言的地位。
現(xiàn)在,再次查看斯坦福大學的教學大綱,你會發(fā)現(xiàn) CS106A 似乎正在使用 Python(和 PyCharm IDE),而 CS106B 的教學大綱則表明他們正在使用 C++。
與此同時,哈佛大學自己的入門課程 CS50 多年來則一直堅持使用多語言方法。在第一周,學生們采用 Scratch 編寫程序,之后切換到 C 語言;接著在后面幾周再次切換到 Python,再然后是 JavaScript。該課程的官方 FAQ 解釋稱,"CS50 不是只教一種語言,而是向?qū)W生介紹一系列'程序性'編程語言,每一種都是在概念上建立的。最終的目標是讓學生覺得他們不是'學會了如何在 X 中編程',而是他們'學會了如何編程'。 "
至于為什么要從 C 語言開始,該課程的講師 David J. Malan 教授則認為,學習 C 語言的幾周讓學生有機會了解所有編程語言的一些基本構(gòu)件,同時也提供了解釋緩沖區(qū)溢出這一關(guān)鍵安全概念的機會。
"我認為在一周時間內(nèi)用 C 語言實現(xiàn)一個哈希表(或 trie),然后在一周左右后僅用一行 PHP 或 JavaScript 代碼就能實現(xiàn)同樣的內(nèi)容,這也是一件很強大的事情"。此外,C 語言也是一種相對較小的語言,所以 "到了學期中期,學生們幾乎已經(jīng)了了解到了所有的東西(除了 unions 和函數(shù)指針)。"
不過,ACM Communications 的一篇文章指出,截至 2014 年,Python 已經(jīng)成為美國頂級計算機科學課程(包括麻省理工學院和加州大學伯克利分校)的入門課程中最受歡迎的語言。具體來說,排名前 10 位的 CS 系中有 8 個(80%),排名前 39 的系中有 27個(69%)在 CS0 或 CS1 的入門課程中教授Python。Java 緊隨 Python 之后,其次分別是 MATLAB、C、C++,然后是 Scheme 和 Scratch。
2016 年,三位英國研究人員進行的一項調(diào)查則指出,在英國大學中,使用 Java 的課程是 Python 的兩倍多。“盡管事實上,相同的受訪者認為 Python 更容易教學和學習”。對此,研究人員引用的一個可能的解釋是:由社區(qū)指數(shù)衡量的長期的行業(yè)流行。
而溫斯頓-塞勒姆州立大學的三位研究人員在 2019 年為 ACM 的計算機科學教育小組撰寫的一篇論文中甚至認為,每個計算機科學學生也應(yīng)該掌握大數(shù)據(jù)和云計算的基礎(chǔ)知識,并擁有一些在云中部署和管理大數(shù)據(jù)應(yīng)用程序的實踐經(jīng)驗。還提出,與其單獨開設(shè)云計算課程,不如將這些材料整合到多個本科計算機科學課程中。
根據(jù)英國研究人員的說法,向初級程序員教授什么仍然是一個重要問題。他們的論文認為,不能輕易掌握編程幾乎肯定意味著不能在計算機科學領(lǐng)域取得進展。并指出,因此自從大學開始進行計算機科學教學以來,先教哪種語言的問題一直存在著激烈的爭議。
密歇根大學教授 Guzdial 則仍然認為,學生從哪種語言開始學習是很重要,但他也希望教育工作者重新審視一個形成性假設(shè)。他在自己的 ACM 文章中回顧了 1979 年的一項研究,該研究認為,一旦學生學會了更廣泛的語義概念,他們就可以將其應(yīng)用于任何后續(xù)語言(只需要掌握相對容易的語法差異)。
但是 Guzdial 指出,在那個時代,大多數(shù)計算機科學的學生都是傳統(tǒng)的大學生。早期進入計算機科學的學生通常比今天學習編碼的普通學生具有更強的數(shù)學背景。因此,早在 20 世紀 70 年代末,教育工作者可能高估了轉(zhuǎn)換編程語言的難度,因為他們最終只是在已經(jīng)理解的數(shù)學基礎(chǔ)上教授編程。
Guzdial 認為,如果我們根據(jù)學生已經(jīng)知道的數(shù)學來教授編程語言的語義,那么新的語法只是一種新的數(shù)學形式主義。我們沒有必要讓編程與數(shù)學有關(guān),如果我們不期望學生首先了解數(shù)學,也許早在 40 多年前就能期望更多的人學習編程。
本文轉(zhuǎn)自O(shè)SCHINA
本文標題:學生的第一門編程語言應(yīng)該是什么?
本文地址:https://www.oschina.net/news/149329/students-first-programming-language
















 
 
 











 
 
 
 