2014年7月21日
Java程序员出了一些问题。我一直在使用Java,到现在已经超过10年了。我也有幸使用过许多其他语言如:C#,C,C + +,Python,Lua,Objective-C - 我认为这对于理解Java程序员究竟出了什么问题起了很大的帮助。很多人说Java是一种糟糕的语言。我不同意。 Java有它的缺点,但我认为,不是Java本身惹恼了人们,而是Java的使用方式。
多年来我遭遇Java代码的最大问题是,每个人都把自己想像成架构师。我在阅读代码的时侯感觉他们不是在解决问题,而是在计划问题。这是一个微妙的区别。有非常多的层次和大量的抽象概念以及样本化代码。面向对向的基因发挥到了极致,这不是那种你一眼就能看出原理的代码,你很难理解这些代码在干什么,你必须深挖,你必须学会一整套让人感觉受虐待和折磨的词汇(“Abstract Adapter Factory”),你必须成为系统的一部分。我看到的几乎所有Java项目都有这些癌症。
在Java的世界里经常发生这种情况是有原因的。Java本身有一部分责任。Java平台的API展现出很多上述问题,这些设计风格和通用准则将开发者们引入歧途。 Java也迫使一种高水平的形式主义和冗长啰嗦的东西在开发者身上显现,以至于你最终慢慢习惯,当其他语言不这样时,你觉得他们像没穿衣服 —— 斯德哥尔摩综合症开始生效。
(注* 斯德哥尔摩症:是指犯罪的被害者对于犯罪者产生情感,甚至反过来帮助犯罪者的一种情结。这个情感造成被害人对加害人产生好感、依赖心、甚至协助加害人。)
OO热潮也是产生这种疯狂的一部分。越来越多的开发者都意识到这些问题,并重返编程的本质,00其实是很扯淡的。然而,Java是最大程度地扎根在00束服中,而且似乎没有它,Java就没法用了。即使在今天,你还是会发现在大学课程里对于对Java OO的强烈偏好,而且这种偏爱肯定强于5 - 10年前。
但这并没有妨碍Java的流行,在企业中被广泛采纳并使用。让我们坦率地说 - 可能您在荒野中看到的大部分的Java代码,很多都是非常差的开发者写出来的。
可悲的是,这个问题不仅局限于代码,它已经波及到整个Java生态系统。无论您使用的是Java单元测试框架,依赖性管理工具,原型(mocking)框架,等等,已经没有Java一点原来的气味,你被强奸了。 慢慢地Java程序员已经无法自救了,接下来的事情你懂的,你需要在一个15层深的00框架中,实例化一个个硬绑的 factory。
(注*:这也可能是新税语言Go,在设计时并没有引入class, abstract, extend等强面向对象关键字的原因)
一个私人请求
今天,我正在学习Gradle,显然它是Android开发来时下最走红的事物。Gradle来自Java的世界,也感染了Java上述的一些问题。正如Tim Bray 最近感叹
我在Gradle文档中打开一个页面:第50章,依赖管理。它有63个子标题分隔,并被整理成10个小段,这是总共65章(加5个附录)中的第50章。
Android - 真的是当今除了大公司没有人再关心Java的最大原因 - 也就是沿着这条黑暗的夜路。是阅读一整页Android的API文档越来越普遍,但是就是不知道这到底在说什么东西。当然,你最后懂了,你只需要阅读其他17章的内容来理解。什么?你搞不定?你显然缺乏毅力和眼光来构思这一宏伟的,已经建成的大学堂。真失败。
在谷歌,研究Android工作的工程师们实在是太忙了,为解决方案架构宏伟框架,但却不忙于解决实际问题。
我是一个Android开发者,却被使用Java困扰。这伤透了我的心。
相关: 面向对象的缺陷
写的好。一些Java程序员张口闭口的设计模式,系统架构,让我感觉厌恶和恶心。其中一些人殚精竭虑苦大仇深的经过层层抽象和设计,最后高出一坨翔,连累了整个团队。
晕哦, 我几年前,一直到现在都觉得JAVA很垃圾,想不到作者和我想的一样。
@李白 #1
@苏轼 #0
呵,你们的名字很有特色
@李白 #1
@苏轼 #0
马甲么?
只能说一些Java程序员写不好东西,不能说Java很垃圾
哈哈哈,真是笑话,一看就是没开发过多大的项目,根本不知道用一些东西的好处,自己的项目没那么大,不需要用,就认为别人也没用那些东西的必要
这样的人可能会感觉用shell开发大项目也是不错的,简单直接,多好
只能说,井底之蛙
@black_sun #5
少年,你编程这么牛B,你妈造吗?
@苏轼 #0
我就认识一个这个人 就是我的前经理。
觉得每种语言必有其过人之处,利弊应该分开看。Java 语言是过重,是有过度设计的地方。但很多架构与设计设计方面的概念都是从Java 而来,比如OSGI,再比如依赖注入等。
同时我觉得真正使用的时候看的不仅是这门语言的优劣,还有市场。 前些日子面试一家12000+人的软件公司,问他们技术经理,为什么不用Nodejs 尝试开发一些项目。 得到的回答是 优秀的js 程序员太难找,同样为后台服务器开发,现在的Java Spring 那套开发者数量相对较大,很容易找到。语言不是说不好淘汰就淘汰,鄙人觉得,取其精华,去其糟粕,才是要点。
不偏激,不争辩某个语言一定怎样怎样,辩证的看待问题。这是我这段日子以来的最大体会。 : )
代码写的简单直观很重要,否则老化速度会很快。关于OO,我借用本文作者对Java的说法,本身并没有问题,而是用法有问题:)
@or 1=1' -- #4
我觉的java很好不过人们走错了方向
作者使用过:C#,C,C + +,Python,Lua,Objective-C,java,Android,很想问精通那门?
@fragrant_smoke #11
其实工作十年,没用过几门语言反而不正常,我毕业前三年在搞 .net + 一点喉前端,第四年搞Java, 第5,6年开始专职搞node.js + 前端。
从V2过来。OJS简洁大气 速度也不错地说~
@泥图网 #13
Thank you
不以解决问题为基础的滥用OO,都是在装逼。
额。。。
不管什么语言,别侮辱让你吃饭的家伙,早晚有一天会让你没饭吃。
标题
#
拥有1000人开发技术团队,每个人水平参差不齐,我觉得java是最合适不过了。。。
手机上好慢
Java是世界上最好的变成语言!!!!不服来辩!!!! ----------------------------- (逃...
sb
阿里用了多少java
过度设计而已,java本身没问题
@morning_glitter #15
这个我非常认同
@袁主王 #23
所以阿里很垃圾?
何苦纠结语言呢?能够快速稳定的解决实际事务才是重中之重,只有最合适的,没有最好的。C语言,PHP,JAVA都各有春秋。还是动脑做事,而不是纠结哪种语言的好坏吧。如果你真能挑出非常多的毛病,又有方法来处理掉,那你可以开发一种新语言啦。JAVA的开发者也是发现C++有些难用且没那么规范化,才发明出来的!
标题党加垃圾,这种文章发来做什么?
Javascript 不让你痛苦了吧?为什么微软还要搞个 TypeScript ?对于没有面向对象思想的人,让他去理解面向对象的语言,当然是痛苦的。在我看来, Java 是世界上最美的语言。
其实吧,讲道理我接触java也差不多10年,现在在美国工作。其实在美国很多程序员接触过很多语言一般不下5种,前段后端都有,但最后很多人还是选择了java。其实不是因为像作者所说java太冗长,每个人在设计问题。而是很多人的项目不大所以体会不到java的优势。
有一句话: java开发慢,可如果项目大、复杂的话,用java就不容易乱。硬OO的存在还是有很多意义的。最近开始做一些python和node.js的项目, 确实python轻量级,可是当你的项目大了,你会发现你要去回溯原来的代码的时候python就不这么方便了。而且在大公司很多时候你的项目不光是你的,其他组也会在你的上面架构,这个时候硬OO的通用性就体会出来了。你不可能要求其他的组像你了解你的代码一样,他们最好的办法就是通过这些抽象的Class来架构他们的应用