看过 Linux 中国微信公众号转发的 wangyin 的文章,给 Java 说句公道话 本来写了很多我自己的评论,然后都删了。归结为一句最能表达我的看法: wangyin 也不过是一个从国内移居到国外的喷子!
Python 凑合可以用在不重要的地方,Ruby 是垃圾,JavaScript 是垃圾中的垃圾。
如果真的信的话,建议大家遵照作者的建议,在项目中逐步淘汰这些语言,先从垃圾中的垃圾开始淘汰。
这种文章,茶余饭后消遣即可,没有绝对的好坏,所以不喜欢争论哪门语言好,哪门语言坏,语言只是工具,为需求生,为需求死,哪怕同一个项目,不同的发展阶段,适合的语言都是不一样的。哎,项目还没壮大,我得去写垃圾中的垃圾和垃圾代码了。
我来说句实在话,各位 rubyist 其实没必要和王垠较劲,他并不是在骂你们。 王垠所说的软件和 ruby china 里各位朋友所说的软件不是一回事。 如果做 ERP、BBS、一些中型 APP 的后台,ruby、python 都可以胜任,这些软件出了问题,可以通过维护。通过 ruby 来提升开发的效率、乐趣是一件非常好的事情。 但工业化生产等要求严格的软件中,一些东西是不能容忍错误的,一旦出错,可能不是下岗可以解决的。 另一方面,从软件质量的角度来说,公司无法控制程序员的水平,因此,java 相对于 ruby 更有利于软件质量的保证,一些与巨款挂钩十分紧密的项目,让各位 rubyist 来当项目经理,你的手下非要用 ruby,你不会心虚么。 看过王垠以前文章的人应该知道,王垠在批判软件质量时,其实往往是按照工业软件标准来的,所以他骂 ruby,和 ruby china 里各位朋友并没有什么关系。
#10 楼 @blacktulip 他是按照工业化生产的标准去评价 js 这类语言,你理解错我的意思了。我个人认为,js 虽然有许多优势,适合 Geek,但是从软件质量保证来说,js 的确设计的很烂。你不妨看看真正从事计算机技术行业(不包括互联网),有多少重要产品是用 js 写的。
#12 楼 @blacktulip 我说他按照工业化标准,只是不想惹到太多人,你非要较真我就直接说吧。js 完全就是一门垃圾语言,但这与 js 程序员无关。js 的普及,完全就是商业化推广的问题。我说 js 是垃圾,但是我平时也需要写,不仅要写,还要去大量学习深入了解 js 的底层,将 js 培养成兴趣爱好。用 js 和其他语言去实现同样的东西去对比语言的好坏,js 无论从质量、效率还是维护上,相比其他语言没有任何优势。仅仅是因为没办法,才用 js。
#14 楼 @blacktulip 他原来写过一篇文章,将建筑这种严格的生产和软件生产对比。你多看他的文章就知道了,王垠总是希望一门语言能够尽量通过语法分析等方式来保证复杂软件的质量,而 js、python 等他经常喷的脚本语言并不能胜任。这里复杂软件有可能是复杂的商业软件,也可能是工业软件。我这里说工业化软件只是想区分质量普遍较低的互联网软件。
王垠的这篇文章比较偏激,我就指出几个错误:
Matz 不是民科,
他在高中毕业前自学了程序设计 [2]。他毕业于筑波大学,在那里获得了信息科学学位,并参加了研究程序设计语言和编译器的部门。
clojure 并没有大量抄袭 racket, racket 也有一些库借鉴了 clojure,比如 Generic Collections,我觉得这种互相的借鉴对 clojure 和 scheme 都有好处,至于说 typed clojure 抄袭 typed racket,现在应该叫 core.typed. 它的作者和 typed/racket 的作者 sam 一同在 IU 做 type system 方面的研究 (应该是 sam 的学生),最近还一同出了一篇论文 Practical Optional Types for Clojure. 王垠也出自 IU,我不信他不知道这些......
以及在不给例子的情况下批评 scala 的设计有问题。
视野太狭隘。
@rubyfan1 @blacktulip 是的,其文中并未说明在工业化的场景中 java 才胜过其他语言,他表明的是所有场景。 Java 我也使用了好多年,但对比 Ruby,Node.js 而言,Java 真的算老,而且臃肿。单从性能上对比,那我 C,C++ 也能甩出 Java 几条街,但是好几年前为什么 Java 的普及率比 C,C++更广。因为其相对 C 更友好,程序员不用在费心内存管理,还有其可以跨平台。这些是 Java 刚出来时的卖点。时至今日,更多的创业企业,更多高迭代的需求,更多 Agile 团队管理,你再用 Java 试试,随便改点东西调试,你就等着不停的重启 tomcat 吧。而 Ruby,Node,Python 等新的与时俱进的语言,同样也各具卖点,所以我们也有理由选择新的,漂亮的。就如当初越过 C,C++一样的道理。
我不完全赞同 @rubyfan1 的观点,传统 IT 产品公司还是会选择 Java 比较多,互联网行业后端再用 java 的没几个。但是传统 IT 公司选择 Java 未必就是因为 Java 多好,可能有一下几个原因:
但到这里,我已经忍不住要对 Java 吐槽了。
但是反观基于 JVM 的几款动态语言,在这些这几上狂甩 Java N 条街。我们做的项目也是运行在 JVM 上的,我们的 Server 起来至少需要 9 个 G 的内存,算比较工业化的产品了吧,但我们未必仅停留在 Java 的使用上,我们所有的组件都是以 Cartrdge 的方式可以在核心服务器上热插拔的方式提供的,但同时我们也大量使用了 Scala,Groovy,Node.js 等新的技术,我们整个 Portal Project 全部使用的是 Grails,基于 Groovy 语言的 web 框架(Rails 的 Groovy 版本),另外我知道的,基于 Scala 的 Play 框架也很不错。所以即使传统 IT 公司的工业化产品,Java 也并不是缺其不可。像一些传统的 SOA 架构,发展到现在逐渐演变成 Micro Services, 对于 Mricro Services,我就认为使用 Sinatra,Express, Koa 等一些基于 Ruby 或者 Node 的框架更胜一筹!
所以我认为,无论是互联网还是所谓的工业化标准行业,新的技术都能取代 Java 去开展业务,除非是一些现实环境、条件的的约束,否则并不是非 Java 不可!!!!
#20 楼 @boyishwei 这里我注明一点,不要把设计模式和 JAVA 扯在一起,JAVA 高级程序员没几个看得起设计模式,甚至很讨厌设计模式。JAVA 覆盖面广,低端程序员很多又不知从何入手,被忽悠着学设计模式。
另外你知道么,国内翻译设计模式类书籍,吹捧设计模式的,反而是推崇 ruby 的 thoughtworks 公司。
如果你非要说软件复杂度,J2EE 产品并不算复杂的软件,ERP 之类的产品,本来就是设计给外行写的,因此并不复杂。Micro Service 这些更是为了简化业务,让外行可以写软件。
真正复杂的软件,比如编译器、office、ps 这种,才算得上。
这里我也想吐槽JAVA,和C#相比,JAVA这么多年真是毫无进展,被C#甩了几条街了,这也使得那帮搞设计模式的水货有机可乘。
最后我补充,JAVA 并不繁琐,多写两行代码能浪费你多久时间,这里有篇文章http://www.teamten.com/lawrence/writings/java-for-everything.html我蛮赞同的,我就不详细说了。
另外我告诉你我开发 Web 应用时从来不重启 tomcat,这些只是一些毫无技术含量的技巧而已,拿出来喷 JAVA 不好。
敏捷开发不是靠少些两行代码,而是需要有大量稳定的东西支撑,scala 在大团队中使用的问题已经暴露了很多次。另外,它的可读性实在是太差了。
当你心中有个标准的时候,当然就有了高下之分。可惜大多数人谁关心 python, java 谁好谁坏,用得爽才是最高要求。
所以身边有个朋友在最开始的时候给你介绍一个你能用的爽的语言是多么的重要。
我也来凑下热闹,王的话虽然夸张,不过多少有些道理。动态语言有两个弱点就是可变数据,重构弱。大项目是需要工具支持重构的。 我最近打算转向 clojure。clojure 和 scala 的重构支持不知如何,java 的重构支持比较好的。
所谓 java 写的玩意就够'工业', 就少错误,本身就是伪前提。没什么现实来支撑这个论点。国内 java 写的那些比 facebook 还是 twitter 稳定?我看未必。国外大牛写的 java 比其他语言写的更稳定更容错?也未必。 所谓稳定是建立在老东西往往可靠的错觉上吧。
没啥讨论价值,王垠的关注角度和一般人不一样的,而且也不是“工业级”,他是“研究级”,如果他的文章是讨论具体问题,不妨看看(前提是能看懂),泛泛之论就算了,普通人不必关心科研人员吐槽
#20 楼 @boyishwei 其实,tomcat 加上 jrebel 或者开发阶段弃用 tomcat 使用 jetty 也是可以在绝大部分场景下热更新的。