作為訓練思維方式的程式設計

2021-08-19 12:56:24 字數 1237 閱讀 7769

原文:programming as a way of thinking
現代程式語言的強大之處在於其具有強大的表現力、可讀性、簡潔性、精確性和可執行性的能力。

——艾倫.唐尼 於2023年4月26

從程式語言產生到現在,程式設計方式有了翻天覆地的改變,在fortran和c等第一代程式語言中,程式設計師的負擔是把高層次的概念轉化為**。在現代程式語言中(以python語言作為示例),使用函式、物件、模組和庫來擴充套件語言, 不僅僅是使程式更好, 而且會改變程式的程式設計方式。

程式設計可以理解為:用自然語言表達思想, 用數學符號處理它們, 然後寫出流程圖和偽**, 最後寫乙個程式。翻譯是必要的, 因為每種語言都提供不同的功能。自然語言是富於表現力和可讀性的,偽**更精確,數學符號是精簡,編碼是可執行的。

但翻譯的代價是,我們只侷限於我們可以用每種語言有效表達的想法的子集。一些易於計算的想法很難用數學符號書寫, 而開發者在數學中所做的符號操作在大多數程式語言中是不可用的。

現代程式語言之所以強大,在於其具有強大的表現力、可讀性、簡潔性、精確性和可執行性的能力。這意味著我們可以消除中間語言, 只需要使用一種語言來**、學習、傳授和思考。

圖 1

圖2顯示了用python實現相同的演算法。它比前文的偽**更短,因為它使用的單詞多於符號,所以我認為它更易讀。此外,與偽**不同, 我們還可以對其進行執行、結果顯示和除錯。

圖 2

當然,使程式能夠執行是整個程式設計的要點,但不止這點。執行**的能力使程式設計成為一種思考和探索的工具。當我們將思想表達為程式時,我們會使**變成可測試的;當我們除錯程式時,我們也在除錯我們的大腦。

當寫這本書時, 我寫了**來測試我的理解並同時向學生們解釋。學生們可以執行**來開發乙個智慧型模型, 進行修改以測試他們的**, 並擴充套件我的**用於他們的專案。

大多數教科書和課程用數學來講授訊號處理,學生們主要用紙和鉛筆工作。使用這種方法, 唯一的選擇是 「自下而上」, 從複數的算術開始, 這不是最激動人心的話題, 而是花費數週和多個頁面來獲取相關的應用程式。

我所說的現代程式語言不是指最新的程式語言,事實上,python已面世25年。但還沒有在高中和大學廣為傳授。即使在被採用的地方,也常是使用其風格,而不使用它的強大。

現代程式語言與之前的程式語言著本質的區別,但我們僅僅認識到這種差異而已。

程式設計思維訓練(一)

最近以提問的形式發了幾條關於程式設計思維的微博,有的獲得了粉絲的響應,有些卻無人問津。今天突然想到可以將我對這些問題的思考整理成一篇博文,以便與大家分享。另外,我計畫以 程式設計思維訓練 為名寫一些系列文章,希望通過這類文章與讀者分享我在程式設計活動中的一些思考。問 有一對記憶體管理函式memall...

程式設計邏輯思維訓練

問題區 1.你讓工人為你工作7天,給工人的回報是一根金條。金條平分成相連的7段,你必須在每天結束時給他們一段金條,如果只許你兩次把金條弄斷,你如何給你的工人付費?2.請把一盒蛋糕切成8份,分給8個人,但蛋糕盒裡還必須留有乙份。3.小明一家過一座橋,過橋時是黑夜,所以必須有燈。現在小明過橋要1秒,小明...

Leetcode程式設計思維方式的轉變

已知量 約束關係 確定未知量 直線思維 未知量空間 檢索 是否和已知量衝突 實戰 檢索類題目,查詢某個東西。第一反應 順著原字串不斷構造,判斷第k個字元是啥。缺點 浪費空間需要維護字串不斷進行拼接操作。從後往前思考,假設已經構造出最後的字串。最後的字串一定是n個子串的重複,那麼第k個字元就是k n個...