按照数据为中心,程序就是一个过滤器,典型的例子就是IO,按照处理流程为中心,程序就是一个状态机,典型的例子就是解析文本,其实二者是互通的,文本解析就需要IO,而IO大多数就是读入并使用文本数据,不同的是IO关心的是数据,而文本解析关心的是数据加工的过程。解析XML很复杂吗?按照IO的观点真的很复杂,毕竟你要在内存中定义XML文件的格式,然后将XML文件通过IO映射到这些内存数据结构,然后才能进一步解析,毕竟将程序看做过滤器只关心数据进入的样子和出来的样子,因此解析的过程往往封装在现成的库当中,人们关心数据的意义而不管数据如何加工,正如人们喜欢吃火腿而不关心火腿如何制成一样,这就是当今风行的以数据为中心的程序员普遍的观点,这些人往往没有以前那些高手对底层的了解深,但是他们非常精通所谓的业务流程,现在一个不懂得指针的程序员进入编程界并且拿到高薪很正常,正如前面说的解析XML的过程,这些人往往知道如何使用库,他们比较像程序的消费者代理比如客户而不是生产者本身,比如工人。相反,同样的解析XML文件,如果将注意力集中在解析本身,那么状态机过程将使得解析过程不再像前面一种程序员想象的那么困难,因为这些程序员干的就是这个,他们比较关心产品如何被产出而不是如何被使用,他们更像是工人那样,简单的说,XML文件的解析过程其实就是程序IO流从XML文件头流到尾的过程,其间会遇到诸如<,>,/,...标记,如果将XML文件的解析过程视为一系列的状态转换并且将这些标记作为状态转换点的话,每读到一个标记就意味着可能发生状态的转换,我们可以定义一系列的转换规则,比如等待状态读到<的话就进入解析标记状态,然后紧接着读到/的话就意味着进入了一个结束标记状态,总之,就是这么一个简单的过程,并且状态机可以嵌套存在,就好像XML本身那样,是一个树形的结构。

如此不同的理解程序的方式带来的是编写程序的方式的不同,将程序理解成过滤器的程序员往往更偏向于应用策略,相反将程序理解为状态机的程序员往往更偏向于底层机制,现在更多的人将程序理解成过滤器而不是状态机。