敏捷史話十七:維基(Wiki)背後的靈感來源—Ward Cunningham

敏捷史話十七:維基(Wiki)背後的靈感來源— Ward Cunningham

以下內容轉自敏捷史話 - 敏捷開發中文社群

摘要

:提及 Ward Cunningham,我們可能會想到 Wiki、程式碼集體所有……但 Wiki 是如何誕生的呢?他在這一領域還有哪些值得我們研究和借鑑的思想呢?

在軟體開發領域, Ward Cunningham 有許多獨到的見解與成就。

1949年,Ward Cunningham 出生於印第安納州的密歇根市,並在萊克縣的一個小鎮中長大。懷揣著對計算機濃厚的興趣,在普渡大學學習期間,他獲得了跨學科工程(電子工程和計算機科學)學士學位以及計算機科學碩士學位。1978年,Ward Cunningham 完成了全部學業。

敏捷史話十七:維基(Wiki)背後的靈感來源—Ward Cunningham

( 普渡大學校徽)

畢業後的 Ward Cunningham 先後擔任過研發總監、首席工程師等職位,也自己創辦了 Cunningham&Cunningham,Inc。——專門從事面向物件程式設計的諮詢公司,以及一個面向軟體開發人員的教育性非盈利組織:The Hillside Group。

在自己豐富的軟體開發實踐的基礎上,Ward 總結出了很多經驗以及獨到的思想,這些思想也成為日後軟體開發人員進行開發實踐的準則。

Cunningham 定律與 Wiki

Ward Cunningham 認為:“

在網際網路上獲得正確答案的最佳方法不是提出問題,而是釋出錯誤的答案

。”這就是 Cunningham 定律,指人們更正錯誤的答案比回答問題更快。在日後的工作中,Cunningham 也在一直貫徹這一想法。

20世紀80年代末,Cunningham 在使用一個名為 HyperCard 的程式時,發現了這樣一個問題:雖然 HyperCard 程式管理了許多稱為“卡片”的資料,每張卡片都可劃分欄位、上傳圖片,且支援修改編輯。這個類似網頁的程式對當時的人們來說很有用,但要想建立卡片與卡片之間的連結,就非常難了。

敏捷史話十七:維基(Wiki)背後的靈感來源—Ward Cunningham

為了解決這個問題,他在原有程式的基礎上增添了一個新的連結功能。使用者只需將連結輸入卡片上的一個特殊欄位,原有每一欄位的按鈕便會引導使用者去新的目標卡片。連結功能加上 HyperCard 卡片的應用,能夠讓使用者更正卡片上的錯誤內容,並連結到正確的卡片上。

這個在 HyperCard 的程式上寫出的小功能,就是 Ward Cunningham 對 Wiki 的最初構想。

1995年,Ward Cunningham 正式推出了第一個 Wiki 網站:WikiWikiWeb,方便程式設計師們進行思想交流。

關於為什麼要建立 Wiki 這一問題,Cunningham 有話要說:“

起初建立 Wiki,我的目的就是建立一個能夠將彼此經驗聯絡起來的環境,從而發現程式設計的模式語言

。”這個想法在他看來稀鬆平常。以至於後來接受採訪時,被問及是否考慮過為 Wiki 的概念申請專利,Cunningham 解釋說:“這個想法聽起來就像是沒人願意為之付費的東西。”

儘管 Ward Cunningham 不考慮為 Wiki 申請專利,但這並不表明他放棄了 Wiki。自Wiki 誕生之後,他就一直希望在全世界範圍內推廣 Wiki。

敏捷史話十七:維基(Wiki)背後的靈感來源—Ward Cunningham

2001年,Cunningham 與他人合著了一本名為《The Wiki Way》的書,書中主要介紹瞭如何安裝、建立並管理 Wiki 系統。2011年,他又啟動了 Smallest Federated Wiki 專案——用於 Wiki 聯合的軟體平臺,他為 Wiki 添加了原始碼控制系統,以及其他軟體開發工具中的分叉功能……

至今,Ward Cunningham 仍在致力於推廣 Wiki 技術。

Cunningham 與面向物件程式設計

作為一名程式設計師,Ward Cunningham 幾乎對所有的程式設計模式都有所涉獵,包括面向物件和敏捷建模。

他支援面向物件程式設計中長期關注程式碼設計的實踐,更偏向於注重程式碼和人的關係。為了推動模式語言的運用,Cunningham 釋出了一個新的網站:

模式共享社群

,希望將不同作者的軟體模式集中在一起,展示現有模式之間的關係,以鼓勵使用者貢獻更多的模式,獲得更好的軟體。

Cunningham 與極限程式設計

在建立 Wiki 的前幾個月,Ward Cunningham、Kent Beck 一直與堅持軟體工程的教條主義者們爭論,爭論的內容主要在於是否實踐程式碼集體所有權。

Cunningham 認為,“程式碼集體所有權有很大的好處,不僅能夠降低風險,還可以提升開發效率……”而教條主義者們認為,“這簡直太荒謬了!實行程式碼集體所有權後,你永遠不會有責任。如果你沒有責任,你永遠不會有質量。唯一能讓你負起責任的方法就是承擔責任。如果你不想再讓人寫出 Bug,你就必須把這個責任放在他的身上……”雙方並沒有說服彼此,但這場爭論讓 Cunningham 更堅定了維護程式碼集體所有權的信念。

敏捷史話十七:維基(Wiki)背後的靈感來源—Ward Cunningham

在設計 Wiki 的時候,Cunningham 認為 Wiki 也應該實現在大型程式碼庫中協作的過程。例如,你在一堆程式碼中發現了一個問題,並且知道這個問題的解決方案。但是當你想去解決這個問題的時候,必須同這些程式碼作者們去溝通、協商,這是一個非常困難且麻煩的過程。而實現程式碼集體所有,實際上就會大大地減少溝通的成本。

因此,Wiki 中應用了程式碼集體所有權的理念。Wiki “

開放

”的特點決定了當內容不完整或者出現錯誤的時候,所有人都可以用他們認為合適的方式加以編輯。

在 Wiki 中,所有參與者都對此負責

Cunningham 與《敏捷宣言》

我寧願轉向下一個想法,也不願為保持最後一個想法的純正而奮鬥

。”

敏捷真正帶給軟體的是一種能力,透過使團隊中的成員達成共同的目標,實現高質量的產品交付。“當《敏捷宣言》的四個價值觀被整齊地列在黑板上時,我們只是在感慨,雖然我們是十七個不同的個體,但寫在黑板上的內容是我們共同想要表達的東西。”回憶起2001年的雪鳥會議,Cunningham 這樣說。

敏捷史話十七:維基(Wiki)背後的靈感來源—Ward Cunningham

而對於“

稀釋

”,也就是新想法的注入,他認為,這一行業是在不斷髮展的,如果不能不停地嘗試用多種方法去做事情,就不再會有新的創造力。因此,作為一名極限程式設計的狂熱愛好者,Cunningham 極力支援將敏捷與極限程式設計的工程實踐結合使用。

不論是 Wiki、面向物件程式設計、極限程式設計還是《敏捷宣言》,對於這些新的嘗試,Ward Cunningham 選擇迎難而上。對此,他也有自己的一套看法:“

如果你想要做的好,那就想辦法每天都去做

。選擇你害怕的事情,而不是選擇你擅長的事情,然後克服它,這就是推動我前行的動力。”