什麼是完美的教學語言 - Garth
Python 作為一種教學初學者的語言遠非理想。完美的教學語言是什麼,或者至少應該是什麼。我將列出這種語言的十二個特徵,八個基本特徵和四個理想特徵。之後,我將對當代語言的衡量標準進行一些(相對)冷靜的觀察。
理想的特性
以下是理想的特徵:
- 工具支援。顯然,我們希望我們的語言擁有一個強大的 IDE,並提供廣泛的重構支援。應該有一個宣告式構建工具和一個全面的測試環境,支援一系列方法(包括 TDD、BDD 和 PBT)。
- 雜耍裝置。初學者應該可以在沒有幫助的情況下安裝執行時、核心工具和 IDE。在語言版本之間切換應該很簡單,就像在同一裝置上維護多個版本一樣。
- 適用性。該語言應該可用於一系列應用程式。理想情況下,應該支援瀏覽器、移動裝置、桌面和雲。
- 工業採用。該語言應該在整個軟體行業中得到認可,並在面試過程中發揮重要作用。開發人員應該能夠直接在行業中使用該語言,或者至少可以輕鬆轉換為類似的替代方案。
主要特點
以下是我們理想的程式語言的主要特徵。
- 融合的:語言的特性應該結合在一起以提供一致的方法。在存在重複的情況下,它應該是一個深思熟慮的選擇,而不是事後的改造。就像一個好的故事或電影一樣,在語言的一部分中實現的“世界構建”不應該在其他部分中被挫敗或被取消。例如,應該提供集合文字,但集合應該是常規型別,遵循與其他規則相同的規則,並且能夠由開發人員擴充套件。
- 綜合的:儘管使用單一正規化語言進行編碼是一門優秀的學科,但學生的母語應該讓他們接觸到他們在工作場所可能需要的風格。為便於討論,我將這些定義為命令式、物件導向、函式式和通用。該語言應該提供在這些正規化中的每一箇中進行編碼的能力,並且(如上所述)儘可能無縫地整合它們。
- 相關的:該語言不應違反我們行業的既定慣例。語言中使用的術語應與主流用法相呼應,而不是重新定義通用術語或進行任意替換。如果某個術語過時和/或僅因偶然使用,則可以例外,例如將static替換為shared。
- 簡潔:應謹慎使用關鍵字和特殊符號。保留字的數量應該最少,但至關重要的是,同一個關鍵字絕不能有多種含義。違規的例子是C++ 中的類和Java 中的擴充套件。理想情況下,符號也應該如此,但由於實用性,讓步是不可避免的。在重用符號的地方應該有一些更高的主題來統一不同的含義,例如在 Scala 中使用下劃線。
- Goldilocks Typed:必須有一個沒有特殊情況的統一型別系統。值型別和引用型別之間的任何內部區別都應該對開發人員隱藏。該語言必須在每個宣告中都要求一個關鍵字或符號,並且每個變數都必須有一個已定義的型別。應明智地使用型別推斷,以確保靜態型別不會成為障礙。相反,型別推斷不能如此普遍和陰險以致引起混淆。
- 可擴充套件:認識到現代性,該語言應使其執行時能夠利用多核和雲託管硬體。預設情況下,變數應該是不可變的並且評估是惰性的。理想情況下,應該可以將程式碼庫劃分為純區域和有副作用的區域。
- 敏捷:學習者應該能夠在快速反饋迴圈中工作,在那裡他們可以快速看到程式碼更改的後果。編譯和部署時間不應導致學生注意力不集中。理想情況下,構建/部署/測試周期應該是持續且無縫的。
- 具有挑戰性:該語言不應要求使用高階功能來完成日常任務。也不應該將常見的錯誤誤認為是嘗試使用高階功能。然而,語言應該提供一個開放式學習路徑,在那裡可以擴充套件語言和執行時。
對現有語言的思考
以下是我對當前語言如何衡量這些標準的看法:
- 有許多較新的語言建立在過去的經驗之上,並且在整合性、簡潔性和可擴充套件性方面得分很高。在我大量的空閒時間裡,我試圖學習ReScript和Elm,我覺得這兩個都令人印象深刻。遺憾的是,這些語言嚴重依賴純粹的 FP,因此在綜合性和相關性上得分很低。它們非常適合以易於理解的方式教授 FP,但可以排除在此討論之外。
- TypeScript是一門極好的語言,它改變了我對程式碼的看法,變得更好。它在全面和具有挑戰性的類別中獲得加分,使結構型別和對映型別成為主流。不幸的是,它最大的優勢仍然是最大的弱點,尤其是在當前背景下。通過在 JavaScript 上構建,它開啟了一個潘多拉魔盒,我們不希望將這些問題強加給初學者。
- C# 和 Java 非常全面,在可擴充套件性方面做得很好,並且正在改進型別和簡潔性。對於有經驗的開發人員來說,它們是很好的選擇,但在整合性、相關性和簡潔性方面嚴重不足。這兩種語言仍然有很多儀式、雜耍值和引用型別,這使得教授函數語言程式設計變得困難,並且有許多不推薦使用的特性。
- 十年前Scala本來是一個競爭者,但由於技術債務問題而被其社群的優先事項所拖累。Scala 3 在很多方面都是一門新語言,在解決這些問題方面還有很長的路要走,但任何人都在猜測採用的速度。五年後它可能是一個不同的故事,但現在我們排除它。
- Rust和F#是我們遇到的第一個強有力的競爭者。兩者都會對我們所有理想的特徵給予高度評價。它們越來越受歡迎,吸引了新採用者的稱讚,並被第一篇文章的讀者推薦給了我。然而,他們(以不同的方式)太固執己見,無法做出最後的決定。
- 這給我們留下了Ruby、Go、Swift和Kotlin。我不得不承認我是 Ruby 的忠實粉絲,並相信它是一種很棒的教學語言,尤其是在 Ruby 3 中可用的靜態型別。在型別欄的另一側 Kotlin 和 Swift 選中每個框,優勢將歸於 Kotlin當您包括理想的標準時。最後,我找不到排除 Go 的理由,即使它不是我的菜。我認識的使用它的教育工作者都是忠實擁護者,對泛型的支援即將到來。所以值得認真考慮。
結論
想象一下,如果明天你被告知必須教授“X 語言”一年,而你的薪水將完全取決於學生作為開發人員的成長,你會有什麼感受。
相關文章
- Python是什麼語言?Python底層語言是什麼?Python
- 什麼是linux?學習linux需要什麼語言?Linux
- 什麼是linux?Linux需要學習什麼語言?Linux
- 什麼是r語言R語言
- python語言是什麼Python
- 什麼是Go語言?Go語言有什麼特點?Go
- Go語言GOPATH是什麼Go
- 組合語言1 - 什麼是組合語言?組合語言
- 什麼是程式語言,什麼是Python直譯器Python
- 中文程式語言——易語言,到底是用來幹什麼的?易語言值得學習嗎?易語言的優勢有什麼?
- 什麼是大語言模型(LLM)?模型
- Python是什麼語言?有什麼優劣勢?Python
- 何為程式語言?為什麼要學C語言?C語言
- 什麼是NLP,NLP主要有什麼用,為什麼要學自然語言處理?自然語言處理
- 為什麼那麼多人要學習go語言?go語言有什麼特點?Go
- Python是什麼型別語言?為何Python這麼多人學習?Python型別
- 為什麼自制指令碼語言是程式語言的最高境界?指令碼
- Go是一門什麼樣的語言?Go
- 乾貨!什麼是自然語言分析(NLA)
- 什麼是臨床質量語言(CQL)?
- Python和C語言區別是什麼?PythonC語言
- Python語言的發展背景是什麼?Python
- 到底該學習什麼程式語言
- Linux學習之Shell指令碼語言的優勢是什麼?Linux指令碼
- 對於初學者來說,最好的程式語言是什麼?
- 什麼是程式語言?程式語言都有哪些?以及主要用途
- Python語言怎麼樣?為什麼學Python?Python
- WordPress 是什麼?TechMoon 科技月球 - 新手入門教學
- go與其他語言有什麼區別?學習go語言怎麼樣Go
- 前端的你常用的程式語言是什麼?前端
- 程式語言成功的秘訣是什麼? -erik
- python和c語言的區別是什麼PythonC語言
- 為什麼要學習Go語言呢?Go
- 初學者學Python還是C語言?兩者之間有什麼不同?PythonC語言
- Python程式設計基礎(一)程式語言是什麼?編譯型語言和解釋型語言的區別|Python是什麼?Python程式設計編譯
- python爬蟲是什麼?為什麼用python語言寫爬蟲?Python爬蟲
- 什麼是Python?python是一門怎樣的程式語言?Python
- 為什麼說Typescript是必學語言以及如何學會TS全棧開發TypeScript全棧