面对不断变化的IT技术,如何能够既要保证从容有度,与时俱进?又要避免狗熊掰棒子,浪费精力,让我们一无所获,两头挨巴掌?
用户需要有成熟、稳定、可用的软件,不会太care你的技术。
这个最低的要求,我们也很难满足。
Web2.0的风潮来了好长的时间,却对于开发企业软件的开发人员来说,似乎无动于衷,最多知道几个名词,掌握一点ajax的技术。
一些人极力将企业软件和互联网应用划清界限,我们设计企业软件是..?
仍然是单板的导航设计,
仍然是点击N次,靠着厚厚的用户说明手册指引,才看到自己最关心的内容,最后发出感叹,我操!原来还有这么个功能!。
仍然是蹩脚的alert。
仍然是粗鄙不堪的操作界面。
用户用的不爽的时候,仍然是沿用者老套、低效的反馈机制。
我们测试时,光功能性的bug, 都迎接不暇,别说有针对性的可用性测试。
但是我们的技术的确在像走马灯一样变化,struts1, struts2, freemarker, hibernate, ibatis, ejb2, spring, seam, ejb3, ESB.
那我们自问,学习技术的目的是做什么?
1)有一个好的就业机会
2)Productivity 。
3)用户体验
4)其他
注意这是个排序,用户? who cares!
第一个,很正常,现在招个爱学习的开发人员,很不容易,应该鼓励。但方向要正确,浪费时间比浪费money更要命。
重点说一下第二个。
不管技术新不新,我们从未知到已知,是一个学习曲线,有高有低,如果是团队的群体行为,有的人掌握的好,有的人差。不管怎样,第一次,总是痛并快乐着。有是代价会很高,我们需要做衡量值不值。
我经历过delphi的VCL,OWL, VC的MFC, AWL,到BS时代的MVC框架,struts1到2,spring, hibernate,ibatis。
我的观点是,技术上注重积累,成熟的技术和不断积累的知识、资源,庞大的用户群和强大的开发社区,才是提高productivity的根源。
只有能够从开发思想的层面上改变的技术,才值得去学习。
我观察到,有两个C(continuous和contribution)机制的技术框架、平台、应用,总是能够在短时间内,超越其他同类竞争,爆发出很大的能量,同时潜力也不可低估。
举几个例子:
1)首推PHP中的word press, 几年了,数不清的plug-ins,其之所以紧跟潮流,就在于不断有新的开发社区contribute的blug-in产生。每个产品经理,都应当把word press作为一个现象来研究。类似想wordpress学习的商业软件产品公司有,Sugar CRM, Salesforce等,都是靠社区生存的。
2)eclipse. 同样是基于plug-in的平台,有多少开源的、商业的组织、团队、商业公司在contribute,围着它打转转.
3) spring, container的概念,可以包容、聚合很多的开发资源、技术。有人仅仅应为XML configuration的一点不爽,就把google的guice 推上了天,做人,做技术,格局都要大,不能只看一点。用过spring的人,恐怕很少有人能代表团队说,俺们不准备在下一个版本、项目、产品中试用了。
4)jquery, 这个用了好久,谁用谁知道!不算官方的,光社区提供的好用的plug in,就有几百个,当然这个不是jquery最主要的优点,但是contribution的威力,不容小视。
所以技术,还在于我们去孵化、成熟后,持续improve才能爆发出威力,如果我们不断的change,其实得不偿失,如果你是一心想做一个好的产品、项目,你会发现,有时换技术,就像足球换教练,解决不了问题,意识跟不上,换什么都不行。
同类的change,要慎重,如struts2 到 spring的MVC ,prototype 变到 jquery, struts2 到seam.
现在有人说seam适合企业级开发,这个很片面,如果你在struts2上没有积累,换什么都没有积累,如果你很成熟,换到seam的代价会比较大。特别是前端技术,因为seam扼杀了前端, 回避前端是错误的,及其错误的,普元那些害人不浅的构件开发,已经证明了世上没有永动机。
这是个方向的问题,技术的重心会从server端移到client, 用户体验的时代已经来了,很多公司对前端开发非常重视,美工将被边缘化,很多的项目已经不要美工了,会CSS、DHTML、javascript的前端工程师,很吃香,而seam恰恰扼杀了前端,大便一样的tag, 并不会提高什么效率,当需求变化时,冲击到界面的设计时,你会很痛苦。我们不仅要考虑到第一次很爽,更要想到应对变化是所需要的灵活。
JSF整个就是一个魔鬼,你有时间学习他们, 为什么不去学习更容易、更灵活的前端的技术?你会发现,自己的思路会更开阔。很多的东西,根本不用server来实现,或者和server灵活结合,就可以达到以前要大量开发的东东,例如Jquery的基于behaviour与structure分离的技术,让页面很简洁,很容易看清页面的结构。
我的策略是,技术是基础,积累才能提高,用户是目的。成熟的架构+创新的扩展,server端,团队应当继续构建、成熟以spring为基础的企业应用开发平台,深度挖掘、孵化、封装,同时将精力转向客户端。努力实现客户端与server端的粘合剂开发提高开发效率,建议的平台是spring + jquery.
顺比说一下,silverlight2.0 出来了,Actionscript3.0也出来了,现在RIA技术争论的焦点是flex vs silverlight. 习惯与写java累的程序员,已经落后太多了,赶快去了解一下更广阔的天空吧。