程式是什麼 —
給電腦的一份食譜
這章結束,你會用一句話說出「程式是什麼」,會知道電腦其實又快又笨, 也會親手排出一串指令、看著一個機器人照著走 —— 包括看它撞牆。這就是你人生第一個 bug。
開場 · 一個反直覺的事實
大家都以為電腦很聰明。其實剛好相反:電腦笨到只會照字面做事,一個字都不會自己補。 它厲害的地方只有一個 —— 快。你叫它做一件蠢事,它會用每秒幾十億次的速度,把那件蠢事做得完美無缺。 所以「寫程式」不是把電腦教聰明,而是把你腦中理所當然的每一步,拆到笨電腦也不會誤會。 這章我們就從一份食譜開始練這件事。
一、你整天都在被程式服務
你今天大概還沒寫過半行 code,但已經被幾十個程式伺候過了。早上叫醒你的鬧鐘,是一段 「到 07:00 就響」的指令;你嗶悠遊卡進站,背後是「扣款 → 開閘門 → 記錄時間」三步驟; 你點外送,App 把「找店家 → 送單 → 派騎手 → 通知你」串成一條流水線。
這些東西共同點是什麼?它們都是一步一步、講清楚的指令。沒有一個是靠「猜你想幹嘛」運作的。 鬧鐘不會「感覺你今天很累就多睡一下」,悠遊卡不會「看你趕時間就不扣款」。 它們忠實、死板、可預測 —— 這正是它們可靠的原因。
這就是我們這門課要交給你的第一個定義 —— 而且它會跟著你到第 20 章:
記住這句話
程式(program)= 一步一步、明確到不會誤會的指令。 就這樣。不玄,也沒有魔法。之後你看 AI 生出來的一大坨 code,本質也只是這個 —— 一串指令, 可以被你一步步讀懂、檢查。
二、電腦「快但笨」:泡麵災難實驗
想像你請了一個實習生(intern),他有兩個特性:動作快到看不清、但完全照你字面說的做,一個字都不會自己想。 這其實就是電腦的性格 —— 我們這門課會一直用「AI 是超強但會照字面做事的實習生」這個比喻,先在這裡認識它的原型。
你對他說:「幫我泡個麵。」聰明的人會自己補上一堆常識。這個實習生不會。他可能:把整包麵含塑膠袋丟進鍋、 因為你沒說「加水」所以乾煮、因為你沒說「開火」所以站在冷鍋前等一小時。他沒有惡意,也不笨到不會動作 —— 他是笨在「不會自己補你沒講的步驟」。
// 你給的指令 泡(麵) // 電腦真正需要的(每一步都不能少) 拿鍋子 加水(500, "毫升") 開火() 等水滾() 拆包裝() // ← 少了這行,塑膠袋會一起煮 放入(麵) 等(3, "分鐘") 關火()
看懂重點沒有?災難不是因為電腦壞掉,是因為我們把「常識」當成理所當然。寫程式,很大一部分就是練習 「把腦內自動略過的步驟,逐一講出來」。這個習慣,之後你在跟 AI 下需求時會救你無數次。
三、程式語言:把人話翻成電腦話
電腦骨子裡只懂 0 和 1,直接跟它講 0101 沒人受得了。所以人類發明了 程式語言(programming language) —— 一種介於人話和電腦話之間的中介語言。你寫比較像人話的東西, 再由翻譯機(compiler/interpreter)轉成電腦看得懂的訊號。
這門課用 JavaScript(JS),因為它就活在你每天用的瀏覽器裡,不用裝任何東西(我們全程零安裝)。 但你先不用背語法。現在只要接受一件事:程式語言就是「講給笨實習生聽的、格式很嚴格的人話」。 嚴格到什麼程度?連少一個引號、少一個括號,它都會整個罷工 —— 這不是刁難你,是它真的沒有「猜」的能力。
你可能會問:那為什麼不乾脆用中文跟電腦講話就好?因為人話太模糊了。「幫我把數字加大一點」—— 加大多少?哪個數字?這種句子人類靠猜就能溝通,電腦一猜就錯。程式語言用嚴格的格式,換來一件事: 寫下來的每一句話,只有一種解讀。這其實對你是好事 —— 因為之後你讀 AI 寫的 code, 它也遵守同一套格式,不會有「這句話到底什麼意思」的模糊空間,你只要一行一行看下去就行。
為什麼標點這麼龜毛
你跟朋友說話漏個字,他照樣懂。電腦不行。console.log("你好") 少一個引號,
它不會體諒你「大概是想印字」,它會直接停下來報錯。精確,是程式語言的地板,不是加分項。
四、順序就是一切:換個順序就壞了
同樣的步驟,換個順序,結果可能天差地遠。這是程式最容易被忽略、卻最常出包的地方。
正確順序 · 出門
1 穿襪子
2 穿鞋子
3 出門
合理。走得出門。
同樣三步 · 換順序
1 穿鞋子
2 穿襪子 ←?
3 出門
襪子套在鞋子外面。電腦不會提醒你怪,它照做。
電腦是從上往下、一行一行執行的(我們叫它循序執行)。它不會回頭替你檢查順序合不合理。 這也是為什麼等一下的機器人實驗裡,你「前進、左轉」和「左轉、前進」會走到完全不同的格子 —— 指令的順序,本身就是資訊。
這個觀念到後面會一直回來找你。當你請 AI 寫一段流程,它偶爾會把兩步的順序放反 —— 例如「先送出訂單, 才檢查庫存夠不夠」。程式跑起來不會報錯,畫面看起來也正常,但邏輯已經壞了。 會注意順序的人,一眼就看出哪裡怪;只看「有沒有跑起來」的人,等出事才發現。 現在先把「順序=資訊」這件事刻進腦子,這是白帶最值錢的一課。
五、其實你早就會「演算法」了
演算法(algorithm)這個詞聽起來很嚇人,其實它只是「解決一個問題的明確步驟」。你每天都在用:
- 導航:從 A 到 B 的一連串「直走、右轉、迴轉」,就是一套演算法。
- 食譜:把「一盤蛋炒飯」拆成可執行的步驟,就是演算法。
- 摺衣服:對齊、對摺、再對摺 —— 你連想都不用想,因為這套演算法早已內化。
所以你不是「零基礎」。你腦中裝滿了演算法,只是從來不用把它們講到「笨實習生也不會做錯」的精細度。 寫程式的核心技能,就是把腦中的直覺,翻譯成一步一步、順序正確、精確到位的指令。 下面這個機器人,就是你第一次動手做這件事。
指揮機器人走到旗子
用下面的按鈕把「前進 / 左轉 / 右轉」排成一串指令,按「播放」讓機器人逐步執行。 走到旗子過關;撞牆或出界,它會停下來 —— 那就是你的第一個 bug。
純 vibe coder 把 AI 當魔法箱:許個願、拿到一坨東西、能動就好、不能動就再許一次。 他心裡覺得裡面裝的是「魔法」,所以壞了也不知道從哪看起。
你從第一天就知道:AI 生出來的,跟你剛剛排的機器人指令是同一種東西 —— 一串一步一步、有順序、看得懂的指令。它撞牆,是因為某一步錯了,不是因為「魔法失效」。
具體差在哪個動作?當 AI 的 code 出錯,純 vibe coder 只會整段重 roll; 你會去看是「哪一步」錯了、順序對不對 —— 就像你會回頭看機器人是在第幾個指令撞牆的。 這個「能定位到某一步」的能力,就是這門課要幫你長出來的東西。
檢查一下這章
下一章預告
機器人要記住「自己面朝哪、走到第幾步」—— 電腦是怎麼「記住」東西的? 下一章 ch02 有名字的盒子,我們來認識變數(variable):程式用來裝資料的、貼了標籤的盒子。