什麼是完美的教學語言 - Garth

banq 發表於 2021-11-27

Python 作為一種教學初學者的語言遠非理想。完美的教學語言是什麼,或者至少應該是什麼。我將列出這種語言的十二個特徵,八個基本特徵和四個理想特徵。之後,我將對當代語言的衡量標準進行一些(相對)冷靜的觀察。

理想的特性

以下是理想的特徵:

  • 工具支援。顯然,我們希望我們的語言擁有一個強大的 IDE,並提供廣泛的重構支援。應該有一個宣告式構建工具和一個全面的測試環境,支援一系列方法(包括 TDD、BDD 和 PBT)。
  • 雜耍裝置。初學者應該可以在沒有幫助的情況下安裝執行時、核心工具和 IDE。在語言版本之間切換應該很簡單,就像在同一裝置上維護多個版本一樣。
  • 適用性。該語言應該可用於一系列應用程式。理想情況下,應該支援瀏覽器、移動裝置、桌面和雲。
  • 工業採用。該語言應該在整個軟體行業中得到認可,並在面試過程中發揮重要作用。開發人員應該能夠直接在行業中使用該語言,或者至少可以輕鬆轉換為類似的替代方案。

  

主要特點

以下是我們理想的程式語言的主要特徵。

  • 融合的:語言的特性應該結合在一起以提供一致的方法。在存在重複的情況下,它應該是一個深思熟慮的選擇,而不是事後的改造。就像一個好的故事或電影一樣,在語言的一部分中實現的“世界構建”不應該在其他部分中被挫敗或被取消。例如,應該提供集合文字,但集合應該是常規型別,遵循與其他規則相同的規則,並且能夠由開發人員擴充套件。
  • 綜合的:儘管使用單一正規化語言進行編碼是一門優秀的學科,但學生的母語應該讓他們接觸到他們在工作場所可能需要的風格。為便於討論,我將這些定義為命令式、物件導向、函式式和通用。該語言應該提供在這些正規化中的每一箇中進行編碼的能力,並且(如上所述)儘可能無縫地整合它們。
  • 相關的:該語言不應違反我們行業的既定慣例。語言中使用的術語應與主流用法相呼應,而不是重新定義通用術語或進行任意替換。如果某個術語過時和/或僅因偶然使用,則可以例外,例如將static替換為shared。
  • 簡潔:應謹慎使用關鍵字和特殊符號。保留字的數量應該最少,但至關重要的是,同一個關鍵字絕不能有多種含義。違規的例子是C++ 中的類和Java 中的擴充套件。理想情況下,符號也應該如此,但由於實用性,讓步是不可避免的。在重用符號的地方應該有一些更高的主題來統一不同的含義,例如在 Scala 中使用下劃線。
  • Goldilocks Typed:必須有一個沒有特殊情況的統一型別系統。值型別和引用型別之間的任何內部區別都應該對開發人員隱藏。該語言必須在每個宣告中都要求一個關鍵字或符號,並且每個變數都必須有一個已定義的型別。應明智地使用型別推斷,以確保靜態型別不會成為障礙。相反,型別推斷不能如此普遍和陰險以致引起混淆。
  • 可擴充套件:認識到現代性,該語言應使其執行時能夠利用多核和雲託管硬體。預設情況下,變數應該是不可變的並且評估是惰性的。理想情況下,應該可以將程式碼庫劃分為純區域和有副作用的區域。
  • 敏捷:學習者應該能夠在快速反饋迴圈中工作,在那裡他們可以快速看到程式碼更改的後果。編譯和部署時間不應導致學生注意力不集中。理想情況下,構建/部署/測試周期應該是持續且無縫的。
  • 具有挑戰性:該語言不應要求使用高階功能來完成日常任務。也不應該將常見的錯誤誤認為是嘗試使用高階功能。然而,語言應該提供一個開放式學習路徑,在那裡可以擴充套件語言和執行時。

 

對現有語言的思考

以下是我對當前語言如何衡量這些標準的看法:

  • 有許多較新的語言建立在過去的經驗之上,並且在整合性、簡潔性和可擴充套件性方面得分很高。在我大量的空閒時間裡,我試圖學習ReScriptElm,我覺得這兩個都令人印象深刻。遺憾的是,這些語言嚴重依賴純粹的 FP,因此在綜合性和相關性上得分很低。它們非常適合以易於理解的方式教授 FP,但可以排除在此討論之外。
  • TypeScript是一門極好的語言,它改變了我對程式碼的看法,變得更好。它在全面和具有挑戰性的類別中獲得加分,使結構型別和對映型別成為主流。不幸的是,它最大的優勢仍然是最大的弱點,尤其是在當前背景下。通過在 JavaScript 上構建,它開啟了一個潘多拉魔盒,我們不希望將這些問題強加給初學者。
  • C# 和 Java 非常全面,在可擴充套件性方面做得很好,並且正在改進型別和簡潔性。對於有經驗的開發人員來說,它們是很好的選擇,但在整合性、相關性和簡潔性方面嚴重不足。這兩種語言仍然有很多儀式、雜耍值和引用型別,這使得教授函數語言程式設計變得困難,並且有許多不推薦使用的特性。
  • 十年前Scala本來是一個競爭者,但由於技術債務問題而被其社群的優先事項所拖累。Scala 3 在很多方面都是一門新語言,在解決這些問題方面還有很長的路要走,但任何人都在猜測採用的速度。五年後它可能是一個不同的故事,但現在我們排除它。
  • RustF#是我們遇到的第一個強有力的競爭者。兩者都會對我們所有理想的特徵給予高度評價。它們越來越受歡迎,吸引了新採用者的稱讚,並被第一篇文章的讀者推薦給了我。然而,他們(以不同的方式)太固執己見,無法做出最後的決定。
  • 這給我們留下了RubyGoSwiftKotlin。我不得不承認我是 Ruby 的忠實粉絲,並相信它是一種很棒的教學語言,尤其是在 Ruby 3 中可用的靜態型別。在型別欄的另一側 Kotlin 和 Swift 選中每個框,優勢將歸於 Kotlin當您包括理想的標準時。最後,我找不到排除 Go 的理由,即使它不是我的菜。我認識的使用它的教育工作者都是忠實擁護者,對泛型的支援即將到來。所以值得認真考慮。

 

結論

想象一下,如果明天你被告知必須教授“X 語言”一年,而你的薪水將完全取決於學生作為開發人員的成長,你會有什麼感受。