1
張大胖剛進入公司,遇到了一個神奇的同事:何小痩。
別人工作都很忙, 何小痩工作似乎特別輕松,從來不加班,到點兒就回家。
張大胖向別人一打聽,原來何小痩一直在維護一個老項目,維護了5年了。
一次下班的路上,張大胖碰到了何小痩,向他詢問起了這個項目的細節。
何小痩說:“這個項目使用Applet技術做的,實現了一個網頁版的在線客服系統,客戶在使用網站的時候,如果有問題,可以直接在網頁上向客服人員提問,客服按照排隊次序挨個回復。別看功能簡單,在90年代中后期可是非常先進的功能。”
張大胖驚道:“Applet,這可是上古的技術啊!”
何小痩:“這個Applet項目依賴一個古董級的Library,是基于JDK1.1開發的!”
張大胖再次大驚:“JDK1.1,那可是最早的一批JDK啊。”
何小痩說:“由于時代久遠,這個Library已經不再維護了,每次Applet項目添加新需求,修改Bug,只能只用JDK1.1的功能, 并且在JDK1.1上進行編譯。”
張大胖咂舌不已,感慨現在居然還有這樣的系統存在。
張大胖問道:“那你豈不是被困到了這個JDK1.1之上。”
何小痩說:“什么叫被困住啊,這是好事啊,你想想這個項目沒人會,技能獨特,我可以一直把這個項目給維護下去,領導想裁我都裁不了。”
張大胖心想,這個工作很不錯啊, 以何小痩的年齡,再維護個幾年,興許就可以退休了。
沒想到,一年以后,JAVAScript開始大行其道。
Applet被迅速拋棄,整個項目被用JavaScript重寫。
新項目上線以后,何小痩被辭退了。
2
這個故事是我杜撰的,但是其中的Applet項目確是真實存在的。
在計算機行業,為什么不能通過維護老項目來度過中年危機呢?
主要有兩個原因:
技術發展實在太快
開發成本太高,而維護成本太低
計算機技術每隔5~10年,就會刷新一次,新技術往往具有更高的性能,更低的成本或者更好的用戶體驗。
80年代的PC,90年代的局域網,00年代的互聯網,10年代的移動互聯網,中間還夾雜著大數據,云計算,現在又出現了GPT。
每個時代的技術棧都是不一樣的,一般的程序員經過努力,能精通一個時代的技術,再發發狠,最多再熟悉下一個時代的,你要想讓他精通三個時代的技術,那就要了命了。
可是應用程序不等人,它會不斷地演進,從C/S變成B/S,Browser變成手機,Server變成云。
不演進應用就會落伍,就會死掉。
在演進的過程中,它會不斷摧毀那些老程序員。程序員工作了10年以后,就可能遇到危機。
所以何小痩想通過維護那個JDK1.1的Applet退休,是不可能的。
不過,事情總有例外,有些系統任你風吹浪打,我就是巋然不動。
這些系統的特點是業務極其穩定,對業務的理解遠大于對技術的要求(如美國的失業救濟金系統),又非常關鍵,用古董的COBOL開發完成以后沒人敢動,硬件也不變,軟件也不變,就這么運行了幾十年!
然后疫情來了,領取失業救濟的人數暴漲,系統崩潰,但是沒人能維護了。
自然語言描述的需求和計算機代碼之間有著巨大的鴻溝,程序員需要耗盡心血去fix各種意想不到的問題,實現客戶的需求。
所以軟件開發時特別麻煩,成本超級高,但是一旦開發完成,部署,穩定運行以后,神奇的事情發生了:
一個幾十人的開發團隊,留下幾個人來維護這個項目就夠了,剩下的人可以投入新的項目。
反正就是改一些不重要的Bug,或者實現一點兒新需求,要那么多人干嘛?!
當然,留下來維護系統的人,薪水是不會很高的。
正是由于這兩點原因,個人想通過維護老項目來度過中年危機是非常難的。
3
真想一直靠維護老項目生存,有這么幾種可能。
(1)個人項目
找到一個小眾領域,和個人技能相結合,開發出一個軟件,一直維護。
典型代表是《一個國外小老頭,用被淘汰的編程工具,開發了一個了不起的軟件》,他用Delphi開發了一個3D CAD程序PROLINES,專門用來設計船舶。
PROLINES這幾十年也在不斷改進這個軟件,推出新版本,比如支持更高清的分辨率等等。
(2)開源軟件
linux,MySQL,Apache HTTP Server都是典型代表,它們存活了二三十年,在可預見的未來,還會一直存在下去。
這些軟件對應的是計算機最基礎的知識:操作系統,數據庫,計算機網絡,幾十年不變。
如果能成為這些著名軟件維護者的一員,生活會相當不錯。
(3) 憑關系拿下的政府項目
有個朋友在政府有關系,組建了一個開發團隊,一直從政府拿項目,幾個項目修修補補,做了很多年。
嚴格來說并不是維護老項目,而是維護關系了。