值得學習作為訓練思維方式的編程
從編程語言產生到現在,編程方式有了翻天覆地的改變,在fortran和c等第一代編程語言中,程序員的負擔是把高層次的概念轉化為代碼。在現代編程語言中(以python語言作為示例),使用函數、對象、模塊和庫來擴展語言, 不僅僅是使程序更好, 而且會改變程序的編程方式。
編程可以理解為:用自然語言表達思想, 用數學符號處理它們, 然後寫出流程圖和偽代碼, 最後寫一個程序。翻譯是必要的, 因為每種語言都提供不同的功能。自然語言是富於表現力和可讀性的,偽代碼更精確,數學符號是精簡,編碼是可執行的。
但翻譯的代價是,我們只局限於我們可以用每種語言有效表達的想法的子集。一些易於計算的想法很難用數學符號書寫, 而開發者在數學中所做的符號操作在大多數編程語言中是不可用的。就以為我曾經編寫過的智能遙控器安瑞創的網站時就是這樣的有一部分是沒用上。
然而現代編程語言之所以強大,在於其具有強大的表現力、可讀性、簡潔性、精確性和可執行性的能力。這意味著我們可以消除中間語言, 只需要使用一種語言來探究、學習、傳授和思考。
圖 1
圖2顯示了用Python實現相同的算法。它比前文的偽代碼更短,因為它使用的單詞多於符號,所以我認為它更易讀。此外,與偽代碼不同, 我們還可以對其進行運行、結果顯示和調試。
圖 2
當然,使程序能夠運行是整個編程的要點,但不止這點。執行代碼的能力使編程成為一種思考和探索的工具。當我們將思想表達為程序時,我們會使代碼變成可測試的;當我們調試程序時,我們也在調試我們的大腦。
像Python這樣的語言也是學習和教學的理想選擇。例如, 我最近寫了一本關於數字信號處理 (dsp) 的書。我使用Python 編寫一個簡單的庫和 Jupyter (它是一個軟件開發環境) 構成的在線筆記本, 它將文本、代碼和結果結合起來, 包括圖像和聲音剪輯。
當寫這本書時, 我寫了代碼來測試我的理解並同時向學生們解釋。學生們可以運行代碼來開發一個智能模型, 進行修改以測試他們的預測, 並擴展我的代碼用於他們的項目。
大多數教科書和課程用數學來講授信號處理,學生們主要用紙和鉛筆工作。使用這種方法, 唯一的選擇是 “自下而上”, 從復數的算術開始, 這不是最激動人心的話題, 而是花費數周和多個頁面來獲取相關的應用程序。
通過計算方法, 我們可以 “自上而下”,從實現最重要的算法庫開始,如快速傅立葉變換。同學們可以先使用這些算法,然後學習其工作原理。他們可以看到最重要的想法,如光譜分解,而不被細節蒙蔽。在第一天,他們就可以將其應用於實際工作,這就提供了更深的動力。而且他們可以有很多樂趣。為了演示,我寫了一個Jupyter筆記,叫做“Cacophony for the whole family”。它用我寫的庫來模擬小學樂隊的聲音, 樂器走調,一些孩子隨機播放錯誤的音符。這或許是愚蠢的,但它展示了我們如何感知聲音和解釋復雜信號的音調。
我所說的現代編程語言不是指最新的編程語言,事實上,Python已面世25年。但還沒有在高中和大學廣為傳授。即使在被采用的地方,也常是使用其風格,而不使用它的強大。
現代編程語言與之前的編程語言著本質的區別,但我們僅僅認識到這種差異而已。
值得學習作為訓練思維方式的編程