Java程序员的堕落

我曾在多个场合撰文说过,现在培训出来的企业Java开发兵团只知道使用某种框架,但完全不知道这些框架的底层原理。今天早上,在依次对三个职位的应聘者面试中,我又再次见到了这种情形。

我们的顾问公司收到了一个客户的招聘需求,要一个经验丰富并通晓SQL的Java开发人员。我们公司在这个客户那里享有非常好的声誉,于是我们从招聘代理公司要来了一批简历,开始搜寻合适的目标。

首先,关于他们的简历——每份简历都有数页,详细的描述了在各个公司干过的各种工作。每份简历上都有一个技术列表,表面上看这些都是应聘者懂得的技术。下面这个清单是一个真实的简历上记载的各种技术:

Core Java, J2EE, JSP, JDBC, Servlets, AJAX, XML, HTML, XSLT, Web
Services, CSS, JavaScript, SQL, Oracle 10g, MySQL 5.0., JMS,Eclipse,
Adobe Flex Builder 3.x,UML, JDBC, SVN, JUnit, VSS, Jira, HTML, DHTML,
CSS, AJAX, JavaScript, XML, MXML, Action Script, Servlet, JSP, JSTL,
Hibernate 3.x, Spring 2.x, IBatis, SOAP, UDDI, WSDL, Apache Axis, Web
logic Server 8.x, Apache Tomcat 5.0, Struts Framework, MVC, ANT, Maven.

相当的让人印象深刻…——对于那些从来没有面试过Java程序员的人来说。我并不想说这些应聘者在撒谎,只是这些人跟你的谈话坚持不到三分钟就会在80%的这些技术上露馅。他们可能听说过或者是试过这些技术或工具,这对于他们来说已经足够可以把它们列入简历了。那剩余的他们能说清楚的20%是什么?框架。基本上他们都会向你解释如何配置Struts或Spring,甚至如何让Spring和Hibernate通信。顺便说一句,他们全都喜欢Hibernate,因为它能让你省去了写SQL,而他们对SQL查询语言的知识知之甚少。

每当我看到简历上写满了这些Struts,Springs,Hibernates等东西,我就会这样问,“假设,你不允许使用任何框架。你要从数据库中的客户表和订单表中取出数据,把它们放到Web页面上,请详细完整的解释一下这整个过程。”对大部分人来说,让他们写出一些纯SQL将是一种致命请求…

有个人在简历上写了JQuery。我问她,“你为什么要用JQuery”…20秒钟的停顿…“我喜欢它,它很好呀!”这就是所有我能从她那挖掘出的关于JQuery的信息。

两周前,我参加了一个旧金山JavaOne大会里的一个技术主题会。Brian Goetz向我展示了一些Lambda表达式(也就是闭包)的样例代码,这个东西将在明年的Java8中出现。这是一个相当高级的语言特征,它所用的Java语法是给有勇气的人准备的。我在想,“在企业Java世界,谁会去用闭包?10%的程序员?5%?”。Java中引入这些表达式只是好玩?只因为它很酷?是因为其它函数式语言中有它?

lambda

软件开发产业正在发生变化。它将不再需要更多的程序员。它需要的是高级匠师,能够在软件出问题时配置并替换相关代码。理想情况下,你的团队中应该有一个Java高手,他能真正理解你们应用中的代码,不仅能够从模块级调整它们,并且能理解每行Java代码。这样的人多少也该知道如何写SQL外连接,知道如何纠正编译问题,等等。

典型的企业经理都希望手下拥有更多的软件开发人员。多管一些人是向上晋升的一种捷径。是这么回事。但如果你足够聪明,你应该确保你那一堆框架程序员中至少有一个是货真价实的。

我又收到了一份简历,将在明天早上10点面试。这简历看起来很眼熟。我只看了它工作过得公司和干的项目。上面其它的信息都是没用的——明天早上10点钟他自然会现出原形。

明天的更新。现在是早上10点15。又一个面试结束了。第四个错误的回答是,要想把数据传送到浏览器,一个servlet需要把数据放到HTTPSession对象属性里。在听了10分钟这样的回答后,你会认为我终止这次面试的行为很粗鲁吗?

明天的明天的更新。我给这个职位每小时的报酬上增加了5美元。偏偏这第一个面试者就扛着胜利的大旗通过了我的面试。别以为这区区5美元就能叩开栖息着有才能的程序员的奇异世界的大门!

[英文原文:The Degradation of Java Developers ]
分享这篇文章:

21 Responses to Java程序员的堕落

  1. jack says:

    我觉得这样的指责是没有意义的,在没有框架的编程时代,使用Servlet开发,难道要指责开发者难道你们只懂得JSP和Servlet,却不知道如何自己设计一个J2EE的规范吗,再按这个逻辑推,开发者只会设计一个J2EE的规范,难道你们不能自己开发一个编程语言,或者不知道自己去实现一个计算机系统的所以细节吗。
    现代软件开发已经变得分工非常细致了,通过不断的封装隐藏技术细节,满足不同层面的开发需求,缩短开发周期,开发分工也越来越细,10年前如果在简历里面写上会JavaScript都觉得不好意思,而现在大型的企业甚至有专门的前端的JavaScript工程师。
    了解事物的细节当然是一件好事,但更多取决与企业需求,而能够站着已有框架和技术的基础上二次创新也是一种前进。

    • 3o,, says:

      不同意你的说法,如果随便什么人学个三个月就能搞开发,那我干嘛不雇个打字员搞开发?

      不要指望有一个万能框架能够帮你搞定所有你不知道,你不关心的东西,有些东西你必须知道,必须关心。细节是不可能被真正封装的。

    • martin says:

      根据我的观察不了解jsp,servlet工作机制的人,经常会碰到404错误。
      并且在碰到404错误后基本束手无策,不知道该怎么办。。。。

  2. Thomas says:

    只知道使用某种框架,但完全不知道这些框架的底层原理的程序员绝不能算合格的程序员,最多算程序施工人员。当然一群这样的不懂底层原理的程序员也能做出项目,正如一群没学过建筑的农民工也能在老家盖个5-6层楼的房子,但高楼大厦就一定要有设计师了。
    你可以不去研究框架的实现细节,但是你至少要知道框架帮你做了哪些事,如果没有这个框架要多做哪些事,这样,当你需要迁移到另一个框架时才不会手足无措,除非你指望一辈子就用一套框架了。

    • nile says:

      这个比喻说的不错,一个建筑工人盖个几层的房子还行,但是要盖的再高一点,就要懂点建筑理论,材料力学,空气动力……

  3. alex says:

    对一个工具的了解程度,决定了能把这个工具运用到多好。框架固然是很好的东西,但是如果不了解框架到底帮忙做了哪些东西、框架到底是如何工作的,应该也无法将这个框架运用得很好吧。
    很多人恶心java也是因为各种封装,想搞清事情最简单最本质的一面变得越来越困难。

  4. ryan says:

    怎么说呢,我也是一名面试官。对于java程序员,哦,对不起,根据文主的思维来看,他们也许只是实施员,他们的确不够好,但是他们一样可以成长,一样可以交付还不错的项目。这个世界有太多的牛人。但是作为一名有思想的管理者需要考虑一个问题,技术高超不等于创造价值高超。先把现实问题解决,再解决理想问题可能更好,呵呵。
    ps:虽然若干年前我也很鄙视这些框架,但是它的确给我节约了不少成本

    • dmcpxy says:

      比较同意你的说法。

    • yy says:

      永无止尽的项目做下去 产生出一堆堆的框架熟练实施员
      曾经有一个熟练的框架实施员在用spring的时候遇到问题苦恼很久,我上次用spring大概在4年前。。当时只是粗略学习了一下,可以说是完全不会的。但是我靠猜帮他解决了问题,一个spring中传入数据作用域设置的问题。我想他可能早就忘记了 pageContext request session application 这四个作用域了

    • 寻觅 says:

      没人说一个项目里面要求全是大牛。你可以招很多施工人员,但也不能缺了最关键的技术人员,以及相关的管理人员。这样才能成为一个健康的team。

  5. haitao says:

    不是框架不好,而是现有的java框架都没达标。
    标准/合格的框架应该是:
    新手直接能使用,马上写出一个普通的应用并运行起来,
    中手可以使用框架的扩展接口完成复杂一些的工作,
    高手能利用它完成彻底的定制化改造

  6. kongxh says:

    看到这篇文章,说不出的味道啊,的确现在写程序的人多了,但是深入理解的不多,但是程序员不是生下来就能编程的,都需要一个成长的过程,我想作者一样是从小白成长过来的,没必要瞧不起人吧,个人认为其实这些所谓的Java高端技术都不是很难,所谓的大牛无非是时间和代码的积累,但是面对就业压力,像文中说的也就不奇怪,不知道作者在打断面试的时候,有没有指出面试者的错误所在,企业是赚钱的,能节省成本,解决问题才重要。

  7. newmewo says:

    我觉得文中要表达的意思并非是说人员不合格, 重点在于最后一段”我给这个职位每小时的报酬上增加了5美元。偏偏这第一个面试者就扛着胜利的大旗通过了我的面试。别以为这区区5美元就能叩开栖息着有才能的程序员的奇异世界的大门!”
    职位报酬上每小时增加5美元. 意味着8小时需要增加40美元. 获得的结果就是 “第一个面试者就扛着生理的大旗通过…”, 最后一段,别以为xxx能叩开栖息着….大门. 很明显. 重点是, 优秀的人多着呢, 关键是看给的报酬是否会打动优秀人的心. 否则,优秀人员是不会投简历的.

  8. KILLVIN_LIU says:

    为什么面试JAVA一定要和SQL联系起来?你们知道为什么JAVA会流行吗?知道为什么我们如此的痛恨C++吗?为什么现在都在唱NOSQL吗?如果你的项目中是SQL驱动的,就无所谓什么架构了!

  9. pgmuse says:

    我也赞同 newmewo 的观点。

    文中这句话才是全文真实的意思:

    别以为这区区5美元就能叩开栖息着有才能的程序员的奇异世界的大门!

    只要文章改个名就不会引起大家的误解了:程序员的堕落还是老板的贪婪?

  10. IT苦逼 says:

    我遇到过在技术上很钻研,很喜欢研究新技术的程序员,他们看起来很闪亮,而且还自己开源项目并用在了公司项目上。
    但是他们最致命的问题就是完全无法按时交付,不是在细节上钻研太升,就是动不动就重写整块代码,或者轻易就升级系统整个框架,哦,还有那个该死的开源框架,他们动不动就升级,而且还带着公司项目一起升级,结果光改编译错误就花了1个礼拜,运行时错误更是花了半年多,相当于整个公司的项目都在免费为他的开源项目做测试。
    好吧,按照本文的理解,他们就是“优秀”的程序员,我也承认,技术上的确很优秀。但是他们根本不是一个能够产生价值的员工,无法产生价值的员工对企业来讲根本毫无价值。
    所以一个程序员的价值是由很多方面组成的,一味强调技术上的成就是不靠谱的。

  11. sw says:

    这就是JAVA这种语言的缺陷,用C#从来不需要这些乱七八糟的框架。

  12. hc says:

    框架这玩意 最好和设计模式一起看

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据