---
title: "氛圍編碼入門程式語言概念整理"
locale: zh-hant
category: knowledge_base
category_name: "知識庫"
translation_status: reviewed
license: cc_by
author: "injoys"
source_url: https://injoys.com/en/articles/vibe-coding-programming-language-basics
published_at: 2026-10-29T14:25:12+09:00
---

# 氛圍編碼入門程式語言概念整理

> 在氛圍編碼中，比起語言名稱，理解程式在哪裡執行及如何處理資料更有幫助。可了解程式設計基礎、各語言的選擇標準，以及 AI 生成程式碼的驗證範圍。

## Key Points

- 網頁開發從區分 HTML、CSS、JavaScript 的角色開始。
- TypeScript 提供執行前的型別檢查，但不會自動驗證外部輸入。
- Rust 的所有權是記憶體管理規則，並非能防範所有安全性錯誤的機制。
- Mojo 是針對 CPU 與 GPU 高效能運算設計的語言。
- AI 生成的程式碼必須透過執行與測試，確認是否符合需求。

氛圍式程式設計需要具備區分語言用途與執行位置的基礎知識。開發網頁可從 JavaScript 和 TypeScript 開始。處理資料時，請考慮 Python。Rust 和 Mojo 則用於系統開發與高效能運算。

效能數據以 Microsoft 於 2025 年 3 月 11 日發布的資料為準。

## 為什麼氛圍式程式設計需要語言基礎

氛圍式程式設計是以自然語言需求為核心，與 AI 一起撰寫程式碼的開發方式。開發者會觀察生成程式的執行結果，再修改需求。自然語言提出的需求，最終也必須落實為能實際執行的程式碼。

語言基礎能幫助你具體描述所需功能，也有助於找出錯誤發生的位置。入門時，與其背熟所有語言的語法，不如先分清楚各自的用途。

- 執行位置：瀏覽器、伺服器、智慧型手機、作業系統內部
- 輸入：使用者輸入的值，或從外部接收的資料
- 處理：計算、搜尋、分類等程式要執行的工作
- 輸出：畫面顯示、建立檔案、儲存資料
- 失敗條件：空白輸入、格式錯誤、連線中斷

## 從變數與型別開始認識基本概念

變數與型別是說明程式處理何種資料的基礎。條件陳述式與迴圈決定處理順序。函式則將相關工作整合起來，方便重複使用。

| 概念 | 簡單定義 | 說明功能時的例子 |
| --- | --- | --- |
| 變數 | 為值命名，以便參照的方式 | 用來儲存搜尋關鍵字的名稱 |
| 型別 | 關於值的種類與允許運算的規則 | 數量是數字，標題是字串 |
| 條件陳述式 | 根據條件選擇要執行工作的語法 | 標題為空時拒絕儲存 |
| 迴圈 | 對多個對象執行相同工作的語法 | 在畫面上顯示清單中的每個項目 |
| 函式 | 為執行特定工作而整合的程式碼 | 檢查輸入的函式 |
| 資料結構 | 組織資料的方式 | 有順序的清單、透過名稱查找的值 |
| 物件 | 將相關狀態與行為整合表達的單位 | 貼文的標題與修改功能 |
| 例外處理 | 處理執行期間所發生錯誤的方式 | 無法讀取檔案時顯示錯誤提示 |
| API | 程式之間交換功能或資料的約定 | 向伺服器請求搜尋結果 |
| 相依性 | 程式使用的外部程式碼或工具 | 日期處理程式庫 |

靜態型別檢查是在執行前檢查型別使用方式的機制。動態型別語言也會區分值的型別。動態型別並不代表資料沒有種類之分。

## 為什麼從機器語言轉向高階語言

程式語言的發展，是持續減少人類必須表達之工作細節的過程。機器語言是處理器執行指令的表達形式。組合語言則為這些指令加上人類可讀的符號。

組合語言與處理器的指令集密切相關。更換零組件並不代表所有程式碼都必須重寫。移轉到不相容的指令集時，修改的負擔才會增加。

| 語言或發展方向 | 試圖解決的問題 | 應記住的概念 |
| --- | --- | --- |
| 機器語言、組合語言 | 向硬體傳達要執行的工作 | 與指令集直接相關 |
| Fortran | 以接近數學公式的方式表達科學計算 | 數值計算與編譯器 |
| COBOL | 以易讀格式處理企業業務資料 | 以帳務、交易處理為核心的表達方式 |
| Lisp | 使用符號與串列進行計算 | 早期 AI 研究與以函式為核心的表達方式 |
| C | 有效率地撰寫系統軟體 | 記憶體控制與可攜性 |
| SQL | 處理關聯式資料庫中的資料 | 宣告所需結果的查詢 |
| C++ | 大型程式的結構化與資源管理 | 類別與多種程式設計方式 |
| Java | 在執行環境不同的系統之間移植程式 | JVM 與位元組碼 |

Fortran 於 1957 年在 IBM 問世。Lisp 在 1950 年代後期隨著 AI 研究一起發展。COBOL 則源自 1959 年開始的共同設計工作。

C 是隨著 Unix 開發而發展的語言，對將軟體移植至其他機型有所貢獻。不過，依賴作業系統與硬體的程式碼仍需另外修改。

物件導向是將相關資料與行為組織成物件的方式。C++ 是支援物件導向的語言，但物件導向這個概念本身並不是由 C++ 創造的。

## 編譯器與直譯器的差別

編譯器是將程式碼轉換成另一種表達形式的程式。轉換結果可能是機器語言，也可能是位元組碼等中間執行格式。

直譯器會一邊解讀程式碼或中間表示形式，一邊執行。實際的語言實作也可能同時使用編譯與直譯。若只把語言分成快速的編譯型與緩慢的直譯型，並不準確。

| 執行相關概念 | 作用 | 代表案例 |
| --- | --- | --- |
| 預先編譯 | 執行前產生目標程式碼 | C、Rust 常見的執行檔建置方式 |
| 位元組碼 | 由執行環境處理的中間指令格式 | Java 位元組碼、CPython 位元組碼 |
| 直譯器 | 一邊解讀程式碼或中間指令，一邊執行 | CPython 的位元組碼執行 |
| JIT 編譯 | 在執行期間將所需程式碼轉換為機器語言 | 多種 JVM 與 JavaScript 引擎 |
| 執行環境 | 提供程式執行所需的功能 | JVM、Node.js |

CPython 是廣泛使用的 Python 實作，會將原始碼編譯為位元組碼後執行。若只把 Python 說成每次逐行翻譯原始碼的語言，就是錯誤的。

Java 的 JVM 是執行位元組碼的環境。這種結構有助於在不同作業系統上執行程式碼。實際相容性也會受到 JVM 版本與外部程式庫的影響。

## 網頁畫面與伺服器有什麼不同？

前端負責使用者接觸的畫面與互動。後端在伺服器上處理請求。資料庫則負責儲存與查詢所需資料。

HTML 是表達文件結構的標記語言。CSS 指定畫面的樣式與版面配置。JavaScript 則實作條件判斷與使用者操作的處理。

| 名稱 | 分類 | 主要用途 |
| --- | --- | --- |
| HTML | 標記語言 | 標題、段落、輸入欄位等文件結構 |
| CSS | 樣式表語言 | 色彩、間距、畫面配置 |
| JavaScript | 程式語言 | 瀏覽器互動與伺服器處理 |
| TypeScript | 為 JavaScript 加入型別系統的語言 | 執行前檢查錯誤與管理程式碼 |
| React | 使用者介面程式庫 | 以可重複使用的元件建構畫面 |
| Node.js | JavaScript 執行環境 | 在瀏覽器之外執行 JavaScript |
| Next.js | 以 React 為基礎的框架 | 網頁應用程式的頁面架構與伺服器功能 |
| PHP | 程式語言 | 在伺服器上產生動態網頁回應 |
| SQL | 資料庫語言 | 查詢、新增、修改、刪除資料 |

React、Node.js、Next.js 並不是同一類工具。程式庫是可取用所需功能的程式碼集合。框架則連應用程式的組織方式也一併提供。執行環境是程式碼執行的環境。

## 依用途比較語言

請根據要製作的成果與既有執行環境選擇語言。下表列出評估各種語言時的典型切入點。每種語言並非只能執行表中列出的工作。

| 想製作的成果 | 優先考慮的語言 | 選擇前應確認的事項 |
| --- | --- | --- |
| 在瀏覽器中使用的網頁應用程式 | JavaScript、TypeScript | HTML、CSS 基礎與畫面建構工具 |
| 檔案整理、工作自動化 | Python | 輸入檔案格式與部署環境 |
| 資料分析、AI 模型應用 | Python | 所需的分析與模型程式庫 |
| 網路伺服器、維運工具 | Go | 並行處理架構與既有系統整合 |
| 以 JVM 為基礎的業務系統 | Java、Kotlin | 與既有程式碼及程式庫的相容性 |
| 以 iOS 為主的應用程式 | Swift | Apple 開發工具與平台功能 |
| 以 Android 為主的應用程式 | Kotlin | Android 開發工具與既有應用程式架構 |
| 需要控制記憶體的系統 | C、C++、Rust | 效能需求與安全性驗證能力 |
| CPU、GPU 運算最佳化 | Mojo | 支援的硬體與所需運算功能 |
| 關聯式資料處理 | SQL | 各資料庫產品的語法差異 |

Python 的應用廣度也與程式庫生態系有關。NumPy 為了提升速度，會使用經過編譯的程式碼。並非所有以 Python 撰寫的計算都只透過 Python 程式碼執行。

Go 將並行支援納入語言設計。並行是讓多項工作一起推進的組織方式。平行則是多項工作實際同時執行的狀態。寫了並行程式碼，並不代表計算速度就會自動加快。

## TypeScript、Rust、Mojo 的差異

TypeScript、Rust、Mojo 要解決的問題各不相同。TypeScript 協助檢查 JavaScript 程式碼的型別。Rust 對記憶體管理設有嚴格規則。Mojo 則著重高效能運算與硬體運用。

| 比較項目 | TypeScript | Rust | Mojo |
| --- | --- | --- | --- |
| 核心關注點 | 型別檢查與程式碼管理 | 記憶體安全性與系統控制 | CPU、GPU 高效能運算 |
| 代表用途 | 網頁應用程式、伺服器應用程式 | 系統工具、注重效能的元件 | AI 基礎設施、運算核心 |
| 應先理解的概念 | JavaScript 與資料型別 | 所有權、借用、生命週期 |
| 需另外確認的部分 | 外部輸入與業務規則 | unsafe 程式碼與邏輯錯誤 | Python 整合與硬體支援 |

### TypeScript 的型別檢查

TypeScript 為 JavaScript 加入靜態型別檢查，有助於在執行前找出型別使用錯誤的程式碼。透過型別推論，部分宣告的型別可以自動判定。

不必為每個變數手動標註型別。型別註記會在一般的 JavaScript 轉換過程中被移除。僅有型別宣告，並不會產生執行期間的輸入檢查。

### Rust 的所有權與記憶體安全性

所有權是決定由誰管理值所占記憶體的規則。借用則是在不轉移所有權的情況下參照值的方式。編譯器會檢查相關規則，以預防記憶體錯誤。

Rust 的安全性保證以實作正確為前提。在 unsafe 程式碼中，部分安全條件由撰寫者負責。語言並不會連計算式或存取權限的錯誤也自動阻止。

### Mojo 與 Python 的關係

Mojo 是使用類似 Python 語法的獨立語言。它支援撰寫 CPU 與 GPU 的高效能程式碼，也提供與 Python 程式碼連接的互通功能。

不能假設既有 Python 程式碼可以原封不動地移轉。請在準備安裝的 Mojo 版本文件中確認所需功能。若要使用 GPU，也必須符合支援裝置與驅動程式的條件。

## 語言介紹中常見的錯誤

簡短的語言介紹容易省略適用條件，也必須區分歷史事實與現有功能。以下列出可能影響語言選擇判斷的常見誤解。

| 常見說法 | 正確理解 |
| --- | --- |
| JavaScript 是 Java 的網頁版 | 兩者是不同的語言 |
| HTML 與 CSS 都在 1991 年問世 | CSS1 的 W3C 建議標準發布於 1996 年 12 月 17 日 |
| Kotlin 是 Google 開發的語言 | 開發者是 JetBrains，Google 則在 Android 上提供支援 |
| C 程式碼重新編譯後就能在任何地方執行 | 依賴作業系統、硬體的部分可能需要修改 |
| Python 目前人氣排名第 1 | 必須有調查機構、時間點與統計方式才能判斷 |
| 使用 Rust 就能解決所有安全問題 | 記憶體安全性與存取權限驗證是不同問題 |
| 使用 Mojo 就能讓所有 Python 工作變快 | 需要依工作、實作與硬體進行測量 |
| bug 一詞源自昆蟲事件 | 該事件是讓既有用語廣為人知的案例 |

著名的發現昆蟲紀錄，是 1947 年 Harvard Mark II 的案例。Smithsonian 說明，這起事件有助於相關用語的普及。若將其介紹為 ENIAC 的案例，或說成該用語的最初起源，都不準確。

## 應該如何解讀效能數據？

效能數據只能針對實際測量的工作來解讀。編譯時間與完成後應用程式的執行速度，是不同的指標。開發工具變快，並不代表網頁也會以相同比例變快。

Microsoft 宣布將 TypeScript 工具轉為原生實作。2025 年 3 月 11 日發布的資料中，列出了各專案的測量值。以下是該次發布中的 VS Code 程式碼庫案例。

| 測量對象 | 既有實作 | 原生實作 | 公布的速度提升 |
| --- | --- | --- | --- |
| VS Code 程式碼庫的 TypeScript 編譯處理 | 77.8 秒 | 7.5 秒 | 10.4 倍 |

在公布的條件下，處理時間縮短為 **7.5 秒**。計算兩者差距，這個案例每次處理減少了 70.3 秒。這並不代表所有專案都會得到相同結果。

比較 Python 與 C 的速度時，也請採用相同原則。必須確認是否使用相同的輸入與演算法執行。編譯選項與使用的程式庫也是比較條件。未交代執行環境的數字，很難當成通用的速度倍率。

## 型別檢查與外部輸入驗證

即使通過型別檢查，仍需另外確認外部資料的內容。檢視 AI 生成的程式碼時，經常會忽略這項差異。型別宣告表達的是程式預期接收的值的形式。

假設有個網頁應用程式將數量宣告為數字型別，外部 API 實際傳來的卻可能是字串。即使標上型別名稱或使用型別斷言，也不會驗證該值。必須有在執行期間檢查資料的程式碼。

| 檢查階段 | 檢查內容 | 通過後仍存在的問題 |
| --- | --- | --- |
| 型別檢查 | 程式碼內部的型別使用方式 | 外部實際傳入的值 |
| 輸入驗證 | 資料格式與允許範圍 | 是否為使用者獲准執行的操作 |
| 權限檢查 | 請求者的存取權限 | 結果是否符合業務規則 |
| 功能測試 | 預期輸入所產生的實際結果 | 未經測試的條件 |

這張表是依據型別移除與記憶體安全性的適用範圍建立的檢視架構，區分了語言能保證的部分，以及服務必須檢查的部分。請向 AI 分別提出各階段的驗證需求。

## 如何向 AI 說明功能

提出功能需求時，請同時寫出輸入與預期結果。若只決定程式名稱，很容易遺漏運作條件。如果已有專案，也請告知正在使用的語言與版本。

1. 寫出使用環境。
2. 說明要處理的輸入形式。
3. 決定正常輸入應產生的結果。
4. 決定空值與錯誤輸入的處理方式。
5. 同時要求說明修改原因與確認方法。

以下是拆分需求的提示詞範例。請根據專案調整實際檔案內容。生成的結果必須親自執行確認。

```text
請先確認既有專案的語言與執行環境。
從 CSV 檔案讀取有標題的資料列，並以清單顯示。
若缺少必要欄位，請顯示錯誤訊息。
請另外提示標題為空的資料列。
請區分外部輸入驗證與畫面顯示的程式碼。
請先確認能否使用既有相依套件實作。
請說明修改的部分與測試方法。
```

發生錯誤時，請一併提供重現條件。錯誤訊息中有能縮小問題發生範圍的線索。GitHub 的 Copilot 文件也要求檢視生成的程式碼。在採用程式碼之前，必須先確認執行結果。

## 入門學習與課程選擇標準

入門學習可以根據想完成的工作，從較小範圍開始。若是網頁開發，可以先試著連結畫面結構與互動行為。若是自動化，則適合先確認檔案輸入與結果儲存。

1. 選擇一種適合目標成果的語言。
2. 學習變數、型別、條件陳述式、迴圈與函式。
3. 撰寫小功能，並比較執行結果。
4. 輸入錯誤資料，確認失敗時的行為。
5. 試著用自己的話說明修改程式碼的原因。

選擇課程時，除了成果畫面，也請確認驗證內容。可以查看是否有重現與修正錯誤的實作練習。是否註明使用版本與執行環境，也是應確認的項目。

- 程式碼說明：說明生成函式之輸入與輸出的過程
- 錯誤處理：閱讀錯誤訊息並縮小原因範圍的練習
- 資料驗證：處理外部輸入與失敗條件的範例
- 可重現性：能在相同環境下再次執行的指引

各語言的定義可在各專案的官方文件中確認。TypeScript Handbook 說明了型別移除。Rust 官方書籍分別介紹所有權與 unsafe。請在 Mojo Manual 中確認語言功能與 Python 整合的範圍。

## FAQ

### 開始氛圍編碼之前，必須先學會所有程式語言嗎？
不需要學會所有程式語言。請先根據想做出的成果，選擇合適的語言。理解變數、型別、函式和執行位置，就能將需求描述得更具體。

### 網頁開發應該先從 JavaScript 還是 Python 開始？
若要實作瀏覽器畫面上的互動行為，JavaScript 是起點。也請一併了解 HTML 和 CSS 的作用。若要進行檔案自動化與資料處理，可以考慮從 Python 開始。

### 使用 TypeScript 就不需要懂 JavaScript 了嗎？
若要理解 TypeScript 執行時的行為，需要具備 JavaScript 基礎。TypeScript 在 JavaScript 的基礎上加入了型別系統。請區分型別檢查與實際執行。

### TypeScript 必須為所有變數標註型別嗎？
在可以推斷型別的地方，不必手動標註。工具會根據指派的值與上下文判斷型別。請依照程式碼的作用，決定是否需要明確標註型別。

### React 和 Node.js 也是程式語言嗎？
React 是使用者介面函式庫。Node.js 是 JavaScript 執行環境。Next.js 則歸類為以 React 為基礎的框架。

### Python 是將原始碼逐行轉譯後執行的嗎？
具代表性的實作 CPython 會將原始碼編譯為位元組碼，之後再執行位元組碼。僅用「逐行轉譯原始碼」的說法，很難解釋這個過程。

### 使用 Rust 就不需要進行安全審查了嗎？
Rust 的記憶體安全性不代表整個服務都安全。存取權限與業務規則必須另外確認。unsafe 程式碼的安全條件也需要審查。

### Mojo 是 Python 的新版本嗎？
Mojo 是一種獨立的語言，語法與 Python 相似。它提供與 Python 整合的功能。既有程式碼的相容性，請查閱預計使用版本的官方文件。

### 使用 Mojo 一定需要 GPU 嗎？
Mojo 也能用來撰寫在 CPU 上執行的程式碼。GPU 並非所有程式的必要條件。如果要使用 GPU 功能，請確認裝置與驅動程式的支援範圍。

### Go 的並行性和平行處理是同一個意思嗎？
並行性是將多項工作安排為一起推進的概念。平行性則是多項工作實際同時執行的狀態。僅有並行性，並不能保證執行速度會提升。

### Kotlin 是 Google 開發的嗎？
Kotlin 的開發者是 JetBrains。Google 則在 Android 開發中支援 Kotlin。必須區分語言的開發者，以及在平台上提供支援的一方。

### TypeScript 編譯器變快，應用程式也會按相同比例變快嗎？
編譯時間與應用程式的執行時間是不同的指標。Microsoft 的效能案例談的是開發工具的處理時間。應用程式的回應速度必須另外測量。

### AI 產生的程式碼通過型別檢查，就算完成了嗎？
不能只憑型別檢查來判斷功能是否完成。必須確認外部輸入與存取權限。請測試在正常條件與失敗條件下，是否會得到預期結果。

### 該依據哪些標準選擇氛圍式程式設計課程？
請確認是否有說明及修改所產生程式碼的實作練習。也可以查看是否涵蓋錯誤重現與輸入驗證。明確標示使用版本與執行環境的課程，更容易確認重現條件。

## Sources

- [TypeScript 官方文件：TypeScript for JavaScript Programmers](https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html)
- [TypeScript Handbook: The Basics，型別檢查與型別擦除](https://www.typescriptlang.org/docs/handbook/2/basic-types)
- [The Rust Programming Language: What Is Ownership?](https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html)
- [The Rust Programming Language: Unsafe Rust](https://doc.rust-lang.org/book/ch20-01-unsafe-rust.html)
- [Mojo Manual：語言概述與 Python 整合](https://docs.modular.com/mojo/manual/)
- [Mojo System Requirements：CPU·GPU 支援條件](https://docs.modular.com/mojo/requirements/)
- [Python 官方詞彙表：位元組碼與執行相關概念](https://docs.python.org/3/glossary.html)
- [NumPy 2.0 Manual: Building from source](https://numpy.org/doc/2.0/building/index.html)
- [MDN: What is JavaScript?](https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Scripting/What_is_JavaScript)
- [Node.js 官方文件：Introduction to Node.js](https://nodejs.org/learn/getting-started/introduction-to-nodejs)
- [React 官方文件：使用者介面函式庫](https://react.dev/)
- [Next.js 官方文件](https://nextjs.org/docs)
- [PHP Manual: Introduction](https://www.php.net/manual/en/introduction.php)
- [Go 官方 FAQ：設計目的與執行特性](https://go.dev/doc/faq)
- [Go 官方部落格：Concurrency is not parallelism](https://go.dev/blog/waza-talk)
- [Kotlin 官方 FAQ：開發單位與目標平台](https://kotlinlang.org/docs/faq.html)
- [Android Developers: Kotlin and Android](https://developer.android.com/kotlin)
- [Swift.org: About Swift](https://www.swift.org/about/)
- [Oracle Java Tutorials: About the Java Technology](https://docs.oracle.com/javase/tutorial/getStarted/intro/definition.html)
- [IBM History: Fortran](https://www.ibm.com/history/fortran)
- [John McCarthy: LISP prehistory](https://www-formal.stanford.edu/jmc/history/lisp/node2.html)
- [Howard Bromberg: The COBOL Conclusion，Datamation 1967年3月](https://bitsavers.computerhistory.org/magazines/Datamation/196703.pdf)
- [Dennis Ritchie: The Development of the C Language](https://www.nokia.com/bell-labs/about/dennis-m-ritchie/chist.html)
- [Bjarne Stroustrup FAQ：C++ 與物件導向](https://www.stroustrup.com/bs_faq.html)
- [IBM: What Is Structured Query Language?](https://www.ibm.com/think/topics/structured-query-language)
- [W3C：Cascading Style Sheets 第 1 級發布歷程](https://www.w3.org/standards/history/CSS1/)
- [Smithsonian National Museum of American History：附有電腦蟲的日誌](https://americanhistory.si.edu/collections/object/nmah_334663)
- [Microsoft：快 10 倍的 TypeScript，2025年3月11日](https://devblogs.microsoft.com/typescript/typescript-native-port/)
- [GitHub Docs：Copilot 行內建議的限制與驗證責任](https://docs.github.com/en/copilot/responsible-use/inline-suggestions)

## Images

![實作教室裡，一名中年男子操作筆記型電腦，身旁的女子指著桌上的智慧型手機。](https://injoys.com/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzQ0NjEsInB1ciI6ImJsb2JfaWQifX0=--aa435b9d954b7e3cf19dca343a0d0fc5333fe68f/ai-73cc4d9e.webp)
![一名女性在伺服器機房檢查打開的伺服器，內部可見 CPU 散熱器與 GPU 卡](https://injoys.com/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzQ0NjcsInB1ciI6ImJsb2JfaWQifX0=--0a47db349b5b04ebfcd192a40d156aec0886d68c/ai-3af1935f.webp)