工作筆記 · 思想札記
Coding 從第一性原理出發
從執行邏輯、資料結構到AI時代的基本素養

在人工智慧快速發展的今天,我們需要重新思考一個看似簡單、其實相當根本的問題:
Coding 究竟是什麼?
傳統上,人們通常把 Coding 理解為「寫程式」,認為它是一項屬於軟體工程師、資訊科系學生或科技產業從業者的專業技能。
然而,若從第一性原理出發,Coding 的意義遠比「學會某一種程式語言」更深。
Coding 是把人的意圖、規則、知識和判斷,轉換成可以被執行的邏輯。它是連接思想與現實的一座橋,也是人類將「應該怎麼做」轉變成「實際開始運作」的方法。
從這個角度來看,Coding 不只是職業技能,而逐漸成為每個人都需要理解的基本學科。
什麼是第一性原理?
第一性原理,是把問題拆解到最基本、不能再簡化的事實,再從這些基本事實重新推導答案。
它不先問:
過去的人怎麼做?
而是先問:
我們真正要解決的是什麼問題?
哪些條件是不可避免的?
哪些限制是真正的限制,哪些只是長久以來形成的習慣?
例如,當我們要建立一套長者照護系統時,若從現成產品出發,可能會先研究市場上有哪些功能,再選擇要模仿哪一種產品。
但若從第一性原理出發,我們會先問:
- 我們想保護誰?
- 想避免哪些危險?
- 可以感測哪些狀態?
- 什麼情況算是異常?
- 系統可以採取哪些行動?
- 哪些情況需要通知家人?
- 哪些情況需要立即求救?
- 系統如何知道自己的判斷是否正確?
接下來,這些問題便可以轉換成一連串執行邏輯:
如果長者長時間沒有移動,
先以語音詢問是否平安;
如果沒有回應,
通知家人;
如果同時偵測到跌倒,
啟動緊急求助。
這時候,「照顧長者」不再只是一個善意或抽象目標,而被分解成感測、判斷、行動、確認與升級處理。
這正是 Coding 的核心價值:
把模糊的願望,轉化成清楚、可執行、可驗證的系統。
Coding 是執行邏輯的基本單元
現實生活原本就充滿各種執行邏輯。
例如:
- 如果下雨,就帶傘。
- 如果血糖過低,就補充糖分。
- 收到訂單後,確認庫存、備貨、出貨,再通知客戶。
- 如果設備無法連線,就依序檢查電源、網路、服務狀態與錯誤紀錄。
- 如果測試失敗,就找出原因、修改程式,再重新測試。
這些行為背後,都具有相似的結構:
輸入 → 判斷 → 行動 → 結果 → 回饋
Coding 所做的,就是把這些原本存在於人的腦中、經驗中或組織習慣中的邏輯,轉換成可以明確描述、反覆執行和持續改善的形式。
一段最簡單的程式:
if temperature > 30:
turn_on_fan()
看似只有兩行,實際上已經包含一個完整的現實執行單元:
- 取得溫度;
- 判斷溫度是否超過門檻;
- 決定是否需要降溫;
- 啟動風扇;
- 改變環境狀態。
因此,Coding 的最小單元不只是某一行程式碼,而是:
一個狀態、一個條件和一個行動之間的可執行關係。
大型軟體、智慧工廠、交通系統、醫院資訊系統、金融平台和 AI Agent,都是由大量這樣的基本執行單元組合而成。
文字記錄思想,程式碼執行思想
人可以有很多想法:
- 希望交通更安全;
- 希望能源使用更有效率;
- 希望醫療更個人化;
- 希望長者可以獨立生活;
- 希望知識可以被保存與傳承;
- 希望組織的工作流程更有效率。
但想法本身不會自動產生結果。
一個想法要真正進入現實,通常必須經過以下過程:
想法 → 定義問題 → 建立模型 → 制定規則 → 編寫程式 → 連接設備或服務 → 觀察結果 → 持續修正
Coding 位於這條路徑的核心位置。
它讓思想不只是停留在語言、會議或文件之中,而可以成為:
- 實際運作的服務;
- 能夠控制的機器;
- 可以重複執行的流程;
- 可以驗證的規則;
- 可以持續演進的系統。
因此可以說:
文字記錄思想,程式碼執行思想。
Coding 讓隱性知識變成顯性知識
許多現實工作都依賴資深工作者的經驗。
一位有經驗的工程師遇到設備異常,可能立刻知道應該先檢查什麼。但這些知識如果只存在於個人腦中,就很難被複製、傳承和擴展。
當我們把經驗整理成流程:
如果設備沒有回應:
1. 檢查供電狀態;
2. 檢查網路連線;
3. 檢查程序是否運行;
4. 分析最近的錯誤紀錄;
5. 嘗試安全重啟;
6. 若仍然失敗,通知維護人員。
原本屬於個人的隱性知識,就變成了顯性、可檢查的執行知識。
它可以被:
- 傳授給其他人;
- 寫進操作手冊;
- 轉化成自動診斷程式;
- 交給 AI Agent 執行;
- 根據新的經驗持續改善。
因此,Coding 不只是寫軟體,也是人類把經驗凝結成可執行知識的方法。
Coding 中包含哪些底層思維?
Coding 之所以值得成為基本學科,不只是因為它實用,而是因為它包含許多理解現代世界的重要思維。
Data Type:資料具有不同本質
Data Type,也就是資料型別,處理的是一個根本問題:
一個符號所代表的是什麼?它可以接受哪些操作?
數字、文字、日期、真假值、影像、位置和身份資料,具有不同的性質,不能任意混用。
學習 Data Type,會讓人理解:任何資料都必須先釐清它代表什麼、適合做什麼,以及不能做什麼。
更重要的是,電腦中的資料不是現實本身,而只是對現實的一種表示。
例如,「健康」無法直接放進電腦。我們只能使用血壓、心率、血糖、活動量、睡眠時間等資料,間接描述一個人的健康狀況。
因此,資料永遠包含選擇、簡化與假設。
Data Structure:資訊如何組織
Data Structure,也就是資料結構,處理的是:
資訊之間如何建立關係,才能有效儲存、查找與更新?
清單、樹、圖、佇列和鍵值對,不只是電腦技術,也對應現實生活中的各種結構:
- 家譜是一種樹狀結構;
- 道路和社交關係是一種圖;
- 掛號和排隊是一種佇列;
- 通訊錄是一種名稱與資料的對應;
- 組織架構是一種階層系統。
資料結構教導我們:資訊不只是單獨存在,資訊之間的關係往往比資訊本身更重要。
Conditional Statement:條件與決策
Conditional Statement,也就是條件陳述,基本形式是:
如果某個條件成立,就採取某個行動;否則採取另一個行動。
法律、醫療診斷、保險理賠、貸款審核、交通號誌和企業流程,都包含大量條件邏輯。
Coding 會迫使我們進一步檢查:
- 條件是否定義清楚?
- 是否存在彼此衝突的規則?
- 是否遺漏某些特殊情況?
- 邊界值如何處理?
- 規則是否可能對某些人造成不公平?
因此,條件判斷不只是程式概念,也是分析制度和決策的重要工具。
Loop:重複、回饋與改善
Loop,也就是迴圈,表示在某個條件持續成立時,反覆執行同一組動作。
許多現實活動,本質上都是迴圈:
觀察 → 行動 → 檢查結果 → 調整 → 再觀察
學習、復健、科學研究、企業經營、產品開發和 AI Agent,都不是一次完成,而是在回饋中反覆修正。
因此,Loop 不只是重複執行指令,也是持續改善的基本結構。
Recursion:用較小的同類問題解決大問題
Recursion,也就是遞迴,代表一個複雜問題可以透過處理較小版本的同類問題來解決。
例如:
- 一棵樹由許多子樹組成;
- 一個組織由部門組成,部門又由小組組成;
- 一篇文章由章節組成,章節又由段落組成;
- 一個大型工程可以被拆解成較小的工程。
遞迴讓人理解層次、嵌套和自相似結構。
它同時也教導一個非常重要的觀念:任何遞迴都需要終止條件。沒有終止條件的遞迴會無限進行;沒有退出機制的制度和行動,也可能失去控制。
Object:狀態、行為與邊界
Object,也就是物件,通常把一個主體的狀態和行為組織在一起。
例如,一個銀行帳戶可以包含:
- 狀態:餘額、持有人、帳戶狀態;
- 行為:存款、提款、凍結與查詢。
Object 是一種很重要的建模方法,但它本身不一定是不可取代的第一性原理。
更底層的概念其實是:
- 狀態;
- 身份;
- 行為;
- 邊界;
- 互動。
物件導向只是表達這些概念的其中一種程式設計方式。
Coding 更底層的第一性原理
若再往下拆解,Coding 真正接近第一性原理的內容,可能不是某一種語法,而是以下幾項能力。
表示
現實中的事物要如何被轉換成資料?
任何數位系統,都必須先選擇如何描述現實。而如何表示,會直接影響系統能看到什麼、看不到什麼,以及最後能做出什麼判斷。
狀態
系統現在處於什麼狀態?
一台機器可能處於關機、啟動中、正常運作、故障或維修狀態。許多系統錯誤,都是因為在不適當的狀態下執行了動作。
轉換
一個行動如何使系統從目前狀態進入下一個狀態?
可以簡化表示為:
目前狀態+輸入+執行規則 → 新狀態
這是軟體系統、控制工程、企業流程和政策執行共同的基本結構。
分解
複雜問題如何拆成較小、可以理解、實作與測試的部分?
這是 Coding 最有價值的訓練之一,也適用於幾乎所有專業工作。
抽象
哪些細節需要被隱藏,哪些介面需要被保留?
抽象讓人不必同時理解系統的每一個細節,因而能夠管理複雜度。
不變條件
不論系統如何運作,哪些條件永遠必須成立?
例如銀行轉帳之後,轉出與轉入的金額必須一致;醫療系統處理資料時,病人的身份不能被錯置。
這些不變條件,是系統正確性與安全性的核心。
例外與失敗
現實世界不會永遠按照理想流程運作。
資料可能遺失,網路可能中斷,感測器可能故障,使用者可能輸入錯誤,AI 也可能做出錯誤判斷。
成熟的 Coding,不只設計成功路徑,也必須設計失敗路徑。
回饋
系統如何知道自己做對了?
如果沒有測量、測試與回饋,任何程式、政策或流程都可能只是在盲目執行。
Coding 應該成為基本學科嗎?
人類長期以來把語文、數學、科學、美學與倫理視為基本學科。
這些學科分別處理不同的根本問題:
- 語文教人如何表達、理解與傳遞思想;
- 數學教人處理數量、結構與邏輯;
- 科學教人觀察、提出假設與驗證因果;
- 美學教人感受、創造與組織形式和意義;
- 倫理教人判斷什麼應該做、什麼不應該做。
隨著電腦、網路、演算法與 AI 成為社會基礎設施,現代人還需要回答另一個根本問題:
如何把人的意圖、規則與知識,轉換成可以被機器執行的形式?
這正是 Coding 所處理的核心問題。
因此,Coding 確實應該逐漸成為基本教育的一部分。
但這並不表示每個人都必須成為職業程式設計師,也不表示所有學生都必須學習同樣深度的程式語言。
真正應該普及的是:
對資料、狀態、條件、流程、演算法、錯誤、回饋與系統行為的基本理解。
AI 越會寫程式,人越需要理解 Coding
有人可能會問:
既然 AI 已經可以寫程式,未來的人還需要學 Coding 嗎?
我的答案是:更需要。
計算機普及之後,數學教育並沒有消失;導航系統普及之後,人仍然需要理解方向與地圖。
同樣地,當 AI 能快速生成大量程式碼時,人類更需要有能力判斷:
- 問題是否定義正確?
- AI 採用了哪些假設?
- 程式是否真的符合人的目的?
- 是否遺漏了邊界情況?
- 是否存在安全漏洞?
- 資料是否帶有偏誤?
- 系統失敗時如何處理?
- 自動化是否侵犯人的權利?
- 誰應該為系統的行動負責?
未來最稀缺的能力,未必是逐字輸入程式碼,而可能是:
能夠定義、閱讀、約束、驗證與治理由 AI 產生的執行邏輯。
Coding 不會因為 AI 而消失,而是會從低階語法操作,提升到更高層次的問題定義、系統設計與結果驗證。
Coding 教育不應變成語法教育
如果把 Coding 納入基礎教育,最大的風險是把它教成另一種需要死記硬背的科目。
學生若只是背誦語法、記憶 API、手算程式輸出,可能學會操作符號,卻沒有真正理解 Coding 的思想。
適合基礎教育的 Coding,可以分成幾個層次。
小學階段,可以透過遊戲、積木和生活流程,理解:
- 順序;
- 條件;
- 重複;
- 分類;
- 問題分解;
- 錯誤修正。
例如,讓孩子寫出「機器人如何泡一杯茶」的完整步驟,他很快就會發現,人類日常語言中存在大量沒有說明的隱含條件。
中學階段,可以逐漸學習:
- 變數與資料型別;
- 資料結構;
- 函式;
- 搜尋與排序;
- 模擬;
- 測試;
- 演算法成本;
- 資料偏誤。
高中以上,則可以進一步接觸:
- 網路與資料庫;
- 資訊安全;
- 並行與非同步;
- 機器學習;
- AI Agent;
- 個人隱私;
- 演算法公平;
- 自動化責任;
- 人機協作。
這樣的 Coding 教育,目的不是製造更多程式設計師,而是培養能夠理解數位世界的公民。
Coding 不能取代語文、美學與倫理
肯定 Coding 的重要性,並不表示它可以取代其他基本學科。
Coding 很擅長回答:
要怎麼做?
但它不能單獨回答:
為什麼要做?
這件事值得做嗎?
對誰有利?
由誰承擔風險?
一套臉部辨識系統可能技術正確、效率很高、準確率也很好,但它是否應該部署在公共空間,仍然是倫理、法律與政治問題。
因此,最理想的教育不是讓 Coding 取代人文教育,而是讓它加入原有的基本學科體系。
語文幫助我們說清楚目標;數學幫助我們形式化關係;科學幫助我們驗證假設;美學幫助我們創造有意義的體驗;倫理幫助我們決定行動的界線;Coding 則幫助我們把這些意圖轉化成可以運作的系統。
結語:從讀、寫、算,到可執行思維
過去,人們把讀、寫、算視為基本識字能力。
在 AI 時代,基本識字的範圍正在擴大。
現代人除了需要閱讀文字、表達思想和理解數字之外,也需要理解:
- 資料如何表示現實;
- 演算法如何做出判斷;
- 條件如何決定行動;
- 系統如何改變世界;
- 錯誤如何被發現與修正;
- 自動化的邊界應該如何設定。
每個人未必都要成為程式設計師,但每個人都應理解可執行邏輯是如何被建立的,以及它如何影響現實生活。
從第一性原理來看,Coding 是將現實世界中的意圖、資料、條件、因果與行動,轉化為可執行邏輯的基本方法。
更簡單地說:
Coding,是人類把「我想要世界變成什麼樣子」,轉化成「世界接下來如何運作」的技術。
這就是為什麼,在 AI 時代,Coding 不再只是某一個職業的工具,而逐漸成為所有人都值得學習的一門基本學科。
