程序员要知其所以然 框架

2011-09-06

以前甚为赞同这篇文章,也是我以前比较鄙视大多数java程序员的原因(仅仅是以前呦),最近的认知有所改变。

http://www.linuxeden.com/html/news/20110906/113649.html

上周,我做了几次面试,要招几名有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知识。只有这样你才能正确的理解各种框架的工作原理。

最近自己也在别人的框架上,再次封装自己的框架,目的就是为了更高效的完成特定类型的项目

为了避免新人盲目依赖框架,不少提醒他们要多思考,多了解问题的本质,多了解框架的设计思路,没有多大用处,貌似从来没人问过我,为什么要这样做。甚至,感觉自己有点过于强势了,要求别人按照自己的方式来思考问题,结果,不仅没效果,气氛也搞得不融洽。

最近看一本书《遇见未知的自己》,发现:让别人接受自己想法的最好办法是点拨,而不是灌输。实际上早有感觉,但一直没静下心仔细思考。

  1. 对一件事情的认知,大多是在有亲身经历的情况下才深刻,所以:讲故事,讲案例是个稍好的方法
  2. 成佛这件事,是需要经过81难才能完成的,不能着急,但要心中有上进的理念
  3. 杀人的是人,不是刀,同理,让人笨的不是框架,而是自己的行为,刀和框架,只是让杀人、笨更便捷,以2成人的标准去要求8成人,是违法自然法则的
  4. 每个人的人生理念是不同的,简单、粗糙未必不好,只要自己接受对应的结果就行

有了这个结论,自己应该淡定一点了

PS:成长是自己的事情,千万不要等待外界的变化,来促进自己的成长


2013-11-26

自己组织的框架基本成型了,感觉很不好。

  1. 整合、配置形的框架,很不灵活。不过目的实现了,就是为了快速构建原型。但不符合自己的胃口。更崇尚unix哲学,小工具组合型
  2. 基础框架ThinkPHP让我有些不满意,很符合国人习惯,但是其代码和组织不够健壮,性能也不是太好
  3. 作为一个框架根本没有设计思路、没有哲学基础,感觉有点不稳固,仅仅是为了解决问题堆砌出来的

不过,至少完成了既定的目标。随后将增加自定义特性,而不再增加新功能。