← Archive
lm-002199 · 2026-08

PLDST-004_設計者共同體與制度_如何避免程式語言史的創始人歸因偏誤_v1.0

下載 MD 檔 ⬇

設計者、共同體與制度:如何避免程式語言史的創始人歸因偏誤

英文名稱: Designers, Communities, and Institutions: Avoiding Founder-Attribution Bias in Programming Language History
系列: Programming Language Designer Style Taxonomy(PLDST)
文件編號: PLDST-004
版本: v1.0
日期: 2026-07-30
作者: Neo.K
文件狀態: 公開版/方法論基礎論文


摘要

程式語言史經常以單一創始者為敘事中心:

  • Python 是 Guido van Rossum 的語言;
  • C++ 是 Bjarne Stroustrup 的語言;
  • Ruby 是 Yukihiro Matsumoto 的語言;
  • Rust 是 Graydon Hoare 的語言;
  • Go 是 Rob Pike 的語言;
  • JavaScript 是 Brendan Eich 的語言。

這些說法作為入門識別並非全錯,但一旦被用來解釋語言的全部特徵、長期演化、制度選擇與生態結果,就會形成 創始人歸因偏誤。它把多階段、多主體、多制度的語言演化壓縮為單一人物的穩定意志,進而混淆:

  • 誰最早提出問題;
  • 誰選擇核心設計;
  • 誰共同設計機制;
  • 誰完成編譯器與運行時;
  • 誰批准規格;
  • 誰維護相容性;
  • 誰透過程式庫、工具與使用習慣實際改變語言;
  • 誰在事故、標準化或公司策略中承擔最終責任。

Go 的官方歷史明確指出,Robert Griesemer、Rob Pike 與 Ken Thompson 於 2007 年共同開始設計;Rust 的重大技術變更進入 RFC 與團隊治理;Python 在 Guido van Rossum 於 2018 年卸下 BDFL 身分後,透過社群投票建立 Steering Council;C++ 自 1990–1991 年起由 ISO WG21 進行標準化與演化;Java 透過 JCP、JSR、Reference Implementation 與 Technology Compatibility Kit 建立制度化規格流程;ECMAScript 則由 TC39 的提案階段、Champion、實作回饋與共識機制持續演進。[R1][R2][R3][R4][R5][R6]

本文提出 多主體語言歸因模型(Multi-Actor Language Attribution Model, MALAM),將語言演化表示為:

Lt=E(F,D,I,G,O,S,U,X)tL_t = \mathcal{E} ( F, D, I, G, O, S, U, X )_t

其中:

  • FF :Founder/Initiator,創始與啟動者;
  • DD :Co-designers,共同設計者;
  • II :Implementers,實作者;
  • GG :Governance bodies,治理機構;
  • OO :Organizations,企業、研究機構與贊助者;
  • SS :Standards and specifications,標準與規格制度;
  • UU :Users and ecosystem,使用者與生態;
  • XX :External constraints,硬體、平台、相容性與時代限制。

本文進一步區分四種不可混同的歸因:

功勞歸因因果歸因權力歸因責任歸因\boxed{ \text{功勞歸因} \neq \text{因果歸因} \neq \text{權力歸因} \neq \text{責任歸因} }

一位創始者可能具有高度歷史功勞,卻不再擁有當前決策權;一個委員會可能具有正式批准權,卻不是最初概念的發明者;一家公司可能提供絕大部分實作資源,卻不應自動取得對整個社群價值的唯一解釋權;生態共同體可能沒有正式投票權,卻能透過採用、拒絕、慣例與工具形成事實上的設計選擇。

本文建立:

  1. 語言生命週期的七個歸因階段;
  2. 十類設計參與者;
  3. 功勞、因果、權力、責任與維護的五維歸因矩陣;
  4. 個人風格、共同設計風格、組織風格、制度風格與生態風格的分層方法;
  5. Python、Go、Rust、C++、Java/JCP 與 ECMAScript/TC39 的制度轉換案例;
  6. 適用於 PLDST 個案研究、比較研究與 AI SKILL 的來源標記與歸因規則。

本文的核心命題是:

語言的名字可以指向一位創始者,但語言的歷史不能只歸因於一個人。\boxed{ \text{語言的名字可以指向一位創始者,} \quad \text{但語言的歷史不能只歸因於一個人。} }

關鍵詞: 程式語言史、創始人偏誤、共同設計、語言治理、標準委員會、RFC、PEP、WG21、TC39、JCP、PLDST


第一部分 問題定義

一、什麼是創始人歸因偏誤

本文所稱的創始人歸因偏誤,是指:

因為某位人物最早建立、命名、公開或代表一種語言,研究者便將該語言後續的全部設計決策、制度變遷、技術成果與生態特徵,過度歸因於該人物的個人風格。

它常出現在下列句型:

X 設計了這個語言,所以今日所有特徵都反映 X 的思想。
X 喜歡簡潔,所以社群後來拒絕某功能也是 X 的風格。
這個語言存在某缺陷,因此是 X 的人格造成。
X 離開後語言仍如此演化,證明一切本來都由 X 決定。

這些敘述可能包含部分真實因素,但缺少:

  • 時間;
  • 決策主體;
  • 組織條件;
  • 實作限制;
  • 正式治理;
  • 生態選擇;
  • 反例。

二、創始者為何仍然重要

反對過度歸因,不等於否認創始者。

創始者常常決定:

  • 最初問題如何被 framing;
  • 第一組核心概念;
  • 哪些前代語言被繼承;
  • 第一個實作;
  • 命名與公共敘事;
  • 早期審美;
  • 第一批參與者;
  • 誰有權接受與拒絕變更。

因此,創始者可能對語言早期相位具有高權重:

wF(t0)wF(tn)w_F(t_0)\gg w_F(t_n)

但其權重是否隨時間下降,取決於:

  • 是否仍具有否決權;
  • 是否仍主導實作;
  • 是否建立制度;
  • 語言是否標準化;
  • 生態是否擴張;
  • 公司是否接管資源;
  • 社群是否重構核心。

三、「誰創造了語言」其實包含多個問題

3.1 誰提出了原始問題?

例如:

  • 現有語言過於複雜;
  • 大型建置速度太慢;
  • 記憶體安全與效能難兼得;
  • Web 需要可嵌入腳本;
  • 教學語言需要更清楚的抽象。

3.2 誰選擇核心機制?

例如:

  • 所有權;
  • 垃圾回收;
  • Prototype;
  • 顯式錯誤值;
  • 縮排語法;
  • Traits;
  • 模組。

3.3 誰讓它真正可用?

包括:

  • 編譯器實作者;
  • Runtime 工程師;
  • 標準程式庫作者;
  • 套件管理者;
  • 文件作者;
  • 工具與 IDE 開發者。

3.4 誰決定它成為標準?

可能是:

  • 創始者;
  • Core team;
  • Steering Council;
  • RFC team;
  • ISO 委員會;
  • Ecma technical committee;
  • JCP Executive Committee;
  • 公司產品決策。

3.5 誰決定它實際如何被使用?

可能是:

  • 框架;
  • 程式庫;
  • 教育;
  • 雲端平台;
  • 公司規範;
  • 社群慣例;
  • 套件管理;
  • Linter 與 Formatter。

因此,「創造者」不是單一資料欄位。


第二部分 五種歸因

四、功勞歸因 Credit Attribution

功勞歸因回答:

誰應因某項創新、工作或歷史貢獻獲得承認?

它包括:

  • 原始構想;
  • 共同設計;
  • 第一個實作;
  • 關鍵改寫;
  • 社群組織;
  • 文件;
  • 標準化;
  • 長期維護。

功勞可以共享,且不一定與正式權力相同。


五、因果歸因 Causal Attribution

因果歸因回答:

哪些主體與條件實際造成某項結果?

例如某個語言功能出現,可能同時由:

  • 設計者理念;
  • 硬體限制;
  • 公司需求;
  • 使用者壓力;
  • 前代語言;
  • 編譯器技術;
  • 相容性;

共同造成。

因果模型應寫成:

Outcome=f(Actors,Constraints,Alternatives,Institutions,Timing)Outcome = f( Actors, Constraints, Alternatives, Institutions, Timing )

而不是:

Outcome=Personality(Founder)Outcome = Personality(Founder)

六、權力歸因 Authority Attribution

權力歸因回答:

當時誰能批准、否決、延後或撤回設計?

權力可能來自:

  • 專案所有權;
  • Commit 權限;
  • BDFL;
  • 團隊 Charter;
  • 委員會投票;
  • 公司資金;
  • 商標;
  • 發行控制;
  • 實作控制;
  • 標準批准。

具有觀念影響力,不等於具有正式決定權。


七、責任歸因 Accountability Attribution

責任歸因回答:

若設計造成安全、相容、治理或生態問題,誰應處理?

可能包括:

  • 原提案作者;
  • 批准機構;
  • 實作團隊;
  • 發行管理者;
  • 公司;
  • 標準機構;
  • 使用者組織。

不能只把責任放回早已離開專案的創始者。


八、維護歸因 Maintenance Attribution

維護歸因回答:

誰持續支付語言存在與演化的成本?

包括:

  • 修復;
  • Regression test;
  • 移植;
  • 發行;
  • 安全回報;
  • 標準更新;
  • 套件基礎設施;
  • 文件;
  • 相容性;
  • 社群治理。

維護者可能沒有創始光環,卻對今日語言樣貌具有更直接影響。


九、五維歸因向量

對某項決策 qq 與主體 aa ,定義:

A(a,q)=(Cr,Ca,Au,Ac,Ma)A(a,q) = ( Cr, Ca, Au, Ac, Ma )

其中:

  • CrCr :Credit;
  • CaCa :Causal contribution;
  • AuAu :Authority;
  • AcAc :Accountability;
  • MaMa :Maintenance。

同一主體在五維上的權重可以完全不同。


第三部分 十類參與者

十、創始者 Founder/Initiator

典型貢獻:

  • 提出初始問題;
  • 建立核心願景;
  • 第一版設計;
  • 第一個實作或原型;
  • 命名;
  • 招募共同設計者。

風險:

  • 後來的公共敘事將所有共同工作吸收到創始者名下。

十一、共同設計者 Co-designer

共同設計者可能:

  • 與創始者同步提出概念;
  • 負責不同子系統;
  • 反駁並修正原始設計;
  • 建立語法、型別、Runtime 或程式庫。

Go 是明確案例:官方 FAQ 與歷史資料將 Robert Griesemer、Rob Pike、Ken Thompson 同列為最初設計者。[R1]

若只稱 Go 為「Rob Pike 設計」,會抹去共同創始結構。


十二、實作者 Implementer

實作者不是單純把規格翻譯成程式碼。

實作會反向決定:

  • 哪些功能可行;
  • 錯誤訊息;
  • 效能;
  • 未定義邊界;
  • 與平台的互操作;
  • 是否能穩定化;
  • 功能是否被撤回。

第一個可用編譯器、第二個獨立實作與優化實作,對語言形成的因果作用可能不同。


十三、程式庫與工具作者

標準程式庫、Formatter、Linter、Package manager、Build system 與 Language server 會決定:

  • 什麼被視為慣用寫法;
  • 哪些選項被隱藏;
  • 如何組織專案;
  • 如何處理錯誤;
  • 如何發布與更新。

一種語言的有效風格為:

Leffective=Core+Library+Tooling+ConventionsL_{effective} = Core + Library + Tooling + Conventions

十四、技術領導與 Core Team

此類主體可能具有:

  • Triage;
  • Roadmap;
  • RFC 指派;
  • Release decision;
  • 部門協調;
  • 最終技術裁決。

它介於個人與制度之間,常形成共同體風格。


十五、正式治理機構

例如:

  • Python Steering Council;
  • Rust Leadership Council/Teams;
  • ISO WG21;
  • TC39;
  • JCP Executive Committee。

治理機構定義:

  • 誰可以提出;
  • 如何審查;
  • 何謂共識;
  • 何時成熟;
  • 誰能否決;
  • 如何處理衝突。

十六、公司與研究機構

公司或機構可能提供:

  • 員工時間;
  • 基礎設施;
  • 商標;
  • 發行;
  • 產品採用;
  • 法務;
  • 安全;
  • 標準代表。

但組織資助不等於所有參與者皆代表組織意志,也不代表社群對語言沒有實質塑造。


十七、標準機構與國家代表

ISO、Ecma 等標準制度涉及:

  • 國家會員;
  • 委員會;
  • 正式文件;
  • 會議程序;
  • 投票;
  • 編輯;
  • 發布週期。

C++ 的現代語言設計不能只被描述為 Stroustrup 個人的延伸,因為 WG21 自 1990–1991 年成立後,已有正式、多國、分組的標準化結構。[R4]


十八、使用者與生態共同體

使用者透過:

  • 採用;
  • 拒用;
  • Workaround;
  • Framework;
  • Style guide;
  • Experience report;
  • Issue;
  • Fork;
  • 套件;
  • 教育;

對語言形成選擇壓力。

使用者不必擁有正式投票權,也能造成生態因果。


十九、外部約束

外部約束不是人,但具有因果作用:

  • 硬體;
  • 作業系統;
  • 瀏覽器;
  • ABI;
  • 網路;
  • 既有程式;
  • 法規;
  • 安全事件;
  • 市場時機;
  • 相容性。

PLDST 不應把被環境迫使的妥協解釋成純個人偏好。


第四部分 語言生命週期的七個相位

二十、相位一:問題形成

主要資料:

  • 設計者回憶;
  • 原始備忘錄;
  • 前代語言批判;
  • 組織需求;
  • 第一批實驗。

主要主體:

  • 創始者;
  • 小型共同設計群;
  • 贊助機構。

二十一、相位二:核心定型

主要工作:

  • 語法;
  • 語義;
  • 編譯器;
  • Runtime;
  • 標準程式庫;
  • 第一批使用案例。

此時個人風格權重通常最高,但實作者的反饋已開始改變設計。


二十二、相位三:公開採用

語言開始接收:

  • 外部使用者;
  • Bug report;
  • 套件;
  • 平台移植;
  • 教學;
  • 公司採用。

部分設計原則可能被實務反駁或重新解釋。


二十三、相位四:治理制度化

出現:

  • PEP;
  • RFC;
  • Proposal process;
  • Core team;
  • Council;
  • 標準委員會;
  • Release policy。

語言從「作品」轉向「制度」。


二十四、相位五:相容性鎖定

當大量程式依賴既有行為後:

Costchange=Migration+Ecosystem+Education+Implementation+TrustCost_{change} = Migration + Ecosystem + Education + Implementation + Trust

設計自由被歷史使用量限制。


二十五、相位六:多實作與標準化

若存在:

  • 多個編譯器;
  • 多個 Runtime;
  • 多個瀏覽器;
  • 國際標準;
  • Compatibility test;

規格與一致性制度的權重上升。


二十六、相位七:後創始者時代

創始者可能:

  • 離開;
  • 退休;
  • 失去正式權力;
  • 成為象徵人物;
  • 繼續影響但不再裁決。

此時語言仍可能保留其早期風格,但不能把新決策自動歸因於創始者。


第五部分 多主體歸因模型

二十七、語言狀態

令語言在時間 tt 的狀態為:

Lt=(Spect,Implt,Libt,Toolt,Govt,Ecot)L_t = ( Spec_t, Impl_t, Lib_t, Tool_t, Gov_t, Eco_t )

每次變更:

Lt+1=Lt+ΔqtL_{t+1} = L_t+\Delta q_t

其中 Δqt\Delta q_t 由多個主體與約束共同作用。


二十八、參與圖

建立有向圖:

Gq=(A,E)G_q=(A,E)

節點包括參與者,邊表示:

  • 提出;
  • 共同設計;
  • 實作;
  • 審查;
  • 批准;
  • 否決;
  • 測試;
  • 採用;
  • 維護;
  • 撤回。

一項提案可以具有:

author
champion
reviewer
implementer
approver
editor
test author
maintainer
affected community

二十九、權重不是固定人格分數

對主體 aa 、決策 qq 與時期 tt

w(a,q,t)=f(documented contribution,decision authority,implementation control,maintenance,counterfactual dependence)w(a,q,t) = f( documented\ contribution, decision\ authority, implementation\ control, maintenance, counterfactual\ dependence )

所謂 counterfactual dependence 問:

若沒有這個主體,該決策是否仍會以相同形式發生?

這仍是推論,不是可完全計算的物理量。


三十、歸因信心

每項歸因標記:

直接文件
多人一致回顧
正式決議
版本控制證據
實作證據
次級歷史
本文推論
爭議

信心分為:

  • 高;
  • 中;
  • 低;
  • 不可判定。

第六部分 六個制度轉換案例

三十一、Python:從 BDFL 到 Steering Council

PEP 13 記錄:

  • Python 由 Guido van Rossum 啟動;
  • Guido 自專案創始至 2018 年 7 月擔任 BDFL;
  • 目前治理以五人 Steering Council 為核心;
  • Council 具有廣泛權力,但尋求盡量少直接使用,而建立標準程序與委任機制。[R2]

2018 年後的治理轉換也經歷:

  • 多個 PEP 801x 模型;
  • PEP 8001 投票;
  • 最終將制度寫入 PEP 13。[R2][R8]

因此應分期:

Python 早期

創始者權重:高
共同體權重:逐步上升
最終裁決:BDFL

Python 現代

創始功勞:Guido
正式權力:Steering Council 與委任流程
設計材料:PEP 作者、Delegate、Core developers
實作與維護:多團隊共同體

現代 Python 某項 PEP 被接受,不應自動寫成「Guido 的設計風格」。


三十二、Go:共同創始與受管理提案

Go 官方 FAQ 與歷史頁明確指出:

  • Robert Griesemer、Rob Pike、Ken Thompson 於 2007 年 9 月開始討論與設計;
  • 語言源自他們及 Google 同事面對的大型軟體工程問題。[R1]

後續 Go 的語言、程式庫與工具重大變更,需進入 Change Proposal Process;官方 Contribution Guide 明確要求重大語言、API、工具與命令列改變先通過提案程序。[R9]

因此 Go 至少有三層歸因:

  1. 三位共同創始者的早期風格;
  2. Go Team 與實作者的工程風格;
  3. Proposal review、相容性政策與使用者經驗報告形成的制度風格。

將 Go 全部歸因於 Rob Pike,既不符合官方創始歷史,也會忽略後續制度。


三十三、Rust:創始者、重構共同體與 RFC 制度

Rust 的早期創始與 Graydon Hoare 密切相關,但現代 Rust 的設計已不能只以創始者解釋。

RFC 0002 定義重大功能進入語言與標準程式庫的受控路徑;RFC 1068 進一步描述團隊與 RFC 治理;當代專案又建立 Leadership Council 作為整體治理結構。[R3][R10]

Rust 個案至少應分為:

個人原型期
Mozilla/共同設計期
Pre-1.0 大規模重構
RFC 制度期
Edition 與穩定演化期
現代 Leadership Council/Team 治理

Ownership、Borrow checker、Traits、Cargo、Edition 並非都能以單一人物解釋。


三十四、C++:創始設計與 ISO WG21

Stroustrup 對 C++ 的早期架構、抽象理念與硬體模型具有不可替代的創始貢獻。

但 WG21:

  • 成立於 1990–1991 年;
  • 由 ISO/IEC JTC1/SC22 的國家會員專家參與;
  • 依正式 ISO 要求與 WG21 自身程序運作;
  • 使用提案文件、分組、會議與投票推進標準。[R4][R11]

因此現代 C++ 功能具有多重主體:

  • 提案作者;
  • Evolution/Library Working Group;
  • Core/Library wording;
  • 實作者;
  • 國家代表;
  • 委員會共識;
  • 使用者與既有程式相容壓力。

「C++ 喜歡增加功能,因為 Stroustrup 個人喜歡複雜」是低品質歸因。它忽略:

  • 委員會多方需求;
  • 已有生態;
  • 相容性;
  • 不同應用領域;
  • 提案流程;
  • 多編譯器實作。

三十五、Java:創始語言、平台公司與 JCP

Java 的早期設計與 James Gosling、Sun 團隊密切相關,但 Java 技術規格後來進入 Java Community Process。

JCP 官方資料將其描述為:

  • 國際 Java 社群標準化與批准 Java 技術規格的流程;
  • 結合社群審查、專家輸入與技術領導;
  • 通過的規格配有 Reference Implementation;
  • 另有 Technology Compatibility Kit 測試實作是否符合規格。[R5]

因此 Java 的歸因需要區分:

語言創始
平台與 JVM 實作
公司產品策略
JSR Expert Group
JCP Executive Committee
Reference Implementation
TCK 與相容性制度
廣大企業生態

JCP 也並非完全等同開放社群自治;公司、規格領導與正式會員結構仍具有不同權重。PLDST 應描述制度本身,而不是用「社群治理」四字抹平差異。


三十六、ECMAScript/TC39:實作者共識與分階段成熟

JavaScript 最初由 Brendan Eich 建立,但今日 ECMAScript 語言規格由 TC39 持續維護與演進。

TC39 官方將自身描述為由 JavaScript 開發者、實作者、學者等共同維護語言定義的團體;提案經多階段成熟,Stage 3 表示設計解決方案已完成主要問題處理,Stage 4 完成後進入下一年度規格快照。[R6]

TC39 的關鍵角色包括:

  • Proposal author;
  • Champion;
  • Committee participants;
  • Browser/engine implementers;
  • Spec editors;
  • Test262;
  • 生態回饋;
  • 共識程序。

因此今日某項 JavaScript 功能不應寫成「Brendan Eich 的設計」。更精確的說法是:

它是 ECMAScript 制度下,由特定 Champion 推動、經 TC39 共識、實作與測試成熟的功能。


第七部分 個人風格與制度風格

三十七、個人風格

個人風格來自:

  • 一位設計者在多項直接決策中的重複取捨;
  • 本人原始文章;
  • 可歸因的設計文件;
  • 明確拒絕;
  • 親自實作;
  • 具有實質裁決權的時期。

三十八、共同設計風格

共同設計風格不是各成員風格的簡單平均。

它可能來自:

  • 互相制衡;
  • 角色分工;
  • 共同問題;
  • 經常性折衷;
  • 固定討論程序;
  • 共同實作經驗。

Go 的早期風格應先研究三位創始者如何互動,而不是只將三個個人分數相加。


三十九、組織風格

組織風格可能包括:

  • 工程生產力;
  • 發行節奏;
  • 商業相容;
  • 平台控制;
  • 安全政策;
  • 人員與基礎設施。

公司需求可以深刻影響語言,但不應自動被寫成每位設計者的個人信念。


四十、制度風格

制度風格由規則反覆產生:

  • PEP;
  • RFC;
  • Stage;
  • WG;
  • JSR;
  • 選舉;
  • 共識;
  • Compatibility test;
  • Edition;
  • Release train。

它的特徵包括:

  • 決策速度;
  • 透明度;
  • 參與門檻;
  • 代表性;
  • 相容性偏好;
  • 實驗偏好;
  • 否決方式;
  • 責任分配。

四十一、生態風格

生態風格可能表現在:

  • 慣用程式碼;
  • 套件結構;
  • Framework;
  • 格式;
  • 相容慣例;
  • 教育;
  • 社群價值。

它不一定由規格強制,卻能比語法更直接影響一般使用者。


四十二、五層風格表示

Style(L,t)=(Spersonal,Scollective,Sorganizational,Sinstitutional,Secological)tStyle(L,t) = ( S_{personal}, S_{collective}, S_{organizational}, S_{institutional}, S_{ecological} )_t

任何個案研究都應標示分析的是哪一層。


第八部分 常見歸因錯誤

四十三、單一作者神話

將所有共同設計者、實作者與社群工作吸收為創始人的作品。

修正:

列出共同設計者
列出第一實作者
列出關鍵後續團隊
列出正式治理

四十四、後期特徵回寫

將後來制度接受的功能寫成創始者原始願景。

修正:

記錄功能首次提出時間
當時決定權
提案作者
批准機構
創始者是否參與

四十五、創始者人格化缺陷

語言的每個歷史包袱都被解釋為創始者性格缺陷。

修正:

  • 查核相容性;
  • 查核硬體;
  • 查核公司;
  • 查核委員會;
  • 查核實作;
  • 查核被否決替代方案。

四十六、制度去人格化

另一個極端是把所有決策歸於「社群」,使真正有權力的人消失。

「社群決定」可能實際表示:

  • 五人 Council 決定;
  • Champion 說服委員會;
  • 公司實作先行;
  • 少量 Core member 批准;
  • 國家代表投票;
  • 生態以採用形成壓力。

修正:

不只寫制度名稱,也寫誰在制度中具有何種權力。


四十七、提交者等於設計者

Version control 顯示誰提交程式碼,不一定顯示誰:

  • 提出概念;
  • 寫規格;
  • 做審查;
  • 提供測試;
  • 批准;
  • 維護。

Commit attribution 只是實作證據的一部分。


四十八、公司等於所有貢獻者

公司僱用多數核心成員,不代表:

  • 每項決策是公司命令;
  • 外部成員沒有影響;
  • 員工沒有專業自主;
  • 生態沒有否決能力。

同樣地,將公司影響完全忽略也不準確。


四十九、今日權力回寫過去

當代治理機構不能被回寫成早期創始階段的決策者;早期 BDFL 也不能被回寫成今日每項決策的權力來源。


第九部分 歸因操作流程

五十、步驟一:固定決策與時期

不要分析:

誰設計了 Rust?

應分析:

Rust 1.0 前的 ownership model 由哪些主體形成?
Rust RFC 制度如何改變語言特徵的批准方式?
Rust 2024 Edition 的正式責任鏈是什麼?

五十一、步驟二:建立角色表

Initiator
Co-designer
Spec author
Proposal author
Champion
Reviewer
Implementer
Approver
Maintainer
Affected community

五十二、步驟三:建立時間線

至少包含:

  • 問題提出;
  • 第一版;
  • 主要重構;
  • 公開發行;
  • 治理制度;
  • 標準化;
  • 創始者退出;
  • 當前狀態。

五十三、步驟四:建立權力圖

回答:

  • 誰可以正式接受?
  • 誰可以阻止?
  • 誰控制主要實作?
  • 誰控制 Release?
  • 誰控制商標與基礎設施?
  • 誰承擔相容性?
  • 誰能使提案因不實作而失效?

五十四、步驟五:建立證據層級

A 級

  • 正式規格;
  • PEP/RFC/Proposal;
  • 會議決議;
  • 版本控制;
  • 官方治理文件。

B 級

  • 設計者原始文章;
  • HOPL;
  • 官方訪談;
  • 發行回顧。

C 級

  • 可靠學術史;
  • 參與者回憶;
  • 技術出版物。

D 級

  • 社群印象;
  • 二手文章;
  • 無來源傳聞。

PLDST 核心歸因不能只依 D 級資料。


五十五、步驟六:分離五種歸因

對每一主體分別記錄:

Credit
Causal contribution
Authority
Accountability
Maintenance

五十六、步驟七:找反例

若初步判斷某創始者「反對複雜功能」,應查:

  • 是否曾支持複雜功能;
  • 是否因相容性而拒絕;
  • 是否由後期制度接受;
  • 是否只是時間與資源不足;
  • 是否本人後來改變觀點。

第十部分 PLDST 個案研究規格

五十七、人物個案不能只寫人物

每篇設計師個案需同時包含:

  1. 人物直接決策;
  2. 共同設計者;
  3. 實作團隊;
  4. 贊助組織;
  5. 治理制度;
  6. 後期生態;
  7. 創始者退出後的變化。

五十八、歸因標記

[F] 可確認史實
[Q] 當事人原始陳述
[D-I] 個人直接決策
[D-C] 共同設計決策
[D-O] 組織驅動決策
[D-G] 正式治理決策
[D-E] 生態形成結果
[I] 本文推論
[C] 反例或爭議
[U] 無法可靠歸因

五十九、標準歸因卡

語言:
決策:
時間:
創始者:
共同設計者:
提案作者:
實作者:
批准機構:
主要贊助組織:
相容性約束:
生態影響:
功勞歸因:
因果歸因:
權力歸因:
責任歸因:
維護歸因:
反例:
來源:
信心:

六十、人物風格結論格式

不得只寫:

X 是極簡派。

應寫:

在 t1 時期,X 對由其直接控制的 q1、q2、q3 決策,
反覆偏好某種取捨;此判斷不延伸至 t2 後由 G 制度
批准的全部語言功能。信心:中高。

第十一部分 制度比較框架

六十一、決策入口

  • 任何人可提案?
  • 需會員?
  • 需 Champion?
  • 需 Core member?
  • 需國家代表?
  • 需公司贊助?

六十二、成熟階段

  • 草案;
  • 實驗;
  • RFC;
  • Stage;
  • Candidate;
  • Stable;
  • 標準發布。

成熟階段本身反映制度風格。


六十三、決策方法

  • 個人裁決;
  • 多數決;
  • 共識;
  • 無反對;
  • 國家投票;
  • Council;
  • Team delegation;
  • 實作先行。

「共識」在不同制度中也可能具有不同實際含義。


六十四、實作要求

  • 是否需 Prototype?
  • 是否需多個實作?
  • 是否需測試?
  • 是否需 Reference Implementation?
  • 是否需 TCK?
  • 是否需生態回饋?
  • 是否需遷移工具?

TC39、JCP、Rust、Python 與 WG21 在這些方面具有不同制度指紋。


六十五、相容性與撤回

  • 何時可破壞相容性?
  • 是否有 Edition?
  • 是否允許 Feature gate?
  • 如何棄用?
  • 功能進入後能否撤回?
  • 誰支付遷移成本?

第十二部分 對六個案例的初步制度指紋

六十六、Python

早期:個人裁決權高
中期:PEP + BDFL/Delegate
現代:PEP + Steering Council + Delegation
演化偏好:程序化、相容、委任

六十七、Go

早期:三人共同設計
現代:Go Team + Proposal review
強約束:Go 1 compatibility
演化偏好:受控、小步、工程證據

六十八、Rust

早期:個人原型與公司共同體
現代:RFC + Teams + Leadership Council
特殊工具:Feature gate、Edition、stability
演化偏好:公開設計、實驗後穩定

六十九、C++

早期:創始者主導
現代:ISO WG21 多國委員會
決策單位:Papers、Working Groups、Polls
演化偏好:廣泛領域、正式標準、高相容性

七十、Java/JCP

早期:Sun 團隊與平台公司
制度:JSR + Expert Group + EC
證據:Specification + RI + TCK
演化偏好:平台一致性、標準批准、相容測試

七十一、ECMAScript/TC39

早期:快速個人設計
現代:Champion + Staged Proposal + Consensus
證據:Spec text、implementation、tests
演化偏好:實作者參與、逐階成熟、年度快照

第十三部分 PLDST SKILL 規格

七十二、輸入

SKILL 接受:

  • 設計師;
  • 語言;
  • 特定功能;
  • 特定時間;
  • PEP/RFC/JSR/Proposal;
  • Commit;
  • 標準文件;
  • 官方歷史。

七十三、處理管線

重新網路搜尋
→ Entity resolution
→ Timeline segmentation
→ Actor extraction
→ Governance extraction
→ Decision graph
→ Five-attribution scoring
→ Counterevidence search
→ Institution/person separation
→ Fact-check
→ Report

七十四、輸出 JSON 雛形

{
  "language": "Python",
  "decision": "acceptance of a hypothetical modern PEP",
  "period": "post-2018",
  "actors": [
    {
      "actor": "PEP author",
      "roles": ["proposal", "revision"],
      "credit": "high",
      "authority": "low-to-medium"
    },
    {
      "actor": "Steering Council or delegate",
      "roles": ["approval"],
      "authority": "high"
    },
    {
      "actor": "core developers",
      "roles": ["review", "implementation", "maintenance"]
    }
  ],
  "founder_attribution": {
    "applicable": false,
    "reason": "decision occurred after BDFL governance"
  },
  "confidence": "high"
}

七十五、SKILL 禁止事項

不得:

  • 將語言全部歸於最知名人物;
  • 將公司名稱當成單一行動者;
  • 將「社群」當成無結構主體;
  • 將 Commit author 自動當提案作者;
  • 將提案作者自動當批准者;
  • 將創始功勞等同當前權力;
  • 將制度批准等同原始發明;
  • 將生態結果寫成設計者明確意圖;
  • 忽略設計時期;
  • 不查核共同設計者。

第十四部分 方法論限制

七十六、文件不完整

私人討論、公司內部決策與未保存郵件可能使歸因不完整。

因此「沒有文件」不等於「沒有貢獻」。


七十七、公開敘事可能重構歷史

創始者、公司與社群都可能:

  • 強化自己的角色;
  • 簡化共同設計;
  • 以後來原則重述早期動機;
  • 忽略失敗提案。

需要交叉查核。


七十八、制度文件不等於實際權力

正式規則可能說所有人可參與,但實際影響仍取決於:

  • 時間;
  • 專業;
  • 雇主資源;
  • 英語;
  • 會議參與;
  • 實作能力;
  • 社群地位。

PLDST 應區分 formal authority 與 effective influence。


七十九、數值不能取代敘事

多主體歸因可用矩陣輔助,但不應假裝存在精確的「某人貢獻 37%」。

數值只用於:

  • 比較;
  • 缺口檢查;
  • 信心;
  • 可視化。

八十、共同體也可能排除

去除創始者神話不代表社群或委員會天然公平。

制度可能存在:

  • 參與門檻;
  • 公司集中;
  • 專業壁壘;
  • 地域與語言偏差;
  • 非正式權力;
  • 決策疲勞。

制度也需要被分析,而不是被理想化。


第十五部分 第二輪事實校對紀錄

八十一、Go 的創始歸因

已核對 Go 官方 FAQ、Go 官方案例與歷史材料:

  • 2007 年 9 月由 Robert Griesemer、Rob Pike、Ken Thompson 共同開始設計;
  • 不應只歸因於 Rob Pike;
  • 後續重大語言、API、工具變更需經 Change Proposal Process。

八十二、Python 的治理轉換

已核對 PEP 13、PEP 8000 與 PEP 8001:

  • Guido van Rossum 至 2018 年 7 月擔任 BDFL;
  • 新治理模型由社群程序選出;
  • 現行核心為五人 Steering Council;
  • Council 擁有廣泛但傾向少直接使用的權力。

本文沒有將現代 Python 決策回寫為 Guido 個人裁決。


八十三、Rust 的 RFC 與治理

已核對 RFC 0002、RFC 1068 與 Leadership Council 官方儲存庫:

  • RFC Process 自 2014 年建立重大變更的受控路徑;
  • 技術決策與團隊治理已有制度化文件;
  • 現代 Rust 不宜僅以 Graydon Hoare 個人風格概括。

八十四、C++ WG21

已核對 ISO C++ 官方委員會與 Standing Documents:

  • WG21 成立於 1990–1991 年;
  • 由 ISO/IEC JTC1/SC22 國家會員專家參與;
  • 具有正式提案、分組、會議與投票程序。

本文仍保留 Stroustrup 的創始功勞,但未將全部現代 C++ 決策歸於個人。


八十五、Java JCP

已核對 JCP Procedures Overview:

  • JCP 負責 Java 技術規格的標準化與批准;
  • 採用社群審查、專家輸入與技術領導;
  • 通過規格配有 Reference Implementation 與 TCK。

本文沒有把 JCP 誤寫成完全去中心化社群,也沒有把 Java 全部視為 Oracle 或 Gosling 的單一作品。


八十六、TC39

已核對 TC39 Process 與 ECMAScript 官方頁面:

  • 現代 ECMAScript 由 TC39 持續維護;
  • 新功能採分階段 Proposal;
  • Stage 3 與 Stage 4 有不同成熟與實作要求;
  • Stage 4 完成功能進入後續年度規格。

本文沒有將現代 JavaScript 功能歸因於 Brendan Eich。


八十七、HOPL 方法

已核對 HOPL-IV 的內容指引與研究定位:

  • 語言史研究需處理設計、演化、實作、標準化與社會影響;
  • 本文以多主體方法補充,而非取代 HOPL 的歷史重建。

第十六部分 結論

程式語言的歷史需要人物,因為最初問題、審美、概念與勇氣往往確實來自具體的人。但人物不應吞噬共同體與制度。

完整語言歸因應同時回答:

  • 誰提出?
  • 誰共同設計?
  • 誰實作?
  • 誰批准?
  • 誰維護?
  • 誰出資?
  • 誰承擔相容性?
  • 誰透過採用或拒絕塑造結果?
  • 誰在今日仍有權改變它?

本文提出:

Lt=E(F,D,I,G,O,S,U,X)tL_t = \mathcal{E} ( F, D, I, G, O, S, U, X )_t

並將歸因分為:

Credit+Causality+Authority+Accountability+Maintenance\boxed{ Credit + Causality + Authority + Accountability + Maintenance }

PLDST 之後研究任何設計師時,都不得把「某人是創始者」直接推導成:

此人造成所有特徵
此人代表全部社群
此人對今日決策仍有權力
此人應承擔全部缺陷

更精確的結論形式是:

某位設計者在某一時間相位,對某組可直接歸因的決策展現了穩定風格;該風格後來可能被共同設計、實作限制、組織需求、正式治理與生態選擇保留、修正、放大或抵消。

因此,程式語言設計師風格研究的成熟標準,不是能說出更多著名人物,而是能夠在承認個人創造力的同時,不抹去共同工作與制度因果。

最終原則為:

承認創始者不把語言歷史簡化為創始者\boxed{ \text{承認創始者} \quad\land\quad \text{不把語言歷史簡化為創始者} }

附錄 A 五維歸因速查

維度 問題
Credit 誰應獲得承認?
Causality 誰與哪些條件造成結果?
Authority 誰能批准或否決?
Accountability 誰應處理後果?
Maintenance 誰持續支付維護成本?

附錄 B 參與者速查

Founder/Initiator
Co-designer
Implementer
Library/Tool author
Technical leader
Governance body
Organization/Sponsor
Standards body
User/Ecosystem
External constraint

附錄 C 來源與參考文獻

[R1] Go Project, “Frequently Asked Questions,” “Using Go at Google,” “Go, Open Source, Community,” and “How Go Was Made.”
— Go 由 Robert Griesemer、Rob Pike、Ken Thompson 共同啟動,以及其組織工程背景。

[R2] Python Enhancement Proposals, “PEP 13 – Python Language Governance,” “PEP 8000 – Python Language Governance Proposal Overview,” and “PEP 8001 – Python Governance Voting Process.”
— Python 從 BDFL 轉入 Steering Council 的正式治理歷史與選擇程序。

[R3] Rust Project, “RFC 0002 – RFC Process,” “RFC 1068 – Rust Governance,” and Rust Leadership Council repository.
— Rust 重大變更、團隊治理與現代專案權力結構。

[R4] ISO C++ Foundation, “The Committee: WG21,” “SD-4: WG21 Practices and Procedures,” and “SD-7: Mailing Procedures and How to Write Papers.”
— C++ 國際標準委員會、參與結構與提案程序。

[R5] Java Community Process, “JCP Procedures Overview,” “Program Overview,” and “JSR Overview.”
— Java 規格批准、Expert input、Reference Implementation 與 Technology Compatibility Kit。

[R6] Ecma TC39, “The TC39 Process,” TC39 official site, and ECMAScript specification repository.
— ECMAScript Proposal stages、Champion、Committee consensus、實作與年度規格。

[R7] ACM SIGPLAN, HOPL-IV Papers and Content Guidelines.
— 程式語言歷史對設計、實作、演化、標準化與社會影響的研究要求。

[R8] Python Enhancement Proposals, PEP 8010–8016 governance model proposals.
— Python 在 2018 年對多種治理制度的公開比較。

[R9] Go Project, “Contribution Guide,” “Go Wiki: Proposals,” and “Handling Issues.”
— 重大 Go 語言、API、工具與命令列變更的 Change Proposal Process。

[R10] Rust Project, RFC Book and governance repositories.
— RFC、Teams、Leadership Council 與技術決策分工。

[R11] ISO C++ Foundation, WG21 Standing Documents and Meetings and Participation.
— 多國專家、Working Groups、Papers、Meetings 與正式程序。


附錄 D PLDST 歸因標記

[F] Fact
[Q] Direct quotation or declared principle
[D-I] Individual decision
[D-C] Collective design decision
[D-O] Organization-driven decision
[D-G] Governance decision
[D-E] Ecosystem outcome
[I] Interpretation
[C] Counterevidence or controversy
[U] Uncertain attribution