上周,我做了几次面试,要招几名有5年工作经验的高级Java开发人员。但当面试结束后,我感觉到,各种框架(frameworks)使开发变得容易,但同时,也使程序员变笨。
每个人都会在他们的简历中罗列出几乎所有的新框架,他们能“熟练的使用Spring,Hibernate,Web Services等”。
下面是面试的过程。
我: 你在你最近的项目中使用了Spring。使用Spring有什么好处?
应试者: 我们使用XML配置出bean信息,Spring能够帮我们实例化这些bean,供我们使用。
我:如果Spring只是用来创建对象,那我们干嘛要用它?我们可以直接使用“new”来实例化各种依赖关系。为什么我们还要在XML里配置类的名字、要从Spring里取对象?
应试者:如果改天我们又需要对接口做另外一种实现,我们开发出实现后,更改一下XML配置,就能使用我们的新实现了。我们不需要去修改Java类和重新编译它们。
我:可是既然你写出了新的Java类,你必然要重新编译你的项目。
至于XML里的变化,99%的时间里你的XML都是打包在 war 或 ear 文件里的。
所以,你只需要运行一下ant脚本,把你所有的变更都包在war文件里就行了。你的“如果使用XML就不需要编译”的观点是站不住脚的。
应试者:唔,但依赖注入的设计模式建议采用这种做法。
我:好吧。我们就先聊到这。人力资源部会给你打电话的。 🙂
面试另外一个家伙:
我:你能描述一下你最近开发的项目、以及使用到的技术吗?
应试者: 那是个XYZ系统,我们使用了Spring,Hibernate,REST WebServices。
我:那好。你能解释一下RESTful吗?
应试者:我们使用@RequestMapping(value=”/url”, method=”POST”)来开发RESTful应用。我们还使用了PUT,DELETE方法。
我:哦,那RESTful个什么概念?
应试者: 我不是说了吗,如果你使用 @RequestMapping(value=”/url”, method=”POST”),你就是在开发RESTful应用。
我:哦,你对Hibernate如何?
应试者:我这两年一直在使用Hibernate。我对Hibernate很熟悉。
我:跟JDBC比起来,Hibernate有什么优势?
应试者:使用Hibernate,我们不需要写任何跟数据库交互的东西,Hibernate会帮我们处理这些。
我:那Hibernate怎么能知道你的项目需要如何的存取?
应试者:如果我们使用了Hibernate,它会帮我们完成存储,更新,取数据等数据库操作。
我:哦,哦。你在业余时间会读一些技术相关的博客吗?
应试者:当然,我对Hibernate的深入掌握就是这样学会的。
我:非常好,很高兴见到你。我们的人力资源部会给你打电话的。 🙂
面试过程就这样 …
我绝对相信各种框架会提高程序员的工作效率。但程序员也应该努力去了解这些框架是如何工作的。你并不需要理解各种框架的所有内部工作原理。如果你非常的擅长Servlets和JSP,那你就很容易理解诸如Struts,Spring MVC等Java Web框架。如果你不了解这些基础知识,很显然,所有你的回答只能是“框架/标记/XML帮我们做了这些”。
我强烈建议所有刚开始职业生涯的Java程序员都要认真学习Java核心,Servlets,JSP知识。只有这样你才能正确的理解各种框架的工作原理。
框架虽然减少了不少工作效率,但是的确让编程者工作的技术含量越来越低。我感觉不久的将来,稍微熟悉点电脑的人就可以自己编写自己喜欢的程序了。
你是说减少工作量吧……
我差不多快得框架依赖症了。。。郁闷啊
我觉得框架一个好处是大大提高了开发效率,
另外一个是你写的程序,你离职了,后来的人如果也会这个框架,那这个新人会很容易上手.
不过说实话…我工作里一个框架都没有用,导致我换工作的时候很艰难.
没那么恼火吧
框架利大于弊啊
自己动手写个简单的框架比较好
我以前也是很依赖于框架,发现当谈到内部实现,有什么风险点之类的问题时,感觉似乎又什么都不知道,后来就越来越对实现感兴趣了,开始尝试实现一些简单的轻量级框架,开始看一些技术实现方案等。基础牢固了,在牛B的框架也是纸老虎,因为你很容易就看出来他的实现方式了。
这一点,Google就比较好,MapReduce,OpenSocial等,都有技术实现方案或者介绍,通过这些来掌握甚至进行定制开发都是很容易的了。
最近我也在想用各种框架快速开发效率倒是提高了,但是最基本的原理仍然还是很模糊,打算还是把基础在学习一遍,深入研究一下基本原理这样就是再有新的东西出来我也不怕了。
知其然 和 知其所以然,代价是不一样的
的确,应用越来越平台化的现成东西,使得写一个应用越来越容易,很有被外行超越或者自身贬值的压力。
像相机一开始是专业人员使用,现在随便什么人都能用。在这个平台化东西越来越多、愈来愈方便智能的时代,就是不是这种用java一整套技术进行信息系统的应用开发也会成为下一个相机?是什么能够区分出一个专业程序员的价值?
是不断创造新的方便的框架一样的开发平台的能力吗?还是洞悉平台的内部原理和实现的能力吗?我一直深信这一点。但是,若仅仅从应用开发的角度看,似乎又完全可以屏蔽掉这些能力,知道了原理是从思维能力上提升了自己,但原理本身对于开发更好的应用又似乎排不上用场。就像开汽车,随着汽车安全等性能越来越好时,一般的应用越来越少地需要司机会修车,同时高端的应用,比如专业的赛车,仍然对司机在汽车原理修理上提出了更高的要求。
如何能够通过对框架原理、实现的学习、探究,帮助更好的应用开发呢?
写的非常好,能否交流一下。
嘎嘎
只知道怎么做,那不是一个5年的工作经验的开发人员所仅能拥有的。
只知道怎么做,在中国,1年就够了
最近我也遇到这样的事情,对于不熟悉开发的人需要招聘一个开发经理,更是头疼。现在的人对于框架都能吹几句,但是究竟能掌握到多少的东西,难说。不知道除了猎头,还有哪些开源软件开发的招聘渠道。
衍生新问题。基本功如何修炼?哪些技术是所谓的基本功夫?
好久没有用框架了。不是自己不想用而是和公司有关系。总之悲催。
基本不依靠框架,虽然很累,但对数据流,逻辑关系把握的很准
我到时 烦恼 现在 还是用基本的C库 进行编程。需要一个 框架 来节省代码。。。
感觉是瞎编的。
支持!!!
招了三新人SQL一塌糊涂,离开了框架基本什么也干不了,有时候框架吧项目变得非常臃肿,现在我是除了大项目使用框架,其余的谁用框架我跟谁急!!!
配置那么多东西干吗阿……复杂,麻烦……
简单才是王道……
java的框架就是类库吗? 就像C++的boost,STL,MFC….一样么!!不了解JAVA
嗯
已经超越类库本身了,还包括很多方法论,用c++类比的话,更像sdk,你做windows app的话有windows sdk,做arm linux的话有ulinux sdk
我是外行,工作中要涉及一些编程,觉得框架非常有用,提高了菜鸟的工作效率,有能保证他写的东西符合国际惯例、安全标准等等。而且,为什么要”reinventing the wheel”呢?说到底,各种计算机语言不也可以理解为比较低级的框架么。。。难道要程序员写101010111010101010101,才能显示程序员的聪明? 🙂
只是 将程序变得简易浅显大众化本来就是发展的唯一驱动力 未来肯定不需要编程知识来开发 这对大部分人(外行)来说是迫切需要的 对少数人(开发者)是悲哀的 因为开发者本身既充当技术掌握者也充当技术浅化者更充当着技术浅化批评者
看你要招什么级别的人了。你要招的人是为了解决某个框架满足不了你的要求、或者修复、改善、扩展框架吗?如果是这样我赞同作者的论调,否则反之。
软件开发还有很多不用熟悉框架的工作要做,比如设计(或者说业务建模),业务知识及其应用各种设计模式进行设计。这些对某种框架深入理解不是必须的。
如果对某个业务领域比较熟悉,那么设计出来的东西是很好的,可以套到各种框架上跑。反之,如果对业务领域不熟悉,设计出来的代码跟某个框架耦合性就大,这样好吗?
所以仅仅会使用某种框架不差,人家在设计、也业务建模方面说不定有一手。
赞同层主的观点。
程序是为解决问题而存在的,依赖框架有什么不好,让你能更快更方便的处理业务逻辑,一些鸡毛蒜皮的知识如果不是为了解决问题而存在,干嘛要知道。
怕的是解决不了问题,对框架只懂皮毛,不懂原理,不出问题还好,出问题了谁也搞不定,程序可能要推翻重来,谁受的了?
我比较不同意你的观点,只要有人知道怎么解决就行了,并不是组内所有人都得是高手,那样成本也上去了。一开始天花乱坠得说做软件要懂得交流,但是事实上谁也不会这么好心,遇到惹麻烦的同事,一般都是大肆摧残,这是不懂得交流最好的例证。他不会,你不会教他吗?
我挺赞成你的说法。看语言的趋势就是要求越来越简单和快速上手。依赖框架能快速完成项目何乐而不为。
傻B,现在竞争都激烈,你不用NHibernate来做数据持久化工作,不用Sprint来做依赖注入工作,你用原始的代码一字一句敲,等项目出来么蛋黄花菜都凉了
用框架不会使一个优秀的程序猿变笨。
但是同样只会框架不会使一个普通的程序员走向优秀。
打个比喻,用锤子锯子不会让一个高手工匠变蠢,但是只会锤子锯子肯定不会让一个学徒走向高手。
框架只是工具,只是锤子,重点在工具背后的东西。
领域知识,业务逻辑,抽象能力,数学思维,等等,同样是齿轮,普通人做出来是三角形锯齿的,专业人员就会画成渐近线的。这就是背后的数学思维和领域知识了。不去研究这些,只是单纯的用好锤子,长远发展会比较纠结。
同样,好的工具能够提升生产力,好的框架更能让高手发挥。
虽然我是Vim爱好者,但是用了clion之后表示用clion干活更6
I am agree with your point . Thanks for sharing nice information.