为什么我不喜欢Java

最早接触Java是很多年前了,那时候Android开发的默认IDE还是Eclipse,如今Android Studio不仅转了正,版本号也到了3.2.0。不仅如此,Kotlin也终于干掉了Java,先是和Java平起平坐地成为了一等公民,后是挤掉了Java成为官方首选语言。
除了自己折腾Android的经历,大一下学期的Java课程也是把各种语法细节都讲了一遍。
作为一门从头到脚面向对象(Null Pointer Exception)的语言,只要把OOP学会了,自称会Java语言是没有大问题的。而我对OOP的理解不仅在高中期间读了2遍C++之父写的书,还在iOS开发的过程中不断深入。

但是我到哪都说我不会Java。以至于遇到一些Java相关的问题时,时常有人嘲讽我Java基础不行,而拒绝承认我遇到的实际问题。

业界早已达成一致:讨论高级编程的优劣是没有意义的。很遗憾,很多人对这个结论有着错误的理解,特别是喜欢在语言选型时拿出来当和事佬,导致语言选型走向错误的方向。

没错,我并不想批判Java的语法,那没有任何意义。
我是说,Java的整个生态圈子,没有品位。

敏感的人可能会觉得我在地图炮,进而推测我在骂所有使用Java的人没品位。实际并非如此,我这里值的品位并不是人的品位,而是这个圈子的品位。如果一定要给这里的品位下个定义,那么应该是:

微软唯一的问题是没品味
——Steve Jobs

即使是有品位的人,只要拿起Java这支笔,就必须遵守Java整个生态圈的规则,写出来的文章读起来都是一个味道。我写Android的时候,看着自己的项目,闻起来也是同样的味道的。如果真的说骂人的话,我狠起来连自己都骂。希望觉得被冒犯的Java拥簇者可以感到些许平衡吧。

Java的问题出在哪里?

首先一定不是它的语法。如果说面向对象的概念是个规范,那么Java应该能拿99分,而其他语言大多只有80分。硬要说的话,Java的语法只是过时而已。为了解决过时的问题,我们看到Java8引入Lambda的巨大努力,以及Java10和Java12努力增加对Optional和自动类型推断的支持。

Java的问题在于这门语言及其生态圈子的做事方式。面对用户强烈的函数式编程需求,Java以打补丁的方式增加函数式编程的支持,但没有真正成为一门函数式编程语言。其官方库和各种第三方库的行为方式也是如此,实用主义至上的思想使得Java生态圈完成一件事情存在多种途径。这里的多种途径是由多个补丁构成的。我喜欢的语言生态圈子里,完成一件事情通常只有一条路,并且是综合各种场景设计出来的最优路径。

所谓品位,本质上是人们对完成一件事的最优解达成了一致。你看不到这个最优解,就是没有品位。最优解又有局部最优解和全局最优解。圈子里的人都以为自己达到了全局最优解,所以逐渐固化为一个群体。

如此说来,我也只能承认:我不喜欢Java,是因为Java圈子里,没品位的人占比高于其他圈子。