痛苦的Java程序员


发布者 sasasamoa  发布时间 1406907689477
关键字 大话编程  分享 

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困扰。这伤透了我的心。


相关: 面向对象的缺陷





回复 (31)
  • #
  • #1 苏轼 1407082899651

    写的好。一些Java程序员张口闭口的设计模式,系统架构,让我感觉厌恶和恶心。其中一些人殚精竭虑苦大仇深的经过层层抽象和设计,最后高出一坨翔,连累了整个团队。

  • #2 李白 1407112419807

    晕哦, 我几年前,一直到现在都觉得JAVA很垃圾,想不到作者和我想的一样。

  • #3 ourjs 1407116558279

    @李白 #1

    @苏轼 #0

    呵,你们的名字很有特色

  • #4 weathered_paper 1407137930886

    @李白 #1

    @苏轼 #0

    马甲么?

  • #5 or 1=1' -- 1407138449020

    只能说一些Java程序员写不好东西,不能说Java很垃圾

  • #6 black_sun 1407165541848

    哈哈哈,真是笑话,一看就是没开发过多大的项目,根本不知道用一些东西的好处,自己的项目没那么大,不需要用,就认为别人也没用那些东西的必要

    这样的人可能会感觉用shell开发大项目也是不错的,简单直接,多好

    只能说,井底之蛙

  • #7 empty_flower 1407218943169

    @black_sun #5

    少年,你编程这么牛B,你妈造吗?

  • #8 shy_river 1407224717510

    @苏轼 #0

    我就认识一个这个人 就是我的前经理。

  • #9 Tyler 1407240555671

    觉得每种语言必有其过人之处,利弊应该分开看。Java 语言是过重,是有过度设计的地方。但很多架构与设计设计方面的概念都是从Java 而来,比如OSGI,再比如依赖注入等。

    同时我觉得真正使用的时候看的不仅是这门语言的优劣,还有市场。 前些日子面试一家12000+人的软件公司,问他们技术经理,为什么不用Nodejs 尝试开发一些项目。 得到的回答是 优秀的js 程序员太难找,同样为后台服务器开发,现在的Java Spring 那套开发者数量相对较大,很容易找到。语言不是说不好淘汰就淘汰,鄙人觉得,取其精华,去其糟粕,才是要点。

    不偏激,不争辩某个语言一定怎样怎样,辩证的看待问题。这是我这段日子以来的最大体会。 : )

  • #10 icy_shape 1407302617840

    代码写的简单直观很重要,否则老化速度会很快。关于OO,我借用本文作者对Java的说法,本身并没有问题,而是用法有问题:)

  • #11 autumn_grass 1407333665729

    @or 1=1' -- #4

    我觉的java很好不过人们走错了方向

  • #12 fragrant_smoke 1407372123004

    作者使用过:C#,C,C + +,Python,Lua,Objective-C,java,Android,很想问精通那门?

  • #13 icy_resonance 1407376265612

    @fragrant_smoke #11

    其实工作十年,没用过几门语言反而不正常,我毕业前三年在搞 .net + 一点喉前端,第四年搞Java, 第5,6年开始专职搞node.js + 前端。

  • #14 泥图网 1407402567079

    从V2过来。OJS简洁大气 速度也不错地说~

  • #15 ourjs 1407404082715

    @泥图网 #13

    Thank you

  • #16 morning_glitter 1407466899524

    不以解决问题为基础的滥用OO,都是在装逼。

  • #17 black_smoke 1407522827821

    额。。。

  • #18 restless_pine 1407823504246

    不管什么语言,别侮辱让你吃饭的家伙,早晚有一天会让你没饭吃。

  • #19 icy_field 1407909559628

    1. 标题

      #

  • #20 cold_river 1408034645692

    拥有1000人开发技术团队,每个人水平参差不齐,我觉得java是最合适不过了。。。

  • #21 江书丝 1410704552276

    手机上好慢

  • #22 杨志强 1412865080167

    Java是世界上最好的变成语言!!!!不服来辩!!!! ----------------------------- (逃...

  • #23 吕贞卫 1412870805626

    sb

  • #24 袁主王 1412870836016

    阿里用了多少java

  • #25 卫台父 1412896876977

    过度设计而已,java本身没问题

  • #26 丁主划 1412908631252

    @morning_glitter #15

    这个我非常认同

  • #27 孙悟空 1412915914164

    @袁主王 #23

    所以阿里很垃圾?

  • #28 不要叫我杨过 1446476736511

    何苦纠结语言呢?能够快速稳定的解决实际事务才是重中之重,只有最合适的,没有最好的。C语言,PHP,JAVA都各有春秋。还是动脑做事,而不是纠结哪种语言的好坏吧。如果你真能挑出非常多的毛病,又有方法来处理掉,那你可以开发一种新语言啦。JAVA的开发者也是发现C++有些难用且没那么规范化,才发明出来的!

  • #29 孟出次 1465777555946

    标题党加垃圾,这种文章发来做什么?

  • #30 孟出次 1465777714124

    Javascript 不让你痛苦了吧?为什么微软还要搞个 TypeScript ?对于没有面向对象思想的人,让他去理解面向对象的语言,当然是痛苦的。在我看来, Java 是世界上最美的语言。

  • #31 林业乙 1485380657242

    其实吧,讲道理我接触java也差不多10年,现在在美国工作。其实在美国很多程序员接触过很多语言一般不下5种,前段后端都有,但最后很多人还是选择了java。其实不是因为像作者所说java太冗长,每个人在设计问题。而是很多人的项目不大所以体会不到java的优势。

    有一句话: java开发慢,可如果项目大、复杂的话,用java就不容易乱。硬OO的存在还是有很多意义的。最近开始做一些python和node.js的项目, 确实python轻量级,可是当你的项目大了,你会发现你要去回溯原来的代码的时候python就不这么方便了。而且在大公司很多时候你的项目不光是你的,其他组也会在你的上面架构,这个时候硬OO的通用性就体会出来了。你不可能要求其他的组像你了解你的代码一样,他们最好的办法就是通过这些抽象的Class来架构他们的应用

微信扫码 立即评论