所谓的技术潮流和自己的路
我觉得SOA的是软件开发发展的自然产物,并非说所有的软件的都需要这样开发,但是在企业级应用,统一的服务接口,快速的服务发布和使用,确实感觉(没有太多实际的经验,只能是感觉上了)是有很大的价值和前景的。
我觉得随着SOA的流行,编程在应用级的项目中的重要性会降低.因为作为组件提供的服务是明确定义而且相互之间是可通信和组装的.这意味着既可以通过配置组装出服务端的接口,也可以组装出客户端的应用界面.这样能够更快速的生成可用的应用.这样,程序员的分工就更加明确:开发服务规则或界面组件容器的程序员更偏技术些,需要更好的理解设计模式,算法,编程语言的高级特性,实现更高效,更通用的规则,标准或容器等.而应用级的程序员则更偏重用户和需求些.他们的任务是理解用户最需要的,并为用户定制出针对当前用户的最佳服务组合和最舒服的使用界面.这种实现有可能是通过编程,也有可能是通过适用一些管理和组装服务的工具,比如拖拽一些界面组件,消费一些服务,形成一个应用。
我自己可以知道的是走显然是要偏用户偏上层应用的路了。个人觉得这条路上首要的能力是软技能,当然硬技能也很重要。
软技能首要的显然是交流能力和学习积累能力。交流的对象可能是最终用户,也有可能是需求调查人员。其目的是为了搞清楚客户的需求,并形成行业经验的积累。这种需求的重要性很容易被程序员所忽视,自己就犯了很多这方面的错误:以为把客户的需求画成用例图,实现成可用(不一定是好用)的软件界面,这个项目就做完了。而忽略中间最有价值的部分---行业经验。在一个行业中,用户最关心的是什么,最看重的是什么。比如说自己做了几年的GIS的政府项目. GIS在政府的不同的部门最需要的数据是什么,怎么样表现他们是最好的。规划,快速定位,即时追踪等对不同的部门该如何去组合和表现这些功能,自己都没有形成明确的概念,甚至连一些部门的具体职能和专有名词都想不起来多少。这说明在与客户交流的时候完全没有真正的站到客户的角度想问题,没有在融入行业的基础与客户交流,这样也就不能形成行业经验的积累和做出最符合需求的东东。个人觉得软技能比硬技能更重要,有了这种交流能力和行业经验的积累,技术潮流说实话,不过是换了种实现方式而已。而且不管技术多先进,也只有明确知道需求了,才能知道这些技术对自己有没有意义和如何更好的应用这些技术。
硬技能。说到这,要说点实在的了,本来写这篇文章的目的就是为了帮自己理清思路。it就是信息产业,信息就是数据。也就是说it业其实就是管理数据,和利用数据的产业。这么想的话,就明确了,实际上就是“数据源+数据表现”。那么,自己该何去何从呢,初步觉得如下:
- (1)首先是数据源,多少要懂个数据库吧。通用的知识:建库,建实例,见表,备份,迁移,存储过程,事务等等。另外,最好在某个数据库上保持先进性,xml存储,直接发布webservice等等,不一定现在用,但是要知道这些新东西的意义。自己在单一数据上还是研究的不够,对数据库的认识还停留在一堆定义好的表,所有的逻辑表达用程序解决。这显然是不够的。个人觉得应该研究下怎么在linux下跑db2, 怎么写shell完成一些数据库的自动化操作。总之就是多用,多在 linux下用。
- (2)然后是整理数据源,核心是sql了。虽然有很多可视化的工具能实现很不错的数据源高级整理操作,但是那通常也意味着复杂的配置而且肯定不能做到sql所能做到得全部。还有正则表达式,转化数据格式的除直接编程外的高级工具。自己在这两方面都知道一点,但都不系统,真要出个面试笔试题,那是一定挂。所以要系统的学习一下,有了良好的基础,建立其上的工具也就更好理解和使用了。
- (3)数据表现就多了,但不外乎桌面和web.各种技术的竞争很激烈,但感觉只是模式问题。自己目前web方面做的比较多,应该发挥这方面的长处,在原来的基础上,需要深入学习和使用一个框架了,初步就定为dojo了吧。现在的桌面也能用js些了,Air的ajax写法,真是和写网页没有什么区别,因为程序的容器本来就是一个基于webkit的浏览器,这是一种很好的模式,但是存在和网页一样的性能问题,不是性能高很多,何必要开发桌面版的呢。这方面的继续关注吧,等有正真的桌面程序正式项目再说。目前,就自己有兴趣的写些基于不同技术的小程序玩,知道怎么回事就可以了吧。
- (4)多思考怎么样通过软件解决问题,而不是写代码。尚未想清楚。
- (5)关注轻量级和开源。尚未想清楚。
- (6)很难回避的英文。
真是不写东西不知道自己思维混乱,表达能力薄弱。不过所幸是知道了,慢慢改进吧… …