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

在軟件開發領域, Ward Cunningham 有許多獨到的見解與成就。
1949年,Ward Cunningham 出生于印第安納州的密歇根市,并在萊克縣的一個小鎮中長大。懷揣著對計算機濃厚的興趣,在普渡大學學習期間,他獲得了跨學科工程(電子工程和計算機科學)學士學位以及計算機科學碩士學位。1978年,Ward Cunningham 完成了全部學業。
( 普渡大學校徽)
畢業后的 Ward Cunningham 先后擔任過研發總監、首席工程師等職位,也自己創辦了 Cunningham&Cunningham,Inc.——專門從事面向對象編程的咨詢公司,以及一個面向軟件開發人員的教育性非盈利組織:The Hillside Group。
在自己豐富的軟件開發實踐的基礎上,Ward 總結出了很多經驗以及獨到的思想,這些思想也成為日后軟件開發人員進行開發實踐的準則。
Cunningham 定律與 Wiki
Ward Cunningham 認為:“ 在互聯網上獲得正確答案的最佳方法不是提出問題,而是發布錯誤的答案。”這就是 Cunningham 定律,指人們更正錯誤的答案比回答問題更快。在日后的工作中,Cunningham 也在一直貫徹這一想法。
20世紀80年代末,Cunningham 在使用一個名為 HyperCard 的程序時,發現了這樣一個問題:雖然 HyperCard 程序管理了許多稱為“卡片”的資料,每張卡片都可劃分字段、上傳圖片,且支持修改編輯。這個類似網頁的程序對當時的人們來說很有用,但要想創建卡片與卡片之間的鏈接,就非常難了。
為了解決這個問題,他在原有程序的基礎上增添了一個新的鏈接功能。用戶只需將鏈接輸入卡片上的一個特殊字段,原有每一字段的按鈕便會引導用戶去新的目標卡片。鏈接功能加上 HyperCard 卡片的應用,能夠讓用戶更正卡片上的錯誤內容,并鏈接到正確的卡片上。
這個在 HyperCard 的程序上寫出的小功能,就是 Ward Cunningham 對 Wiki 的最初構想。
1995年,Ward Cunningham 正式推出了第一個 Wiki 網站:WikiWikiWeb,方便程序員們進行思想交流。
關于為什么要創建 Wiki 這一問題,Cunningham 有話要說:“ 起初創建 Wiki,我的目的就是創建一個能夠將彼此經驗聯系起來的環境,從而發現編程的模式語言。”這個想法在他看來稀松平常。以至于后來接受采訪時,被問及是否考慮過為 Wiki 的概念申請專利,Cunningham 解釋說:“這個想法聽起來就像是沒人愿意為之付費的東西。”
盡管 Ward Cunningham 不考慮為 Wiki 申請專利,但這并不表明他放棄了 Wiki。自Wiki 誕生之后,他就一直希望在全世界范圍內推廣 Wiki。
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 的時候,Cunningham 認為 Wiki 也應該實現在大型代碼庫中協作的過程。例如,你在一堆代碼中發現了一個問題,并且知道這個問題的解決方案。但是當你想去解決這個問題的時候,必須同這些代碼作者們去溝通、協商,這是一個非常困難且麻煩的過程。而實現代碼集體所有,實際上就會大大地減少溝通的成本。
因此,Wiki 中應用了代碼集體所有權的理念。Wiki “ 開放”的特點決定了當內容不完整或者出現錯誤的時候,所有人都可以用他們認為合適的方式加以編輯。 在 Wiki 中,所有參與者都對此負責。
Cunningham 與《敏捷宣言》
“ 我寧愿轉向下一個想法,也不愿為保持最后一個想法的純正而奮斗。”
敏捷真正帶給軟件的是一種能力,通過使團隊中的成員達成共同的目標,實現高質量的產品交付。“當《敏捷宣言》的四個價值觀被整齊地列在黑板上時,我們只是在感慨,雖然我們是十七個不同的個體,但寫在黑板上的內容是我們共同想要表達的東西。”回憶起2001年的雪鳥會議,Cunningham 這樣說。
而對于“ 稀釋”,也就是新想法的注入,他認為,這一行業是在不斷發展的,如果不能不停地嘗試用多種方法去做事情,就不再會有新的創造力。因此,作為一名極限編程的狂熱愛好者,Cunningham 極力支持將敏捷與極限編程的工程實踐結合使用。
不論是 Wiki、面向對象編程、極限編程還是《敏捷宣言》,對于這些新的嘗試,Ward Cunningham 選擇迎難而上。對此,他也有自己的一套看法:“ 如果你想要做的好,那就想辦法每天都去做 。選擇你害怕的事情,而不是選擇你擅長的事情,然后克服它,這就是推動我前行的動力。”
