幫你提高 Python 的 27 種編程語言

  27 種語言程序員

  · 過程型編程語言: C, Rust, Cythonweb

  · 面向對象數據建模語言: Java, C#, Eiffel正則表達式

  · C 的面向對象衍生語言: C++, D算法

  · 面向數組的數據處理: MATLAB/Octave, Julia編程

  · 統計數數據分析: R設計模式

  · 計算型管道建模: Haskell, Scala, Clojure, F#數組

  · 事件驅動編程: JavaScript, Go, Erlang, Elixir瀏覽器

  · 漸變類型: TypeScript緩存

  · 動態元編程: Hy, Ruby安全

  · 實用問題解決: Lua, PHP, Perl

  · 計算型思惟: Scratch, Logo

  做爲這個世界上最流行的編程語言之一的合做設計者,我常常遇到一種使人很是沮喪的行爲( Python 社區和其它領域中都存在)就是社區中有影響力的人嘗試去在其它開源社區中灌輸對於」缺失「的恐懼感,並以此驅動別人對本社區作出貢獻(我本身偶爾也會作出這樣不當的行爲,當別人掉進這個陷阱時我也更容易覺察出來)。

  雖然借鑑其餘編程語言社區的經驗是一件好事,但用基於恐懼的方法來推進行動有很大問題,社區成員爲了吸引代碼貢獻者的注意,容易把其餘社區的成員視爲競爭對手,而不是做爲潛在的盟友共同迎接挑戰,推進軟件開發技術的進步。還會致使社區排斥那些喜歡其餘編程語言的人,把他們當作敵人。

  事實上,咱們但願有更豐富的跨平臺開源編程語言可供選擇,編程語言是最重要的思惟工具,能夠把咱們的想法轉換成計算機能理解的明確的條款。若是人們發現了某種語言既適合他們的大腦又能直接解決問題,這就很好了,沒必要關心他們到底選的是那種語言。

  所以我要給 Python 社區提三個具體的要求和一個更普遍的建議,首先說這些要求:

  1.當咱們想要激勵部落成員,提升社區吸引力時,咱們不該該使用恐懼法,相反咱們應該使用自豪法。當使用恐懼法激勵時,好比說這樣的話:「若是咱們不解決問題 X,那麼 Python 開發者將會減小,他們將會轉而去使用語言 Y」,那麼咱們就在故意地向全世界自由貢獻代碼的人傳遞負能量。但若是咱們使用自豪法,說出來的話將是這樣的:「Python 中的問題 X 的確難以解決,看看語言 Y 的社區,他們用一個極好的方法解決了這個問題,咱們也能夠在 Python 中嘗試這個解決方案,以一樣優雅的方式解決 Python 中的問題」。積極地強調「以咱們本身的努力爲自豪」,有利於促進 Python 社區中不斷學習的文化,還會不斷促進與其餘社區關係的發展。

  2.剋制對其餘編程語言社區蔑視的態度,特別是對那些有大牛存在,能本身解決遇到的問題,沒必要等待商業軟件供應商屈尊解決問題的社區。世界上的大多數重要的問題都不是利益驅動的問題(那些人想要解決問題,不是爲了謀取財富,也沒有機構出錢資助他們),因此咱們應該鼓勵和讚賞那些加緊嘗試解決問題的人。沒必要管他們使用的是什麼技術。

  3.若是咱們認識的人剛開始學習編程,即便他們所選的編程語言是咱們本身所不喜歡的。咱們也要支持他們,由於他們比咱們清楚什麼更適合他們的大腦。因此對咱們合適的語言不必定適合他們。若是他們開始對當初的選擇感到沮喪,以致於徹底打消了他們學習編程的積極性,這時給他們推薦編程語言才更有意義。這個建議甚至也對咱們當中作過改進網絡安全方面工做的人有用,對於本來不安全的語言,咱們的解決方式是,經過改善操做系統中的沙盒功能,漸進地破除這個語言選擇障礙,用原生系統的安全屬性,改善了編程語言默認行爲,不該該從應用安全的角度評價編程語言的好壞,迷惑初學者。(若是有人請編程新手寫了一個未經審計的軟件,卻部署爲處理安全敏感的問題,這不是程序員的問題,而應該怪那個部署的人沒有盡職調查軟件的來源和安全屬性。)

  我更多的建議是針對人開始遭遇 Python 的核心程序集的境界,也所以開始探索更多的 Python 自身的「思惟工具」。

  咱們作 Python 核心開發過程的一部分事情是因爲領會的特色具備在其餘語言咱們具備優點,是否可以用一種合適的方式讓 Python 代碼容易讀寫。這意味着學習別的程序語言可以明確特定的風格,而且在 Python 中編程提升人對軟件開發的認識。

  爲了有助於這樣的努力, 我已經列出了下面可供探索的領域,還有一些對這些領域可能提供額外看法的語言。我儘量的連接到 Wikipedia 頁面而不是直接轉向相關的首頁,由於維基百科常常會給出一些有趣的歷史背景,當選擇一門新的編程言做爲一項學術型的練習而不是被當即用來實踐性使用的時候,這些背景值得去探索。

  然而就我我的而言, 我熟悉許多的編程語言(而且已經使用了其中的一些進行開發生產系統) 。全部的推薦包括我間接瞭解的語言(或經過閱讀一些材料和設計文檔,又或者是從和我信任的朋友之間的交流中得知一門語言的優點和劣勢)。

  本應該有不少的與沿出如今名單之中,可是對於列出來的這些特定的語言只是隨意的一些子集,它們從某些程度來說是基於我本身的興趣而選出來的(好比說:我主要的興趣點在於佔支配地位的Linux,Android 和 Windows生態系統,因此在這裏我就忽略了封閉可是更加有利可圖的以 Apple 爲中心的 Objective-C 和 Swift 編程語言,並且我對於專一於藝術環境的編程語言就不太瞭解,如Processing,我甚至須要猜想從其中學到的東西怎麼樣能夠指導一個 Python 開發者)。對於一個更全面的編程語言名單而言須要考慮不少因素,除了考慮一個編程語言可以指導你成爲一個開發者外,IEEE Spectrum 的一年一度關於編程語言流行度和增加的排名也很是值得了解一下。

  面向過程編程語言 C,Rust,Cython

  Python 默認的運行模型是過程型的:咱們從主模塊的頂部開始而後一句一句執行。全部的 Phthon 對於其餘數據和計算模型的方法支持都是基於它是過程型的這一特性。

  C 語言毫無疑問仍然是底層編程語言的統治者. 它是實現 Python 解釋器的核心語言,一樣也是實現 Linux 操做系統內核的核心語言。做爲軟件開發人員,學習 C 語言是學習更多關於軟件所運行的底層硬件的最好起點 -C 語言常常被描述爲「可移植的彙編語言」,一般使用 C 語言編譯器做爲交叉編譯器,爲新的 CPU 體系結構編譯出第一個應用程序。

  Rust,相比之下, 是一個由Mozilla 建立的比較新的語言。它可以進入這個名單的緣由是,Rust 吸收了工業界已知的關於不能在 C 語言中作什麼的教訓,而且被設計成能夠與 C 庫互操做的語言,它對硬件的控制達到了和低級系統編程語言相同的精度,但它使用不一樣的編譯時方法進行數據建模和內存管理,在結構上消除了許多常見的困擾 C 程序的的缺陷(好比緩存溢出、重複釋放內存錯誤、空指針訪問以及線程同步問題)。我是一名嵌入式系統工程師,經過培訓具有了最初的專業經驗,我已經看到,當前被 C 語言和定製彙編代碼統治的各個領域頗有可能會被 Rust 取代。

  Cython也是一種默認的更底層的語言,可是與通用目標語言 C,Rust 不一樣,Cython 主要用於書寫CPython擴展模塊。Cython 被設計做爲一個 Python 的超集,讓程序員選擇什麼時候支持純 Python 語法的靈活性,當 Cython 語法支持的擴展使其能夠生成的代碼至關於本地C代碼的速度和內存效率。

  學習這些語言之一是以實用的角度加強其對內存管理,算法效率,二進制接口兼容性,軟件可移植性,將源代碼轉換成運行系統的深入理解。

  面向對象的數據建模: Java, C#, Eiffel

  編程中最主要的任務之一是爲現實世界的狀態建模,這方面最一般的方法是面嚮對象語言所提供的那些原生的語法支持:把數據結構、操做這些數據結構的方法組合成類。

  Python原生設計上就能夠直接使用面向對象的特性,而不須要一上來先學習如何編寫本身的類。不是每種語言都纔有這樣的方式- 對於本節列出的這些語言,學習面向對象的設計思想是使用這些語言的前提。

  得益於 Sun Microsystems 在 20 世紀 90 年代中後期對 Java 語言的市場推廣,Java 成了不少大專院校計算機科學入門課程的默認語言。雖然如今在不少教育領域它正被 Python 淘汰,但它在商業應用程序開發領域仍然是一種最受歡迎的語言。有一系列其它語言針對公共的 JVM(Java 虛擬機)運行時的實現,包括 Python 的 Jython 實現。Android 系統的 Dalvik 和 ART 環境是基於 Java 編程 API 實現的。

  C# 在不少方面與 Java 類似,在 Sun 和 Microsoft 解決關於 J++(微軟實現的 Java 語言)和標準 JAVA 不一致的問題失敗後,它是做爲J++的替代語言出現的。像 Java 同樣,它也是一個受歡迎的商業應用開發語言,有一系列其它語言針對共享 .NET CLR(公共語言運行庫)的實現,包括 Python 的 IronPython 實現(原始的 IronPython 1.0 中的核心組件被抽取出來建立 .NET 動態語言運行庫的中間層)。在很長的一段時間裏,.NET是隻能在 Windows 系統中使用的專有技術,有一個跨平臺的開源代碼mono從新實現了.NET,但在 2015 年初,微軟宣佈了 .NET 開源計劃。

  與列表裏大多數語言不一樣,我並不推薦在平常使用Eiffel。它之因此在推薦列表裏,是由於這門語言有着大量優良的面向對象設計思想,包括以「正確可信」做爲程序的設計目標。(同時,Eiffel 也告訴我對於大多數的軟件開發,並無以「正確可信」爲設計目標,這是由於正確可信的軟件確實沒法妥善處理不肯定的狀況。當不少相關約束還不清楚,須要在不斷迭代的過程當中去逐步完善的時候,這種設計理念就徹底不適合了)

  學習這類編程語言,就須要去熟悉繼承模型、契約設計、類不變項、前置條件、後置條件、協變(covariance)、逆變(contravariance)、方法查找路徑、泛型編程,以及其餘各類在 Python 的類型系統上也支持的特性。此外還有不少標準庫模塊和第三方框架,會用到「顯示的面向對象」設計風格,例如 unittest 和 loggingmodules,以及 Django 框架裏基於類的 view。

  面向對象的 C:C++, D

  使用 CPython 的一種方式,是把它的內核當作一種「包含對象的 C 語言」的編程環境 – CPython 是經過 C 語言的風格去實現面向對象編程,也就是用 C 的結構體描述數據,而後把結構的實例指針做爲第一個參數傳給那些數據處理函數(也就是 CPython的C 裏面的 omnipresentPyObject* 指針)。這種設計模式被有意複製到 Python 裏,在實例方法和類方法須要顯示的指定 self 或者 cls 參數。

  C++的目標是在源碼級徹底兼容 C 語言,在此之上增長了一些高級特性,例如原生的面向對象編程支持和基於模板的元程序開發。C++ 的晦澀和複雜是臭名昭著的(即便 2011 年的語言標準的更新解決了大量最糟糕的問題),不過就算這樣,C++ 仍然是不少場景下的選擇,包括 3D 建模圖形引擎和跨平臺應用開發框架,如 Qt。

  D 編程語言也頗有趣,由於它和 C++ 的關係很像 Rust 與 C 語言之間的關係:設計 D 語言的目的是,既要保留 C++ 的大部分優勢,也要避免 C++ 中存在的不少缺陷(好比缺少存儲安全性)。與 Rust 不一樣,D 語言不是一個從零開始設計的全新編程語言,相反,它是直接從 C++ 衍生出來的語言,儘管它不像 C++ 那樣是 C 語言的嚴格超集,但它遵照一個設計原則,任何落入 C 語言和 D 語言公共子集中的代碼,在兩種語言中的行爲必須相同。

  學習這些語言有利於深入理解把高級語言特徵和底層 C 運行時模型相結合的複雜性。學習 C++ 也有助於使用 Python 操做已有的用 C++ 編寫的庫和工具包。

  面向數組的數據處理: MATLAB/Octave, Julia

  面向數組的編程用於數值編程模型:基於矩陣代數和相關的數值方法。

  雖然 Python 的標準庫並無直接支持,不過在語言設計上已經作了考慮,一系列語法和語義上的功能支持,有助於第三方庫 NumPy以及相似的面向數組的工具。

  在不少狀況下,Python科學計算軟件系列都被當作專用的MATLAB編程環境的替代者,被普遍用於科學和工程上的建模、仿真和數值分析。開源項目 GNU Octave 的目標是在語法上與MATLAB代碼兼容,讓人能夠比較面向對象編程的這兩種方式。

  Julia是另外一個相對較新的語言, 它的主要特色是支持面向數組編程和基於類型的函數重載.

  學習一種這樣的語言有助於深刻理解 Python 科學計算工具包的威力,同時,學習這樣的語言有助於研究如何利用 OpenCL 和 Nvidia 的 CUDA 等相似的技術實現硬件級併發執行,也有助於研究如何使用 Apache Spark 和 Blaze 等數據處理框架實現分佈式數據處理。

  統計數據分析語言: R

  因爲有愈來愈多的大數據集須要處理。所以須要一種免費的能處理這樣的數據集的分析工具,編程語言 R 就是一種這樣的工具,它特別注重統計數據分析和可視化。

  學習 R 語言有助於深刻理解 Python 科學計算工具包的統計功能,特別是其中的數據分析庫 pandas和統計可視化庫 seaborn。

  計算管道建模語言:Haskell, Scala, Clojure, F#

  面向對象數據建模和麪向數組數據建模主要用於對數據進行靜態建模,有兩種建模方式,一種是把數據保存在對象的各個屬性中,另外一種是把結構化的數據保存爲數組。

  相比之下,函數式編程語言更強調以計算流的形式對數據進行動態建模。只要學一下函數式編程基礎,就會顯著提升使用數據轉換操做對數據建模的能力,這對於使用其餘範式的編程語言(好比面向過程、面向對象、面向數組的編程語言)開發應用程序也是有幫助的。

  Haskell 是一個函數式編程語言,對 Python 的設計產生太重大的影響, 最明顯的就是 Python 2.0 引入的列表解析。

  Scala 毫無疑問是基於JVM的函數式編程語言,與Java, Python和R同樣,是Apache Spark數據分析平臺的四門主要編程語言之一。在設計上支持函數式編程方式的同時,Scala的語法、數據模型和執行模型在設計上儘可能避免爲原有的Java程序員帶了太大的障礙(從這個角度上看,Scala更恰當的分類應該是有着強函數式語言支持的面向對象的編程語言)。

  Clojure是另外一門基於JVM的函數式編程語言,被看做是Lisp的一個變種。它在咱們的清單中具備一席之地,是由於它爲Python的函數式編程工具箱toolz的實現帶來靈感。

  我本身對F#並不熟悉,不過因爲它是 .NET CLR 推薦的語言,因此仍是值得關注的。

  學習這些編程語言,有助於瞭解 Python 自身的計算管道建模工具,包括容器推導表達式、生成器、生成器表達式、functools 和 itertools 標準庫模塊,和第三方函數式 Python 工具如 toolz。

  事件驅動編程語言:JavaScript, Go, Erlang, Elixir

  計算管道是處理數據轉換和分析問題的一種很好的方法,不過不少問題須要程序以持久的方式運行,等待事件發生,而後處理這些事件。對這類服務,一般能夠併發的處理多個事件,來實現同時爲多個用戶(或者至少多個行爲)提供服務。

  JavaScript 最初是爲瀏覽器開發的事件處理編程語言,可讓 web 開發人員處理客戶端本地的用戶行爲(例如鼠標移動和按鍵)和事件(例如頁面渲染結束)。全部現代的瀏覽器都支持 JavaScript,與 HTML5 的 DOM 一塊兒,已經成爲用戶界面的外觀和行爲事實上的標準。

  Go是Google設計出來的,設計這個語言的目的是爲了建立高度可擴展的網絡服務,Go語言很是適合開發命令行程序。從設計編程語言的角度看,最引人注目的是Go語言在它的核心併發模型中使用了「順序通訊過程(Communicating Sequential Processes)」這一律念。

  Erlang 是愛立信設計出來的,設計這個語言的目的是爲了製造高度可靠的電話交換機以及相似的設備,著名的開源框架RabbitMQ的消息服務器就是用Erlang實現的。Erlang使用Actor模型實現了核心併發原語,不容許不一樣線程直接共享數據,線程間的通訊只能靠傳遞消息。儘管我本身歷來沒有使用過Erlang語言, 但個人第一份工做涉及到了一個基於Actor模型開發的併發框架,它是一個前愛立信工程師用C++開發的,我本身也基於TSK(任務)和MBX(郵箱)原語開發過這樣的框架,是在德州儀器的輕量級DSP/BIOS運行時(如今叫TI-TROS)中實現的。

  Elixir可以出如今這個名單中的理由是,雖然它運行在Erlang虛擬機中,與編程語言Erlang具備相同的併發語義,但它也包含了一系列額外的語言級特徵,提供了更全面的開發環境,更容易吸引從其餘編程語言(好比Python、Java或Ruby)轉過來的開發者。

  學習一種這樣的語言有助於深刻理解Python自己是如何支持併發和並行的,包括原生協程、基於生成器的協程、concurrent.futures和asyncio標準庫模塊、第三方網絡服務開發框架(好比Twisted和Tornado)、Django中新引入的channels概念和GUI 框架中的事件處理循環。

  動靜混合類型: TypeScript

  Python 3.5 引入的特性裏,最有爭議的一項是新的類型模塊,爲 Python 體系加上了混合類型的支持。

  對於那些接觸過的靜態類型編程語言主要是 C, C++ 和 Java 的開發者來講,這簡直就是一個及其可怕的想法。

  Microsoft 的 TypeScript 爲 JavaScript 應用提供動靜混合類型支持,讓你對這個概念會有好一些的見解。TypeScript 代碼會編譯成 JavaScript 代碼(編譯後不包含任何運行時類型檢查),主流的JavaScript 庫的 TypeScript 註釋(annotations)在DefinitelyTyped代碼庫裏能夠找到。

  正如 Chris Neugebauer 在澳大利亞 PyCon 大會的報告上指出的那樣,這很像是 Python 與類型提示庫 typeshed 以及相似 mypy 那樣的類型推導和分析工具之間的關係。

  本質上,TypeScript 和 Python 的類型提示都是實現特定測試程序的方式,無論是獨立文件(常規的測試程序),仍是內嵌在主代碼裏(相似靜態編程語言的類型聲明)。無論哪一種狀況,你均可以運行單獨的命令檢查剩餘的代碼是否符合已知的類型約束(對於 JavaScript 和 TypeScript,在編譯階段會隱式的去完成,對於 Python 的類型提示,則是可選的靜態分析任務)。

  動態元程序設計: Hy,Ruby

  像 C、C++、C#、Java 這樣的編程語言給 Python 帶來的一個有點讓人不安特性是「代碼即數據」:相似函數和類都是運行時對象,能夠被其餘對象操做。

  Hy是一個 Lisp 的變種,能夠在 CPython 虛擬機和 PyPy 虛擬機上運行。Lisp 在「代碼即數據」上作到了極致,Lisp 代碼自己就是由描述須要實現的操做的嵌套的列表組成的(這門語言的名字就源自」LISt Processor」)。Lisp 風格的語言,最強大的一點是它們能夠很輕鬆的實現本身的領域特定語言(DSL),不過這有時候也爲閱讀其餘人的代碼帶來困難。

  Ruby在不少方面都與 Python 很相似,可是做爲更爲開放的社區,Ruby 更接受動態元程序設計,而對於 Python,這方面只是「支持,但不鼓勵」。這方面的功能包括重定義類加入一些方法,用閉包實現語言核心結構如迭代器。

  學習這些語言能夠幫助深刻了解 Python 自身的動態元程序設計的支持,包括函數和類裝飾、monkeypatching(動態修改代碼)、unittest.mock 標準庫模塊以及第三方對象代理模塊入如wrapt(我還沒找到什麼編程語言有助於瞭解 Python 的元類(metaclass),若是有人有好的建議,能夠在評論裏告訴我。元類的高級特性包括核心類型、抽象基類、枚舉類型和混合類型(動態類型和靜態類型混合)表達式的運行時執行)。

  實用主義者:Lua, PHP, Perl

  流行的編程語言一般並非孤立的 —— 他們屬於龐大的生態系統的一部分(商業和社區都是這樣),此外還有終端用戶、框架開發者、工具開發者、教育人員等等。

  Lua是一門流行的編程語言,主要做爲腳本引擎內嵌於大型的程序裏。值得一提的例子有,爲魔獸爭霸遊戲客戶端編寫的插件,在不少 Linux 發行版存在的 RPM 工具也內置了 Ruby。與 CPython 相比,Lua 運行時大小隻有其十分之一,而且它的弱檢討(weaker introspection)的能力也能讓它更容易獨立於應用程序的其餘部分和宿主操做系統。一個值得提到的來自 Lua 社區對 Python 生態系統的貢獻是,CPython 和 PyPy 採用 LuaJit FFI(Foreign Function Interface)做爲其 JIT 友好的 cffi接口庫的基礎。

  PHP 是另外一個受歡迎的編程語言,因爲PHP擅長生成HTML頁面,被早期的虛擬服務器主機提供商普遍使用,所以它做爲 LAMP stack(Linux-Apache-MySQL-PHP)的組成部分被廣爲人知。儘管PHP在設計中存在不少使人苦惱的概念上的缺陷,它仍然成了不少著名的開源web 服務的基礎,包括Drupal內容管理系統、WordPress博客引擎和支撐Wikipedia的MediaWiki引擎。PHP也能支撐不少重要的服務,好比衆包社區所使用的分佈式事件報告平臺 Ushahidi。

  和PHP同樣,Perl 也是Linux系統上的一個受歡迎的語言,與PHP不一樣,Perl不是做爲網站開發平臺被人熟知的,它更常見的用途是做爲系統管理員管理系統的工具,它既能使用正則表達式處理字符串又能處理基於文本的Linux操做系統命令的輸出結果。只使用Perl就能處理全部的任務,不須要再使用Whensh、awk和sed等工具了。

  學習其中的一門語言並不能提供任何好的看法在審美上漂亮或者在理念上簡潔的程序語言設計。可能的結果是在實踐中提供一些編程語言的結構和採納的知識,以及瞭解關於偶然的機會、歷史的積累和下降入門門檻(經過從新分配使缺省變得可能)所起到的做用,這些都強於語言自己固有的能力。

  特別是,它能夠提供一些看法關於CKAN、OpenStack NFV、Blender、SciPy、OpenMDAO、PyGMO、PyCUDA、Raspberry Pi Foundation 和 Python 的項目意義,經過普遍的商業組織,確保 Python 生態系統的機構投資持續進行。

  數值計算的思想:Scratch,Logo

  最後想說的是,我經常陷入這樣的討論,即結構化編程和麪向對象倡導者的爭論。後者自稱面向對象編程語言和結構化編程語言同樣易學。

  當咱們談論的是經過具體的數值實驗來教學(機器人學),研究對象在仿真軟件中的模型有着直接現實世界的參照物時,好比學生們能夠接觸到傳感器,發動機,繼電器等。我認爲支持面向對象的小夥伴們有必定的道理。

  然而對於其餘人來說,我遇到的一個典型的挑戰是:拿起一本食譜,將其中一個菜譜轉換成你認爲易學的面向對象編程語言,而後找到一個理解這門編程語言的學生,沿着個人思路,來繼續轉換這個菜譜。(我期待着看到學術研究人員真正踐行這樣的學習過程,——我會發自心裏的爲這樣的狀況感到欣慰。)大多數的狀況下,小夥伴們沒必要遵循這樣的流程——僅僅須要在頭腦中進行思惟的實驗就足以讓他們感覺到要想學會這「易學的」編程語言須要多少預備知識。

  然而另一個解決此問題的方法是學習那些用於教育小孩子數值計算的編程語言。

  其中一種最流行的莫過於 Scrach,它是一種讓學生利用拖動的方式來操做封閉的圖形化環境,從而能夠看到圖形化界面中相應的移動和反應的編程接口。像 Scrach 這樣的圖形化環境是一種相似於利用連環畫幫助孩子們逐步學習讀書認字的方式的程序設計方式。

  然而,這種利用一種特殊教育目的編程語言來操做一個圖形化界面的想法並不新奇,隨着的早期最經典環境之一的 Logo 環境在 2 0世紀 60 年代的建立(相似於 Python 本身的海龜模塊),那時候,你所接觸的主要的東西是一個「海龜」,你能夠用命令它的移動來畫線,從而改變圖形環境。經過這種方式,像命令行、迭代、狀態(例如:向上劃、向下劃)都以一種創建在人們的天然直觀的思惟方式(想象一下,假如你是一隻海龜,若是向右旋轉 90 度將會發生什麼?)的基礎上來介紹。

  迴歸本源,做爲一名富有經驗的程序員,從新學習以上的任何一門編程語言是最有效的方式來忘掉所學(拋棄一些輪子):這些語言工具所涵蓋的概念幫助咱們回想起那些咱們曾經認爲理所固然的概念,可是須要以初學者的眼光從新學習。當咱們這麼作的時候,由於咱們更加願意回想起整個的邏輯鏈條,包括那些咱們以前認爲理所固然而省略的思惟步驟,咱們會更加有效地和學生以及其餘的初學者一塊兒工做。

  

相關文章
相關標籤/搜索