为Java说句公道话(二)

原文出处: 正义的花生

Java的“继承人”没能超越它

    最近一段时间,很多人热衷于Scala,Clojure,Go等新兴的语言,他们以为这些是比Java更现代,更先进的语言,以为它们最终会取代Java。然而这些狂热分子们逐渐发现,Scala,Clojure和Go其实并没有解决它们声称能解决的问题,反而带来了它们自己的毛病,而这些毛病很多是Java没有的。然后他们才意识到,Java离寿终正寝的时候,还远得很……


Go语言

    关于Go,我已经评论过很多了,有兴趣的人可以看这里。总之,Go是民科加自大狂的产物,奇葩得不得了。这里我就不多说它了,只谈谈Scala和Clojure。


Scala

    我认识一些人,开头很推崇Scala,仿佛什么救星似的。我建议他们别去折腾了,老老实实用Java。没听我的,结果到后来,成天都在骂Scala的各种毛病。但是没办法啊,项目上了贼船,不得不继续用下去。我不喜欢进行人身攻击,然而我发现一个语言的好坏,往往取决于它的设计者的背景,觉悟,人品和动机。很多时候我看人的直觉是异常的准,以至于依据对语言设计者的第一印象,我就能预测到这个语言将来会怎么发展。在这里,我想谈一下对Scala和Clojure的设计者的看法。


    Scala的设计者Martin Odersky,在PL领域有所建树,发表了不少学术论文( 包括著名的《The Call-by-Need Lambda Calculus》),而且还是大名鼎鼎的Niklaus Wirth的门徒,我因此以为他还比较靠谱。可是开始接触Scala没多久,我就很惊讶的发现,有些非常基本的东西,Scala都设计错了。这就是为什么我几度试图采用Scala,最后都不了了之。因为我一边看,一边发现让人跌眼镜的设计失误,而这些问题都是Java没有的。这样几次之后,我就对Odersky失去了信心,对Scala失去了兴趣。


     回头看看Odersky那些论文的本质,我发现虽然理论性貌似很强,其实很多是在故弄玄虚(包括那所谓的“call-by-need lambda calculus”)。他虽然对某些特定的问题有一定深度,然而知识面其实不是很广,眼光比较片面。对于语言的整体设计,把握不够好。感觉他是把各种语言里的特性,强行拼凑在一起,并没有考虑过它们是否能够“和谐”的共存,也很少考虑“可用性”。


        由于Odersky是大学教授,名声在外,很多人想找他拿个PhD,所以东拉西扯,喜欢往Scala里面加入一些不明不白,有潜在问题的“特性”,其目的就是发paper,混毕业。这导致Scala不加选择的加入过多的特性,过度繁复。加入的特性很多后来被证明没有多大用处,反而带来了问题。学生把代码实现加入到Scala的编译器,毕业就走人不管了,所以Scala编译器里,就留下一堆堆的历史遗留垃圾和bug。这也许不是Odersky一个人的错,然而至少说明他把关不严,或者品位确实有问题。


     最有名的采用Scala的公司,无非是Twitter。其实像Twitter那样的系统,用Java照样写得出来。Twitter后来怎么样了呢?CEO都跑了 :P 新CEO上台就裁员300多人,包括工程师在内。我估计Twitter裁员的一个原因是,有太多的Scala程序员,扯着各种高大上不实用的口号,比如“函数式编程”,进行过度工程,浪费公司的资源。花着公司的钱,开着各种会议,组织各种meetup和hackathon,提高自己在open source领域的威望,其实没有为公司创造很多价值……


评论

© 牛耳教育|长沙java培训|长沙java培训学校|长沙软件培 | Powered by LOFTER