每一门编程语言,都有一群粉丝和一些黑子; 争论语言的好坏,可能导致网络互喷大战。更大规模的争论,则发生在编程范式之间。比如“函数式编程”(FP)Vs.“面向对象编程”(OOP),谁更好?
范式、编程范式,也是yqj2065非常关心的问题。我喜欢看网络互喷大战,热闹谁不喜欢啊。但是,我不喜欢其中出现的调和派——“语言只是解决问题的工具”等等。这些调和派说的,都是没有自己观点的“真理”,其实是废话(大战的双方,谁不知道,每一范式都有自己的优缺点呢),而且这些调和派肯定是编程的初学者,而且调和派降低了火药味。
但是,编程范式这个术语,我渐渐地觉得不合适了。托马斯•库恩的《科学革命的结构》(《TheStructure of Scientific Revolution 》)中指出,新旧范式是不可通约的、不可比较的;关于编程范式的争论、多种范式的融合等,以及罗伯特•弗洛伊德(Robert W.Floyd) 在《编程的各种范式》中列举的一些称为编程范式“东西”,如事件驱动编程、管道等,都让我觉得,编程范式其实应该称为编程宗派(风格)。宗派可以大战、争论和融合。按照我以前的观点,编程范式必需源于计算机科学之根:一般递归函数、λ表达式、图灵机,再加上面向对象,4大范式——现在看来,4大宗派。
有人将FP与OOP进行比较,其实FP应该与命令式编程进行比较。因为:
yqj2065认为,OOP是程序员的宏观世界的基本观点,Java以前是命令式面向对象语言,现在Stream带来了函数式编程风格;Scala等是函数式面向对象语言;由此可知,OOP从来就不会与微观的函数式或命令式矛盾。
正如人们更习惯粒子观一样,命令式面向对象语言更为程序员习惯。
下学期准备使用的PPT: