zetavg/zh-tw-wikipedia huggingface dataset:
程序入口点

在電腦編程中，**入口點**是在程式中執行第一條指令的地方，和程式存取命令列參數的地方。要開始一個程式的執行，裝載器或作業系統會將控制權傳遞到它的入口點。（在引導期間，作業系統自身就是這個程式）。這標誌著從裝載時（和動態連接時，如果存在的話）到執行時的轉變。

對於某些作業系統和程式語言，入口點是執行時庫，它是一組對語言的支援函式。庫代碼初始化程式並且接著把控制權傳遞給程式本身。在其他情況下，程式自身可以初始化執行時庫。在簡單的系統中，執行開始於第一條語句，這常見於直譯語言，簡單的可執行格式，和引導裝載器中。在其他情況下，入口點是在某個其他已知記憶體位址，這可以是絕對位址或相對位址（偏移量）。

可作為替代選擇，程式的執行可以開始於命名點，要麼是程式語言或作業系統定義的約定名字，要麼是呼叫者指定的名字。在很多 C 家族語言中，這是叫做 `main` 的函式；作為結果，入口點經常叫做**主函式**。在 JVM 語言比如 Java 中，入口點是叫做 `main` 的靜態方法；在 CLI 語言比如 C# 中，入口點是叫做 `Main` 的靜態方法。

## 用法

在現代的電腦體系中，CPU 下一次要執行的指令位址由一個暫存器指出，稱為「指令指標」（Instruction Pointer、IP）或「程式計數器」（Program Counter、PC）。該暫存器在系統上電或復位時由硬體電路置為某位址值，位於該位址的程式即可視為整個程式的入口點。這個概念一般只在嵌入式程式（韌體）或作業系統的引導代碼中使用，因為給非嵌入式系統寫的程式通常包含數量龐大的機器指令、以至於關注一兩個機器指令是沒有意義的。

而所謂的「可執行」，說白了就是這個檔案儲存了一些資訊、好創造某個讓程式可以開始執行的記憶體狀態，而作業系統裝載並建立行程的步驟就是把這個滿是機器指令的記憶體狀態復原出來並開始執行。因此，可執行檔中的「程式入口點」表示把載入進來的哪個位址當作「開始執行」的那一條指令。

## 程式語言

### C/C++

在 C 語言或 C++ 程式語言，`main` 的函式原型如下所示：

`main` 的兩個環境參數：`argc`（_argument count_）與 `argv`（_argument vector_），兩者個別自程式的指令列給予參數的數量與參數陣列的指標位址。`argc` 與 `argv` 這兩個參數的名稱，在程式語言的命名規則底下，雖然可以依照使用者的喜好自行定義，但是一般在使用上，還是會以現有的名稱 `argc` 與 `argv` 來進行程式的編寫。其他具有相依平台的格式也可以被 C 與 C++ 標準所接受；例如，UNIX（非 POSIX.1）與 Microsoft Visual C++ 有第三個參數，是用來接收程式的環境變數，利用其他方法存取環境變數，可以使用 `stdlib.h` 標頭檔案定義的 `getenv` 函式：

Mac OS X 與 Apple Darwin 有第四個參數，它含有作業系統支援性的資訊，例如執行二進制檔案的路徑：

由 `main` 傳給作業系統的傳回值，代表程式處理的結束狀態，在 C 的標準裡有定義兩個傳回值：`EXIT_SUCCESS`（通常是整數零 _0_ 值）與 `EXIT_FAILURE`。由於在實作上考量到各種的可能性，所以依照可能會發生的狀態來定義傳回值。

依照一般使用的規則，指令列參數的第一個元素就是程式檔案的名稱，假如程式檔案的名稱為 `rm.exe`，當使用者在指令列輸入 `rm file` 後，使用者介面的程式 shell 會初始化 `rm.exe` 處理程式，設定環境變數 `argc = 2` 以及 `argv = ["rm", "file"]`。

`main` 這個名稱是一個特有的名稱；正常來說，使用者在每個 C 與 C++ 程式自訂的函式名稱，必須不同於 `main` 這個名稱。

在 C++ 裡，`main` 一定是在全域的名稱空間內（例如：`::main`），它不可以是類別或是實體的成員函式。

由於前置處理器的關係，以下 `main` 函式原始碼可適用於 Microsoft Visual C++ 與 Dev-C++：

#### WinMain

以微軟視窗為基礎的程式設計上，`WinMain` 函式是視窗程式的進入點，函式原型如下所示：

### .Net 語言（C#、VB 等）

以 C# 編寫的程式，在開始執行時 CLR 會先去尋找帶有 `.entrypoint` IL 標示的靜態方法，而這個靜態方法可能沒有參數，或是只有單一 `string[]` 型態的參數，而且還有 `void` 或是 `int` 型態的傳回值，找到後才會執行這個方法，而這個方法就是主函式。

指令列參數會被引入到 `args` 變數內，引入的方式與 Java 相類似。但是，針對有整數傳回值的 `Main` 而言，引入的方式類似 C/C++，而指令列參數會被當成處理程式的結束狀態，傳回給作業系統或是執行它的外部環境。

同為 .net 語言的 Visual Basic .NET 大體也是一樣。不過不同的是，舊版本 Visual Basic 的程式可以選擇在執行預設初始化步驟後以一個表單啟動，此時的主函式是不可見的；新版本為了相容性和簡化編碼工作而保留了這個特性。

### Java

Java 程式語言是以 main 方法來當做程式開始的起點，方法如下：

命令列指定參數是 _args_。如同 C 和 C++ 一樣，「main」也是唯一的。Java 的 main 方法無任何的傳回值。

### Pascal

Pascal 的主要程式是不需命名的。因為 Pascal 程式的程式和函式在編寫程式上比 C、C++ 或是 Java 更加嚴格，在程式裡主要程式通常才是最後的程式。Pascal 沒有 main 或是其他相類似的關鍵字。

以下是 Hello world 範例：

### Pike

Pike 與 C/C++ 的語法相類似。從 main 開始執行。「argc」代表環境參數的個數。「argv」代表環境參數的值。

舉例如下：

## 參見

* crt0，連接到 C 程式上的一組執行啟動常式。
* 執行時系統

## 參考資料

## 外部連結

* Python main () 函式 （頁面存檔備份，存於網際網路檔案館）
程序公正

**程序正義**（英語：Procedural justice；也稱**程序公正**，別稱「看得見的正義」）是指解決爭端和資源分配過程中的公平理念，且強調「過程」的重要性。程序正義所討論的常見問題是有關司法和法律程序管理的問題。這種程序正義有關正當法律程序（美國）、基本公正原則（加拿大）、程序公平（澳大利亞）和自然正義（其他普通法司法地區）。程序正義的理念也可用在法律之外，比如解決衝突、利益或責任分配等。

## 起源

程序正義這一理念在西方國家的出現與發展並非是偶然的現象，根據日本學者的解釋，程序正義誕生的原因有如下三個。在這三個因素的影響下，審判結果是否合理正確並不具有外在的客觀標準，但審判程序本身具備客觀性和真實性，審判結果就能被人們廣泛接受，合理性就得以顯現。

### 雙方辯論與陪審團的判決

當事人雙方在由普通市民組成的陪審團面前開始辯論對抗，勝負由陪審團判定。但是陪審團的裁斷只給結論，不提供理由，這使得判決結果的客觀性甚至真實性都無從考究，只能由程序的正確來間接地支持結果的正當性。

### 搜尋先例

法官根據在以往判決中相似案件的先例作出有關案件適用法律問題，但其前提是：在律師的協助下當事人能夠找到有利於自己的先例，並依靠辯論說服法庭採用找到的先例。

### 衡平法

衡平法使得法官在當事人因無法找到適當的法律根據卻提出了請求的情況，可用自由裁量對案件作出合適可靠的決定。

## 參考來源

## 參考書目

1. Tom R. Tyler, _Why People Obey the Law._ Yale University Press.（1990 年）
2. Robert Bone, _Agreeing to Fair Process: The Problem with Contractarian Theories of Procedural Fairness_, 83 Boston University Law Review 485（2003 年）.
3. Ronald Dworkin, _Principle, Policy, Procedure_ in _A Matter of Principle_（1985 年）.
4. Louis Kaplow, _The Value of Accuracy in Adjudication: An Economic Analysis_, 23 Journal of Legal Studies 307（1994 年）.
5. Bruce Hay, _Procedural Justice--Ex Ante vs. Ex Post_, 44 UCLA Law Review 1803（1997 年）.
6. John Rawls, _A Theory of Justice_（1971 年）.
7. Lawrence Solum, Procedural Justice （頁面存檔備份，存於網際網路檔案館）（2004 年）.
8. Soon Lay Khuan.（2007 年）. Organizational Justice as an Antecedent of Job Performance. International journal of business, 325-343.
9. Jeffre W. Kassing.（2008 年）. Disagreeing about what's Fair: Exploring the Relationship between Perceptions of Justice and Employee Dissent. Communication research reports, 34-43.
10. Victoria A. Cave.（2005 年）. Motivating The Factors: Perceptions of Justice and their Relationship with Managerial and Organizational Trust in Australia. Communication and mass media complete, 47-70.
程序分析

在計算機科學中，**程序分析**是指自動分析一個程序的包括正確性、健壯性、安全性和活躍性等特徵的過程。
程序分析主要研究兩大領域：程序的優化和程序的正確性。前者研究如何提升程序性能並且降低程序的資源占用，後者研究如何確保程序完成預期的任務。

程序分析可以在不執行程序的情況下進行（靜態程序分析），也可在執行時進行（動態程序分析），或結合二者。

## 靜態程序分析

在程序正確性里，靜態分析可以在程序的開發階段就發現漏洞。這些漏洞通常比測試階段發現的漏洞更容易修復，因為靜態分析可以直接發現漏洞的根源。

由於很多靜態分析其實無法確切地判定，因此實現靜態分析的機制不總返回正確的結果 —— 要麼是返回了一個假陰性（返回「沒有發現問題」然而程序其實存在問題）或者是返回了一個假陽性，要麼它們不返回錯誤的結果但是有時候不會終止。儘管它們或多或少地存在種種不足，然而前者可能幫助降低漏洞的數量，而後者則在一些時候可以明確確定程序不受某類漏洞的威脅。

不正確的優化是誰都不希望的，所以在程序優化里，有兩類策略來處理無法判定的分析情況：

1. 設計一個優化器時，如果認為它應該很快完成它的任務（例如編譯器里的優化器），那麼可以用一個削減過的分析算法來保證可以在一個有限的時間內完成，並且保證只做正確的優化。
2. 一個第三方的優化器可能會被設計為永遠不會輸出一個錯誤的優化，但是有時候可能在找到正確的優化前永遠都不會停下來（可能永遠也找不到）。這種時候，開發者可能需要關掉這一工具並且避免它再次在要優化的代碼上運行（或者也可以修改代碼來避免觸發這個工具）。

然而，還有第三種策略有時可以用於一些規範不夠完整的語言（比如 C 語言）。一個做優化的編譯器在遇到未定義行為時，可以自主選擇如何生成這部分代碼。生成的代碼可以在運行時做任何事情，甚至可以崩潰。

### 控制流

控制流分析的目的是獲取在程序執行時一些特定位置可能調用的函數的信息。這些信息由控制流圖（英語：control flow graph，簡稱 CFG）來表示，其中節點表示程序的指令，邊表示控制流。
通過識別代碼塊和循環，CFG 常常被編譯器當作優化的起始點。

### 數據流分析

數據流分析收集程序運行到不同位置時各個值的信息和它們隨時間變化的信息。這一技巧也常被編譯器用來優化代碼。
一個有名的數據流分析的例子叫做污點檢驗，它考慮所有的可能被使用者修改的變量（也就是有「污點」、不安全的變量），並阻止這些變量在被「消毒」前被使用。這一技巧常被用來避免 SQL 注入攻擊。污點檢驗既可以靜態完成也可以動態完成。

### 抽象釋義

抽象釋義允許在不執行程序時提取出某個可能的執行的信息。
這個信息可以讓編譯器尋找某條可行的優化路徑，也可以證明一個程序不會存在某些問題。

### 類型系統

類型系統給程序關聯上滿足特定條件的類型。類型系統的目的是選出一個程式語言編寫的程序的一個子集，使這個子集滿足特定的性質。

* 類型檢查 —— 驗證一個程序是否被類型系統接受

類型檢查被用來限制程序中一個對象如何被使用以及一個對象能做什麼。類型檢查是由編譯器或解釋器完成的。類型檢查也可以幫助避免如將有符號變量賦值給無符號變量所帶來的漏洞。
類型檢查可以靜態完成（在編譯期間），也可以動態完成（在運行時），或者結合二者。

靜態類型信息（可以通過類型推論，或者由代碼明確給出）也可以被用來做優化，例如把封包的數組替換為未封包的數組。

### 作用系統

作用系統是一類用來給出函數或方法的作用的形式化系統。一個作用（英文：effect）規定了做了什麼以及對誰做了 —— 通常稱之為作用類型（英文：effect kind）以及作用範圍（英文：region）。

### 模型檢查

模型檢查指一類嚴格、形式化並且自動的檢查一個_模型_（在這裡指一段代碼的形式化模型，但在其他語境下也可以指一個硬體的模型）是否符合給定規範的方法。基於代碼內在狀態有限這一特點，且規範和代碼都可以被轉換為邏輯公式，我們有能力用算法來檢查一個系統是否違反規範。

## 動態程序分析

動態程序分析可以用程序運行時的信息來提高分析的精度並且提供運行時保護，然而它只能分析單次運行的情況，並且可能因為進行運行時檢查而降低運行性能。

### 測試

每個軟體都應當被測試來確保其質量，保證其按照期望穩定運行，並且確保其不會與其他軟體衝突。測試一般通過運行程序並給定一組輸入然後來評估程序給出的輸出。
即使軟體沒有指定好的安全性要求，也應當對其進行額外的安全性測試從而保證攻擊者無法隨意修改軟體並盜取數據、妨礙軟體的正常工作或者用它當作攻擊其他用戶的跳板。

### 監控

程序監控會記錄程序的諸多信息（例如資源占用、事件、交互等），使之可以在之後被用來尋找或定位異常行為的原因。此外，它還可以被用來做安全審查。程序的自動監控有時也被稱為運行時檢查。

### 程序切片

對於一個給定的程序的行為的子集，程序切片將程序削減到保持給定行為的最小形式。被削減後的程序被稱之為一個「切片」，是原程序在給定行為子集上的一個正確表示。
通常而言，找到切片是一個無法解決的問題。但是通過給定一組變量的值的行為的子集，有可能通過數據流算法來找到大約符合條件的切片。這些切片通常被開發者用來調試從而找到錯誤的原因。

## 參考文獻

## 延伸閱讀

* Agrawal, Hiralal; Horgan, Joseph R. Dynamic program slicing.
* Chunlei, Wang; Gang, Zhao; Yiqi, Dai. An Efficient Control Flow Security Analysis Approach for Binary Executables.
* Nielson, Flemming; Nielson, Hanne Riis; Hankin, Chris. Principles of Program Analysis. Springer Science+Business Media. 2005.

## 參見

* 自動代碼審查
* 基於語言的安全性
* 性能分析
* 形式驗證

## 外部連結

* 維基共享資源上的相關多媒體資源：程序分析
程序動議

**程序動議**（Incidental motion）是一項議事程序，旨在改變處理主動議、其它動議案、表決方法或會議流程的方式，例如與會者可提出請求宣讀文件動議，要求會議秘書朗讀議案（或提出請免宣讀文件動議，要求會議秘書停止宣讀議案），也可提出分段考慮動議，要求分段審議某動議案。根據《羅伯特議事規則》，程序動議包括暫停議則動議、反對考慮動議、分開動議、分段考慮動議、表決方式動議等 11 項。大多數程序動議案均毋需討論。

## 參考文獻
程序化交易

**算法交易**（英語：Algorithmic trading），或程序化交易，或自動交易，是指運用自動化的電腦程式，或運用人工智慧，根據預設的算法，進行自動化的投資和買賣行為。一般而言，算法交易是指人們開發程式，自動根據指定的市場的技術資料和財務比率（例如市盈率、市帳率、移動平均線）等，自動由電腦操作買賣行為。

## 應用

目前，算法交易可以應用在自動根據市場及財務資料參與自動化買賣股票、期權、金融衍生工具、外匯、黃金、加密電子貨幣等交易。目前，運用自動化的算法或程序交易軟體進行自動化買賣，已經佔了股票及證券市場交易中相當大的比重。

## 參見

* 自動交易系統
* 高頻交易
* 人工智慧
* OU 過程

## 參考
程序化程式設計

**程序式程式設計**（英語：Procedural programming），又稱程序化程式設計，一種程式設計典範，衍生自指令式程式設計，有時會被視為是同義語。主要要採取過程呼叫或函式呼叫的方式來進行流程控制。流程則由包涵一系列運算步驟的過程（Procedures），常式（routines），子程序（subroutines）, 方法（methods），或函式（functions）來控制。在程序執行的任何一個時間點，都可以呼叫某個特定的程序。任何一個特定的程序，也能被任意一個程序或是它自己本身呼叫。

最初的主要程序式程式語言出現在大約 1957 年至 1964 年，包括 Fortran、ALGOL、COBOL、PL/I 和 BASIC，後來的 Pascal 和 C 發表於大約 1970 年至 1972 年。

## 參照
程序化细胞死亡

**細胞凋亡**（英語：apoptosis，源自希臘語：απόπτωσις，有「墮落、死亡」之意），為一種細胞計畫性死亡。相對於細胞壞死（necrosis），細胞凋亡是細胞主動實施的。細胞凋亡一般由生理或病理性因素引起。而細胞壞死則主要為缺氧造成，兩者可以很容易通過觀察區分開來。在細胞凋亡過程中，細胞縮小，DNA 被核酸內切酶降解成 180bp-200bp 片段屬於有層次之斷裂（可以通過凝膠電泳證明），而細胞壞死時，細胞腫脹，細胞膜被破壞，通透性改變。胞器散落到細胞間質，需要巨噬細胞去清除，結果是該局部組織發炎。相比起細胞壞死，細胞凋亡是更常見的細胞死亡形式。

細胞凋亡受到抑凋亡因子和促凋亡因子的調控。

## 出現

細胞凋亡是動物發育過程中的必經之路，已知的例子有：

* 從蝌蚪到蛙的變態發育
* 昆蟲的蛻變
* 高等哺乳動物指間蹼的消失，如人體胚胎發育中，胚胎長到第 5 周時出現扁盤狀的肢體萌芽，手指和腳趾之間的蹼消失，四肢才能順利形成其最終形態。
* 眼睛中玻璃體和水晶體的細胞死亡，是眼睛對光通透重要的一步。

就算在成熟的個體中，細胞凋亡也是必不可少的：

* 細胞數目和組織大小的控制
* 組織的更新（如鼻的嗅表皮、皮膚表皮細胞的更替）
* 免疫系統對喪失功能的或是有潛在危險的細胞進行選擇和清除，如自然殺手細胞（NK）對癌細胞的非專一性胞殺作用。
* 清除壞變的細胞
* 賦予中樞神經系統可塑性。研究人員嘗試在胚胎期活化小鼠的 bcl-2 基因。該基因會阻止神經細胞的細胞凋亡過程。出生的小鼠腦部神經元數量因此比正常的小鼠多，容積變大。但在測試中顯得比正常小鼠遲鈍。
* 對生殖細胞進行選擇（大約 95% 的生殖細胞會在其成熟之前通過細胞凋亡被清除）

目前在細胞凋亡與癌症發生和各種自體免疫性疾病之間的關係有著很多研究。人們希望激發癌細胞的細胞凋亡，以達到消弭癌症的目的。另有為了維持人類大腦的體積，使細胞凋亡的基因在人類身上受到了抑制的說法。

細胞凋亡在神經退化性疾病中所扮演的角色（如阿茲海默氏症（失智症的類型之一）、亨丁頓舞蹈症（Huntington's disease）、帕金森病（Parkinson's Disease）、肌肉萎縮性側索硬化症（ALS），是目前熱門的研究話題，人們在這個領域也進行著很多研究。

## 過程細節

細胞凋亡過程可分為兩階段：開始階段和效應階段。在開始階段又可分為兩個途徑：外始式和內始式。

**外始式途徑**：

外始式途徑是通過 TNF 受體家族（如 CD95）的受體與配體結合開始的。這些配體有癌症壞死因子（TNF），和其他細胞因子，後者可以由如 T 淋巴球分泌。
在 FADD（Fas 偶聯死亡區域蛋白 Fas-associated death domain protein）的協助下，受體不斷在細胞質中收集半胱天冬酶原 8（Procaspase 8）。後者通過高密度自催化活化自身。活化的半胱天冬酶 8（Caspase 8）將會引發所謂的 Caspase 級聯反應。 

因此在愛滋病人體內，很多未受感染的白血球也會凋亡：人類免疫缺乏病毒通過 Nef 蛋白質激發未受感染的防禦細胞的計畫性死亡。抑制劑鹽酸法舒地爾可以阻斷這一機制。

**內始式途徑**：

內始式途徑始於腫瘤抑制基因如 p53，一個轉錄因子，它會受 DNA 損傷激發。P53 能刺激 Bcl-2 家族中於細胞凋亡前起作用的成員（如 Bax, Bad）的表現。這將導致粒線體內外膜間的物質釋放，如細胞色素 C 和 Smac/DIABLO，它們都是作用於細胞凋亡前的物質。細胞色素 C 和胞質中的 Apaf-1 以及 Procaspase 9 共同組成所謂的凋亡體，其實就是 Caspase 9 的活化形式。它和 Caspase 8 一樣引起 Caspase 級聯反應。

**Caspase 級聯反應和效應 caspase**：

所謂的效應 caspase, 指的是 Caspase 3, 6 和 7 這些能引起細胞的計畫性死亡的蛋白酶。一方面它們通過有限的蛋白質水解酶活化下游的目標蛋白（如 Caspase 活化的去氧核糖核酸酶，CAD, 或是其他的 Caspase）。另一方面它們參與核纖肽（在細胞膜上）和肌動蛋白（細胞骨架的成分）的分解過程。
另一方面，DNA 的修復會為 caspase 介導的阻抗反應而受到抑制。

最後細胞慢慢地縮小為一小顆粒，並且為鄰近具有吞噬能力的細胞所吞噬（胞葬作用）。相對於細胞壞死，細胞膜在凋亡過程中保持完整。

細胞色素 C 從粒線體中溢出到細胞質，這是細胞凋亡的標誌之一。這在外始式途徑中是在凋亡過程後期才出現的，這裡它反而是凋亡的結果，而不再是在內始式途徑中所擔任的激發者的角色了。細胞物質內，細胞凋亡信號的傳播速度約每分鐘 30 微米。

在外始式途徑中，又分為主動（由受體的活化開始）和被動（由生長因子，如神經營養素的排出引起）兩種形式。

最重要的抑制細胞凋亡蛋白質有：Bcl-2 家族中的抗細胞凋亡成員（Bcl-2 和 Bcl-xL），蛋白激酶 B 和 Trk 受體家族（參看神經營養素）還有 IAP 蛋白（inhibitor-of-apoptosis protein）。

## 組織中細胞凋亡過程

## 獲諾貝爾獎的相關研究

科學家雪梨・布倫納（英國）、H・羅伯特・霍維茨（美國）和約翰・E・蘇爾斯頓（英國）在 2002 年因其研究發現對器官發育和計畫性細胞死亡的基因調控所作的貢獻而獲得了諾貝爾醫學獎。

## 參見

* 細胞計畫性死亡
* 自體吞噬
* 順鉑
* 細胞毒性
* 免疫學
* 細胞壞死 (Necrosis)
* p53 腫瘤抑制蛋白
* 細胞焦亡

## 參考文獻

### 引用

### 來源

## 外部連結

* Nobelpreis für Medizin und Physiologie 2002 （頁面存檔備份，存於網際網路檔案館）
* Lawen, A. (2003): Apoptosis – an introduction. _BioEssays_ **25**, 888-896. [1]
* 細胞凋亡的分子機理 （頁面存檔備份，存於網際網路檔案館）
* 綜述：細胞凋亡 （頁面存檔備份，存於網際網路檔案館）
* caspase 蛋白酶家族
程序员_(杂志)

《**程式設計師**》，2000 年創刊。是當時中華人民共和國首部針對開發人員的專業技術權威刊物。

2015 年，《程式設計師》雜誌休刊。

## 參考資料
程序员日

**程式設計師節**是一個國際上被眾多科技公司和軟體企業認同的業內人士節日。日期是在每年的第 256（十六進位為 0x100，或 28）天，也就是平年的 9 月 13 日或閏年的 9 月 12 日。它是俄羅斯的一個官方節日，其他國家的程式設計師社群也慶祝這個節日。之所以選擇 256（28），是因為它是一個被程式設計師們所熟知的 8 位元基數。用 1 個位元組（等於 8 位元）最多能表示 256 個數值，而且在平年中，256 是 2 的最大冪中小於 365 的值。

與此同時，在中國人們主要認同 10 月 24 日（2 的 10 次方，210=1024）才是程式設計師日。因為 1024=1k，是二進位的程式世界和十進位的現實世界之間的一個介面，在統計資料流量和儲存空間時，1024 和 1000 經常不作區分。此外，對 1024 這個數字的認同也有來自著名的宅文化社群草榴的影響。

也有人提出將 10 月 10 日作為程式設計師日，因為在電腦世界中，檔案都是由 1 和 0 這兩個二進位數字組成的。

## 習俗與慶祝

白色被選為程式設計師節的主題色。在紅綠藍 24 位元深（RGB）顏色空間裡，每種原色可以有 256 種級別（從 0 到 255 一共 256 個數值）的深淺變化，當三種原色都達到最大深淺值，即為十六進位的 0xFFFFFF 時，表示白色。所以全世界的程式設計師們會穿著白色來慶祝這一天。

## 歷史

設立這個節日要歸功於瓦倫丁・巴爾特（Valentin Balt），並列技術網頁設計公司（Parallel Technologies web design company）的一名職員，2002 年，他收集簽章向俄羅斯聯邦政府請願，請求將這一天定為程式設計師節。

2009 年 7 月 24 日，俄羅斯聯邦通信與大眾傳媒部提出了新的節日安排方案，設立程式設計師節。。9 月 11 日，俄羅斯總統梅德韋傑夫簽署了這個法案。

## 參見

* 世界資訊社會日
* 感謝系統管理員日
* 俄羅斯公眾假日
* 秘書節

## 注釋

## 外部連結

* 在程式設計師節那天
程序员美德

**拉里・沃爾**（英語：Larry Wall，1954 年 9 月 27 日 —），生於美國加州洛杉磯，是程式設計師、系統管理員、語言學家和作家。他最為人知的地方，是他設計的程式語言 Perl。

## 教育

沃爾在洛杉磯南部成長，然後去布雷默頓，後來 1976 年時去西雅圖太平洋大學開始高級教育，專業是化學和音樂。後來學習醫學，又學習自然語言和人造語言。學士畢業前在大學裡的電腦中心工作了幾年。

在加州大學伯克利分校的研究生院里，沃爾和他的妻子學習語言學，為了找一個沒有文字的語言，可能是非洲語言，並給它創造一套書寫系統。他們然後他們會使用這個新的書寫系統將不同的文章翻譯為這種語言，包括聖經。由於身體原因這些計劃被取消。畢業後他們住在美國，拉里加入了美國國家航空暨太空總署噴氣推進實驗室。

## 貢獻

沃爾是 rn 新聞群組客戶端 和廣泛使用的 patch 程式的作者。他兩次在國際 C 語言混亂代碼大賽中獲勝，也是 1998 年自由軟體基金會自由軟體提升獎獲得者。

超出他的技術技能，沃爾聰明而且幽默。他在源碼的注釋里與 Usenet 中展示幽默。例如：「我們都同意妥協很重要。但是當妥協真地重要時，就開始不同意了。」 以及：

> 例如，看一看《聖經》的翻譯集，你將會發現一個規律：新英語聖經，新美國標準聖經，和新國際版，還有一些。這太好笑了。我懷疑我們一百年之後還會叫它們作「新的這個」和「新的那個」。你知道新學院什麼時候創建的？猜下？新學院在 1379 年是新的。
> 
> 

沃爾在優利工作時開發了 Perl 和直譯器。他是《Programming Perl》（經常被稱作《駱駝書》，由奧萊理發布）的共同作者。他然後被奧萊理招聘來更好地開發 Perl 與寫關於 Perl 的書。

沃爾的語言學教育體現在他的書，面試和演講中。他經常把 Perl 和一個自然語言作比較，解釋他的 Perl 的語言學的理論的設計。他也經常使用語言學說明 Perl 語言的架構，所以對於傳統的名稱，像「變量」，「函數」和「存取器」，他有時說成「名詞」，「動詞」和「主題」。

沃爾對基督教的忠誠影響了一些 Perl 的術語，例如這個名字本身，是來源於聖經的「pearl of great price（高價的珍珠）」。類似的還有函數名「bless（保佑）」，和 Perl 6 的組織設計文件有類別如「apocalypse（啟示）」和「exegesis（注釋）」。沃爾也在會議上暗示他的忠誠，包括 1997 年 8 月的 Perl 會議上一個相當直接的表述，和 2000 年 6 月在 YAPC（另一個 Perl 會議，Yet Another Perl Conference）對《天路歷程》的討論。

沃爾繼續預見 Perl 的更遠開發，像終身仁慈獨裁者 一樣為 Perl 項目服務。他在 Perl 里的工作最好以如下兩句解釋。來自 Perl 官方文檔：

1. 拉里對 Perl 如何表現的定義總是對的。這說明他對核心功能有最終否決權。
2. 拉里可以日後可以改變對任何東西的看法，不論他以前是否使用了規則 1。

　
: : 懂了麼？拉里總是對的，即使當他原來是錯的。

## 程式設計師美德

在《Programming Perl》（《駱駝書》）第二版中，沃爾（和共同作者 Randal L. Schwartz 與 Tom Christiansen）寫出了「程式設計師的 3 個美德」：

1. **懶惰** – 這個品質使你盡最大的努力去減少總的精力消耗。這讓你寫出節省勞動力的程式，而且別人會找到有用的地方，和你寫的文檔。所以你不需要回答關於該軟體的很多問題。因此是程式設計師的第一個美德。參見不耐煩和驕傲。
2. **不耐煩** – 當電腦懶惰的時候你感覺生氣。這讓你寫出不僅反映你的需求，而實際上預先使用它們。或者至少假裝。所以是程式設計師的第二個美德。參見懶惰和驕傲。
3. **驕傲** – 極度驕傲，宙斯快速推動你想要的那種東西。同時這個品質讓你寫（和維護）別人支持的程式。所以是程式設計師的第三個美德。參見懶惰和不耐煩。

## 參見

* 計算機科學家列表
* 程式設計師列表
* Perl
* Perl 6
* 自由軟體
* 開放原始碼

## 參考

## 外部連結

* 拉里・沃爾的個人主頁
* http://www.softpanorama.org/People/Wall/index.shtml （頁面存檔備份，存於網際網路檔案館）
* 拉里・沃爾語錄 （頁面存檔備份，存於網際網路檔案館）
* 《Perl，第一個超現代的語言》 （頁面存檔備份，存於網際網路檔案館）
* 自由軟體鑄造場計畫網站：源碼報報：Larry Wall 與 Perl
程序员那么可爱

《**程序員那麼可愛**》（英語：_Cute Programmer_）是根據由天翼愛動漫文化傳媒有限公司和元氣工廠聯合出品漫畫《程序媛哪有這麼可愛》改編的網絡劇，由企鵝影視出品，華晨美創承制，並由導演吳強著手執導，邢昭林、祝緒丹領銜主演，易大千、田依桐、關芯、盛朗熙、駿聲等人聯合主演，龐瀚辰友情出演的都市浪漫愛情劇。該劇於 2020 年 8 月 26 日在無錫開機，並於同年 11 月 4 日在重慶殺青。2021 年 9 月 4 日發布定檔海報，並於 2021 年 9 月 10 日在騰訊視頻首播，每周五六日 20 點更新 2 集。

## 劇情簡介

陸漓（祝緒丹飾）是女程式設計師。為了追求理想而投身編程領域，她憑藉自身經歷及過人的智慧搞定學長姜逸城（邢昭林飾），擺平他無數次的相親後，成功進入異承公司，勇闖 IT 世界。倆人因程序代碼結緣，後在機緣巧合下成為同居的室友。性格迥異的他們在同居相處中鬥智鬥勇情況下，是否會意外觸發心動的代碼？

## 播出時間

## 演員列表

### 領銜主演

### 主要演員

### 友情出演

## 電視劇原聲帶

### 中國大陸

## 參考文獻

## 外部連結

* 程序員那麼可愛的新浪微博
* 豆瓣電影上《程序員那麼可愛》的資料 （簡體中文）
程序坞

**Dock** 是圖形化使用者介面中用於啟動、切換執行中的應用程式的一種功能介面。Dock 是蘋果公司 Mac OS X 作業系統，及其始祖 NeXTSTEP 和 OPENSTEP 作業系統中重要組成部分。在 Newton OS 中也有 Dock 概念的一些早期例子。現在在不同作業系統中有很多不同的 Dock 程式。

## 歷史

在 NeXTSTEP 和 OPENSTEP 作業系統中，Dock 主要功能是應用程式的啟動器，使用者可以在裡面放置常用程式的圖示，而系統的 Workspace Manager（工作區管理器）和 Recycler（資源回收筒）則是一直顯示的。Dock 通過圖示下部的省略號可以顯示程式當前是否正在執行：通常狀態下圖示是帶有省略號的，如果程式正在執行則省略號消失。（注意和 Mac OS X 中 dock 的不同：MacOS X 中通常狀態下沒有附加顯示，而當執行時候會有三角形或指示燈顯示）

## 蘋果電腦和 Mac OS X

儘管如此，在 Mac OS X 中 Dock 可用來存放作業系統中任意的程式和檔案，而且存放數目不受限制，可以動態更改大小，並在滑鼠靠近時自動放大。在預設狀態下它位於螢幕底部，但使用者可以更改設定將其移到螢幕的左邊或者右邊。沒有被加入 dock 的程式，在執行的時候，其圖示會在 dock 中被顯示出來，並在程式登出之後消失。

這些功能和 NeXT 作業系統中的 dock 不同，因為 Dock 容量受到螢幕解析度限制。Dock 的這些變化使其在功能上接近於蘋果公司的 Newton OS MessagePad 2x00 系列的 _Button Bar_，應用程式可以從 Extras Drawer（一個類似於 Finder 的程式）中拖進或拖出。而且和 Mac OS X 一樣，當螢幕進入橫放狀態時，使用者可以可以選擇將 Button Bar 改到左側或者右側。

### 圖示

Mac OS X 的 Dock 一般分成左右（上下）兩個區域。

左（上）邊用於放置程式圖示，預設狀態下 Finder 圖示始終出現。使用者可以將程式圖示拖入 dock 即完成放置操作，將已有的圖示拖到 dock 以外的桌面區域即刪除圖示。

右（下）邊用於放置「廢紙簍」，在預設狀態下圖示始終出現。使用者還可以將任意的檔案和資料夾放在裡面以便快速存取。Mac OS X v10.5 Leopard 系統中追加了資料夾的「堆疊」等功能。

兩個區域之間有分割線區別開。leopard 系統介面中進化為為類似公路車道的圖形。

### 選單

Mac OS X 的 Dock 有拓展選單，可以不用將程式彈出 dock 就進行一些操作。絕大多數應用程式包含簡單控制命令，如「登出」「在 dock 中保留」「從 dock 中去掉」等，而一些其他程式擁有更豐富的選項選單，如 iTunes 在 dock 中選單可以讓使用者進行許多播放操作。一些即時訊息軟體，如 MSN messenger，iChat 的 dock 控制選單中包含傳輸檔案、更改線上狀態等實用功能。

Dock 的拓展控制選單可以通過右鍵單擊圖示，或者 control + 左鍵，或者長按左鍵等多種方法調出。

## 其他作業系統

很多程式可以在視窗系統中類比 Mac OS X 的 dock，如 ObjectDock 和 RocketDock。早期的 Mac OS（版本 10.0 之前）並沒有 dock，但可以通過 A-dock 等工具追加。

在 Linux 和 BSD 系統中也有 dock 的運用，如 Window Maker（類比 NeXTstep 系統介面）、GNOME 系統中的 Gnome Dock、Avant Window Navigator 以及 Cairo-Dock，KDE 用的 KXDocker 等。

在 Windows Vista 中引入了 Dockapp 的一種形式：Windows Sidebar。Windows 7 工作列則很類似老版本的 Dock。

## 注釋

## 參見

* 工作列
程序委員會

**立法院程序委員會**，為中華民國立法院下設一特種委員會，主要功能為審查立法委員之提案形式是否完備，並排定院會議程順序。所有議案進入院會一讀之前，都需於程序委員會進行討論並排定議案討論的順序。程序委員會的組成是依照各個黨團的席次比例所分配，但每一個黨團至少都會有一名委員。

## 業務職掌

一、負責檢查各種提案手續是否完備，內容是否符合立法院職權之審定。

二、負責議案的合併、分類及審議的次序排訂。

三、負責政府提案及立法委員提案討論時間的分配。

四、負責政黨質詢及立法委員個人質詢時間的分配。

五、負責立法院會議所交與議事程序有關問題的處理。

六、人民請願文書，形式審核、移送、函復及通知的處理。

## 委員名單

備註：**\***為當會期召集委員

備註：**\***為當會期召集委員

## 參見

* 立法院
* 議程阻絕

## 外部連結

* 立法院程序委員會 （頁面存檔備份，存於網際網路檔案館）（中文）
程序局部性原理

**參考區域性**（英語：Locality of reference）指的是在計算機科學領域中應用程式在訪問內存的時候，傾向於訪問內存中較為靠近的值。

參考區域性分為兩種基本形式，一種是時間區域性，另一種是空間區域性。時間區域性指的是，程序在運行時，最近剛剛被引用過的一個內存位置容易再次被引用，比如在調取一個函數的時候，前不久才調取過的本地參數容易再度被調取使用。空間區域性指的是，最近引用過的內存位置以及其周邊的內存位置容易再次被使用。空間區域性比較常見於循環中，比如在一個數列中，如果第 3 個元素在上一個循環中使用，則本次循環中極有可能會使用第 4 個元素。第三種為循序區域性。

區域性是出現在計算機系統中的一種可預測行為。系統的這種強參考區域性，可以被用來在處理器內核的指令流水線中進行性能優化，如緩存，內存預讀取以及分支預測。

## 參見

* 分區全局地址空間
程序库

**函式庫**（英語：**library**）是在電腦科學中用於開發軟體的子程式集合。函式庫和可執行檔的區別是：它不是獨立的電腦程式，而是向其他程式提供服務的代碼。

## 連結

函式庫連結（英語：**linking**）是指把一個或多個函式庫包括到程式中，有兩種連結形式：靜態連結和動態連結；相應的，前者連結的函式庫叫做靜態函式庫，後者的叫做動態函式庫。

### 靜態函式庫

靜態連結是由連結器在連結時將函式庫的內容加入到可執行程式中的做法。連結器是一個獨立程式，將一個或多個函式庫或目的檔（先前由編譯器或組譯器生成）連結到一塊，以生成可執行程式。

靜態連結的最大缺點是生成的可執行檔較大，需要更多的系統資源，在載入到記憶體時也會消耗更多的時間。優點是代碼執行效率高。

### 共享函式庫

### 動態函式庫

動態連結是在可執行檔裝載時或執行時，由作業系統的裝載程式載入函式庫。大多數作業系統將解析外部參照（比如函式庫）作為載入過程的一部分。在這些系統上，可執行檔包含一個叫做匯入目錄（import directory）的表，該表的每一項包含一個函式庫的名字。根據表中記錄的名字，裝載程式在硬碟上搜尋需要的函式庫，然後將其載入到記憶體中預先不確定的位置，之後根據載入函式庫後確定的函式庫的位址更新可執行程式。可執行程式根據更新後的函式庫資訊呼叫函式庫中的函式或參照函式庫中的資料。這種類型的動態載入稱為裝載（load-time）時載入，被包括 Windows 和 Linux 的大多數系統採用。裝載程式在載入應用軟體時要完成的最複雜的工作之一就是載入時連結。

其他作業系統可能在執行時解析參照。在這些系統上，可執行程式呼叫作業系統 API 將函式庫的名字、函式在函式庫中的編號和函式參數一同傳遞。作業系統負責立即解析然後代表應用呼叫合適的函式。這種動態連結叫做執行時連結。因為每個呼叫都會有系統開銷，執行時連結要慢得多，對應用的效能有負面影響。現代作業系統已經很少使用執行時連結。

可以動態連結的函式庫，在 Windows 上是 Dynamic Link Library（DLL），在 UNIX 或 Linux 上是 Shared Library。函式庫檔案是預先編譯連結好的可執行檔，儲存在電腦的硬碟上。大多數情況下，同一時間多個應用可以使用一個函式庫的同一份拷貝，作業系統不需要載入這個函式庫的多個實例。
程序式程式設計

**程序式程式設計**（英語：Procedural programming），又稱程序化程式設計，一種程式設計典範，衍生自指令式程式設計，有時會被視為是同義語。主要要採取過程呼叫或函式呼叫的方式來進行流程控制。流程則由包涵一系列運算步驟的過程（Procedures），常式（routines），子程序（subroutines）, 方法（methods），或函式（functions）來控制。在程序執行的任何一個時間點，都可以呼叫某個特定的程序。任何一個特定的程序，也能被任意一個程序或是它自己本身呼叫。

最初的主要程序式程式語言出現在大約 1957 年至 1964 年，包括 Fortran、ALGOL、COBOL、PL/I 和 BASIC，後來的 Pascal 和 C 發表於大約 1970 年至 1972 年。

## 參照
程序彩蛋

**彩蛋**（英語：Easter egg）是一個在電影、電視劇、書本、光碟、電腦程式或者電子遊戲的隱藏訊息或者功能。此名稱源於西方國家的尋找彩蛋遊戲。

## 電腦

在電腦領域，又稱作**程式彩蛋**，程式彩蛋通常是指製作者隱藏在產品中的、用於愉悅使用者的隱藏物。包括文字、圖片、聲音或者某些小變化。通常在使用者進行了某些特定的操作時出現。例如當使用者執行某些使用者手冊中沒有說明的隱藏命令、無意中的滑鼠或鍵盤操作。製作者的目的通常是向使用者展示製作人的某些資料或者完全為了取悅使用者。

### 例子

* 電子遊戲歷史上已知的第一款有彩蛋的遊戲，是 Starship 1。
* 電子遊戲歷史上第一個廣為人知的彩蛋，是 Atari 2600 的 Adventure 中的隱藏文字。
* 在 Google 的自 Android2.1 以後的手機作業系統中，點 3 至 4 下「OS 版本」，會出現特殊圖片，大部分是小遊戲。
* Google 公司的網站中有彩蛋（需要 Java 虛擬機器支援）。
* 在 Google 搜尋「ASCII 藝術」，搜尋結果頁面左上角的 Google logo 會以 ascii art 的樣式顯示。
* Debian 的 apt-get：輸入 apt-get moo 就會以 ASCII-Art 的方式顯示一頭牛。
* Unix 作業系統的一個比較著名的彩蛋就是隱藏的「make love」指令，輸入後將返回「not war?」的結果。兩句合起來是一句 1960 年代於美國流行的反戰文化口號：要做愛，不要作戰。
* 許多個人電腦的生產商通常在唯讀記憶體中隱藏了一些彩蛋，包括開發人員的名單、政治性訴求或者小組的相片。
* PHP：在 PHP 頁面位址的後面加上特殊的字串會出現 PHP 的標誌。PHP 版本的不同，標誌也會不一樣。這只是眾多 PHP 彩蛋的其中一個。
* 微軟公司的辦公產品 Microsoft Excel 2000 隱藏了一個賽車遊戲 Dev Hunter。
  * Windows 記事本：開啟記事本，輸入「聯通」二字後儲存、關閉，再重新開啟記事本。原來的「聯通」二字就會被兩個問號取代。原則上這只是一個編碼辨識錯誤 ，不完全是彩蛋。
  * 在 Microsoft Word 2003 中輸入「=rand ()」命令，再按 Enter 鍵，會出現 The quick brown fox jumps over the lazy dog；而 Office 2007 及更高版本則是「=rand.old ()」命令。另外，輸入「胡」字，選擇字型「隸書」或「幼圓」，使用空心格式會發現字型嵌入「胡萬進印」的小字。
* Palm 系統隱藏了一些動畫。
* Netscape Browser、Mozilla、Mozilla Firefox、Camino、Mozilla Thunderbird、Epiphany 瀏覽器的 Mozilla 之書。
* Mozilla Firefox 3.0 瀏覽器的 **about:robots**。
* 開啟 Adobe Dreamweaver，插入任意一張圖片。按住 Ctrl 鍵，在「屬性面板」中雙擊此圖的縮圖，縮略圖會變成一個個開發者的姓名和他們的自拍照或相片。
  * 開啟 Photoshop，按住 Ctrl 鍵，點擊「Help - About Photoshop」，可以發現關於介面不同。
  * 開啟 Flash CS6，打開「Help - About Flash」視窗，點擊上方 CS「6」中間圈圈的地方，會出現開發人員相片及射擊遊戲。
* 在土豆網的任意影片播放頁面中，打開 CapsLock 鍵入「上上下下左右左右 BA」會顯示「信土豆，死後原地復活，狀態全滿。MP+100%」的雷人網路流行語。
* Plurk 的中鍵入「上上下下左右左右 BA」時間軸主題會出現波浪狀的動畫。
* YouTube 影片或在快轉、回轉時，有時影片中間會出現一個轉圈圈的灰色小圓點表示處理影片資訊中，此時按下鍵盤的方向鍵「↑」或「↓」或「←」，小圓點即會另外被拉出來，直接在螢幕上玩貪食蛇。（現已失效）
* 檢視 Flickr 的網頁原始碼會出現相關的 Ascii 字元畫和招聘廣告。
* 美國的 Yahoo! 網頁中，點下 Yahoo! 的驚嘆號，會有 "Ya~~hoo~~" 的音效。
* 任天堂於 2017 年推出的遊戲機 Switch，以特定方式可以啟動隱藏在系統軟體內的紅白機遊戲《高爾夫》，遊戲可通過 Joy-Con 操控。不少媒體和玩家認為該彩蛋是為了向策劃任天堂 Switch 的已故前社長岩田聰致敬，他也是《高爾夫》唯一的程式設計師。但這個彩蛋已於系統軟體版本 4.1 版起被移除。
* 在 2018 年 12 月 25 日，前端框架 Ant Design 出現了一個基於聖誕節的彩蛋。按鈕上方會有積雪效果而且網站標題會加上「Ho Ho Ho!」的字樣。由於該段代碼深埋在原始碼內，故造成不少網站出現了不合場合的歡愉訊息並且導致不少前端工程師無法排除而失去工作。相關開發小組隨即在 GitHub 上致歉並緊急移除彩蛋。
* 檢視知乎的網頁原始碼會出現相關的 Ascii 字元畫和招聘廣告。
* 檢視百度的網頁原始碼會出現招聘廣告。
* 檢視支付寶的網頁原始碼會出現相關的 Ascii 字元畫和招聘廣告。
* 檢視 bilibili 的網頁原始碼會出現相關的 Ascii 字元畫，同時在鬼畜區網頁版長按返回頂部 10s 後可開啟通過輸入首字母自動播放鬼畜素材音訊的彩蛋。
* 檢視 Alphabet (abc.xyz/investor （頁面存檔備份，存於網際網路檔案館）) 的網頁原始碼，向下捲動，將有一個帶有三個字母塊的 Ascii 藝術。

## 註釋

## 參考

## 外部連結

* （英文）The Easter Egg Archive （頁面存檔備份，存於網際網路檔案館） - 彩蛋大全
程序性正当程序

**程序性正當程序**是美國的一個法律原則，要求政府官員在剝奪個人的生命、自由或財產之前遵循公平程序。 
當政府試圖剝奪個人的其中一項利益時，程序性正當程序至少要求政府向（權利）被剝奪方發出通知，提供聽證機會，以及需由中立判決者作出裁決。《美國憲法》第五修正案和第十四修正案的正當程序條款要求實施程序正當程序。

法官亨利・弗蘭德利撰寫的《某種聽證》一文列出了諸項基本正當程序權利，「在內容和相對優先權方面仍然具有很高的影響力」。

同等適用於民事訴訟和刑事訴訟程序的權利如下：

1. 公正的法庭
2. 關於擬議行動及其所主張理由的告之。
3. 提出不採取擬議行動的理由的機會。
4. 提供證據的權利，包括傳召證人的權利。
5. 獲知對己方不利證據的權利。
6. 盤問對己方不利的證人的權利。
7. 僅基於所提供證據而判決。
8. 律師代表的機會。
9. 法庭準備一份所提交證據的記錄。
10. 法庭應準備書面的事實調查結果和作出判決的理由

當政府試圖剝奪一個人的生命、自由或財產時，並非所有上述權利都得到保證。一個人得到通知，有機會得到聽證，並由中立的判決方作出裁決時才算得到正當性程序保護。法院使用各種各樣的測試來確定一個人是否也應該獲得除上述任何其他程序性權利外的（權利）保障。

## 參考資料
程序性死亡

**計畫性細胞死亡**是一種多細胞生物中的細胞由基因控制的自殺過程。它包括細胞凋亡和自噬等多種死亡方式。計畫性細胞死亡通過消除受損、衰老或不必要的細胞來控制細胞數量，維持細胞內環境穩定。

細胞計畫性死亡與細胞壞死不同。

## 計畫性細胞死亡類型

* 細胞凋亡 或 I 型細胞死亡
* 細胞自體吞噬 或 II 型細胞死亡
* 細胞計畫性壞死（如焦亡）
* 鐵死亡

## 整個器官的計畫性死亡

## 參見

* 胱天蛋白酶
* 凋亡複合體
* 細胞色素 c
* MLKL
* gasdermin
* metacaspase
* Fas
* 鐵蛋白

## 參考文獻

## 外部連結

* Apoptosis and Cell Death Labs
程序性知识

**過程性知識**（**Procedural Knowledge**）是關於「怎麼做」（How）的知識。

## 定義

**過程性知識**是有關「怎麼辦」的知識，不能直接陳述，只能通過某種作業形式間接推測其存在。例如加減運算。

## 類型

* 智慧技能。
  * 辨別
  * 具體概念
  * 定義性概念
  * 規則
  * 高級規則
* 認知策略。
* 動作技能中的認知成分。

## 心理過程

在學習**過程性知識**的第一個階段，是習得**過程性知識**的陳述性形式，新知識進入原有的命題網絡，與原有知識形成聯繫。 
第二階段，經過各種變式練習，使貯存於命題網絡中的陳述性知識轉化為以產生式系統表徵和貯存的程序性知識。 
第三階段，**過程性知識**依據線索被提取出來，解決 "怎麼辦" 的問題。 

與陳述性知識相比，**過程性知識**的習得速度較慢，但遺忘也較慢。

## 參見

* 陳述性知識
程序性记忆

**內隱記憶**（implicit memory），例如**程序記憶**（procedural memory），是一種長期記憶的形式。它是指關於技術、過程、或「如何做」的記憶。記憶有時候會被貯存在程序記憶（procedural memory）中，當一個人做了某一特定身體動作時，便觸發了這個記憶。

例如：當人學習過某些知識，卻無法回憶或再認時，這些知識的記憶依舊存在，只是以一種無意識的方式表現出來。心理學家用詞幹補筆任務和補筆任務（一個單詞缺幾個字母，讓被試填補成最先想到的單詞）發現了這種記憶。

## 證據

心理學家對遺忘症患者進行記憶測驗時，發現失憶症患者在自由回憶和再認任務的成績明顯要差於正常人。但在補筆任務 和詞干補筆任務的成績與正常人沒有差別。於是，心理學家推測有一種新概念的記憶形式 —— 內隱記憶，遺忘症患者只是在通常的外顯記憶上有缺陷，而他們的內隱記憶並沒有損傷。

同時心理學家在普通人的記憶測驗中也發現，自由回憶和再認任務的成績在幾天後的重測是下降很大，而補筆任務和詞干補筆任務的成績變化不大。心理學家推測，這是因為這一種新概念的記憶形式對於時間的影響並不敏感。

關於腦部特殊區域受損（如海馬回損傷）案例之研究指出，程序記憶和情節記憶是使用腦部的不同地方，且可以各自獨立運作的。對一個陳述性記憶正常、程序記憶受損的病患而言，他可能被反覆訓練一個任務或動作、並且記得先前的訓練的經歷，但在任務完成的速度或是程度上卻不會有改善的現象；若是程序記憶正常、陳述性記憶受損的人，情況剛好相反，他沒辦法想起之前做過的實驗內容，但實際表現上卻會一次比一次好。

小腦和基底核受損可能會影響程序記憶的學習。

以上的研究都證明了內隱記憶的存在。

## 特徵

內隱記憶和陳述性記憶是以不同的機制和不同的大腦迴路來處理的。內隱記憶通常較不容易改變，但可以在不自覺的情況下自動行使，其可以只是單純的反射動作，或是更複雜的一連串行為之組合（相較之下，陳述性記憶一般較容易以言語表達出來）。內隱記憶的例子包括學習騎腳踏車、打字、使用樂器或是游泳等。一旦內化，內隱記憶是可以非常持久的。

內隱記憶的特徵是在與外顯記憶的比較中表現出來的。內隱記憶在以下幾個方面與外顯記憶有明顯的差別。

1. 保持時間。在保持的時間上，內隱記憶要明顯的長於外顯記憶。

2. 干擾形式。內隱記憶不容易受外在刺激的干擾，而外顯記憶容易在干擾後遺忘。

3. 記憶負荷。外顯記憶在記憶的項目增多的時候會導致記憶數量和準確性的下降，而內隱記憶不受這種影響。

4. 加工深度。加工深度越深，外顯記憶越好。內隱記憶不存在這種情況。

5. 呈現形式。如果一個項目用聽覺的形式呈現，再用視覺的形式施測，被試的內隱記憶成績會下降。但外顯記憶不會出現這種情況。

## 種類

過去的理論認為內隱記憶只是一種單一的記憶。現在的腦科學發現，內隱記憶可能有不同的種類，在基底神經節、小腦、右側頂葉等腦結構中可能涉及了不同的內隱記憶任務。

一些認為存在知覺性內隱記憶和概念性內隱記憶。

## 爭議

關於內隱記憶是否存在，心理學界還有不同的意見，像 Roediger 提出了傳輸適當控制程序的觀點，認為並沒有內隱記憶這種不同的記憶形式存在。兩類記憶任務中出現的差異是由於加工方式和提取方式不匹配造成的。內隱記憶的任務要求由材料驅動的加工，而外顯記憶的任務要求的是意義驅動的加工。

## 相關連接

* 記憶
* 長期記憶

## 參考文獻
程序控制

**程序控制**是在工業系統中，為了控制過程的輸出，利用統計或工程上的方法處理過程的結構、運作方式或其演算方式。處理程序控制的系統可稱為**程序控制系統**。

## 舉例

例如利用加熱器調節房間的溫度即可視為一個過程，因為其目的是要使一輸出量（在此例中是溫度）到達一理想值內（例如 20 度），且此輸出量不隨時間變化。在此例中溫度是一個**控制變數**，不過若用溫度計量測溫度，決定是否加熱，溫度也同時是**輸入變數**，。理想的溫度（20 度）為**目標值**，加熱器的狀態（如加熱器控制熱水流量的閥門）會隨控制而改變，則是**受控變數**。程序控制的控制變數通常是溫度 T、壓力 P、流量 F、液位 L、成分 A、PH 值之等的過程變量。

常見的控制設備是可程式邏輯控制器，簡稱 PLC。PLC 讀取許多類比或數位的輸入，內部程式會根據輸入產生類比或數位的輸出。若以上一段的例子延伸，房間的溫度是 PLC 的輸入，內部程式會比較輸入變數及目標值的差異，再決定是否加熱量要增加或是減少。PLC 的輸出會用來改變加熱器閥門開啟的大小。更大（或更複雜）的系統可能會由分散式控制系統（Distributed Control System, DCS）或 SCADA 來加以控制。

## 實務上的分類

實務上，程序控制可以用以下的方式分類（不過，有些應用會同時用到以下幾類的程序控制）：

* 離散：在許多製造、運動或包裝應用中會用到離散的程序控制。如汽車生產中常見的機器手臂自動組裝，即為離散程序控制的例子。大部份這類的應用都是生產一個產品中個別的零件，如金屬衝壓成形。
* 批次：有些應用需要以特定的量，以特定的方式及時間混合原枓。像是製造膠水，一般需要在加熱的容器中混合原料一段時間。類似的例子包括食物、飲料或藥品。批次程序大約用在年產量從幾公斤到幾千噸的產業。
* 連續：一般一個物理系統可以由一些連續，不隨時間有劇烈變化的變數所表示。例如加熱器中的水溫控制即為一個連續程序控制的例子。像石油、化學品或塑膠的製造就屬於連續的程序控制。連續程序控制一般用在年產量從幾千噸到幾百萬噸的產業。

## 統計程序控制

統計程序控制（SPC）是一個可以用控制圖監控一個程序的有效方式。它特別之處是可以同時監控一個程序主要的輸出及其變動。藉著在程序中不同的點收集數據找到會影響品質的程序變異，設法加以檢測及修正，以減少不良品到客戶端的比率。統計程序控制強調早期檢測問題及問題的防範。

## 相關條目

* 自動控制
* 控制器
* 控制論
* 致動器
* 自動化
* PID 控制器
* 反饋
* 可編程邏輯控制器

## 參考資料

* The Michigan Chemical Engineering Process Dynamics and Controls Open Textbook
程序模擬

**程序模擬**（英語：process simulation）係用於技術程序（如化工廠、化學程序、環境系統、發電廠、複雜製造操作、生物程序以及類技術功能）的設計、開發、分析與優化等。

## 簡介

程序模擬是在軟體中基於模型來描述化學、物理、生物、其他技術程序與單元操作等。基本先決條件是針對純組分、混合物、化學反應的物理和化學性質以及可用於模擬計算的數學模型進行統整性的了解。

程序模擬軟體以程序流程圖描述化學程序，流程圖中標示各操作單元和物流流向。模擬軟體需求解質量和能量守恆以獲得穩定的操作條件。程序模擬的目標即尋找最佳的操作條件。本質上，這是一個以迭代求解的優化問題。

程序模擬依賴各類模型進行計算，模型引進近似值與假設，但允許描述大範圍溫度與壓力下的性質，而這些性質並未包含在實際數據之中。模型亦允許在一定範圍內進行內插與外插，並允許獲取已知屬性範圍之外的條件。

## 建模

## 歷史

## 穩態和動態程序模擬

早期程序模擬被運用於計算穩態程序。穩態模型描述一個靜態程序（處於平衡狀態）的質量和能量守衡。

動態模擬是穩態程序模擬的延伸，透過導數項將時間相關性置入模型中，如質量或能量累積等。動態模擬的出現意味著真實程序的即時時間相關描述、預測和控制已可被實現。動態模擬包含工廠啟動與停機以及反應、滯留量、熱變化等等狀態的變動。

動態模擬相較於穩態模擬，需要更長的計算時間以及更複雜的數學計算；可被視為一個重複多次且參數不斷變化的穩態模擬（基於一個固定的時間步長）。

動態模擬可以在線和離線兩種方式使用。

## 參見

* 高級模擬庫
* 電腦模擬
* 化學程序模擬器列表

## 參考資料
程序正义

**程序正義**（英語：Procedural justice；也稱**程序公正**，別稱「看得見的正義」）是指解決爭端和資源分配過程中的公平理念，且強調「過程」的重要性。程序正義所討論的常見問題是有關司法和法律程序管理的問題。這種程序正義有關正當法律程序（美國）、基本公正原則（加拿大）、程序公平（澳大利亞）和自然正義（其他普通法司法地區）。程序正義的理念也可用在法律之外，比如解決衝突、利益或責任分配等。

## 起源

程序正義這一理念在西方國家的出現與發展並非是偶然的現象，根據日本學者的解釋，程序正義誕生的原因有如下三個。在這三個因素的影響下，審判結果是否合理正確並不具有外在的客觀標準，但審判程序本身具備客觀性和真實性，審判結果就能被人們廣泛接受，合理性就得以顯現。

### 雙方辯論與陪審團的判決

當事人雙方在由普通市民組成的陪審團面前開始辯論對抗，勝負由陪審團判定。但是陪審團的裁斷只給結論，不提供理由，這使得判決結果的客觀性甚至真實性都無從考究，只能由程序的正確來間接地支持結果的正當性。

### 搜尋先例

法官根據在以往判決中相似案件的先例作出有關案件適用法律問題，但其前提是：在律師的協助下當事人能夠找到有利於自己的先例，並依靠辯論說服法庭採用找到的先例。

### 衡平法

衡平法使得法官在當事人因無法找到適當的法律根據卻提出了請求的情況，可用自由裁量對案件作出合適可靠的決定。

## 參考來源

## 參考書目

1. Tom R. Tyler, _Why People Obey the Law._ Yale University Press.（1990 年）
2. Robert Bone, _Agreeing to Fair Process: The Problem with Contractarian Theories of Procedural Fairness_, 83 Boston University Law Review 485（2003 年）.
3. Ronald Dworkin, _Principle, Policy, Procedure_ in _A Matter of Principle_（1985 年）.
4. Louis Kaplow, _The Value of Accuracy in Adjudication: An Economic Analysis_, 23 Journal of Legal Studies 307（1994 年）.
5. Bruce Hay, _Procedural Justice--Ex Ante vs. Ex Post_, 44 UCLA Law Review 1803（1997 年）.
6. John Rawls, _A Theory of Justice_（1971 年）.
7. Lawrence Solum, Procedural Justice （頁面存檔備份，存於網際網路檔案館）（2004 年）.
8. Soon Lay Khuan.（2007 年）. Organizational Justice as an Antecedent of Job Performance. International journal of business, 325-343.
9. Jeffre W. Kassing.（2008 年）. Disagreeing about what's Fair: Exploring the Relationship between Perceptions of Justice and Employee Dissent. Communication research reports, 34-43.
10. Victoria A. Cave.（2005 年）. Motivating The Factors: Perceptions of Justice and their Relationship with Managerial and Organizational Trust in Australia. Communication and mass media complete, 47-70.
程序民主

**程序民主**（英語：Procedural democracy）與實質民主相對，指稱實現民主過程的先後順序及其相關制度性規定，強調民主的機制、規則和程序。它主要是從政體的意義闡釋民主，旨在保證人民當家作主的實現。簡言之，程序民主就是使民主的實現制度化、法律化、規範化。

政治經濟學者約瑟夫・熊彼特在《資本主義、社會主義和民主》（英語：_Capitalism, Socialism, and Democracy_）一書中認為，「民主方法就是那種為作出政治決定而實行的制度安排，在這一制度安排中，某些人通過著爭取人民的選票取得作出政治決定的權力」。他認為，民主並非真的是人民當家作主，而僅僅意味著「人民有機會接受或拒絕要來統治他們的人」 ，意即「民主政治就是政治家的統治」。 這一觀點又被後人稱之為「民主的程序論」，熊彼特是程序民主理論集大成者。

程序民主用於表示產生選舉合法政府的特定程序，例如基於普選的定期選舉。 程序民主以選舉過程為中心作為民主合法性的基礎，通常與實質民主或參與民主形成對比，後者以社會中所有群體平等參與政治過程為中心合法性的基礎。

該詞彙通常用於表示通過選舉等民主程序的存在而人為地出現民主，而實際上權力掌握在一小群精英手中，他們操縱民主進程使自己在民主方面顯得合法。

## 概念釋義

程序民主主張民主是一種過程或一種程序，公民個人的自由平等權利只有在這種過程或程序中才能實現。對於程序民主而言，最重要的是程序而不是結果。其認為，程序對於民政而言至關重要，不能用結果來衡量政治體制的民主程度。因此之故，又被稱為形式民主、經驗民主、民主的程序主義。

程序民主假定選舉過程的核心在於權威被放置於當選的官員身上並確保所有選舉程序得到適當遵守（或至少看起來是這樣）。它可以被描述為在一個共和國（即人民投票選舉代表以行使公共權力的國家），只有基本架構和機構準備就緒。通常而言，以前當選的代表利用選舉程序來維護自身權力，在不同程度上違背了人民的公共意志，從而妨害了建設一個較為成熟的民主國家。

而現今多數立憲的國家雖然名義上准循民主的方針但實質上可能僅存在全民普選而在其他機制限制了人民對於政治的參與或實行精英政治。例如俄羅斯、吉爾吉斯坦等國仍持續寡頭統治，人民意願被權威架空，或如馬來西亞、日本等長期執政黨一黨獨霸壟斷社會上的政治資源。

即使是民主程序完善的國家也會存在實質的形式民主現狀，如在法律上或者是程度上存在對於民意的阻礙和迫害，或者是使用漏洞和機制將整個國家政治權利的中心精英化妨礙人民的意願。

## 實質民主

從程序與過程角度而言，民主分為程序民主與實質民主，實質民主主要體現價值理性的訴求，是一種理想主義民主觀；而程序民主要體現工具理性的訴求，是一種現實主義民主觀。但二者聯繫甚密。從法理學角度而言，民主，既需要程序民主，更需要實質民主。前中華人民共和國國務院總理溫家寶認為，「沒有程序的民主，就沒有實質的民主」，在某種程度上，程序民主還可以促進實質民主。

## 也可以看看

* 不自由的民主

## 參考文獻
程序法

**程序法**（procedural law、adjective law、remedial law、rules of court）關乎權利與義務程序的規定，在法學分類中，是相對於關於權利與義務本體之實體法的類別。換句話說，實體法僅規定權利義務，尚不足以落實權利義務內涵，需要有實現權利義務手段方法，因此程序法又稱**手續法**。

程序法可以定位為非關實體權利，而係為安排各種程序的法令而言。在大陸法系國家，程序法基本上可以分為民事訴訟法、刑事訴訟法以及行政訴訟法。以下分別敘述之：

1. 民事實體法所規範的實體權利（所有權、債權等等）必須經由審判的過程才能加以實現，而民事程序法就是在安排民事審判程序的法律，表現在實證法上，就是各國的民事訴訟法律或非訟事件法律等等。
2. 刑事程序法就是國家為確定對於人民刑罰權的刑事審判程序所應適用的法律，它所規範的是刑事審判程序的進行，而非如刑法（刑事實體法）是對於人民行為的直接禁制。
3. 行政程序法則是規範行政機關在從事行政行為時，所應遵守的正當法律程序，例如：比例原則、禁止差別待遇、信賴保護等等原則。

程序法在過去被認為僅僅是各種程序進行方式的規範，純粹為技術性、工具性的法律安排，並不涉及人民的實體權利，因此在法學研究中並不具有獨立的地位。然而正當法律程序等法律學說陸續出現，程序法即脫離以往僅僅依附於實體法的地位，而成為具有各種理論的一門專業法學領域。甚至刑事程序法，由於必然涉及刑事被告的人權及審判的公平公正性、罪罰的不可回復性，有法律學者認為，刑事程序法具有憲法的高度，國家機關是否遵守刑事程序法即為該國「憲法的測震儀」。

## 參考文獻

## 參考文獻

## 延伸閱讀

## 參見

* 司法程序之性質

## 外部連結

* US Federal Court Rules
程序状态字

**程序狀態字**，是指在電腦中，一段包含被作業系統和潛在硬體使用的程序狀態信息的內存或硬體區域。

它經常包含一個指向下一條需要被執行指令的指針。程序狀態字還通常包含一個錯誤狀態區域和關於中斷允許或禁止，超級或普通用戶模式位的條件代碼。
程序界面

**應用程式介面**（英語：**a**pplication **p**rogramming **i**nterface），縮寫為 **API**，是一種計算介面，它定義多個軟體中介之間的互動，以及可以進行的呼叫（call）或請求（request）的種類，如何進行呼叫或發出請求，應使用的資料格式，應遵循的慣例等。它還可以提供擴充機制，以便使用者可以通過各種方式對現有功能進行不同程度的擴充。一個 API 可以是完全客製化的，針對某個組件的，也可以是基於行業標準設計的以確保互操作性。通過資訊隱藏，API 實現了模組化編程，從而允許使用者實現獨立地使用介面。

## 概要

應用程式介面是指電腦作業系統或程式函式庫提供給應用程式呼叫使用的程式碼，其主要目的是讓應用程式開發人員得以呼叫一組常式功能，而無須考慮其底層的原始碼為何、或理解其內部工作機制的細節。API 本身是抽象的，它僅定義了一個介面，而不涉及應用程式在實作過程中的具體操作。

例如，圖形庫中的一組 API 定義了繪製指標的方式，可於圖形輸出裝置上顯示指標。當應用程式需要指標功能時，可在參照、編譯時連結到這組 API，而執行時就會呼叫此 API 的實現（庫）來顯示指標。

應用程式介面可以是一組數量上千、極其複雜的函式和副程式，可讓程式設計師做很多工作，譬如「讀取檔案」、「顯示選單」、「在視窗中顯示網頁」等等。作業系統的 API 可用來分配記憶體或讀取檔案。許多系統應用程式藉由 API 介面來實現，像是圖形系統、資料庫、網路 Web 服務，甚至是線上遊戲。

應用程式介面有諸多不同設計。用於快速執行的介面通常包括函式、常數、變數與資料結構。也有其它方式，如通過直譯器，或是提供抽象層以遮蔽同 API 實現相關的資訊，確保使用 API 的代碼無需更改而適應實現變化。

應用程式介面經常是軟體開發套件（SDK）的一部分。

## API 種類

API 又分為（Windows、Linux、Unix 等系統的）系統級 API，及非作業系統級的自訂 API。作為一種有效的代碼封裝模式，微軟 Windows 的 API 開發模式已經為許多商業應用開發的公司所借鑑，並開發出某些商業應用系統的 API 函式予以發布，方便第三方進行功能擴充。如 Google、蘋果電腦公司，以及諾基亞等手機開發的 API 等等。

### 物件導向語言的 API

* JAVA API 列表

### 庫與框架的 API

* Windows API
* 微軟 Windows 的 DirectX
* Simple DirectMedia Layer（SDL）

### API 與協定

* LDAP 應用程式介面

### API 與裝置介面

* PC BIOS 呼叫介面
* ASPI for SCSI device interfacing

### Web API

* Google 地圖的 API
* MediaWiki API

## 參考文獻

## 外部連結

* 設計好的應用程式介面之法及其重要性 （英文）
* 如何寫應用程式介面 （頁面存檔備份，存於網際網路檔案館） （英文） 可實現的範例，並帶有詳細的代碼及原因。
* 面向服務的體系結構（SOA）：通向企業應用整合（EAI）之路 （頁面存檔備份，存於網際網路檔案館）（英文）
* ISO/IEC JTC 1 Directives, 5th Edition Version 3.0, Annex J: Guidelines for API standardization （頁面存檔備份，存於網際網路檔案館）（英文）

## 參見

* 軟體工程
* 介面
* 文件物件模型
程序码

**電腦代碼**或**程式碼**是一組構建電腦程式的指令，即電腦所執行的命令。它是電腦裝置上執行的軟體部分之一，另一部分為資料。

電腦僅可直接執行機器語言（指令集的一部分）。由於人類閱讀指令集過於困難且以機器碼或其他低階語言編程耗時較長，多數程式設計師使用高階語言編寫原始碼。編譯器或直譯器隨後翻譯原始碼至機器語言以直接完成任務。編譯器所寫出的目的碼通常為機器語言，也可能為相比源語言的低階語言。直譯器使用原始碼的低階位元組碼來進行快速翻譯。
程序編程

**程序式程式設計**（英語：Procedural programming），又稱程序化程式設計，一種程式設計典範，衍生自指令式程式設計，有時會被視為是同義語。主要要採取過程呼叫或函式呼叫的方式來進行流程控制。流程則由包涵一系列運算步驟的過程（Procedures），常式（routines），子程序（subroutines）, 方法（methods），或函式（functions）來控制。在程序執行的任何一個時間點，都可以呼叫某個特定的程序。任何一個特定的程序，也能被任意一個程序或是它自己本身呼叫。

最初的主要程序式程式語言出現在大約 1957 年至 1964 年，包括 Fortran、ALGOL、COBOL、PL/I 和 BASIC，後來的 Pascal 和 C 發表於大約 1970 年至 1972 年。

## 參照
程序能力

**程序能力**（procedural capacity）的定義是指當事人能有效自行為或自受訴訟或非訟程序行為的資格，依實體法規定享有完全行為能力人，即可獨立以法律行為負擔義務，因其意思能力應該可以辨識利害得失，並行使程序上之權利，因此在家事事件上具有程序能力。

## 特別情況

滿 7 歲以上的未成年人，僅有限制行為能力 (limited legal capacity)，無法獨立以法律行為負義務，但仍然具有一定程度之意思能力，可以辨識利害得失時，即可以作為家事事件的當事人，關於其身分及人身自由的家事事件，法律賦予其程序能力，使其擔任程序主體的權利及聽審請求權，得以獲得法律上保障

至於未滿 7 歲之未成年人或受監護宣告人，雖然不具行為能力，不能獨立為有效之法律行為，但若能證明自己在法院審理時，有意思能力，則就自己為當事人且關於其身分及人身安全自由的家事事件，也有程序能力。

## 參考文獻
程序自修改

**自修改代碼**（Self-modifying code）是指程式在執行期間（Run time）修改自身指令。可能的用途有：病毒利用此方法逃避防毒軟體的查殺，反靜態分析，反盜版 ，單晶片程式升級。

## 電腦

在暫存記憶體中執行代碼的電腦，可修改記憶體中的代碼段，以往這種方法常被駭客用來製造病毒（參見：EICAR 測試病毒），現今許多作業系統及 CPU 提供限制程式修改代碼段的方法。還可用於程式保護，增加軟體破解人員的靜態分析難度。

Java SE 6 提供 Java Compiler API，和 Java 的反射（Reflection）機制結合在一起，即可使 Java 程式在執行時產生新類（Class），替換舊類。

## 單晶片

若由 ROM 執行程式，如支援 IAP 的單晶片能夠運用自修改代碼進行程式升級，也能對負責 IAP 功能的代碼進行修改或刪除從而失去 IAP 功能。

## 參考文獻
程序計數器

**程式計數器**（英語：Program Counter，縮寫：**PC**）是一個中央處理器 CPU 中的暫存器，其功能是儲存下一條要執行的指令（在機器語言中）的記憶體位址。在 Intel x86 和 Itanium 微處理器中，它叫做指令指標（instruction pointer，IP），有時又稱為指令位址暫存器（instruction address register，IAR）、指令計數器或只是指令序列器的一部分。

在大部分的處理器中，指令指標都是在提取程式指令後就被立即增加；也就是說跳躍指令的目的位址，是由跳躍指令的運算元加上跳躍指令之後下一個指令的位址（單位爲位元或位元組，視電腦形態而定）來獲得目的地。

處理器通常從記憶體中順序取得指令，但控制傳輸指令通過在 PC 中添加一個新值來改變順序。這些包括「分支」（有時稱為「跳轉」），「次常式呼叫」和「返回」。以某些斷言結果為真為條件的傳輸可讓電腦在不同條件下遵循不同的順序。

「分支」規定下一條指令從記憶體中的其他地方取得。「子程式」不僅呼叫分支，而且還儲存 PC 的先前內容。「返回」檢索 PC 的儲存內容並將其放回去，然後按照子程式呼叫的指令繼續順序執行。

## 參考文獻
程序記憶

**內隱記憶**（implicit memory），例如**程序記憶**（procedural memory），是一種長期記憶的形式。它是指關於技術、過程、或「如何做」的記憶。記憶有時候會被貯存在程序記憶（procedural memory）中，當一個人做了某一特定身體動作時，便觸發了這個記憶。

例如：當人學習過某些知識，卻無法回憶或再認時，這些知識的記憶依舊存在，只是以一種無意識的方式表現出來。心理學家用詞幹補筆任務和補筆任務（一個單詞缺幾個字母，讓被試填補成最先想到的單詞）發現了這種記憶。

## 證據

心理學家對遺忘症患者進行記憶測驗時，發現失憶症患者在自由回憶和再認任務的成績明顯要差於正常人。但在補筆任務 和詞干補筆任務的成績與正常人沒有差別。於是，心理學家推測有一種新概念的記憶形式 —— 內隱記憶，遺忘症患者只是在通常的外顯記憶上有缺陷，而他們的內隱記憶並沒有損傷。

同時心理學家在普通人的記憶測驗中也發現，自由回憶和再認任務的成績在幾天後的重測是下降很大，而補筆任務和詞干補筆任務的成績變化不大。心理學家推測，這是因為這一種新概念的記憶形式對於時間的影響並不敏感。

關於腦部特殊區域受損（如海馬回損傷）案例之研究指出，程序記憶和情節記憶是使用腦部的不同地方，且可以各自獨立運作的。對一個陳述性記憶正常、程序記憶受損的病患而言，他可能被反覆訓練一個任務或動作、並且記得先前的訓練的經歷，但在任務完成的速度或是程度上卻不會有改善的現象；若是程序記憶正常、陳述性記憶受損的人，情況剛好相反，他沒辦法想起之前做過的實驗內容，但實際表現上卻會一次比一次好。

小腦和基底核受損可能會影響程序記憶的學習。

以上的研究都證明了內隱記憶的存在。

## 特徵

內隱記憶和陳述性記憶是以不同的機制和不同的大腦迴路來處理的。內隱記憶通常較不容易改變，但可以在不自覺的情況下自動行使，其可以只是單純的反射動作，或是更複雜的一連串行為之組合（相較之下，陳述性記憶一般較容易以言語表達出來）。內隱記憶的例子包括學習騎腳踏車、打字、使用樂器或是游泳等。一旦內化，內隱記憶是可以非常持久的。

內隱記憶的特徵是在與外顯記憶的比較中表現出來的。內隱記憶在以下幾個方面與外顯記憶有明顯的差別。

1. 保持時間。在保持的時間上，內隱記憶要明顯的長於外顯記憶。

2. 干擾形式。內隱記憶不容易受外在刺激的干擾，而外顯記憶容易在干擾後遺忘。

3. 記憶負荷。外顯記憶在記憶的項目增多的時候會導致記憶數量和準確性的下降，而內隱記憶不受這種影響。

4. 加工深度。加工深度越深，外顯記憶越好。內隱記憶不存在這種情況。

5. 呈現形式。如果一個項目用聽覺的形式呈現，再用視覺的形式施測，被試的內隱記憶成績會下降。但外顯記憶不會出現這種情況。

## 種類

過去的理論認為內隱記憶只是一種單一的記憶。現在的腦科學發現，內隱記憶可能有不同的種類，在基底神經節、小腦、右側頂葉等腦結構中可能涉及了不同的內隱記憶任務。

一些認為存在知覺性內隱記憶和概念性內隱記憶。

## 爭議

關於內隱記憶是否存在，心理學界還有不同的意見，像 Roediger 提出了傳輸適當控制程序的觀點，認為並沒有內隱記憶這種不同的記憶形式存在。兩類記憶任務中出現的差異是由於加工方式和提取方式不匹配造成的。內隱記憶的任務要求由材料驅動的加工，而外顯記憶的任務要求的是意義驅動的加工。

## 相關連接

* 記憶
* 長期記憶

## 參考文獻
程序設計

**電腦程式設計**（英語：Computer programming），或稱**程式設計**（programming），是給程式解決出特定問題的過程，軟體開發過程中的重要步驟。程式設計方法往往以某種程式設計語言為工具，給出這種語言下的程式。程式設計過程一般包括分析、設計、編碼、測試、除錯等不同階段。

## 發展歷程

在電腦技術發展的早期，軟體開發主要就是程式設計。但隨著技術的發展，軟體系統越來越複雜，逐漸分化出許多專用的軟體系統，如作業系統、資料庫系統、應用伺服器，而且這些專用的軟體系統愈來愈成為普遍的系統環境的一部分。這種情況下軟體開發的內容越來越豐富，不再只是純粹的程式設計，還包括資料庫設計、使用者介面設計、通信協定設計和複雜的系統組態過程。

空間方面，在早期，由於機器資源比較昂貴，如何縮小儲存空間往往是設計關心的首要重點；而隨著硬體技術的飛速發展，電腦上資料儲存媒體的價格降低，空間不再是考慮的第一要點，一些較耗時的運算也漸漸發展出以空間換取時間的模式。

時間方面，在早期，如何加強程式效率、縮短程式執行時間是程式設計師的共同目標；而在硬體效能進步、效率差距縮小，軟體規模與複雜度卻日益增加的現在，程式的結構、可維護性、重複使用性、彈性等因素更顯得重要。在多人合作的程式設計專案裡，程式設計師們會加上各種註解以協助其他參與者理解程式碼，此行為雖然對執行時間的縮短沒有幫助，還會加重儲存空間的負擔，但卻因能達到較好的溝通並提高程式碼的可維護性，而成為目前的主流。

然而，隨著智慧型手機等攜帶裝置的興起，執行時間的縮短與儲存空間的有效運用再次成為焦點，形成與主機伺服器類型應用程式不同的重點考慮方向。

## 設計工具

* 開發環境
  * 編輯器、編譯器、直譯器、除錯工具
  * 整合式開發環境
  * 視覺化開發環境
  * 電腦輔助軟體工程

## 圖像展覽

* * *

## 外部連結

* 開放式目錄計劃中和程式設計相關的內容

## 相關條目

* 中文編程
* 程式
* 軟體
* 程式設計語言
* 程式設計實踐
* 程式設計方法學
* 軟體開發
* 軟體設計模式
程序設計_(化工)

**程序設計**（英語：**Process design**、**Chemical process design**）是化學工程的學科之一，亦稱**化工設計**、**化工工藝設計**或**製程設計**。

程序設計是指化學工程師依據單一或數個化學反應（或過程），設計出一個能將原料轉變為客戶所需求產品的生產流程和工廠。在設計的過程中，化學工程師會進行生產流程的經濟性、操作性、合理性、可靠性與安全性評估，根據生產流程以及條件，選擇適當的生產設備、管線、儀器等設施，並同時配合工廠的興建工程，將廠內的布局合理化與最適化，最終使工廠完工投產。

## 參見

* 化學工程師
* 化學工廠
* 環境工程
* 單元過程

## 參考資料

* 腳註

* 文獻
  1. 徐武軍、張有義. 《化工程序設計》. 台灣：五南圖書出版股份有限公司. 2007 年 8 月 1 日. ISBN 978-957-11-4807-6 （中文（臺灣））.
  2. 呂維明、余政靖. 《化工程序概論》. 台灣：高立圖書有限公司. 2011 年 2 月. ISBN 978-986-412-789-4 （中文（臺灣））.
  3. 丁浩. 《化工工艺设计》. 中國大陸：上海科學技術出版社. 1964 年 （中文（中國大陸））.
  4. 王紅林、陳礪. 《化工设计》. 中國大陸：華南理工大學出版社. 2001 年 9 月. ISBN 7-5623-1722-4 （中文（中國大陸））.
  5. 黃英. 《化工过程设计》. 中國大陸：西北工業大學出版社. 2005 年 4 月 1 日. ISBN 7-5612-1832-X （中文（中國大陸））.
  6. 侯文順. 《化工設計概論》 第二版。中國大陸：化學工業出版社. 2005 年 5 月 1 日. ISBN 9787502564537 （中文（中國大陸））.
  7. 李國庭. 《化工设计概论》. 中國大陸：化學工業出版社. 2008 年 9 月 1 日. ISBN 9787122034434 （中文（中國大陸））.
  8. Kister, Henry Z. Distillation Design 1st Edition. McGraw-Hill. 1992. ISBN 0-07-034909-6 （英語）.  引文格式 1 維護：冗餘文本 (link)
  9. Perry, Robert H. and Green, Don W. Perry's Chemical Engineers' Handbook 6th Edition. McGraw-Hill. 1984. ISBN 0-07-049479-7 （英語）.  引文格式 1 維護：冗餘文本 (link)
  10. Bird, R.B., Stewart, W.E. and Lightfoot, E.N. Transport Phenomena Second Edition. John Wiley & Sons. August 2001. ISBN 0-471-41077-2 （英語）.  引文格式 1 維護：冗餘文本 (link)
  11. McCabe, W., Smith, J. and Harriott, P. Unit Operations of Chemical Engineering 7th Edition. McGraw Hill. 2004. ISBN 0-07-284823-5 （英語）.  引文格式 1 維護：冗餘文本 (link)
  12. Seader, J. D., and Henley, Ernest J. Separation Process Principles. New York: Wiley. 1998. ISBN 0-471-58626-9 （英語）.
  13. Chopey, Nicholas P. Handbook of Chemical Engineering Calculations 3rdEdition. McGraw-Hill. 2004. ISBN 0-07-136262-2 （英語）.
  14. Himmelbau, David M. Basic Principles and Calculations in Chemical Engineering 6th Edition. Prentice-Hall. 1996. ISBN 0-13-305798-4 （英語）.  引文格式 1 維護：冗餘文本 (link)
  15. Editors: Jacqueline I. Kroschwitz and Arza Seidel. Kirk-Othmer Encyclopedia of Chemical Technology 5th Edition. Hoboken, NJ: Wiley-Interscience. 2004. ISBN 0-471-48810-0 （英語）.  引文格式 1 維護：冗餘文本 (link)
  16. King, C.J. Separation Processes 2nd. McGraw Hill. 1980. ISBN 0-07-034612-7 （英語）.
  17. Peters, M. S., and Timmerhaus K. D. Plant Design and Economics for Chemical Engineers 4th edition. McGraw Hill. 1991. ISBN 0-07-100871-3 （英語）.  引文格式 1 維護：冗餘文本 (link)
  18. J. M. Smith, H. C. Van Ness and M. M. Abott. Introduction to Chemical Engineering Thermodynamics 6th edition. McGraw Hill. 2001. ISBN 0-07-240296-2 （英語）.  引文格式 1 維護：冗餘文本 (link)
程序設計實踐

**程序設計實踐**是程序設計中的經驗總結，這裡有許多事務、概念與技巧。

## 程序設計事務

* 程序排錯
* 程序測試
* 程序優化
* 程序移植
* 國際化開發
* 日誌管理

## 程序設計概念

* 算法
* 資料結構
* 編程接口
* 中斷
* 斷言
* 異常處理

## 程序構造

_參見：資料結構_

* 字符串
* 文件
* 緩衝區
* 對象池、連結池、執行緒池
* 管道
* 套接字

## 編程接口

* POSIX
* ODBC
* JDBC

## 記法

* 宏
* 正則表達式

## 程序庫或框架

C++：

* STL

Java:

* JGL
* Struts
* Hibernate

## 參考書目

* 《程序設計實踐》 Brian W. Kernigham 等著 裘宗燕譯 機械工業出版社

## 相關條目

* 程序設計語言
* 軟體設計模式
程序設計方法

《**程序設計方法**》（英語：How to Design Programs, HtDP）是一本由麻省理工學院出版社出版、關於程序設計的教材。作者為馬蒂亞斯・費萊森、Robert Bruce Findler、Matthew Flatt 和 Shriram Krishnamurthi。該書介紹了一種「設計訣竅」，從問題描述出發，通過六個步驟編寫出完整的程序。

《程序設計方法》使用 Scheme 語言，和另外一本名著《電腦程式的構造和解釋》類似。事實上，作者提供了專門為該書開發的程序設計環境，名為 DrScheme。DrScheme 提供了從初級到高級的一系列語言級別。

這本書的中文版由黃林鵬和朱崇愷翻譯，人民郵電出版社出版。

## 外部連結

* HTDP, 2018 [Second edition] http://htdp.org/ （頁面存檔備份，存於網際網路檔案館）
* HTDP, 2003 [First edition] http://htdp.org/2003-09-26/ （頁面存檔備份，存於網際網路檔案館）
* 程序設計方法（中文版） （頁面存檔備份，存於網際網路檔案館）
程序設計方法學

**程序設計方法學**是討論程序的性質以及程序設計的理論和方法的一門學科，是研究和構造程序的過程的學問，是研究關於問題的分析，環境的模擬，概念的獲取，需求定義的描述，以及把這種描述變換細化和編碼成機器可以接受的表示的一般的方法。

## 程序設計方法學發展歷史

### 產生背景

* 1950 年代 —1960 年代初，手工藝式的程序設計方法，高德納把程序稱為藝術品。
* 1960 年代末 —1970 年代初，出現軟體危機：一方面需要大量的軟體系統，如作業系統、資料庫管理系統；另一方面，軟體研製周期長，可靠性差，維護困難。編程的重點：希望編寫出的程序結構清晰、易閱讀、易修改、易驗證，即得到好結構的程序。
* 1968 年，北大西洋公約組織（NATO）在西德召開了第一次軟體工程會議，分析了危機的局面，研究了問題的根源，第一次提出了用工程學的辦法解決軟體研製和生產的問題，本次會議可以算做是軟體發展史上的一個重要的里程碑。
* 1969 年，國際信息處理協會（IFIP）成立了「程序設計方法學工作組」，專門研究程序設計方法學，程序設計從手工藝式向工程化的方法邁進。

### 結構化程式設計的研究

* 1968 年，結構化程式設計方法的研究。Dijkstra 提出了「GOTO 是有害的」，希望通過程序的靜態結構的良好性保證程序的動態運行的正確性。
* 1969 年，Wirth 提出採用「自頂向下逐步求精、分而治之」的原則進行大型程序的設計。其基本思想是：從欲求解的原問題出發，運用科學抽象的方法，把它分解成若干相對獨立的小問題，依次細化，直至各個小問題獲得解決為止。

### 「程序正確性證明」的研究

* 1967 年，Floyd 提出用「 斷言法」證明框圖程序的正確性。
* 1969 年，Hoare 在 Floyd 的基礎上，定義了一個小語言和一個邏輯系統。此邏輯系統含有程序公理和推導規則，目的在於證明程序的部分正確性，這就是著名的 Hoare 邏輯。他的工作為公理學語義的研究奠定了基礎。
* 1973 年，Hoare 和 Wirth 把 PASCAL 語言的大部分公理化。
* 1975 年，一個基於公理和推導規則的自動驗證系統首次出現。
* 1979 年，出現了用公理化思想定義的程序設計語言 Euclid。
* 1976 年，Dijkstra 提出了最弱前置謂詞和謂詞轉換器的概念，用於進行程序的正確性證明和程序的形式化推導。
* 1980 年，D.Gries 綜合了以謂詞演算為基礎的證明系統，稱之為「程序設計科學」。首次把程序設計從經驗、技術升華為科學。
* 1974 年，人們利用模態邏輯驗證並行程序的正確性。
* 關於程序正確性證明的爭論：
  * 懷疑和反對派，理由：首先，形式證明太複雜，誰能夠保證證明本身沒有錯誤呢！其次，程序寫好後再證明其正確性，相當於「馬後炮」，即錯誤已經鑄成，證明何能補救？
  * 折中的方案：編寫程序，邊考慮證明。即程序設計與正確性證明同時並行考慮。

#### 構造正確的程序

利用 Dijkstra 的謂詞轉換器及其演算規則集合，可以推導出正確的程序。

利用程序變化構造正確的程序。它對程序應用一連串的保護正確性的變換規則，最終得到可執行的程序。程序變換是 1970 年代以來，「程序設計方法學」研究的重要方面，是程序設計自動化很有希望的途徑之一。遞歸程序變換是這一時期的最有意義的成果。如 Burstall 和 Darlington 的遞歸程序變換系統等。

邏輯程序設計和函數程序設計代表一種新的研究方向。Prolog 是以謂詞邏輯的子集（Hoare 子句）為基礎的一種形式系統。Prolog 的執行過程就是執行邏輯上消解算法的過程。

### 抽象數據類型的研究

抽象數據類型是程序設計方法學中一種極為重要的方法。人們把它譽為程序設計方法學發展史上的一個重要的里程碑。

## 研究的內容

* 結構化程序設計
* 數據抽象與模塊化程序設計
* 程序正確性證明
* 程序變換
* 程序的形式說明與推導
* 程序綜合與分析技術
* 物件導向的程序設計方法
* 大型程序的開發

## 與軟體工程的關係

### 研究方法的不同

軟體工程主要應用工程的方法和技術研究軟體開發與維護的方法、工具和管理的一門計算機科學與工程學交叉的學科 
程序設計方法學主要運用數學方法研究程序的性質以及程序設計的理論和方法的學科；

### 研究的對象不同

軟體工程的研究對象是軟體系統。目標是降低軟體的開發成本，提高軟體的質量，提高軟體的可維護性，提高軟體開發的效率。著重於軟體的宏觀可用性。程序設計方法學研究對象是程序。目標是保證程序的正確性。著重於程序的微觀正確性。軟體工程與程序設計方法學的界限變得越來越模糊 
程序設計方法學是軟體工程的基礎。
程序語言時間線

**程式語言時間線**記錄了各個知名程式語言出現的時間線。

## 1950 年之前

## 1950

## 1960

## 1970

## 1980

## 1990

## 2000

## 2010

## 2020

## 另見

* 計算機硬體歷史
* 程式語言歷史
* 程式語言
* Timeline of computing

## 參考

## 外部鏈結

* Online Historical Encyclopaedia of Programming Languages （頁面存檔備份，存於網際網路檔案館）
* Diagram & history of programming languages （頁面存檔備份，存於網際網路檔案館）
* Eric Levenez's timeline diagram of computer languages history （頁面存檔備份，存於網際網路檔案館）
程序變數

**過程變量**（**process variable**）是指受控過程的狀態變量（state variable），像是鍋爐中的溫度即為一例，鍋爐目前的溫度是過程變量，而希望鍋爐達到的溫度即為目標值 (desired value)。

過程變量中的測量是過程控制（Process Control）中重要的一環。過程變量在變化中是過程中的動態特性 (dynamic characteristics) 的重要表徵。若要維持過程的精確性，就需要精確的測量當前狀態變量，並且通過不同的系統輸入（system input）控制過程變量達到目標值。像在化學工程中，常見的過程變量有溫度、壓力、液面高度及流量。此名詞大量的應用於 process control community 例如半導體製造領域。

## 相關條目

* 程序控制
* PID 控制器
* 目標值
程序设计范型

**編程範型**、**編程範式**或**程式設計法**（英語：Programming paradigm），是指軟體工程中的一類典型的程式設計風格。常見的程式設計法有：函式語言程式設計、指令式程式設計、程序式程式設計、物件導向程式設計等等。

程式設計法提供並決定了程式設計師對程式執行的看法。例如，在物件導向程式設計中，程式設計師認為程式是一系列相互作用的物件，由於方法論的不同，物件導向程式設計又分為類別為基程式設計和基於原型程式設計，而在函式語言程式設計中一個程式會被看作是一個無狀態的函式計算的序列。

## 概述

正如軟體工程中不同的群體會提倡不同的「方法學」一樣，不同的程式語言也會提倡不同的「程式設計法」。一些語言是專門為某個特定的範型設計的，如 Smalltalk 和 Java 支援物件導向程式設計，而 Haskell 和 Scheme 則支援函式語言程式設計，同時還有另一些語言支援多種範型，如 Ruby、Common Lisp、Python、Rust。

很多程式設計法已經被熟知他們禁止使用哪些技術，同時允許使用哪些。例如，純函式語言程式設計不允許有副作用；大部分高階程式語言都期望使用者進行結構化程式設計而避免非結構化程式設計，其中結構化程式設計不允許使用 goto。可能是因為這個原因，新的範型常常被那些習慣於較早的風格的人認為是教條主義或過分嚴格。然而，這樣避免某些技術反而更加證明了關於程式正確性，或僅僅是理解它的行為的法則，而不用限制程式語言的一般性。

程式設計法和程式語言之間的關係可能十分複雜，由於一個程式語言可以支援多種範型。例如，C++ 設計時，支援程序式程式設計、物件導向程式設計以及泛型程式設計。然而，設計師和程式設計師們要考慮如何使用這些範型元素來構建一個程式。一個人可以用 C++ 寫出一個完全程序化的程式，另一個人也可以用 C++ 寫出一個純粹的物件導向程式，甚至還有人可以寫出雜揉了兩種範型的程式。

## 參考文獻

## 參見

* 程式設計法比較
程序语义

在計算理論中，**形式語義學**是關注計算的模式和程序設計語言的含義的嚴格的數學研究的領域。

語言的形式語義是用數學模型去表達該語言描述的可能的計算來給出的。

形式語義學（formal semantics），是程序設計理論的組成部分，以數學為工具，利用符號和公式，精確地定義和解釋電腦程式設計語言的語義，使語義形式化的學科。

提供程序設計語言的形式語義的方法很多，其中主要類別有：

* 指稱語義學，著重於語言的執行結果而非過程，包括域理論；
* 操作語義學，例如抽象機（象 SECD 抽象機），著重於描述語言的過程；
* 公理語義學，如 謂詞變換語義學和代數語義學。

## 外部連結

* Semantics with Applications
* 定義 （頁面存檔備份，存於網際網路檔案館）
程序錯誤

**程式錯誤**（英語：**Bug**），是程式設計術語，是指軟體執行時因程式本身有錯誤而造成功能不正常、當機、資料遺失、非正常中斷等現象。有些程式錯誤會造成電腦安全隱患，此時叫**漏洞**。

一些有趣的錯誤有時也會成為一種樂趣。在電腦遊戲中，假如一些錯誤不令遊戲出現大錯誤的話，經常會變成一種玩遊戲時的秘技（秘技有時是遊戲設計者故意加入，用於檢查程式設計，繞過不需要的步驟直接檢驗需要的地方時所使用的代碼）。

有嚴重後果的錯誤會受到廣泛關注。修補、改正軟體程式錯誤的過程稱為除錯。

## 「Bug」的詞源

### 來自工程學

用 bug 來指工程錯誤這種用法大約出現在 1870 年代，早在電腦出現前就存在。目前最早找到的證據是愛迪生在 1878 年的信

> It has been just so in all of my inventions. The first step is an intuition, and comes with a burst, then difficulties arise—this thing gives out and [it is] then that "Bugs"—as such little faults and difficulties are called—show themselves and months of intense watching, study and labor are requisite before commercial success or failure is certainly reached.
> 
> 

中譯如下：

> 在我所有發明都如此。第一步是直覺，然後靈光一閃，然後出現困難 —— 這事發生了，然後「Bug」—— 這樣稱呼那些微小錯誤和困難 —— 展現出來。在明確到達商業成功或失敗前必需數個月的密切關注、研究和勞動。
> 
> 

### 資訊工程與一般大眾所知的起源

1947 年 9 月 9 日，葛麗絲・霍普（Grace Hopper）發現了第一個電腦 bug。有一次 Mark II 突然宕機，整隊團隊都搞不清電腦為何不能正常運作。經過大家深度挖掘，發現原來有飛蛾意外飛入一臺電腦引起故障（如圖所示）。團隊很快排除錯誤，並在日誌本記錄這事。也因此，人們逐漸開始用「Bug」（原意「蟲子」）來稱呼電腦錯誤。現在在華盛頓美國國家歷史博物館還可以看到這份遺稿。

## 管理錯誤的常見用語

* 處理進度
  * New：代表新回報錯誤
  * Resolved：代表錯誤已處理完（見下方「處理方式」）
  * Closed：處理完並已驗證
* 處理方式
  * Fixed：錯誤已修復
  * Later：必須到未來的版本才能解決。
  * Workaround：不能解決，但可用替代方法避開。
  * Duplicate：重複回報的錯誤
  * Severity：錯誤造成的嚴重度
  * Debugging（簡稱 Debug）：指解決錯誤的動作和過程（除錯）。

## 參見

* 除錯
* 2000 年問題
* Therac-25 案例
* 漏洞獎勵計劃
* Gotcha（編程）
* 軟體缺陷指標

## 參考資料
程序集_(CLI)

通用語言基礎架構 (CLI) 中的**程序集**是編譯得到的，供 CLR 進一步編譯執行的代碼庫。代碼是用通用中間語言（CIL）表示，在運行時被即時編譯為機器語言。在.NET Framework 實現中，這種即時編譯是通用語言運行時 (CLR) 的一部分。

CLI 程序集可分為兩類：進程程序集（EXE）、庫程序集（DLL）。

一個程序集可包含一個或多個文件。代碼文件成為模塊（module）。

## 程序集名字

程序集名字包括 4 部分：

1. 短名字。對於 Windows 系統，是指 PE 文件名字，不包括文件擴展名。
2. culture。RFC 1766 定義的 locale 的標識符。一般應是 culture 中立的。culture 只用於 satellite 程序集。
3. 版本號。點分隔的數字，由 4 部分組成：major, minor, build, revision
4. 公鑰 token。公鑰的 64 比特哈希值，用於簽名該程序集。一個簽名的程序集稱為「強名字」（strong name）。者能預防程序集重名。由於 FAT32 與 NTFS 只識別 PE 文件名，因此 CLI 引入了全局程序集緩存（GAC）處理運行時單個文件夾被映射為不同的嵌套的文件夾系統。

## 程序集版本

CLI 程序集可以用版本信息，以避免由於共享的程序集版本差別引起的應用程式衝突。 However, this does not eliminate all possible versioning conflicts between assemblies.

## 引用程序集

通過 C# 編譯器的 /reference 標記，可以引用一個可執行代碼庫。

## 程序集延遲簽名

一個共享程序集是強名字的，但在開發時不產生私鑰，僅當部署時才產生私鑰。

## 程序集的語言

程序集編譯為 CIL 代碼，這是一種中間語言。框架內部把 CIL 字節碼轉換為本地的彙編代碼。對於列印 "Hello World" 的程序，其等效的 CIL 代碼是：

CIL 代碼裝入 String 到運行棧，然後調用 WriteLine 函數再返回。

## 參見

* Manifest (CLI)

## 參考文獻
程序集清单

**程式集清單**（英語：assembly manifest）是.Net Framework 中的文字檔案，包含了 CLI 程式集的元資料，包括程式集的組建間的依賴關係、解決資源與類的參照、版本資訊、作用域資訊、安全許可等。儲存在 PE 檔案 (.exe 或.dll) 用通用中間語言 (MSIL) 代碼表示。

嵌入到程式集中的程式集清單可用 Windows SDK 中的 IL 反組譯程式 (ILDASM.exe) 檢視。

## 程式集清單的內容

下表的前四行：程式集名字、版本號、culture、強名字資訊，組成了程式集的 identity。

## .NET 實現

Manifest 是一個以.manifest 為字尾的 XML 檔案。其內部的資訊：

* <assemblyIdentity> 元素則標識著一個唯一的程式集
* 指定了組成程式集的檔案及 Windows 類。

作業系統首先讀取 Manifest，獲得 exe 檔案需要呼叫的 DLL 的 manifest。再根據據此資訊去尋找對應的 DLL。這樣就可能區別不同版本的同一個 DLL 檔案。

共享程式集的 Manifests 儲存在 WINDOWS/WinSxS/Manifests 目錄中。這是 Windows XP 以上版本作業系統提供的非代管（多版本）並列快取（side-by-side cache）中安裝了強名字的系統庫的程式集清單。在 WinSxS 目錄下，每個程式集都會有一個目錄，另外，還有兩個目錄分別是 Manifests 和 Policies，其中包含了版本的相關資訊。例如：

使用者：

在 WINDOWS/WinSxS/Policies 目錄下的 Policy 檔案，來指出老版本到新版本的確認對映關係。解決庫升級帶來的版本相容問題。例如：

其中 <bindingRedirect> 標籤便指定了所有 8.0.41204.256-8.0.50608.0 版本的需求，對映到 8.0.50727.42 這個系統中安裝的比較新的版本的庫。

## 參考文獻
程序風格

**代碼風格**（英語：Programming style）即程式開發人員所編寫原始碼的書寫風格。良好的代碼風格會幫助程式設計師閱讀和理解符合該風格的原始碼，並且避免錯誤。

關於該主題的經典著作是 1970 年代編寫的《編程風格的要素》，並以當時流行的 Fortran 和 PL/I 語言的範例進行了說明。

特定程式中使用的編程風格可能源自公司或其他計算組織的代碼約定，以及代碼作者的偏好。編程風格通常是為特定的程式語言（或語言家族）設計的：在 C 原始碼中被認為是良好的風格可能不適合 BASIC 原始碼等等。但是，一些規則通常適用於許多語言。

## 良好風格的要素

總結程式設計實踐中的經驗，代碼風格的要素包括（但不限於）以下幾點：

* 名字的使用（參見：駝峰式大小寫、識別碼命名約定、匈牙利命名法）
* 表達式與語句
* 常數的使用
* 注釋的使用
* 縮排（參見：縮排風格）
* 代碼的布局

## 代碼外觀

代碼風格通常處理原始碼的可視外觀，帶有可讀性的目標。軟體很長時間都可以格式化原始碼，讓寫代碼的人將注意力集中在命名，邏輯和更進階的技術。作為一個實際的點，用電腦來格式化原始碼節省了時間，且使不帶網路論戰地實施全公司的標準成為可能。

### 縮排

縮排風格協助確認控制流和代碼塊。在一些程式語言中，縮排被用來限定代碼的邏輯塊；在這些情況下正確的縮排不僅僅是風格的事。在其他語言中，縮排和空白字元不影響功能，雖然有邏輯和一貫的縮排是代碼更易於閱讀。比較：

或

和像是這樣

前兩個範例很可能更容易閱讀，因為它們以既定的方式縮排（"hanging paragraph" 樣式）。這種縮排風格在處理多個巢狀結構時特別有用。

#### ModuLiq

ModuLiq Zero 縮排風格用 Enter 分組而不是縮排。和所有以上的比較：

#### Lua

Lua 不用傳統的花括號和括號。if/else 語句只需要表達式後面有 `then`，以 `end` 結束 if/else 語句。

縮排是可選的。`and`,`or`,`not` 在 true/false 語句間被使用。

它們是真 / 假陳述，如

會代表假。

#### Python

Python 用縮排來表明控制結構，所以_正確的縮排_是需要的。通過這麼做，用花括號（亦即 `{` 和 `}`）包括的需要就被清除。另一方面，複製和貼上 Python 代碼可能導致問題，因為被貼上的代碼的縮排級別可能和當前行的縮排級別不同。這樣的重格式化用手做可能十分乏味，但一些文字編輯器和整合式開發環境有自動做的功能。也有當 Python 代碼被發表在去除空白字元的論壇或網頁上，使它變得無法使用的問題，雖然這個問題可以在能用保留空白字元的標籤，像 "<pre> ... </pre>"（HTML 中），"[code]"..."[/code]"（bbcode 中）等等時避免。

注意 Python 不適用花括號，而是一個普通的英文冒號（例子 `else:`）。

許多 Python 程式設計師傾向於遵循一種公認的風格指南，稱為 PEP8。有一些工具旨在自動化 PEP8 合規性。

#### Haskell

Haskell 類似地有越位規則，也就是它有一種二維語法，在其中縮排對定義塊有意義（雖然另一種語法用花括號和分號）。Haskell 是一種聲明式語言，在 Haskell 指令碼中有語句，但是有聲明。範例:

可以被寫成一行，如：

Haskell 鼓勵 文學編程 的使用，擴充的文字解釋代碼的緣由。在文學式 Haskell 指令碼（帶有副檔名 `lhs`）中，所有東西都是注釋，除了標記為代碼的塊。程式可以用 LaTeX 編寫，這種情況下 `code` 環境標記哪裡是代碼。並且每個活動的代碼段落可以被在前面和後面帶上空行的方式標記，以一個大於號和一個空格開始每一行代碼。這裡有一個使用 LaTeX 標記的：

一個使用純文字的例子：

#### 垂直對齊

將相似的元素垂直對齊經常是有幫助的，使錯字導致的錯誤更加明顯。比較：

和

#### 空格

在一些需要空白字元的情況下，絕大部分自由形式語言的語法不關心出現了多少空白字元。與空白字元相關的風格被普遍用來加強可讀性。目前沒有已知的確鑿事實（研究得出的結論）關於哪種空白字元風格有最好的可讀性。

例如，比較下列語法上等價的 C 語言代碼例子：

v.s.

#### 制表符

使用製表鍵來建立空白字元，在不施加足夠關注時會造成特定的問題，因為依據使用的工具，甚至是使用者的偏好，制表點的位置可能不同。
如一個例子，一個程式設計師偏好 4 個制表位，將工具集設定成如此，然後用這些去格式化代碼。

另一個程式設計師偏好 8 個制表位，並將工具集設定成如此。當其他人檢查原來那個人的代碼時，他們可能會發現很難讀。

一種對這個問題廣泛使用的解決方法可能包含不為對齊使用製表鍵，或制定必須設定成幾個制表位的規則。注意制表符在一貫的情況下工作良好，限制在局部縮排上，並且不用來對齊：

## 參見

* C and C++ Style Guides（頁面存檔備份，存於網際網路檔案館）
* Programming in C++, Rules and Recommendations（頁面存檔備份，存於網際網路檔案館）
* Aladdin's C coding guidelines（頁面存檔備份，存於網際網路檔案館）
* USER NOTES ON FORTRAN PROGRAMMING (UNFP)（頁面存檔備份，存於網際網路檔案館）
* PROGRAM LAYOUT - THE ART OF MAKING PROGRAMS READABLE（頁面存檔備份，存於網際網路檔案館）