抽象的力量
——WEB程序编程思想的演进



                            

        小时看过一故事:三书生欲进京赶考,问一老僧三人前景如何,老僧端坐如山,最后缓缓伸出一指。于是三书生路上争论不休,不明老僧指哪一人会黄榜题名,不料后来三人同时高中,高兴之余,不禁对老僧的权威起了疑心。三人衣锦返乡后,追问老僧,老僧及端坐如山,缓缓曰:一指表示三人皆中,三人立马晕倒。

■ ASP的编程思想 - 写八股文
        MS在java技术的冲击下匆忙推出ASP技术。要不是因为WinServer操作系统的霸主地位,粗陋的ASP不太可能在OO推行二十几年、C++和JAVA如火如荼之际站稳脚跟。

        我们从ASP技术中几乎可以看出编程技术的几十年的演进过程。大多数人写的第一个ASP程序,就是在HTML字符流中插入<%="Hello,Welcome to ASP World!"%>,瞬间冲动一直支撑着ASP程序员从输出网页内容到输出网页结构到输出网页脚本程序的学习过程,只要你对HTML语法结构和数据库有一定了解,熟悉某一两种程序设计语言,你就可以很快地拨弄出几个网站,要是你还会点PS和FLASH,那你就简直不得了了;终于有一天有人想起C语言include "string.h"之类的东东,开始意识到重复的代码可以定义一个函数或过程来重复调用,于是网络上开始盛行<include file="****.asp">语句;复杂的企业计算不堪忍受ASP粗糙的八个固有组件,然又有白骨精们编写出DLL以体现JAVA标志性的N层结构技术,于是又出现了一个新名词叫DLL陷阱,如果你编写出来的DLL和WIN系统现有的同名,那么离重装机器的日子就不远。简单地说,ASP就是面向过程和面向对象的杂交体,原始、混乱,在同一个程序中,你可看到call sub,也可看到set rs=conn.execute("……"),什么东西!        

        但不管怎么折腾,ASP编程的实质,就是始终面对着组织网页HTML字符流这个过程,尽管带着点OO的影子,但它的目的决定了它是面对过程,在它的眼里,花哨网页中的文字和图片一样,都是字符,它的任务,就是从<html>标签开始,不断用response.write 语句生成<head>到<body>、<div>、<input>一直到</html>标签字符流,最后构成客户端HTML网面和客户端脚本程序,恰似八股文之破题、承题、起讲……

■ WEB程序编程思想的演进 - 让人民币来得更猛烈些吧!
       让我们来想像一下你的月薪从1,000RMB到>30,000RMB的过程。

        一个静态网页就似WORD文档,CSS就象是WORD文档的模板。如果你恰好做这些事,那么你的职位叫网面设计师,月薪1,000,这时你年少无知;

        如果你开始知道如何用程序自动生成一个页面时,此时你的编程思想是围绕着某个具体网页展开的,恰如五六十年代的面对过程时代。那么你的月薪将可能有2,000,叫程序员,这时你初出毛庐;

       你做了许多重复的事,发现许多页面需要一些公共功能,比如网站往往需要一个公共的CONN文件来创建数据库连接对象时,程序员自然会将这个创建过程封装成函数来重复调用,这时的编程思想是围绕着公共功能展开的,正如七八十年代的结构化编程,已经开始对功能的进行抽象。风华正茂的你开始被人叫成软件工程师了,月薪3500;

        当你又发现一个网站中其实都是由公共的内容组成的,比如登录框,它往往有固定的数据(用户名/密码)、固定的外观(用户名和密码输入框 / 提交按钮)、固定的动作(审核 / 登录成功 / 登录失败),从结构化角度来看,完成登录框需要定义若干个变量和若干个函数,但我们进一步抽象,把对话框看成一个整体,它用数据来表示自己的特征(不同用户名和密码的组合),用方法来表示自己所能处理的事件,封装起来,即成为对象。可用如下结构来表示:
                        class 登录{用户名;密码;审核;登录成功;登录失败;输入界面;}
再用对象的眼光来观察网站,那么就会发现小到输入框,大到页面,都是对象,从整个网站中抽象出最基本的内容(不可再分、缺一不可)设计成对象,然后就是简单地组合。这时的编程思想是面对整个网站,其实这就是八九十年代风行一时的OO思想;这时你可能已经有了名片,上面印着高级软件工程师几字,月薪5000RMB,不过你早上梳头时,会发现自已的眼角已有了皱纹;

       当一个企业需要把互联网溶入到它的机体时,它必须把现有的桌面程序和WEB程序看成一个整体,两者需要公共的组件,如这时的登录请求不仅可能是WEB程序,还可能是桌面程序,也就是说需要统一的使用授权组件来处理这类事物,那么这时的编程思想是面对组件;这时你的头衔已改成架构师,月薪>10000,不过镜子里的脑袋上出现若干白发;

         一切看起来已经好象很完美了,不!正如我们对月薪的追求永无止境一样,企业所想的不仅仅是让用户们简单地浏览它们网页这么简单。他的关联客户又对你的系统提出新要求,如希望用他们的JAVA系统直接完成转账过程,可我的系统是用ASP.NET系统架构出来的!另外,你可不能让别人轻松划走2^N RMB。成千上万家的关联客户让你的编程思想开始面对公共服务。对方可不认识你的这对象那组件,就他而言,转账是一件事,只要在他的桌面程序中用他那粗短的手指输入用户名和密码后,其它就是你系统的事。如果你能熟练地用WEB Service 完成这些事情,那么恭喜你,薪水就你而言,只是一个数字而往往不具有实际意义,当然,你现在已很难用自身的魅力来吸引清纯少女了,用十八岁女孩的话说,你已经是老男人了,虽然你才三十出头。