什么.NET一开源一跨平台 一些人就在喊Java去死?

今天的 Java 是编程领域的 lingua franca:作为一门语言 它比 C / C++ 学起来更容易 比 Perl / Lisp 读起来更正常 比 VB / PHP 用起来更专业。几乎没有人看不懂 Java 所以讲解个什么概念 用 Java 写出来大家都能明白。

而作为平台的 Java 有无所不包的类库 极度优化的虚拟机 根深蒂固的开源项目 结果就是 无论你想做任何事情 理论上——乃至 99% 的实际上——都可以用 Java 实现。

我写下这些文字的片刻 就又有几万行 Java 代码在世界上诞生了 所以如果以「不再有任何人使用」为一种技术的死亡界限 那 Java 显然活着 并且活得还不错;如果以「能找得到工作」作为一种技术的死亡界限 那 Java 更是生龙活虎 国内的状况我不清楚 但在欧美任何一个求职网站上以 Java 为关键字搜索职位 都可以很容易地看出它拳打 C++、脚踢 PHP 的霸主地位。

没有人质疑它为什么活着 take for granted 它活着 就像我从来不质疑明天去上班时还有没有活干一样 granted。

但如此一来 倒不如就说 Java 已获永生算了。因为 如果你按照上面的两个定义巡视一遍 TIOBE 就会发现没有什么稍微有点名气的编程语言(及其背后的技术)真的死去了。Visual Basic 还活着 Delphi 还活着 COBOL 活着 Fortran 活着 甚至连 FoxPro 都活着。

至于比这些更小众的例子 你们听过 IBM AS/400 系统么?我的上个东家还在用 维护它的程序员刚入职的薪水就高得离谱 因为整个公司二十年核心业务逻辑都在里面 一损俱损。AS/400 也活着。

所以当我说「Java 去死 / 已死」的时候 「死」意味着什么呢?很简单:没人爱了。

本版同文那篇改写尼莫拉诗句的答案是对 Paul Graham 那句「of all the great programmers I can think of, I know of only one who would voluntarily program in Java」的完美呼应:十个写 Java 的人里面有九个是「因为工作需要」——剩下一个是因为不会别的。在所有我能想像到的写程序的动机里面 「因为工作需要」是最令人心如死灰的一个。

牺牲着前列腺和脊椎的健康久坐在屏幕前忍受着用 Java 写程序只为混口饭吃 反正我觉得没意思。如果你还能笑出来 good for you。

而只要你不是刚从一九九五年穿越过来 就应该能看到现在的 Java 也的确并不可爱。

语言特性方面 与其说它没有什么太大的问题 倒不如说它的那些问题已经有了很多成熟的 workaround 比如无法被 override 的静态方法 画蛇添足的 checked exceptions 还有半屁股的泛型。而真正令人难受的是那些它缺失的特性——我可以说 C# 里面的 struct、delegate、async / await、event handler、accessor、operator overloading 支持(好吧这个不一定是好事)乃至 type inference 之类都是 Java 所缺失(或者只有靠隔靴搔痒的第三方库才能实现)的 当然还有真正的运行时泛型。分开来看每一点你都会觉得没什么 但是当所有这些积累起来时 C# 就比 Java 可爱得多。

这些功能有朝一日也许终归会在 Java 中出现 就像 Java 7 终于有了 switch on string 和 try with resource、Java 8 终于有了 lambda 一样 但是它们出现之前 你就得忍着 连同 Java EE 那堆臃肿庞杂、诘屈聱牙的技术迷宫一起忍着。而且感谢 Oracle 你还不知道要忍多久——作为一个参照值 Java 8 大概相当于 .NET Framework 3.0 而 .NET Framework 3.0 是二〇〇六年的事情 那时候手机市场的第一巨头是诺基亚。

Oracle 以任何标准衡量都不是一个会为开发者着想去改进工具的公司 比 Microsoft 更令开发者厌恶 后者至少有组织良好、行文详尽的 MSDN 资料库 有虽然平庸但不断改善的 CodePlex 开源平台 还有个秃顶胖子汗湿了衬衫站在讲台上大喊过 developers developers developers。

而 Oracle 做过什么?把 MySQL 留在路边喂狗。把 OpenOffice 的开发社群赶出家门。无厘头地起诉 Android。

所以 James Gosling 在 Sun 被 Oracle 收购的同时辞职 就叫做先见之明。

也难怪大家会竞相在 JVM 上发明新语言 并且将其他语言移植到 JVM 上 只是这些尝试努力的方向太过分散 没有谁能够一统江湖让 Java 社群看到希望。

的现状是 二〇〇七年之后已经不再有人写 Java ME;Java SE 除去几个 IDE 项目之外最著名的程序只有 Minecraft;Java EE 和 Android 就是 Java 唯二仍旧还算 alive and kicking 的部分。Dalvik 那是另立门户没什么可说的 那么 *nix 上的 JVM 其实是作为平台的 Java 所仅剩的基石。以前它从来没有过一个像样的竞争对手——要么太嫩 要么太虚 这种状况一直持续到二〇一四年十一月十二日为止。

而这就是你问题的答案:那个十多年前总裁说过「Linux 是一种癌症」的微软 从今天起官方支持其核心价值观输出平台跑在 Linux 上面了 还开源免费。

全世界所有能卖给你一台虚拟主机跑 Linux 的服务商一夜之间都变成 .NET 主机服务商 不爱 Java 的人忽然有了一个新的选择 文档详尽 支持良好 路线清晰 社群强大 工具易用 有企业级的可靠程度 而且最爽的一点是 之前写 Java 的经验 九成都可以无缝移植。

我从没有说过这件事的成效立等可取 不过想想 Java 曾经是如此无孔不入的东西——它甚至跑在你的 SIM 卡里面 直到今天——却也许能在我的有生之年变成一九七三年的 COBOL 就会觉得世事无常。我相信现有 Java 系统会渐渐成为 legacy code 人们继续维护它们 只是因为它们必须被继续维护下去。

新的挣扎仍旧会出现 毕竟瘦死的骆驼比马大 一群老鼠啃骆驼的尸体也能啃上一段时间——为了减轻你的柔弱心灵读到刚才这句话所遭受的痛楚 我承认我也只是啃食 Java 的老鼠身上的一只跳蚤(嗯?其实你根本不痛苦?你看 连你也不爱 Java)——这无疑会是个漫长的过程 所以如果你是个刚入行的 Java 程序员 大可不必担心自己的事业发展 只要人类不发明永生技术 你就活不到因为只懂 Java 而找不到工作的那一天。

退一万步而言 你若真的能把自己逼到那样的绝境里 还是趁早去做管理吧。

最后 我并没有「喊」Java 去死 因为这并不是一种宣告 更不是什么诅咒 只是陈述在观察现状之后得出的结论而已。当然 「去死」很难不带感情色彩地解读 就好比我输入 kill -9 时很难不让人觉得我不痛恨那个进程一样。虽然我真的并不痛恨它。要痛恨也只有那么一下下而已。

又 所谓「大牛只选择最适于解决问题的工具 而不去争论谁好谁坏」之类的论调 前半句不假 后半句完全是迷思。不是每个人都是 pragmatist 争论工具好坏的大牛多了去了 说这话的人阅读量太少。

利益申明暨 disclaimer

我目前是个 Java 程序员。准确来说 我从事正职的时间里如果在写代码 有六成是写 Java 包括 EJB、JPA、JSF Swing 甚至还有 GWT 而我上次正经写超过十行 C# 是在八年以前。我开始写这个答案是因为等飞机无聊 能写这么长我也没想到。我没想说服谁 所以如果你不同意 up to  you。

来自:知乎