我一直说,Java 是一门经过深思熟虑、真正“被设计过”的语言。
怎么证明?下面这件事就是很好的例子。
很多公司为什么宁愿改 JDK,而不是从头来一门新语言?一个关键原因就是 JVM bytecode 的设计。
有了 bytecode 这一层,不仅能解决跨平台问题,还顺手把生态问题解决了。
不管是哪家的 JDK,只要产出的 bytecode 能兼容,马上就能用上成千上万的 Java 第三方库,把功能做出来、把问题解决掉。
这才是 Java 设计的精妙之处。
所以关键就是:Java 有一个生态。
生态有多重要?
这个问题有多重要?我们先看苹果、微软、NVIDIA 三家就明白了。
苹果
苹果有一个特点,很多人可能没意识到:一旦你用了它的产品,就很容易“苹果化”。很快,你的手机、平板、电脑都会变成苹果的。
为什么?除了产品本身性能出色、设计好看,更核心的是生态。比如你用手机拍了张照片,通过 AirDrop 立刻就能传到 Mac 上继续处理;iCloud 里的照片、文档可以统一查看。
太方便了,不知不觉就凑齐了苹果全家桶。
微软
微软这家公司做操作系统起家,最会做生态。它一直在吸引开发者在自己的平台上开发应用。你学习微软技术时会发现,不管是网上资料还是书店里的书,微软都是最多的。
微软构建了一整套软件体系:操作系统 Windows、服务器 Windows Server、办公软件 Office、数据库 SQL Server。
一家普通公司,用微软的产品就能搭起完整的软件系统。
NVIDIA
最后是近几年的 AI 之王 NVIDIA。
最近 NVIDIA 又推出了 1500 亿美元股票回购计划,把股票从市场上买回来销毁,让现有持股者的股票升值,属实是一家良心公司。
NVIDIA 的生态,核心构建在一个叫 CUDA 的软件上。利用 CUDA,可以重复发挥 NVIDIA GPU 的性能,获得超快的 AI 推理速度。
其他 GPU 公司缺少这样的王牌软件,单拼 GPU 性能很难跟 NVIDIA 抗衡。这就是 NVIDIA 的生态护城河。
从上面三家就能看到,软件生态的巨大作用。
编程语言,同样困在生态里
编程语言面临的是同样的局面。
为什么现在一门新语言很难打开局面、很难“寒门出贵子”?说简单点,就是门槛实在太高。
第一,市场上已有大量老牌语言。C、C++、Java 这些语言有着海量使用者。从本质上看,人并不是喜欢频繁变化的动物,也不那么喜欢学新东西。如果学会了 Java,肯定希望能一直用下去,把自己投入的学习成本保护住。
没错,学会一门编程语言,本质上也是一种投资、一项资产。
第二,今天的编程语言已经不是简单的语法问题。每门语言周围都围着大量类库。以 Node.js 为例,它的 npm 库里有上千万个 package,几乎能覆盖所有应用场景;Java有maven库,Rust 有 crate。
一门新语言想跟“旧语言”抗衡,谁来开发这种成千上万级别的库?这就是天大的缺口。
第三,遗留代码问题。
现在的软件世界已经是一个代码极度丰富的世界。为什么早年 Internet 刚流行时,程序员随便培训一下就能就业?因为那时候有大量新系统要研发、大量新软件要写。
那后来为什么不行了?因为大基建时代过去了,新盖的“楼房”少了,大量工作变成了维护——维护那些用旧编程语言写的老系统。
这种情况下,需要的新人自然减少,对人的要求水涨船高,新人更难入行。
举个现实的例子:为什么 C++ 现在还这么流行?难道大家不知道 C++ 难用吗?Rust 不香吗?
那为什么 Rust 还是干不过 C++?
很简单,因为 C++ 的遗留代码实在太多了。重写的代价太大,于是只能继续用 C++。
新的固然好,旧的依然在,维护占大头。这就是现在软件业的真实现状。