张大胖刚进入公司,遇到了一个神奇的同事:何小痩。
别人工作都很忙, 何小痩工作似乎特别轻松,从来不加班,到点儿就回家。
张大胖向别人一打听,原来何小痩一直在维护一个老项目,维护了5年了。
一次下班的路上,张大胖碰到了何小痩,向他询问起了这个项目的细节。
何小痩说:“这个项目使用Applet技术做的,实现了一个网页版的在线客服系统,客户在使用网站的时候,如果有问题,可以直接在网页上向客服人员提问,客服按照排队次序挨个回复。别看功能简单,在90年代中后期可是非常先进的功能。”
张大胖惊道:“Applet,这可是上古的技术啊!”
何小痩:“这个Applet项目依赖一个古董级的Library,是基于JDK1.1开发的!”
张大胖再次大惊:“JDK1.1,那可是最早的一批JDK啊。”
何小痩说:“由于时代久远,这个Library已经不再维护了,每次Applet项目添加新需求,修改Bug,只能只用JDK1.1的功能, 并且在JDK1.1上进行编译。”
张大胖咂舌不已,感慨现在居然还有这样的系统存在。
张大胖问道:“那你岂不是被困到了这个JDK1.1之上。”
何小痩说:“什么叫被困住啊,这是好事啊,你想想这个项目没人会,技能独特,我可以一直把这个项目给维护下去,领导想裁我都裁不了。”
张大胖心想,这个工作很不错啊, 以何小痩的年龄,再维护个几年,兴许就可以退休了。
没想到,一年以后,JAVAScript开始大行其道。
Applet被迅速抛弃,整个项目被用JavaScript重写。
新项目上线以后,何小痩被辞退了。
这个故事是我杜撰的,但是其中的Applet项目确是真实存在的。
在计算机行业,为什么不能通过维护老项目来度过中年危机呢?
主要有两个原因:
技术发展实在太快
开发成本太高,而维护成本太低
计算机技术每隔5~10年,就会刷新一次,新技术往往具有更高的性能,更低的成本或者更好的用户体验。
80年代的PC,90年代的局域网,00年代的互联网,10年代的移动互联网,中间还夹杂着大数据,云计算,现在又出现了GPT。
每个时代的技术栈都是不一样的,一般的程序员经过努力,能精通一个时代的技术,再发发狠,最多再熟悉下一个时代的,你要想让他精通三个时代的技术,那就要了命了。
可是应用程序不等人,它会不断地演进,从C/S变成B/S,Browser变成手机,Server变成云。
不演进应用就会落伍,就会死掉。
在演进的过程中,它会不断摧毁那些老程序员。程序员工作了10年以后,就可能遇到危机。
所以何小痩想通过维护那个JDK1.1的Applet退休,是不可能的。
不过,事情总有例外,有些系统任你风吹浪打,我就是岿然不动。
这些系统的特点是业务极其稳定,对业务的理解远大于对技术的要求(如美国的失业救济金系统),又非常关键,用古董的COBOL开发完成以后没人敢动,硬件也不变,软件也不变,就这么运行了几十年!
然后疫情来了,领取失业救济的人数暴涨,系统崩溃,但是没人能维护了。
自然语言描述的需求和计算机代码之间有着巨大的鸿沟,程序员需要耗尽心血去fix各种意想不到的问题,实现客户的需求。
所以软件开发时特别麻烦,成本超级高,但是一旦开发完成,部署,稳定运行以后,神奇的事情发生了:
一个几十人的开发团队,留下几个人来维护这个项目就够了,剩下的人可以投入新的项目。
反正就是改一些不重要的Bug,或者实现一点儿新需求,要那么多人干嘛?!
当然,留下来维护系统的人,薪水是不会很高的。
正是由于这两点原因,个人想通过维护老项目来度过中年危机是非常难的。
真想一直靠维护老项目生存,有这么几种可能。
(1)个人项目
找到一个小众领域,和个人技能相结合,开发出一个软件,一直维护。
典型代表是《一个国外小老头,用被淘汰的编程工具,开发了一个了不起的软件》,他用Delphi开发了一个3D CAD程序PROLINES,专门用来设计船舶。
PROLINES这几十年也在不断改进这个软件,推出新版本,比如支持更高清的分辨率等等。
(2)开源软件
linux,MySQL,Apache HTTP Server都是典型代表,它们存活了二三十年,在可预见的未来,还会一直存在下去。
这些软件对应的是计算机最基础的知识:操作系统,数据库,计算机网络,几十年不变。
如果能成为这些著名软件维护者的一员,生活会相当不错。
(3) 凭关系拿下的政府项目
有个朋友在政府有关系,组建了一个开发团队,一直从政府拿项目,几个项目修修补补,做了很多年。
严格来说并不是维护老项目,而是维护关系了。