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。它让我很受伤。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android开发技巧——写一个StepView
在我们的应用开发中,有些业务流程会涉及到多个步骤,或者是多个状态的转化,因此,会需要有相关的设计来展示该业务流程。比如《停车王》应用里的添加车牌的步骤。 通常,我们会把这类控件称为“StepView”。上图的这种设计相对来说还是比较简单的,下面我们以它为例,来一步步写我们的“StepView”。 那么,实现这样的一个“StepView”,我们会需要哪些知识呢? 所需知识 布局测量 图形文字绘制 文字位置计算 布局测量 首先像这样的StepView,它的宽度应该是填满或者是固定的,因为考虑到屏幕适配的关系,每一步之间的线的长度应该是自适应的。而它的高度,除了固定高度或填满父布局高度,我们还希望它可以根据自己的内容来自适应高度。这时候就需要用到测量了。 图形文字绘制 在这个控件中,我们会需要绘制实心圆、空心圆、矩形(每一步之间的连线),文字。 文字位置计算 我们需要计算文字的位置,使数字正好在圆内居中,以及下面的文字与圆的距离如我们所设。 属性及方法的设计 在StepView当中,需要设定一些属性,比如未选中时圆的颜色,文字的颜色,选中时的颜色,文字大小,圆大小,中间连线的宽度等等。所以我...
- 下一篇
区块链会颠覆全球支付体系?SWIFT:正在测试
由于SWIFT是服务于金融机构的,因此必须在确保安全与可靠和稳定的情况下,才会向客户推出。 风靡IT、金融甚至能源领域的区块链技术,真的会颠覆现有的全球跨境支付体系吗?起码目前全球大多数国家、大多数银行在跨境结算中绕不过的SWIFT(环球金融同业电讯协会),对此有所保留。 “从SWIFT的角度来说,区块链这一分账式账本技术,理念是不错的,但现实中有很多难题需要解决,比如网络安全问题,区块链的运算能力问题等等。” SWIFT亚太欧非中东区首席执行官Alain Raes7月21日在接受澎湃新闻记者采访时如是说。 Alain Raes同时表示,SWIFT也在就区块链技术进行不断地测试和试验,但由于SWIFT是服务于金融机构的,因此必须在确保安全与可靠和稳定的情况下,才会向客户推出。 在区块链的拥趸眼中,区块链对支付行业,尤其是跨境支付具有颠覆意义,有了区块链,支付将在双方之间直接进行,不涉及中间机构。而一旦上述构想变成现实,那对SWIFT来说,自然意味着冲击。 成立于1973年的SWIFT,是为了解决各国金融通信不能适应国际间支付清算的快速增长而设立的非盈利性组织。 目前,SWIFT的报文传...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS关闭SELinux安全模块
- CentOS6,7,8上安装Nginx,支持https2.0的开启