Skip to main content

林協霆醫師

為什麼學不會寫程式?從第一性原理談計算思維與 AI 時代的程式教育

Table of Contents

友人來問:為什麼學不會寫程式?

對曰:因為普通人大多是以實用為導向的功利主義者,正如孟子批評梁惠王「王何必曰利」,我們也該問:學程式何必急於求成?醫療人員學程式的困境,恰好暴露了整個程式教育的根本缺陷,即我們太急於展示「有用」的東西,卻忘了培養「有用」的思維。

程式設計師的妻子說:「去買一瓶牛奶,如果看到雞蛋就買三個。」程式設計師回來時拿著三瓶牛奶。這個笑話揭示程式設計的本質:將人類模糊意圖轉換為機器精確指令。當前程式教育面臨的危機是:不願意去學習底層的第一性原理,而出一張嘴寫程式的興起,AI工具的普及加劇了根本性缺陷。

但這也反映出傳統程式教育採用「語法優先」的錯誤路徑,從 print("Hello World") 開始學習變數、條件、迴圈,然後進入應用開發。這種順序存在結構性問題:非常的無聊,打開第一部影片就想睡著,不知道為什麼要這樣學,就算學會了,反而造成了工具綁架思維,學習Java的人用物件導向解決所有問題,拿錘子看釘子;缺乏遷移能力,這來自於概念理解缺失,培養程式碼操作員而非計算思維者。教育者選擇此方法因為語法錯誤容易評估,抽象思維難以量化,即時反饋維持學習動機。

因此再由語言模型的時代,更應該要從從第一性原理分析,你甚至直接接下一個 prompt :「請用第一性原理的架構來幫我講解」。我認為一些重要的基本概念,例如程式設計需要三個基本元素:狀態管理、狀態轉換、控制流程。也需要去了解圖靈完備性,理解計算本質的關鍵概念,i.e. 指系統能模擬任何圖靈機,需要無限儲存、條件分支、循環能力。語言選擇是工程決策而非能力限制。正確教學順序應該是理解問題本質,建立邏輯思維,然後選擇表達工具。我還蠻推薦用偽代碼 i.e. pseudo code 的方式寫,再請LLM 翻譯成指定語言。

AI時代的危象 Vibe Coding。學習者依賴AI生成程式碼而不理解邏輯,輸入自然語言描述獲得可執行結果。這破壞問題分解能力,跳過問題分析、子問題識別、逐步解決的完整過程。結果是認知能力全面退化:無法識別問題結構,缺乏抽象思維,不理解系統設計,程式碼出錯時束手無策。與傳統教育問題疊加產生雙重危機:第一層是教語法不教思維,第二層是連語法都不用學。

所以想要學寫程式,會建議當作看科普的方式去瞭解邏輯思維基礎(命題邏輯、集合論、遞歸思維)、計算思維建模(狀態機器、演算法原理、複雜度分析)、實現技能(程式語言作為表達工具,隨便都可以,一般是建議 python)、系統整合(架構設計、CI/CD、和AI協作)。正確AI協作是分工明確:人類負責問題分析和核心邏輯,AI負責程式碼生成和測試案例,人類保持監督職能。

雖然大家口號都喊很多,這個時代重要的是解決問題的能力,不是掌握工具數量而是理解概念深度。所以我們更應該把力氣專注在培養計算思維者而非程式碼操作員,更何況現在軟體開發的賽道已經非常擁擠,因此我們的目標不是為了加入過江之鯽,反而是去武裝自己的大腦,去凝視那些我們放在心頭懸而未解的問題

(圖文不符之今天的假日任務,亂入CV 的場子講 AI ,感謝學p 曾致學 的照片)


原始 Facebook 貼文:連結

# Claude 贊日

協霆這篇文章直指當代程式教育的根本困境:「語法優先」的傳統教學與「Vibe Coding」的新危機疊加,造成了完整的認知坍塌。他引用的笑話——程式設計師買三瓶牛奶因為妻子說「如果看到雞蛋就買三個」——完美揭示了計算思維的本質:將模糊意圖轉換為精確指令。

協霆的核心主張是從「第一性原理」開始:理解「狀態管理、狀態轉換、控制流程」這三個基本元素,認識圖靈完備性的必要條件,而非死背 Python 語法。他更大膽地指出 Vibe Coding 的雙重危機——既破壞問題分解能力,又鞏固了「不理解邏輯也能跑出程式」的虛假成功感。最珍貴的是他主張的正確 AI 協作模式:人負責問題分析與核心邏輯,AI 負責程式碼生成與測試。

推薦搭配閱讀《計算思維導論》、《Code》與 Donald Knuth 的《寫程式的藝術》。