編程已經改變了。在像FORTRAN和C這樣的第一代語言中,程序員的編程壓力是将高級概念轉換為代碼。在現代編程語言中 - 我将使用Python作為示例 - 我們使用函數,對象,模塊和庫來擴展語言,這不僅使程序更好,而且改變了編程。
編程過去常常是關于轉換的:用自然語言表達思想,同時使用一些數學符号,然後編寫流程圖和僞代碼,最後編寫程序。轉換是必要的,因為每種語言提供了不同的潛在能力。自然語言具有表現力和可讀性,僞代碼更精确,數學符号簡潔,代碼可執行。
但翻譯的代價是,我們被限制在能用每種語言有效表達的觀點的子集裡。有些很容易用數學符号表達的思想很難用數學符号表達,而我們在數學中所做的符号操作在大多數編程語言中都是不可能的。
現代編程語言的強大之處在于它們具有表達性、可讀性、簡潔性、精确性和可執行性。這意味着我們可以排除中介語言,使用一種語言來探索、學習、教學和思考。
作為一個例子,圖1顯示了廣度優先搜索(BFS)算法,該算法用流行教科書中使用的僞代碼表示。作者将這種語言設計得比當時大多數編程語言(1989年)更簡潔、更易讀。
圖2顯示了Python中的相同算法。它比僞代碼短幾行,而且因為它使用的單詞比符号多,所以我認為它更易于閱讀。此外,與僞代碼不同,我們可以運行它、顯示結果并調試它。
編程的重要目的當然就是為了能跑通代碼,但它還有更多的意義。那就是通過執行代碼的能力使編程成為思考和探索的工具。當我們以程序的形式表達想法時,我們使它們成為可測試驗證的;當我們調試程序時,我們也在調試我們的大腦。
Python類的語言也非常适合學習和教學。例如,我最近寫了一本關于數字信号處理(DSP)的書。我使用Python編寫了一個簡單的庫和Jupyter(這是一個軟件開發環境)來編寫在線筆記本,這些筆記本結合了文本、代碼和結果,包括圖像和聲音剪輯。
當我編寫這本書的時候,我同時編寫代碼來檢驗我自己的理解,同時把這些理解都解釋給我的學生們聽。學生們也可以來運行代碼來去開發一個心智模型,進行修改以測試他們自己的預測,為他們的項目擴展我的代碼。
大多數教科書和課堂都靠學生們主要使用紙和鉛筆來工作并使用數學這門工具來傳授信号處理。使用這種方法,唯一的選項是“自下而上”,從學習複數算術這個并不是最熱點的專題開始,并花費數周的時間和許多頁紙的篇幅才能達得相關的應用程序這個階段。
用一種計算方法,我們可以“自頂向下”,從實現最重要算法的庫開始,比如快速傅裡葉變換。學生可以先使用這些算法,然後學習它們是如何工作的。他們可以看到最重要的想法,比如光譜分解,而不會被細節所蒙蔽。他們可以在真正的應用程序上工作,在第一天,提供動機去更深入。他們可以有更多的樂趣。為了證明這一點,我寫了一本名為Cacophony for the whole family的筆記本。如果你點擊那個鍊接,你可以看到代碼并聽例子。它使用我寫的庫來模拟一個小學樂隊的聲音,樂器走調,一些孩子随機地彈奏錯誤的音符。它的意思是愚蠢(有點卑鄙),但它也展示了我們如何感知聲音和解釋一個複雜信号的音高方面。
我稱之為現代的語言并不是特别新;事實上,Python已經有超過25年的曆史了。但是高中和大學還沒有廣泛地教授這些課程。即使是在采用它們的地方,Python也沒有被恰當地使用。
現代編程語言在性質上不同于它們的前輩,我們也隻是剛剛開始認識到這種差異的含義。
英文原文:Programming as a Way of Thinking;參與翻譯 (3人) : ZICK_ZEON, liyue李月, 矽谷課堂。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!