AI時代的程式碼閱讀,從掌握英單字的語感開始。
程式語言是用英語寫成的 “規則手冊”。
變數、函數、類別、註解──一切都延伸自英語。
掌握「文法」不僅僅是「單字的意義」,即使在不熟悉的語言的程式碼中也能“大致了解它在做什麼”。
例如...
users = database.get_all_users()
active_users = filter.remove_inactive(users)
email.send_notification(active_users)
<details> <summary>查看答案</summary>
「從資料庫獲取所有用戶,排除非活躍用戶,並發送通知」
【關鍵字】
- get_all_users = 獲取所有用戶
- remove_inactive = 剔除非活躍
- send_notification = 發送通知
- filter = 過濾
- active_users = 活躍用戶
</details>
如果可以流利地讀懂這三行,你的英語能力已經達到工程師級別!?也許...
工程師並不僅僅處理一種語言。
JavaScript、PHP、Python、Java、C#、Go... 在多種語言之間來回穿梭的時代,使得理解「程式碼的文法」和理解「英單字的意義」同等重要。
更何況,AI時代已經到來。當閱讀由 ChatGPT 或 Copilot 寫的程式碼時,如果理解英單字的意義...
validate → 「哦,這是在檢查輸入」fetch → 「是在獲取數據」filter → 「僅僅提取符合條件的部分」那麼,不論語言如何,都能瞬間理解其意圖。
user.save() → 「正在保存用戶信息」cache.clear() → 「正在清除緩存」password.encrypt() → 「正在加密密碼」database.connect() → 「正在連接資料庫」如果懂得英語,即使是第一次看到的程式碼也能發現“它在做什麼!”
這次,我故意不針對特定語言,而是從基礎到稍微難一點的單字,進行了「片假名讀音 + 意義 + 使用方法」的整理。
如果能將英單字記住為「單字」,那麼無論什麼語言的程式碼都能讀懂。
總體來說能夠「理解它在做什麼」,而這種“大致的理解”在實務中能大大助益。
控制程式流程的基本英單字。簡單的 if 陳述式、迴圈、非同步處理等,無論何種語言都必然出現的必需單字。
| 英單字 | 片假名讀音 | 意義 | 使用方式 |
|---|---|---|---|
| if | イフ | 如果〜則 | if (x > 0) |
| else | エルス | 否則 | else { ... } |
| break | ブレイク | 中斷 | break; |
| continue | コンティニュー | 繼續 | continue; |
| return | リターン | 返回值 | return value; |
| yield※ | イールド | 產生/讓渡 | yield return item; |
| iterator | イテレータ | 反覆子 | for item in iterator: |
| await | アウェイト | (等待非同步處理) | await FetchDataAsync() |
| switch | スイッチ | 分支 | switch (value) |
| case | ケース | 情況 | case 1: |
| default | デフォルト | 預設值 | default: |
<details><summary>※ yield 的補充</summary>
💡如評論中所指出,
yield根據上下文意義會稍有不同。
「產生/給予」(如 JavaScript 的生成器函數等)
→yield:給予下一個值
→yield*:將控制權委譲給另一個生成器「讓渡」(如 Java 的線程控制等)
→Thread#yield():讓渡 CPU 執行權給其他線程兩者均代表「暫時放棄自己的處理並將控制權傳遞給下個主體」。 即
yield的語感涵蓋了“給予”與“讓渡”的“傳遞”概念。
根據語言不同,「傳遞值」或「讓渡處理」的意義也有所不同,這正是這個單字有趣之處!
</details>
yield 是「產生」,因此迭代工具會 "逐步返回"iterator 是「重複的東西」,用於逐一取出元素await 是直接用英語動詞 await(等待)作為關鍵字。// 使用 yield 的範例
function* generateNumbers() {
yield 1; // 產生 1 並暫停
yield 2; // 產生 2 並暫停
yield 3; // 產生 3 並結束
}
// 使用 await 的非同步處理範例
async function fetchUserData() {
const response = await fetch('/api/users'); // 等待回應
const data = await response.json(); // 等待 JSON 轉換
return data;
}
物件導向程式設計的核心英單字。類別設計、繼承、介面實作等,設計場景必然會遇到的重要概念,記住這些英單字會非常方便。
| 英單字 | 片假名讀音 | 意義 | 使用方式 |
|---|---|---|---|
| class | クラス | 設計藍本 | class User { } |
| interface | インターフェース | 接口/契約 | interface IShape |
| abstract | アブストラクト | 抽象的 | abstract class BaseClass |
| override | オーバーライド | 覆蓋 | override void Run() |
| virtual | バーチャル | 虛擬的 | virtual void Run() |
| implement | インプリメント | 實作 | class User : IUser |
| inherit | インヘリット | 繼承 | class B : A |
| encapsulate | エンカプスレート | 封裝 | 透過 private 或 getter/setter 實現 |
| constructor | コンストラクター | 建構子 | public User() { } |
| destructor | デストラクター | 銷毀子 | ~User() { } |
encapsulate(エンカプスレート)源自「封入到膠囊中」的意義 → 是不直接操作數據的設計abstract不僅為「抽象」,還指「沒有實作的架構」// abstract 和 override 的範例
public abstract class Animal {
public abstract void MakeSound(); // 抽象方法(無實作)
}
public class Dog : Animal {
public override void MakeSound() { // 覆蓋以提供實作
Console.WriteLine("Woof!");
}
}
// 封裝的範例
public class BankAccount {
private decimal balance; // 被封裝的數據
public decimal GetBalance() { // 透過 getter 安全訪問
return balance;
}
public void Deposit(decimal amount) { // 透過 setter 驗證且更新
if (amount > 0) {
balance += amount;
}
}
}
數據庫操作、API 交互、JSON 處理等,處理數據時經常出現的動詞。從 CRUD 操作的基本到像序列化這樣一些稍微高級的處理均包括在內。
| 英單字 | 片假名讀音 | 意義 | 使用方式 |
|---|---|---|---|
| get | ゲット | 獲取 | GetValue() |
| set | セット | 設定 | SetValue() |
| create | クリエイト | 創建 | CreateUser() |
| read | リード | 讀取 | ReadFile() |
| update | アップデート | 更新 | UpdateRecord() |
| delete | デリート | 刪除 | DeleteItem() |
| fetch | フェッチ | 提取 | fetch("/api") |
| parse | パース | 解析 | int.Parse("123") |
| serialize | シリアライズ | 直列化 | JsonSerializer.Serialize() |
| deserialize | デシリアライズ | 復原 | JsonSerializer.Deserialize() |
| validate※ | バリデート | 驗證/使有效 | ValidateInput() |
| sanitize | サニタイズ | 無害化 | SanitizeHtml() |
<details><summary>※ validate 的補充 </summary>
💡如評論中所指出,
validate在不同語境下可以有「使有效」、「驗證」等不同含義。
- Win32 系 API 等:validate ⇄ invalidate(使有效/無效)
- Web/表單等:validate input(驗證輸入的有效性)
- verify:確認結果或真偽
同一單字在不同技術領域中的意涵不同,這也是英語的有趣之處!
</details>
「セリアライズ」容易誤讀,正確發音應該是 "シリアライズ"。
其源自英語的 serial(連續的)。
import json
# 序列化的範例
user_data = {
"id": 1,
"name": "Alice",
"email": "[email protected]"
}
# 將物件直列化為 JSON 字串
serialized = json.dumps(user_data)
print(serialized) # '{"id": 1, "name": "Alice", ...}'
# 反序列化的範例
# 將 JSON 字串恢復為物件
deserialized = json.loads(serialized)
print(deserialized['name']) # 'Alice'
# validate 和 sanitize 的範例
def validate_email(email):
# 驗證電子郵件地址
return '@' in email and '.' in email
def sanitize_input(text):
# 除去 HTML 標籤以實現無害化
return text.replace('<', '<').replace('>', '>')
在 Web 開發或 API 開發中必遭遇的通信相關術語。從 HTTP 請求/回應到認證令牌,現代 Web 開發無法缺少的單字已被匯集。
| 英單字 | 片假名讀音 | 意義 | 使用方式 |
|---|---|---|---|
| request | リクエスト | 請求 | HttpRequest |
| response | レスポンス | 回應 | HttpResponse |
| header | ヘッダー | 通信信息部分 | request.Headers |
| payload | ペイロード | 真實數據部分 | JSON 主體等 |
| endpoint | エンドポイント | 目標 URL | api/v1/users |
| token | トークン | 認證用的密鑰 | Bearer token |
| session | セッション | 暫時的通信狀態 | Session.Start() |
| cookie | クッキー | 存儲在瀏覽器的數據 | document.cookie |
| authentication | オーセンティケーション | 認證(身份確認) | Login() |
| authorization | オーソライゼーション | 授權(可執行的操作) | CheckPermission() |
payload 是「數據的實體」。「load」是「載荷」的意思endpoint 是「通信的終點」。即為 API 的「口」// authentication 和 authorization 的差異
async function handleRequest(req, res) {
// Authentication: 確認用戶身份
const user = await authenticate(req.headers.token);
if (!user) {
return res.status(401).json({ error: "Unauthorized" });
}
// Authorization: 確認用戶的權限
const hasPermission = authorize(user, 'admin');
if (!hasPermission) {
return res.status(403).json({ error: "Forbidden" });
}
// 返回包括 payload 的回應
const payload = {
data: await fetchAdminData(),
timestamp: Date.now()
};
res.status(200).json(payload);
}
用於軟體設計或設計模式的專業術語。依賴注入(DI)、倉儲模式等,是實現乾淨架構的重要概念的單字群。
| 英單字 | 片假名讀音 | 意義 | 使用方式 |
|---|---|---|---|
| dependency | ディペンデンシー | 依賴關係 | Dependency Injection |
| injection | インジェクション | 注入 | DI Container |
| repository | リポジトリ | 儲存庫 | UserRepository |
| service | サービス | 功能的集合 | UserService |
| middleware | ミドルウェア | 中間層軟體 | Web 伺服器等 |
| delegate | デリゲート | 委託 | 在事件處理中使用 |
| observer | オブザーバー | 監視者(模式名稱) | Observer Pattern |
| singleton | シングルトン | 唯一實例 | Singleton.Instance |
| factory | ファクトリー | 生成工廠 | UserFactory.Create() |
| adapter | アダプター | 轉換器 | DbAdapter |
delegate 是「委託」,意即事件的處理者singleton 是 "single(單一) + ton(物件)" → 唯一存在// 依賴注入的實例
public interface IUserRepository {
User GetById(int id);
}
public class UserRepository : IUserRepository {
public User GetById(int id) {
// 從資料庫獲取用戶
return database.Users.Find(id);
}
}
public class UserService {
private readonly IUserRepository _repository; // 依賴
// 在建構子中進行注入
public UserService(IUserRepository repository) {
_repository = repository;
}
public User GetUserDetails(int id) {
return _repository.GetById(id);
}
}
// 單例模式的實例
public class DatabaseConnection {
private static DatabaseConnection _instance;
private DatabaseConnection() { } // 私有建構子
public static DatabaseConnection Instance {
get {
if (_instance == null) {
_instance = new DatabaseConnection();
}
return _instance; // 總是返回相同的實例
}
}
}
成為工程師時無法避免的專業術語。並行處理、非同步處理、資料庫設計等,理解系統深層部分所需的一些較難英單字。
| 英單字 | 片假名讀音 | 意義 | 備註 |
|---|---|---|---|
| hierarchy | ヒエラルキー | 階層結構 | 如 class 或 UI 階層 |
| asynchronous | アシンクロナス | 非同步 | async / await |
| synchronous | シンクロナス | 同步的 | 處理的順序固定 |
| concurrent | コンカレント | 並行的 | 用於線程處理 |
| thread | スレッド | 並行處理單位 | Thread.Start() |
| mutex | ミューテックス | 互斥 | Mutex.Lock() |
| lock | ロック | 排他控制 | lock(obj) |
| volatile | ヴォラタイル | 變動的 | C# 變數修飾子 |
| immutable | イミュータブル | 不可變的 | const, readonly |
| mutable | ミュータブル | 可變的 | 一般變數 |
| opaque | オペーク | 不透明的 | 意思是“無法透視的” |
| schema | スキーマ | 結構定義 | 常用於 DB 或 XML |
| polymorphism | ポリモーフィズム | 多態性 | 物件導向的核心 |
| instantiate | インスタンシエイト | 實體化 | new User() |
| initialize | イニシャライズ | 初始化 | Init() |
concurrent 是「同時運行」volatile 是「揮發性(容易變動)」polymorphism 是 "poly(多樣)" + "morph(形狀)" → 多樣的形狀=多態性immutable 是 "im(否定)" + "mutable(可變)" → 不可變// immutable 和 mutable 的差異
public class ImmutablePoint {
private final int x; // immutable(不可變)
private final int y;
public ImmutablePoint(int x, int y) {
this.x = x;
this.y = y;
}
// 返回一個新的實例(不改變原有物件)
public ImmutablePoint move(int dx, int dy) {
return new ImmutablePoint(x + dx, y + dy);
}
}
// 多態性的實例
interface Shape {
double calculateArea();
}
class Circle implements Shape {
private double radius;
public double calculateArea() {
return Math.PI * radius * radius;
}
}
class Rectangle implements Shape {
private double width, height;
public double calculateArea() {
return width * height;
}
}
// 使用相同介面但實作不同
Shape shape1 = new Circle();
Shape shape2 = new Rectangle();
double area1 = shape1.calculateArea(); // 計算圓的面積
double area2 = shape2.calculateArea(); // 計算矩形的面積
這是一些相似但意義不同的工程師常混淆的單字對。
| 易混對比 | 正確的區分 |
|---|---|
| initialize vs instantiate | initialize = 初始化(設置值)<br>instantiate = 實體化(使用 new 創造物件) |
| parameter vs argument | parameter = 假參數(函數定義側)<br>argument = 實參數(函數調用側) |
| authentication vs authorization | authentication = 認證(確認身份)<br>authorization = 授權(確認可做之事) |
| synchronous vs asynchronous | synchronous = 同步(順序處理)<br>asynchronous = 非同步(不需等待的處理) |
| compile vs build | compile = 編譯(源碼到物件碼)<br>build = 建置(編譯 + 連結 + 封裝) |
| method vs function | method = 方法(屬於類別的函數)<br>function = 函數(獨立的處理單位) |
| library vs framework | library = 庫(被調用使用)<br>framework = 框架(反轉控制,遵循框架結構) |
// parameter(假參數)和 argument(實參數)的差異
function greet(name) { // 'name' 是 parameter(假參數)
console.log(`Hello, ${name}!`);
}
greet("Alice"); // "Alice" 是 argument(實參數)
// initialize 和 instantiate 的差異
class User {
constructor(name) {
this.name = name;
this.age = 0;
}
initialize(age, email) {
this.age = age; // initialize: 設值
this.email = email;
}
}
const user = new User("Bob"); // instantiate: 實體化
user.initialize(25, "[email protected]"); // initialize: 初始設值
實際代碼由英語動詞和名詞構成的故事。掌握英語的語感,你會自然理解程式碼的意圖。
try {
var repo = new UserRepository();
repo.Initialize();
var users = await repo.FetchAsync();
} catch (Exception ex) {
Logger.Handle(ex);
} finally {
Console.WriteLine("Done.");
}
「用戶儲存庫被實體化(instantiate),
進行初始化(initialize),
並以非同步方式獲取(fetch asynchronously)用戶,
若失敗則處理(handle),
最後顯示完成。」
※程式碼就像是英語動詞與名詞共同編織的故事。
閱讀下面的代碼,看看能不能通過單字的意義來解釋其功能。
def validate_and_sanitize(input_data):
if not validate(input_data):
return None
return sanitize(input_data)
<details>
<summary>查看答案</summary>
「檢查輸入數據的有效性,若無效則返回 None,有效則返回經過無害化處理的數據」
【關鍵字】
class EventEmitter {
constructor() {
this.listeners = {};
}
subscribe(event, callback) {
if (!this.listeners[event]) {
this.listeners[event] = [];
}
this.listeners[event].push(callback);
}
emit(event, data) {
if (this.listeners[event]) {
this.listeners[event].forEach(callback => callback(data));
}
}
}
<details>
<summary>查看答案</summary>
「事件發射器類,其中訂閱(subscribe)方法用於註冊事件和回調,發射(emit)方法用於執行所有註冊的回調」
【關鍵字】
public class Repository<T> where T : class {
private readonly DbContext _context;
public async Task<T> GetByIdAsync(int id) {
return await _context.Set<T>().FindAsync(id);
}
public async Task<IEnumerable<T>> GetAllAsync() {
return await _context.Set<T>().ToListAsync();
}
public async Task CommitAsync() {
await _context.SaveChangesAsync();
}
}
<details>
<summary>查看答案</summary>
「通過使用泛型倉庫(repository)模式提供功能,能夠非同步(asynchronously)獲取實體根據 ID、獲取所有實體、並進行變更的提交(commit)」
【關鍵字】
<T>部分)| 類別 | 英單字例 | 感覺上的意義 |
|---|---|---|
| 條件和控制 | if / else / yield / await | 條件/中斷/生成/等待 |
| 物件導向 | abstract / override / implement | 抽象/覆蓋/實作 |
| 數據處理 | serialize / parse / fetch | 直列化/解析/獲取 |
| 通信 | request / payload / token | 請求/實體/認證 |
| 設計 | repository / delegate / dependency | 儲存/委託/依賴 |
| 高級概念 | asynchronous / concurrent / polymorphism | 非同步/並行/多態性 |
程式碼閱讀,從掌握英單字的語感開始。
對於工程師來說,英語是一種「如同母語的工具」,而不是「外語」。
不要讓不會的單字成為阻礙,將其意義、語源和用法學會一兩個,就可以"了解程式碼想做什麼"。
記住英單字是理解程式碼的最短路徑!
這麼說或許會讓一些「我不擅長英語」的人感到困惑,但其實「程式設計中使用的英語並沒有你想的那麼多!」更不必強求你必須全部都懂,及時查找也是可以的。只要把經常出現的單字記住,理解度就能有顯著提升!
特別是在 AI 時代,迅速理解 ChatGPT 或 Copilot 生成的程式碼,並能適當把握與修正(同義於請求 AI)是越來越重要的。學會本文中的單字,或許會略微提高你的代碼閱讀能力...?
※本文是基於作者的個人經驗與解釋而成。
「原來還有這種想法啊」的心情來閱讀即可。
※也非常歡迎編輯請求!!
原文出處:https://qiita.com/Sakai_path/items/b11badaa8daff2984f8d