版本控制,版本升級是不是個問題?

Posted by Mr. Saturday

Mr. FridayJava會步上 COBOL 的後塵嗎? 一文還真是引起了相當多的討論,連在 FunP 上面都有一些高手們長篇大論的回應,另外我也看到了 qing 前輩也寫了篇文章 (剛剛也看到他來留言了) 來參與討論,Friday 也針對一些問題跟我私底下聊了一下.正好我自己也有一些淺薄的經驗,這邊就斗膽拿出來跟大家分享一下.不過我先開門見山地表明自己的觀點好了,基本上我覺得拿兩個程式語言來比較好壞,就跟拿英文和中文來比較好壞一樣,意義不大.每種語言有他存在的目的和當初被創造的理由,也各有其優缺點,而且語言會因為使用者而呈現出不同的面貌,真實生活中的語言如此,程式語言自然也不例外.

我比較想要談的,是像 Java 語言版本升級的問題,這也是 qing 前輩著墨甚多的一個問題,底下引述一段:

你沒有必要苦苦追趕Third party程式庫的新版本。通常,在產品開發之前,你就會決定你的技術解決方案,確定你所用的程式庫可以滿足你的需求。在產品開發中途決定更換所用程式庫的major version或到minor version是滿嚴重的事。大多數會需要選定新版的程式庫,多半是發生在選定開發一個新產品的時候。這麼一來,又怎麼會有「程式老跳訊息告訴你這個jar檔版本太舊不是他要的」的問題呢?

對於版本升級這個問題,我認為這絕對是個對工程師影響重大的事情.這邊我想舉出一個另外的例子和切入點,大家就會知道為什麼版本控制和升級會是個大問題.

大家的討論通常會把程式語言聚焦在產品上面.在單純地開發一個產品這方面,可能就像 qing 所講的,你一開始可以選定技術方案,確定所用的程式庫,中途不要亂更換版本,就不會有什麼問題,不過多數的時候在實際上,世界並沒有這麼美好.程式語言的升級有的時候不只是更改語法或是加入新的 language feature 和 library,很多時候伴隨著升級而來的,是去除舊版本的 bug 和替換舊的 library,甚至於改變某些 function 的行為.這並不是你是否要當一個新版魔人的問題,當你發現舊版本的 bug 可能會引響你的產品,甚至於你原本用的 function 被 deprecated 掉的時候,你必須去考慮升級,確保日後的相容性和穩定性.即使這件事情是發生在你的開發過程中,你也必須花費心力去評估或做修正,這當然是個大問題.不過當然,如果你開發的產品是如此地完美,以致於以後所有的版本更新都不會影響到你,那麼以上我說的對你來說就不成立.但我相信大多數的人不是如此.

以上的討論只放在用程式語言開發一個一個獨立的產品上面,各位是否想過,當一個語言成為你全公司的 infrastructure 的時候,狀況又會是怎麼樣?小弟任職的軟體公司,很不幸地就以 Java 去打造至關重要的 infrastructure.也就是說現在我們公司的工程師不只是用原生的 Java 去開發一個一個的產品而已,Java 這個語言本身已經擴展到全公司,成為很多環境的基礎,包括 parallel programming 的 framework 如 MapReduce;Remote Procedure Call 的 framework 等等,都是 based on Java 打造出來.這種規模和等級已經不是單一產品的問題,而是牽涉到以後所有還沒出現的產品和既有的產品,和全公司上千甚至上萬名工程師每天如何去寫程式的問題.

也因此,小弟公司內部有一個 team 叫做 Java Infrastructure Team,每次 Java 預定要推出升級的版本時,他們就如臨大敵,工作量暴增,必須立刻評估新版本對於全公司的影響,立刻做出反應,這牽涉到的問題多如牛毛,在管理上:有沒有必要升級是一個問題;什麼時候升級是一個問題;其餘合作廠商是否升級也是一個問題;在技術上:新版本的 performance 是否有差異是一個問題;新版本是否又會帶來新的 bug 是一個問題;對於既有產品的影響又是一個問題;在人員教育上:升級之後的磨合期也是一個問題.請注意,我不是在談單一個人去開發單一產品,我是在說版本升級 (即使是一點點最細微的更動) 如何同時影響到數千個產品,數千位工程師.在這種規模之下,很不幸地,你必須去苦苦追趕程式語言的升級.我想這也是為什麼 Mr. Friday 會提出版本升級的問題.

也因此,我認為版本升級,當然是個非常重大的議題.

喜歡這篇文章嗎? 分享出去給作者一點鼓勵吧!