美國頂尖名校拋棄電腦基礎課,All in Python!前助教:電腦系末日來臨

【新智元導讀】 AI都能寫程式碼了,大學電腦課程該教什麼?最近,美國頂尖名校東北大學做出一項重磅決定,淘汰電腦基礎相關的核心課程,轉而主推Python教學。

東北大學Khoury電腦學院,竟宣布淘汰「電腦科學基礎」(Fundamentals of Computer Science)課程。

基礎不教了,那教些什麼呢?答案是——Python。

不出意外,這項決定遭到了學生和助教們的強烈質疑。


支持的人認為,Python是目前最受青睞的程式語言,對找工作更有利。


反對的人認為,如果這個改革方案實施,將是東北大學電腦專業走向衰落的開始。

有網友表示,「一個時代終結了。東北大學課程體系曾經是獨一無二的傑作,而現在,它將變得平庸平淡」。

他認為,那些抱怨Fundies課程難度太大,或缺乏就業市場適用性的人,完全是撿了芝麻丟了西瓜。這些課程的核心是設計過程,而使用Racket正是為了幫助學生理解這一點。


從這門課程受益的校友表示,「很顯然,這種方式是成功的,它已經被證明是開啟電腦科學職業生涯的絕佳起點」。


這場改革背後,折射出一個值得深思的問題,電腦教育究竟該教什麼?


東北大學電腦課程改革

對於電腦科學(CS)專業的學生來說,軟體工程師是最主要的職業發展方向之一。

一個優質的大學課程體系,必須為學生提供能夠讓其在職業生涯中取得成功所需的關鍵能力。


「Putting Your Major to Work: Career Paths after College」2017年

眾所周知,軟體開發領域瞬息萬變。如果課程過度追隨當前的行業趨勢,所學內容很可能在學生畢業之前就已經過時。

一個優秀的課程體系應著重強調那些具有廣泛適用性的核心理念,使學生能夠靈活地適應在未來工作中出現的全新技術。同時,也需要教導學生如何思考軟體本質,以及如何有系統地解決問題。

這正是東北大學現行課程體系一直在努力實現的目標。

目前的電腦科學基礎課程(簡稱Fundies)透過教授系統化的程式設計,為解決陌生問題提供了一套行之有效的方法論。

這種方法的核心在於,將複雜問題分解成小而可行的步驟,特別是在動手編寫程式碼之前,先要求學生深入思考問題的本質。

像是Fundies 1、Fundies 2、「物件導向設計」和「軟體開發」這樣的核心課程,著重培養的便是學生對程式碼的思考能力,而不是簡單地堆砌程式碼。

不可否認,沒有課程體係是完美的。

常有電腦科學專業的學生會抱怨,「為什麼Fundies 1教的是Racket,而不是Python這種更『實用的語言』」。

需要強調的是,Fundies課程的重點並不是教Racket,而是培養可以應用在任何程式語言的程式設計能力。而Racket只是實現這目標的教學工具而已。


實際上,一個在Fundies課程中掌握了核心概念的學生,完全可以輕鬆地將這些能力遷移到Python,或其他任何語言當中。

況且,在科技業瞬息萬變的今天,僅僅開設教授Python的課程真的明智嗎?畢竟,說不好那天就會有另一種語言佔據主導地位了。

課程體系的設定,應該更重視那些經得住時間考驗的原則,而非追逐短暫的科技趨勢。


是革新,還是倒退?

但現在,在這個近二十多年來最嚴峻的科技就業環境下,Khoury電腦科學學院卻計劃放棄這種行之有效的教學方法。

如前所述,學院提出的改革方案將逐步取消Fundies 1、Fundies 2和「物件導向設計」課程,轉而推出全新的課程體系。

新課程將以Python為主要教學語言,學院認為這是個附加優勢,因為Python目前是企業實習職位最青睞的程式語言。

GitHub 2024年度程式語言榜單中,Python繼續霸榜

但是,我們不能僅僅因為一門語言在業界當前流行,就把它當作教學語言──我們必須選擇具有真正教育價值的語言。

選擇Racket是因為它有專門的「教學語言模式」,可以隨著學生對設計原則的理解逐步引入新的語言特性。

雖然新課程最初使用同樣具有教學導向的Pyret語言,但在第一門課程中就會迅速過渡到Python。

而Python卻沒有類似的漸進式學習特性──學生必須在掌握如何清晰且有效率地使用這些特性之前,就必須先接觸複雜的語言特性。

另外,Khoury學院表示將允許持有大學先修課程(AP)電腦科學學分的學生免修新課程。

現行課程體系之所以不允許這種做法,是經過深思熟慮的──AP課程並不包含系統化的設計能力訓練,因此與入門課程並沒有同等的教育價值。

Fundies 1和Fundies 2透過小型問題的實踐來訓練設計思維,這為學生在後續的物件導向設計和軟體開發課程中處理更複雜的專案打下基礎,同時也為他們的實習工作做好準備。

如果允許學生跳過這些基礎課程,他們在後續的高階課程學習和未來的職業發展中都可能會遇到嚴重的困難。


改革,是為了提高課程出席率

從這些變更來看,雖然Khoury學院表面上認可設計範式,但實際上並未致力於將系統化程式設計,作為課程的核心要素來維護。

這是一個令人擔憂的決定。

正如Fundies 1教材中所說,目前課程所強調的程式設計能力是「區分野路子程式設計師和專業軟體開發者的關鍵」。

如果Khoury學院放棄以設計為導向的課程體系,將無法培養合格的軟體開發人才。

這次變更的主要動力,似乎是想讓核心課程變得更容易。

還有另一層原因是,能夠減少退課的人數。

有一位教授告訴學生,學院希望減少從Fundies 2和「物件導向設計」課程退課的學生人數。

雖然這種想法可以理解,但為此刪除課程中最重要的部分顯然是得不償失的。

「物件導向設計」課程的前助教Derek Kaplan稱,自己見過許多學生在這門課程中掙扎。但也見證了這些學生透過學習這門課程成為更優秀的程式設計師。

學期末的「程式碼互換」(code swap)作業,要求學生在其他學生的程式碼基礎上進行開發,這是學生最難應付的作業之一——但它教會了學生如何在他人編寫的程式碼庫中工作,這是他們在未來職業生涯中必須具備的能力。

此外,對許多學生來說,這門課程提供了他們首次參與大型軟體專案的經驗,這與他們在實習期間將要從事的工作很相似。

因此,降低課程要求對這些學生並無好處。

我們不禁要問:大學究竟是為了讓學生輕鬆拿分數,還是為了真正培養人才?

至少,Khoury學院管理層在計劃對核心課程進行任何改變時,都應該諮詢有經驗的助教。


助教們擁有獨特的視角——他們不僅親身體驗過這些課程,還在幫助其他學生成功的過程中累積了寶貴的經驗。

助教深知什麼是行之有效的,可以幫助確保在進行有利於學生的改變的同時,不損害核心教學原則。

Derek Kaplan表示,「如果Khoury學院執意作出這些改變,這無疑將標誌著東北大學電腦科學課程衰落的開始」。


身為一位資工系畢業的社會新鮮人,我與本文的作者抱持著相同的觀點。如果未來有一天我的母校也決定要廢除此類基礎課程,我肯定會第一個站出來強烈反對。但凡學過C或是C++的資工系學生們一定也會同意,即使最剛開始接觸時覺得痛苦萬分,但也是因為打下了良好的基礎,因此無論是後續轉換到物件導向的java、帶有類似概念的Javascript、Typescript,又或是更高層級的Python,幾乎都可以無痛接軌、以不變應萬變。在學期間同樣有學習軟體設計、系統分析與設計,當時覺得那些概念都很模糊、懵懵懂懂,直到畢業出了社會才發現那些我們當時看來不理解、不重要的東西才是軟體設計的根本。我身邊半路出家的工程師就是從Python開始學的,他就完全不具備物件導向的概念,也無法理解為什麼需要這些概念,寫程式的時候總是先求功能寫出來就好,因此在工作的時候遇到很多狀況,到最後還是需要從頭開始學習這些基本功。一直到發現了他們與我的不同之後,我才真正體會到資工系四年教會我的知識究竟有多重要,再次感謝母校帶給我的一切,是你們讓我成為了一位合格的、具備基本素養的軟體工程師。