明智軟體開發——Ivar Jacobson博士上海英雄會演講的主要思想

myan發表於2020-04-04

9月5日在上海舉辦的CSDN英雄會上,Ivar Jacobson博士做了第一個主題演講,演講的題目是《明智軟體開發》,概括了Jacobson博士最近一兩年對於軟體開發的最新思考,而且是他第一次對公眾做這個演講。很可惜由於某些意外事件,大會開場時間拖延了15分鐘,本來可以給Jacobson博士的機動時間被拖沒了,他到最後只要擇其要者簡單說幾句,很多地方一帶而過。會下很多在場的朋友都跟我說,這個演講實際上是當天最好的演講。這樣一個精彩而重要的演講,因為時間緊張而未能充分展開,非常令人遺憾。

當天演講之前5分鐘,Jacobson博士突然邀請我給他做現場翻譯,並且說:“你只需要在你認為有必要的時候打斷我,不要逐句翻譯。”我當時壓力很大,因為這個演講我也沒聽過,一走上前臺,我腦子裡噌噌噌閃過無數雜念:這個題目到底講什麼?其中涉及的專業知識我不懂怎麼辦?Ivar博士帶北歐口音的英語聽不懂怎麼辦?我該站在他身邊還是離他遠點以保證大師的光輝形象?我該在什麼地方什麼情況下打斷他?用什麼方式通知他?這些問題如果在事前有準備,本來是可以從容應對的,但是事情發生得非常突然,我來不及思考就走到他身邊,而且一上來就開啟了錯誤的PPT。在後來將近40分鐘的演講裡,我多少有點緊張,表現得不太好,聽錯聽漏了一些地方,沒有很好地完成Ivar交給我的任務,對於演講效果的欠佳,我也負有不可推卸的責任。可能也是因為這個原因,當天我的狀態一直不太好,在後面的演講和主持環節,我始終興奮不起來。藉此機會向在場的朋友致歉。

會後很多朋友都向我索要這個演講的PPT,可以在這裡下載:http://download.csdn.net/source/613191 

下面我憑記憶把這個Jacobson博士這個演講的主要思想扼要列舉出來。由於當時我比較緊張,而且人的記憶本身就有出錯的可能,因此很有可能不準確。請IJI公司的朋友和在場的聽眾指出我的錯誤。

在演講的一開始,Ivar首先革了舊思想的命。他回顧了軟體開發思想從過程化,到物件導向,再到元件化、UML、UP、RUP、XP的沿革,然後說這些思想都曾經自以為銀彈,但是都被證明並非銀彈。事實上,銀彈不存在,我們需要的僅僅是明智的軟體開發方法(smart software development)。那麼到底什麼是smart呢?Ivar認為要搞清楚這個問題,就必須想現在一些流行的unsmart觀念開火。比如,很多大型組織相信過程而不相信人,這就是unsmart。過程不能開發軟體,只有人才能開發軟體。所以軟體開發以人為本就是smart。有的人相信工具,但是工具本身只是放大器。如果落在了笨蛋手裡,“A fool with tools is still a fool, but a dangerous fool.” 有些人以文件為中心,但是文件並不能執行,而且最重要的是,沒有人願意讀文件。機器讀不懂文件,人又不願意讀文件,那麼製造大量的文件有什麼意義呢?還有人使用瀑布模型,相信事前能夠產生完整的設計,甚至細節都能考慮清楚,但是隨著開發的推進,越來越多的paperware最終把開發工作壓垮。這些都是unsmart的觀念。

而所謂smart,則是以人為本的,承認軟體需求變化的不可避免和不可預知。在這一認識的基礎之上,Ivar丟擲了他的觀念,即軟體必須從一個小的可執行的skinny system開始,逐漸充實生長稱為full-fledge的成熟系統。在PPT上,Ivar 用一隻小羊骨架表示 skinny system,而這隻小羊最後將長成又大又肥毛又多的澳洲美利奴羊,這就是成熟系統,相信很多在場的朋友印象深刻。Ivar強調,skinny system必須是skinny,拋棄一切細節,但是又必須可執行。在成長為成熟系統的整個過程中,都必須確保系統是可執行的。隨著細節不斷地被認識,系統逐漸充實完整。

(Ivar 講到這裡,我在腦子裡問了一個問題:“這與我們熟知的非拋棄原型系統有何分別呢?後者不也是強調從一個原型出發,逐漸完善稱為產品嗎?而且就原型系統而言,實踐證明拋棄原型效果比非拋棄原型要好,難道大師的smart就是指這個?另外,這跟敏捷思想有什麼不同嗎?敏捷不也是強調儘早交付可執行程式碼,並不斷重構嗎?”果然緊接著,Ivar就回答了這個問題。)

Ivar緊跟著提到了系統架構,他問在場聽眾,有多少人認為系統架構很重要,不少人舉了手,他滿意地說,不錯不錯,“China is fantastic!”,他在其他國家問這個問題,只有一小部分人認為架構很重要。他認為,對於架構的態度,人們容易走極端。要麼認為完全不必要,要麼就追求恢巨集的企業架構,實際上都不是正確的態度。他認為基本而簡單的架構是非常重要的,這是區別smart方法與敏捷方法的關鍵。他認為,儘管smart方法與敏捷方法共享很多相似的部分,比如重構,增量式的前進,程式設計師測試,但是在對待skinny system的態度是截然不同的。Agile認為,應儘快產生可執行程式碼,架構可以隨後重構出來,而他認為,skinny system就是架構,開發skinny system的過程也就是確定架構的過程。而架構是一個系統中最重要的部分,對質量要求不折不扣的部分,因此必須精心設計,絲毫馬虎不得,也別指望事後能夠通過重構產生好的架構。另外一方面,也不要執迷於那些通用的龐大的企業級架構。正如skinny system暗示的,好的架構都是小而簡單的。Ivar認為,軟體各部分對於質量的要求是不一樣的,與架構無關的部分,適當降低質量要求以求得開發效率的提升可以的,事後也完全可以通過重構等手段改善之。然而架構卻是必須從一開始就認真對待的,Ivar甚至說,“唯一重要的質量就是架構的質量”,茲事體大,不可不察。在這一點上,Ivar還是堅持他在UP中 “Elaboration” 的思想,也即是說,系統早期設計階段(skinny system)必須力求深思熟慮、精心設計,為後面的敏捷式開發提供良好的支撐。

由此可見,Smart方法,基本上可以看做是 UP 與 Agile 的一個有機組合。我沒有實踐經驗,但是從道理上講,這應該是一種好的方法。聽 Ivar 說,他的得力合作者黃邦偉博士已經在多個重大專案中實踐此方法,取得非常出色的成果。至於更進一步的細節,我也就不瞭解了。

以上,供有興趣者參考,並請知情的朋友指出錯誤之處。

相關文章