为什么我喜欢Java

标签: 技术之外 | 发表时间:2014-03-31 00:00 | 作者:赖 信涛
出处:http://www.importnew.com

我现在的老板使用一个在线测试系统来筛选在线申请职位的求职者。测试的第一个问题很浅显,仅仅是为了让求职者熟悉一下这个系统的提交和测试代码的流程。问题是这样的,写一个将标准输入拷贝到标准输出的流程。求职者可以使用任何他们喜欢的编程语言来实现这个程序。

有时候我们也会遇到在这个测试中得零分的求职者。当我看到他们连最简单的问题都答不出的成绩时,我的第一感觉是,这并不反映出求职者有多差劲。很显然,这个测试系统本身太难使用,才导致求职者不能提交最简单的问题,所以失败归结于测试系统而不是求职者。

但是当我看求职者未能成功提交代码的时候,不止一次的(至少这一次)发现——不是测试系统的错。而是另一个甚至不会发生在我身上的问题:求职者提交失败是因为他们试图使用Java语言来实现这个程序。

我记起了Dijkstra的说法——“教授BASIC语言简直是在犯罪。”当看到求职者被Java搞的焦头烂额的时候,我在想是不是这个言论换成Java的话同样适用。

我不太确定,有可能还是这个测试系统的错;有可能Java程序员具备我们用的上的有价值的技能(抛开他们不能在很短的时间内解决一个简单问题)。我可能改变主意,就在这时,我感到担忧。

当你学习Perl, Python, Ruby, 或者 Javascript的时候,你学到的只是用哈希表解决问题的一些技术,这些仅仅称得上是语言的一部分。当你学Haskell时,就像是在学习一种用懒惰的清单和单元来解决问题的技术。这些强大的多功能的工具是编程语言最重要的地方。

但是当你学习Java的时候,对于很多问题解决起来都没有强大的语言特点来供你使用。相反,你将会把时间花在用编程语言解决问题的技术上。Java也有哈希表,但是从总体上来看,它们只不过是巨大的Collections库中的一种,和其他的种类淹没在Collections 的库中。而且也没有什么理由去了解并学习那些东西。优秀的Java课程可能倾向于分析Collections中有用的部分,但是,由于哈希表只是库的一部分,所以很难看出跟AbstractAction或者zipOutputStream这种类比起来有什么重要的。

我是一个在不同的组织工作了3年的职业Java程序员。我有时候便想写写关于Java的文章。是的我很尖酸刻薄,而且我也不得不承认,我的脾气很暴躁,残酷,消极,所以对我来说,狂热的喜欢一件东西是很困难的。我曾经试图写一篇 关于Blosxom的好文章,在2006年发布在我的博客上,最后失败了;人们以为我是在进行批评,我不得不又写了个 续篇来澄清,但是人们仍然认为我在批评Blosxom。因为这篇文章对Java刻薄的批评让人困惑。我必须声明:这篇文章中关于Java的一切内容都是持肯定态度的,并且也应该被接受。包括:

我真的喜欢Java。

我很高兴能有有用Java编程的经历。我喜欢用Java来编程主要是因为我发现这个过程很轻松。如果使用一门不好的语言,像是Fortran或者csh这种编程语言的话,你会在每一件事上面苦苦挣扎,开发过程中还要不断同这门语言做斗争。使用好的编程语言却是完全不同的体验:利用语言的强大之处,使函数的功能最大化,用最简洁的表达方式来实现代码。

Java既不是一门好的语言,也不算是很差的语言。它算得上一门中规中矩的语言,使用Java不需要有太多挣扎。使用Haskell或Perl时你时常担心是不是应该用最简洁、最高效的方式。在Java中就不必考虑这些,因为最简洁、最高效是不可能的。无论你做什么,怎样去努力,代码都会变得普通、繁琐、冗长、臃肿,你要做的就是把握住方向,将这些重要的大篇代码从键盘中打出来。如果最后的代码比用Haskell写的长十倍,也没有关系,因为IDE将会帮你生成其中的一半代码,而你仍要为另一半付出努力。

所以你改变了心态,不管薪水如何了,也不再担心写出的代码是预先设计好的两倍之长有多么糟糕。你也许不能解决大型的问题,但是你可以参考一本书来解决中等问题,这一行为又导致了更长的java代码,但是你仍能领到薪水。你是一个码农,你的工作就是写代码。你写了很多代码,所以你做好了自己的工作,每个人都皆大欢喜。

你将不会做出任何绝妙的东西,但是同样,你也不会做出很糟糕的东西来。项目可能失败了,但你可以将失败归结于别的地方。毕竟,你用10000行代码写了576个类,表面看来这些都是必不可少的,所以你做好了自己的本职工作。谁都不会责备你为什么要用576个类而不是50个,因为在Java里面仅仅用50个类是不可能的。

(不同的语言有不同的失败模式。比如Perl,项目失败可能是因为你设计并实现了一堆废话,但是有一个万能的变通方案:你可以将项目继续下去,等它变得足够大时交给别人,然后出错的话责任就会归咎于别人而不是你。在Haskell这么做的话,有可能在第一个月就被炒鱿鱼。)

所以是的,我喜欢用Java编程。这样可以从写高质量代码的责任中解脱出来。我很高兴不必担心我所做的是否优秀,或者我写的代码是否易读、易维护。代码变得臃肿,当然,这不是我的错。虽然一切都出于我手。

所以我喜欢Java。但是我不会选择这门语言来应对在线测试,除非分数靠代码的行数来评定。在测试中,你需要完成的快速,所以你需要优化代码来使它们简洁并且表达清楚。Java意味着很多东西,但从来和简洁、表达清楚无关。

当我看到可怜的求职者苦苦挣扎了15分钟14秒,试图用Java程序将标准输入拷贝到标准输出,最终放弃的时候,我为他们昂贵的教育感到悲哀,他们没有学会更好用的工具,或者只是挣扎的写出Java代码而别无他法。

可能感兴趣的文章

相关 [我喜欢 java] 推荐:

为什么我喜欢Java

- - ImportNew
我现在的老板使用一个在线测试系统来筛选在线申请职位的求职者. 测试的第一个问题很浅显,仅仅是为了让求职者熟悉一下这个系统的提交和测试代码的流程. 问题是这样的,写一个将标准输入拷贝到标准输出的流程. 求职者可以使用任何他们喜欢的编程语言来实现这个程序. 有时候我们也会遇到在这个测试中得零分的求职者.

我喜欢的那些演奏现场

- huitang - 每日鲜果精选
3.喜多郎 《heaven and earth》. 4.喜多郎 《Theme From Silk Road 》. 5.久石让 《the rain》. 我钟爱的风笛版《Amazing grace 》. 9.雅尼 《Reflection of Passion》. 查看详情评论:我喜欢的那些演奏现场. 本文原始链接:http://www.u148.net/article/26270.html.

我喜欢的几款软件(三)

- - GeoWHY
好几年前,我就用过这款软件,后来因为自己只有半个摩羯座(玩笑)的严谨和自律,最终不了了之了. 其实,对于时间管理和任务提醒,想我这样没有iphone,使用这nokia 120块钱的低端机的人,最好的办法是用本子记. 纸笔永远是最好的,在我看来,可我每天盯着电脑那么多小时,大部分时间用电脑比用纸笔多,使用一个list软件还是有点必要的.

那些我喜欢的动画片们(一)

- baldachin - 有意思吧
不得不说,动画片真的很好看,那些觉得看动画片还会哭很幼稚的人们,果断忽略. 我只能说,黑白的画面,竟然能让人真的感到恐惧,那些快到结束时,出现的黑白条,真的很美. 虽然看了很多遍,没有怎么看懂,但是,很值得看的动画片哦. 画面很漂亮,里面的歌很好听,尤其是那段砸青蛙,全部的青蛙宴. 看了有点小心酸,阿婆的执着,孩子的梦想,感觉很舒服的动画片.

那些我喜欢的动画片们(二)

- baldachin - 有意思吧
继续和大家讨论好看的动画片,有喜欢的动画片,大家都来说说哈. 宫崎骏的动画片,大家都是一致认可的吧. 其实,就我个人而言,比较喜欢像电影的短小动画片,但是也有一些喜欢的中长篇动画片. 总觉得动画片,能给人很深的感悟,很多道理,能让人豁然开朗好多. 不是电影《魔术师》,是动画片《魔术师》,虽然电影的也很好看,尤其是哪个结局很意外.

【外刊IT评论网】为什么我喜欢Smalltalk?

- ndv - 外刊IT评论网
本文是从 Why I love Smalltalk 这篇文章翻译而来. C,C++,Python等,这些算是传统的语言吧,我从这些语言上学会了基本的编程技术. 这之后,又有四种语言,它们让我学到了一些新的东西. 这些语言改变了我思考的模式,虽然我从来没有使用过它们,但它们都是绝对值得你学习一下的. 你也许还会把Prolog加入这个列表中,但我没有学过Prolog.

【外刊IT评论网】为什么我喜欢Lisp语言

- EK - 外刊IT评论
本文是从 Why I love Lisp 这篇文章翻译而来. 这篇文章是我在Simplificator——我工作的地方——的一次座谈内容的摘录,座谈的题目叫做“为什么我喜欢Smalltalk语言和Lisp语言”. 在此之前,我曾发布过一篇叫做“ 为什么我喜欢Smalltalk. 大漠黄沙 by Guilherme Jófili.

Java中的锁(Locks in Java)

- - 并发编程网 - ifeve.com
原文链接 作者:Jakob Jenkov 译者:申章 校对:丁一. 锁像synchronized同步块一样,是一种线程同步机制,但比Java中的synchronized同步块更复杂. 因为锁(以及其它更高级的线程同步机制)是由synchronized同步块的方式实现的,所以我们还不能完全摆脱synchronized关键字( 译者注:这说的是Java 5之前的情况).

Java PaaS 对决

- 呆瓜 - IBM developerWorks 中国 : 文档库
本文为 Java 开发人员比较了三种主要的 Platform as a Service (PaaS) 产品:Google App Engine for Java、Amazon Elastic Beanstalk 和 CloudBees RUN@Cloud. 它分析了每种服务独特的技术方法、优点以及缺点,而且还讨论了常见的解决方法.

Java浮点数

- d0ngd0ng - 译言-电脑/网络/数码科技
Thomas Wang, 2000年3月. Java浮点数的定义大体上遵守了二进制浮点运算标准(即IEEE 754标准). IEEE 754标准提供了浮点数无穷,负无穷,负零和非数字(Not a number,简称NaN)的定义. 在Java开发方面,这些东西经常被多数程序员混淆. 在本文中,我们将讨论计算这些特殊的浮点数相关的结果.