我现在的雇主使用在线测验来预先筛选空缺职位的申请者。测验的第一个问题很简单,只是为了让考生熟悉提交和测试系统。问题是编写一个将标准输入复制到标准输出的程序。考生可以用自己喜欢的任何语言回答问题。
有时我们会遇到考试得零分的考生。当我看到他们连一个微不足道的问题都没能回答的报告时,我的第一个想法是,这不应该严重地反映在选民身上。显然,考试系统本身很难使用,以至于考生甚至无法提交一个微不足道的程序,这是考试系统的失败,而不是考生的失败。
但是,当我看到候选人时,这种情况已经不止一次了';在我看来,问题不一定出在测试系统中,至少这次是这样。还有一个可能的问题,我甚至没有想到。候选人没能回答这个平凡的问题,因为他们试图用Java写答案。
我想起了迪克斯特拉';It’他说基础教育应该被定为刑事犯罪。看到这个倒霉的候选人被一个本应流于形式的问题搞得晕头转向,我不禁怀疑Java是否也是如此。
我';我不确定。它';这可能仍然是测验的失败。它';尽管Java程序员无法在短时间内生成哪怕是一个微不足道的工作程序,但他们可能拥有我们可以使用的宝贵技能。我可以被说服,但现在我有一种怀疑的感觉。
当您学习Perl、Python、Ruby或Javascript时,您学习的内容之一是使用哈希解决问题的一系列技术,哈希是语言的一个组成部分。当你学习Haskell时,你同样也会学习一系列解决懒汉和单子问题的技巧。这些功能强大的通用工具是该语言的前沿。
但是当你学习Java时,没有';没有任何强大的语言功能可以用来解决许多问题。相反,你花时间学习一套解决语言问题的技巧。Java有散列,但如果你知道的话,它们只是巨大的集合库中的另一部分,在其他种类的集合中消失了,你没有特别的理由去了解或思考它们。一门好的Java教学课程可能会强调集合中更有用的部分,但从那以后';我们只是这个库的另一部分,哈希是否比AbstractAction或ZipoutStream有用可能并不明显。
我做了三年的专业Java程序员(在另一个组织),我打算花一段时间来写下我的想法。我经常非常刻薄和挖苦,我愿意承认我是无情的消极和讨厌的,所以当我真的想要喜欢某样东西时,我很难说出。我曾经试着写一篇关于BlosXom的免费文章,这篇文章从2006年开始就产生了我的博客,但我完全失败了;人们认为我是在批评,我不得不写一篇后续文章来澄清,人们仍然认为我是在反对Blosxom。因为这篇关于Java的文章可能会与讽刺性的批评相混淆,我必须明确指出,这篇关于Java的文章中的一切都是认真的,应该从表面上看。包括:
我很高兴有Java编程的经验。我喜欢用Java编程,主要是因为我觉得它很放松。使用abad语言,比如说Fortran或csh,你很难做任何事情,语言在前进的每一步都与你斗争。有了一门好的语言,就有一种不同的斗争,即利用语言#39;s的优势,以获得最大限度的功能,并实现尽可能清晰的表达。
Java既不是好语言,也不是坏语言。这是一种平庸的语言,没有斗争。在Haskell中,甚至在Perl中,您总是在考虑是否以最干净、最好的方式做某事。在Java中,你可以忘记用最干净或最好的方式来做,因为这是不可能的。无论你做什么,不管你怎么努力,代码都会变得平庸、冗长、多余和臃肿,你唯一能做的就是放松,不断地调整排名,直到有必要的代码流出。如果在Haskell中编程所需的代码是它的十倍,那没关系,因为IDE将为您生成其中的一半,而您仍然需要支付编写另一半代码的费用。
所以你转动曲柄,拿出你的薪水,你就不';我们不必担心这样一个事实:它至少需要两倍的时间,而且设计也很完美。你可以';我不能解决任何真正困难的设计问题,但有一本书可以用来解决一些中等难度的问题,解决这些问题需要编写更多的Java代码,你也会为此付出代价。你是一名程序员,你的工作就是写代码,你写了很多代码,所以你在做你的工作,每个人都很开心。
你不会做出任何真正精彩的作品,但你也可能不会做出任何太糟糕的作品。项目可能会失败,但如果失败了,你可能会把责任推到其他地方。毕竟,您生成了576个类,其中包含10000行Java代码,所有这些似乎都是必不可少的,所以您正在做您的工作。没有人会瞪着你,问你为什么要用576个类,而你本应该用50个,因为在Java中,只用50个类是不可能的。
(不同的语言有不同的失败模式。使用Perl,项目可能会失败,因为你设计并实现了一堆错误,但对于任何问题,都有一个聪明的解决方法,所以你可以让它持续足够长的时间,把它交给其他人,然后当它失败时,它将是他们的错,而不是你的错布莱应该在第一个月就被解雇,因为他选择在哈斯凯尔做这件事。)
所以,是的,我喜欢用Java编程,也不必承担生产高质量产品的责任。不用担心我的工作是否做得很好,或者我可能正在写一些难以理解或维护的东西,这让我感到很愉快。当然,代码冗长得可笑,但这不是我的错。这完全是我的事。
所以我喜欢Java。但我不会选择这种语言来回答测试问题,除非分数与编写的代码行数成正比。在测试中,你需要快速完成,因此你需要优化简洁性和表达能力。Java有很多优点,但它既不简短,也不富于表现力。
当我看到一些倒霉的求职者挣扎了15分14秒才写出一个Java程序,将标准输入复制到标准输出,最终放弃了,甚至连真正的问题都没有解决,这让我很难过,他们的教育可能很昂贵,没有为他们配备更好的工具,也没有为他们提供除了精雕细琢Java代码之外的其他东西。