Java程序员的错

Java程序员是有问题的。我使用 Java 编程已经有 10 多年的历史。同时,我还有过大量的使用其它语言开发的经历,比如C#, C, C++, Python, Lua, Objective-C 等等,我认为这些经历在对我认识 Java程序员的问题上起到了巨大的帮助。很多人说 Java 是一种很糟糕的编程语言。我不同意。Java 语言有它自己的缺点,但我想,很多时候,当你看到 Java 在有些地方让人很多人不爽时,那本质上不是 Java 语言的问题,而是它被错误的使用。

这些年来,在我见过的各种 Java 代码中,我发现这最大的问题是,写代码的人痴迷于把自己当作架构师。他们很喜欢这样,在我阅读他们的代码时,经常会发现这些代码与其说是去真正的解决一个问题,事实上更像是为了解决一个问题而规划的一个蓝图模板。这两者之间并不是细微的差别。你会看到继承很深的抽象层和成堆臃肿的样板式的代码。由面向对象而诞生的子类超生现象无以复加。你根本无法一眼看明白、理解这些代码是干什么的——你需要一层层深入挖掘,你需要理解它的整套滥用的术语和折磨人的词汇(“AbstractAdapterFactory”),你必须要把自己当成系统的一部分。我已经记不起来上一次看到一个不是这种情况的 Java 项目是什么时候了。

导致在 Java 王国里代码最终总会变成这样的原因有很多。Java 语言自身要承担一定责任。Java 平台的 API 就是上面说的这些问题的典范,于是,善良的程序员们沿袭标准类库里体现出来的编码规范和风格,将之当作通用的好的编程原则,一下子就误入迷途。Java 语言还会对程序员强迫施加一种上层的形式主义和啰嗦,以至于最后你不得不习惯了这样的风格,当看到其它语言的简洁语法时,反而感觉就像它们都是没穿衣服的裸体——这就是“斯德哥尔摩综合症”(译注:来源于 1973 年发生于此地的一次银行抢劫案中,一个人质浪漫地被她的劫持者吸引住了)。

面向对象的流行部分原因也是这种心理作用造成的。有越来越多的程序员开始退后一步用整体的眼光认识 Java,他们发现,作为一种编程模式,面向对象真的是相当的糟糕。然而,Java 是最大限度的根植于面向对象模式,如果没有面向对象,Java 寸步难行。即使是今天,你仍然能看到大学里的编程课程严重的偏向面向对象,大量的使用 Java 授课,相比起 10 年前、5 年前要普遍的多。

虽然 Java 语言非常的流行,在企业软件开发里被普遍的采用,但这一点都无助于 Java 编程质量的提高。我坦白的说,你在各种企业产品里看到的大量的 Java 代码都是由非常低质量的程序员写出来的。

非常糟糕的是,这些问题并不是只体现在代码上,而是在整个 Java 生态系统上也是如此。不论是你使用的 Java 单元测试工具、依赖关系管理工具,还是模拟框架,即使是很小的 Java 程序,你也逃离不了它周边庞大的系统。Java 程序员无能为力——让他们开发一个小功能,你必然会看到一个继承 15 层的类工厂(factory)的出现。

今天,我在学习 Gradle 框架,很显然是因为最近它在 Android 开发社群里很火。Gradle 来自于 Java 世界,所以它继承了上面我说的所有的 Java 所具有的问题。正像 Tim Bray 最近抱怨的:

“我的浏览器打开的是 Gradle 文档的一页:第 50 章.依赖关系管理。它有 63 个小章节,划归在 10 个一级章节下,这是第 50 章,文档一共有 65 章(包括五节附录)。”

Android——如果说除了那些开发企业软件的人,还有人会在意 Java,那一定是因为它——它沿袭 Java 的老路,走的更远。你会习以为常的发现,在读一页 Android API 文档时,你根本不知道它究竟是在说什么。当然,最终你会弄明白,你需要绕道弄清楚其它 17 个类才行。什么?这让你吃不消?你显然不具备学习 Java 系统 API 的百折不挠的精神。你会变成一个 Loser。

谷歌公司里开发 Android 的工程师忙于构筑伟大的系统框架,没有时间解决真正的问题。

我是一个 Android 程序员,我讨厌 Java。它让我很受伤。

英文原文:Java Developers

译文链接:http://www.techug.com/java-developers

原文发布于微信公众号 - java一日一条(mjx_java)

原文发表时间:2015-11-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏简书专栏

基于pandas、matplotlib、pyecharts的人工智能相关职位招聘市场数据分析

容大教育人工智能班数据分析阶段实战项目:人工智能相关职位数据分析 小组成员:雷坤、韦民童、李波、陶宇 项目周期5天,数据分析为第2天的需求。

2063
来自专栏java一日一条

暴露程序猿身份的8个行为

职业原因:编程语言都有自己特定的语法,程序员在开发者都要遵守这些。当然,还有一些约定俗成的编程规范,如代码缩进(是缩进4个字符还是8个字符)、注释风格,采用骆驼...

891
来自专栏诸葛青云的专栏

为什么C++比C要麻烦?程序员这样回答,终于知道他为什么单身了

同样衍生出来的还有一个小故事:情人节,有人看到C一个人喝酒,便问:你的好哥们C++、Java、Python他们呢?

780
来自专栏月牙寂

白话面向智能体编程(Agent Oriented Programmig, AOP)之二

Agent之前-Object世界 在说起Agent之前,俺们还有必要先敬拜一下Agent的前辈Object,因为Agent实际上是由Object“进化”而来...

3195
来自专栏java一日一条

Java程序员的错

这些年来,在我见过的各种 Java 代码中,我发现这最大的问题是,写代码的人痴迷于把自己当作架构师。他们很喜欢这样,在我阅读他们的代码时,经常会发现这些代码与其...

1193
来自专栏C语言及其他语言

[每日一题]演讲大赛评分(1238)

题目描述 最近"老王"很开心.他在大一的时候参加过数计学院的“软件小组”。告诉你个秘密,这个小组是个好地方,不但活动精彩而且有MM。 这不,这个小组举办了一个...

3115
来自专栏非著名程序员

优秀程序员眼中的整洁代码

有多少程序员,就有多少定义。所以我只询问了一些非常知名且经验丰富的程序员。 ? Bjarne Stroustrup,C++ 语言发明者,C++ Programm...

2177
来自专栏ThoughtWorks

Scala之父Martin Odersky访谈录 | TW洞见

今日洞见 文章作者来自ThoughtWorks:吴雪峰,配图来自网络。 本文所有内容,包括文字、图片和音视频资料,版权均属ThoughtWorks公司所有,任何...

3036
来自专栏java工会

科大讯飞人工智能方向的一次面试经历

2685
来自专栏程序员宝库

比较优雅地编码

命名很重要,随便一本逻辑学教材(如果读者有兴趣,此处推荐《逻辑学导论》)里都会有长篇大论来讨论命名的问题,我国古代在人才辈出的百家争鸣时期曾经出现过一个学派叫“...

1423

扫码关注云+社区

领取腾讯云代金券