您的位置:首页 > 编程语言 > Java开发

成也JAVA 败也JAVA

2014-02-22 20:17 232 查看
摘要: java 好多坑,谁来填?

JAVA 添坑计划!!!

Intro.

Java是我学编程以来的第二门语言,用它到现在做了不少项目,写了不少玩具。但是最近发现它越来越不称手了,它的很多毛病一一显露出来。

后来又学了好多语言 python ruby scala scheme 当然还有 javascript, 综合看下来,我还是最喜欢javascript。真正的高阶函数,又是多范式风格的,还有原型继承链这么好用的东西。无奈他是脚本语言,真正能做的事不多(特别是在企业开发中,别和我说什么 node.js 的那个event io,简直无情)。而scala是最近看到的语言,他的语言特性很多很高级,可以写出很简洁的代码,可贵的是它还是一个静态编译类型(真正的泛型就靠它)语言,还是跑在jvm上的,这不得不让我有些心动。但是,同鞋们,它有个大问题就是学习曲线!,而且关键词、语法、符号的选择上面我觉得都不是特别理想、所以也被我放弃掉了。

最近项目中除了很多问题,开发效率不足是大问题,于是琢磨着弄个新的框架或者新的语言来提高效率。

在 node.js 和 ror 中徘徊了好久,最后又看了 scala,又回头看java,其实也不是那么不堪,只是之前没有人想过要在老骨头上在翻花样。

于是,我准备要添坑!!!

OH AMAZING JAVA

没有指针 (oh yeah!)

跨平台 (amazing!)

不用手动管理内存 (nice!)

强类型检查(意味着你可以指望编译器提前告诉你A不是B,这里不能用C)

强大的运行时 (优秀的线程机制,字节码执行效率高,大量编译优化,栈式寄存器...)

强大的反射机制 (动态代理,切面编程全靠他,IDE 没了这个什么都不是)

浩如烟海的类库 (真的多!)

大量的标准 (JMX,JPA,JRX-XXX,JavaBean)

C风格,语法简单 ({().})

大量的java开发人员

稳定的生态环境 (maven, ant, tomcat...)

纯面向对象

方便的jar

eclispe!(:P)

BUT

GC不透明,机制复杂 (最好别去想你的程序为什么为随机内存泄漏或者时不时卡一下)

逗比的异常机制 (静态异常最好永远别使用)

更逗比的编译期静态类型检查,运行时擦除机制

作为一个纯oo语言,不允许指针却允许基本类型的存在 (做人留一线?)

设计模式(设计模式的出现归根结底是因为java太坑, 设计怎么可能会有模式?)

不支持 first-class(C# 有这个 List.sum(x->x+2) JS 有这个 var f = function(){..} JAVA? )

不允许抽象静态方法 (运行时类型擦除,这一点最2了,是为了性能?)

class 不是对象,你不能 运行时 new 一个Class Object, 也不能 new Class().addMethod() (有了 java 会长命很多,想想C语言要是没有宏能活到现在?)

复杂的namespace (鼓励使用完整而冗长的命名是反人类的, 促使了 java 就是要用 eclipse 的风气,语言不做的事情ide搞定,什么哲学!)

CamelCase (呵呵?CamelCase这么灵的话写文章为什么还要空格。英文读者看起来的感觉就是 駝峰法 这么不自然)

Class 是一切 Object 是一切,凡是出现一切都要小心 (function是什么?你辛辛苦苦敲的代码是Object吗?)

Iterator 是一个失败的设计,之前还有 Enumeration (数组不是Iterable你敢信?主要是java只是号称纯OO,还是允许原生数组存在的。)

失败的对象构造机制 (既然允许了构造器重载,为什么不支持互相调用)

final 关键字 (又爱又恨,为什么不发明 once?)

失败的方法重载,方法签名不带返回类型等等(又是函数签名惹得祸,函数签名不带返回能忍,入參不带编译期类型(就是左值 Object o = new String("11")中的 Object ),也不带参数名)

不支持全局变量!!!!!!!!!!!!!!!!!!! (整个spring framework 做了什么?)

内部类是个笑话。 (A.B after javac ---> A$B.class 哈哈哈真好笑)

import 的目的就是简化类名,但是可悲的是它不支持重临时取名 (java.lang.reflect.Array还算短的,org.springframework.aop.interceptor.ActionI....你试试?)

jdk tool难用,classpath配置成脑残 (快用 eclipse! 我是过只用vim写,我只想说,it`s insane!)

jdk的类库是丰富好用,堪称java精华,但是,名字能短点么? InnovocationHandler ???

泛型是笑话 (java 的所有泛型机制最后就是在Object类型对象在编译成字节码前强转了类型)

缺乏好用的IPC接口(虽然是可以不用,但是你不可以不给)

注解机制 出现的唯一接口就是java委员会实在没办法了 (反人类之二,觉得xml不好用就在发明一个?为什么不改改语法特性?)

####其实原则性的失误不多

不支持运行时保留编译类型(类型擦除)

不支持函数对象(first-class)

不支持元编程 (META-PRORAMING 包括不允许操作重载,宏等)

没有很好的包管理,不支持模块化设计

总结

越来越不适合互联网开发了,开发效率比不上脚本语言, 但是大规模商业开发还是唯一选择( c++ ??)

Java 还是会用,就如以前的c++, java在某些场合几乎是唯一选择 (跨平台大规模计算)

在现有的解释-即时编译型编程语言中 java vm的性能还是最好的

Java 其实深入了,无限坑, 初学者还是别碰(大学就不应该教授java, C C++简单学学 之后转 Lisp Scheme比较好)

创业能不用Java就不用,人工耗不起,还是多买服务器便宜。

其实归根结底出现的原因还是java太老了,很多问题都是历史遗留问题,当时设计只要能解决问题就行,后来在用的代码太多了不好改了。
java也在不断革新自己支持新功能 期待java8

总之我还是会用的,有个添坑计划在执行,基本思路

使用 cglib + asm 给java添加元编程能力

去掉 Exception 或者只使用RuntimeException

加入 FP 元素

设计一套名称规范来避开重载和类型擦除带来的坑

使用内部类模拟函数闭包

避免使用注解

避免使用接口 (这里特指 interface 不是 api)

扩展集合类型来适应函数风格

添加运行时类型推断? (这个好难!!!)

有一起想要给java动动刀子或者觉得java不好又觉得scala太难的同鞋联系我
edwinyxc@gmail.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息