为什么80%的码农都做不了架构师?>>>
函数式编程能过去除变量也即状态将系统看成一个真正的(名符其实)的“计算”机。是一种在现行图灵模型上进行邱奇式编程的方法。
图灵模型生机勃勃的原因是它更符合人类认知。但是大部分人显然并没有意识到这一点。从面向过程到面向对象的转向就是证据。面向过程在本质上与面向函数其实一样,它也是一种希望在状态机(图灵机)上实现计算式(邱奇式)编程的方法。单纯的计算语义并不符合真实“世界”的情况,所以它在问题域相对比较简单的情况下还是可行的。因为在这种情况下的语义转换还不是太复杂。一旦问题域本身也变得比较复杂时,它的缺点才开始暴露出来。因为本身已经很复杂的语义转换,再加上复杂的问题域使用这种转换几乎不可能进行。
这可能正是面向对象最终兴起的原因。但是等到人们真正进入面向对象的门槛,才发现如前文所分析的那种结果:面向对象要求很高的编程技巧!除了线程安全以外,更主要的是它还要求很强的“状态管理”能力(很奇怪的是,状态管理竟然从来没有成为软件开发中的一个研究课题,甚至是主要话题------暂时还是先把它列入以后的研究课题吧)。而将系统稳定性指望在程序员身上显然不是一件靠谱的事情。这正是(至少是某些FP者所宣称的那样)某些人最终从面向对象或面向过程转向FP的原因。
因为FP没有状态,只有计算。
而单纯地分析计算模型的能力是没有意义的。因为现实中肯定存在计算型的应用也存在非计算型的应用。至于究竟是后者占了大多数还是前者占了大多数我们并不知道。只有真正的技术采用者自己才知道(也有些不知道的)自己的应用究竟是什么类型的。
这里的计算指的是单纯地以输入输出为工作模式的系统模型。这种模型的问题在对面向过程的分析中已经讨论过。所以它与面向过程拥有同样的问题:在倒洗脚水时把孩子一起倒掉了。不想要状态,却把“对象”也一起倒掉,与不想要洗脚水,却连孩子也一起倒掉是一个道理。
当然,如果洗脚水里面本来就没有孩子的话那就另当别论。但是无论如何,在“倒”以前最好还是看一下会比较好。