SpringSide是个好东西,对我来说,它的好主要体现在两个方面:一、它提供了一个敏 捷开发的框架,省去了我自己整合Spring、Hibernate、Struts、ActiveMQ等等开源组件的 时间,而且还是最佳实践;二、它指导了我的学习目标,在SpringSide中整合的各种组件, 都是在同一类组件中最优秀的,而且要想熟练使用这些组件,都必须对它们进行深入的系统 的学习。
本来以为我会在SpringSide开发实战系列中写更多的文章,但是写到现在,我认为应该 要写结局了,为什么呢?因为在使用SpringSide进行项目开发的过程中,我越来越感觉到项 目绝对不是各种组件的简单堆砌,而是程序员要不断有自己的想法和创意,并能够抽象到一 个高度。这也正是为什么我的文章从第一篇到第八篇越来越偏离SpringSide的核心了。在这 里,我主要想谈谈程序员的境界。以下观点纯属个人看法,欢迎大家探讨。
第一层境界:从不能到能。
可以这么说,早在7年前我就已经熟练掌握C语言、Visual FoxPro数据库、HTML、CSS和 JavaScript,C语言和Visual FoxPro是学校教的,HTML、CSS和JavaScript是自学的,同时 ,我还自学了Flash动画制作和Photoshop图像处理。但是,我那时候还不知道应用程序开发 ,学的这些东西无非就是好玩,偶尔参加一次学校主办的网页设计大赛而已。
我开发的第一个应用是《银符英语在线》,使用的是ASP + SQL Server 2000,时间是 2004年,那时我刚考过软件设计师(原高级程序员),有人找我做程序,他说想做一个英语 四六级的在线考试系统,问我能不能做到,我毫不犹豫就说能。我想我确实是具有软件设计 方面的天赋,用了一个星期设计出数据库,再用一个星期写了一个Demo,一下子就把他征服 了,于是,他当老板,我当程序员,一起进行在线英语考试方面的开发。
在这段时间,我觉得我不折不扣就是处于这第一层境界。JScript我早已是滚瓜乱熟, ASP教程更随处可得。在这段时间里,我用全JScript代码实现了用户认证和权限管理,用 Visual C++写了个COM组件进行数据的加密和解密,还在网上到处搜索文件上传和动态图片 生成方面的解决办法。当时,我觉得我的开发过程充实而满足;现在看来,我只不过是一个 重复发明轮子的傻冒。
在10个月的时间里,我把这个程序从1.0版开发到3.0版,功能上进行了不少升级。但是 我认为升级最大的还是我的技术,我尽我最到的能力将代码与网页分离,尽我最到的能力减 少代码的重复,甚至已经基本做到使用模式来让程序更加容易扩充和维护。我所做的一切, 与现代的一些Web开发框架已经不谋而合。但是,以我当时的内力,确实没有办法将之抽象 为一个框架。我的程序中依然充满了意大利面条式的代码,而且在在线人数多的时候,网页 会慢得象蜗牛爬。
第二层境界:从能做到做得漂亮
2005年,我开始接触Java,以我的基础,自然是很快就学会了Java的语法并进军J2EE。 我觉得Java开源世界给了我不少能量,在这两年里,我的进步速度是呈指数式的。以我现在 的水平,仅使用JSP和Servlet,已经足以解决绝大部分的需求。然而,仅使用JSP和Servlet 就是全部吗?
这个时候,我们不仅仅要能够完成应用程序的编写,更重要的要让应用程序便于维护和 便于扩充。这时候,没有足够的抽象能力是不够的。要能够理解和应用分层架构,要知道 MVC、IoC、AOP、ORM,要了解声明式事务处理,还要学会最流行了AJAX。所有的这一切,不 仅能够让我们的应用便于维护,合理使用各开源组件还能加快开发的速度,但是最重要的, 它们能使我们的应用充满艺术的美感。
在SpringSide社区,现在最流行的是Acegi,这也是对安全与权限功能的一种抽象。本来 我也想写一篇Acegi方面的文章,但是cac写的文档是在是太完美、太经典了,我无法超越。 我们应该让我们的应用尽量向Acegi靠拢,因为,它代表的就是安全与权限领域的最佳实践 。
第三层境界:从程序员到架构师
架构师可以干什么?如何让应用在性能,伸缩性,扩展性、可靠性,容灾,可恢复性, 可管理性等方面做到最好,就是架构师的职责,同时,架构师要能够把握软件开发的整个周 期。由于我还只是一个程序员,也没有精力去学习架构师方面的只是,因此上面的论述可能 不准确。但是,作为一个程序员,上升到一个境界之后,确实应该考虑编码之外的东西了。
举例说明,cnblogs的博客程序算式比较完善的了,我个人对站长dudu也是充满了仰慕。 cnblogs的1.0Beta2版本我也下载得有,本打算使用它建一个自己的博客网站,但是却不行 ,因为它在性能,伸缩性,扩展性方面都达不到我的要求。