Zhming

我从很久以前就发现,软件业在自己消灭自己。 今天和好友有了一场简短的聊天,更让我坚定了这个观点。 若要用一种形状来形容软件业,我会用“倒金字塔”来形容。 从软件业的发展史来看,最开始只有很少人有机会能开发软件,也就是那些在卡片上打孔的“先祖程序员”, 就像“倒金字塔”的底部,空间小,容纳不了太多人。 在发展了数十年后,随着技术的发展,通用平台家用PC的普及,开发者的数量大大增加,可供开发的内容也变得五花八门。 先有了各式各样的语言,多种语言用催生各种相应的生态,后来有了互联网,有了各种网站,传统工业开始转向数字化。 在这个阶段,就仿佛很多人住进了“倒金字塔”的中部,而且大家越往上走,发现空间越大。

那么未来是如何的?

在谈未来前,在这里有必要强调一个重要的行业特性,即开发者是倾向于像塔顶走的。 在现实意义上,也就是说开发者更倾向于做应用层的开发,与业务逻辑有更紧密连接。 这种现象一方面是来源于底层开发者培养困难,另一方面也来源于底层技术迅速成熟。 一个简单的例子,现在每个人的设备上都跑着操作系统,然而在这个星球上懂得如何开发一个操作系统的人,估计是屈指可数的。 操作系统的技术,不论是国内国外,都是极少部分人所掌握的技能。 另一个例子就是编译器,虽说世上程序语言各式各样,排除那些host language和解释型语言,像Lua,Clojure,真正的编译型语言并不多。 在这小小的编译语言合集里,有些语言的开发者是同一人,这意味着能掌握核心编译器优化的能力的人,是少之更少。

由于以上的特性,未来是不乐观的,随着底层技术的成熟,顶层开发者的生存空间将会越来越小。 操作系统,个位数的存在,每个都能稳定运行30年。 编译器,个位数的存在,这辈子都未必能出次bug。 服务器软件,几十年都只有两大开源品牌在斗争。 数据库,浏览器,十个手指头就数完了。 简而言之,就是基础设施类的软件开发已经进入了成熟阶段,由蓝海变成了红海。 诚然,软件行业是在变迁的,不过哪怕变迁巨大,涉及核心的开发者群体却非常有限。 拿HTML5的普及作例子,实际上HTML5的普及,对大部分包括我在内的开发者而言,仅仅只是玩具变高级了一点。

近年PaaS,IaaS的发展,更是加剧了程序员往塔顶爬的趋势。 拿我朋友今日的一句话来表达就是 “未来的IT可能就变成了,技术都是水电煤。任何公司都能使用这些技术完成自己的业务。”。 听起来有些夸张,不过却是在现实生活中有迹可循的。 当今开发者招聘市场上对前端程序员的大量需求就可以看出,程序员的意义,已经从“造轮子”渐渐变成了“装饰轮子”。 有很多开发者在2016年,唯一的工作仅仅是把人类表述的“需求”不断地转化成“代码”。 这些所谓种种“需求”中的共同之处,早已被人抽象出来并制作成了CRM,ERP之类的软件,不需要二次开发了, 唯一要做的定制就是外观上的。

所以在这种趋势下,虽然看似“倒金字塔”的塔顶空间很大,然而其是有尽头的,一旦触及了塔顶,生存空间消泯了。 然而纵使将来空间用尽了,上文提及的趋势却不会停止,就连UI开发上都出现了包装精美的Lib,各种各样的UI widget大大减轻了前端程序员的负担。 最后一根稻草,或许就是所谓的,机器人程序员的出现,当前端开发工作抽象化到一个足够的程序,机器人取代人类的可能性也就大大上升了。 在机器人替代了人类后,自然,软件业就基本上被消灭了。

当然要乐观

以上的观点对于开发者的确有些耸人听闻,也许就和的士司机听到自动驾驶时的心情一样。 不过软件行业的夕阳还早呢。 硬件技术和软件标准的不断进步,注定有一部分老软件要以旧换新,这意味着“倒金字塔”中间,还会有空间。 Linux和BSD的monolithic kernel的维护难度正在上升,也许会有新的microkernel取而代之。 老的语言要被新的适应多核环境的语言替代。 新的web标准和新的基础软件使一系列的库和工具成为legacy,甚至Apache Server这种曾经我以为坚不可摧不可替代的东西都有可能被替代。 运维工程师或许的确会被率先消灭于PaaS时代,不过这样也意味公司的成本降低,能够有更多小公司负担起大规模的架构。 这些正在发生的变革,证明软件行业绝对并非夕阳产业。

弄潮儿与墙头草

对于个人开发者而言,在变革中能当一名弄潮儿自然是最好。 然而普通的前端开发者或许并不能改变世界,在这种情况下,最好是成为一名“墙头草”。 紧盯技术的发展,不忽视自己作为一个人类的其他发展,或许不至于在变革来临时深陷泥沼,走投无路。

毕竟在程序员开发者的身份之上,还有个身份叫“人”。 作为个“人”,能在冬夜里坐在暖气前的台灯下成功写出一篇博客,我就已经无比满意了。