冒号和他的学生们(连载13)——范式总结

时间:2022-03-12 01:40:48

至精而后阐其妙,至变而后通其数                            ——《文心雕龙·神思》

           

众人落座之后,冒号开始了第四课的讲授:“我们已经涉及了不少编程范式,虽只是走马观花,亦可管窥一斑。现用表格归纳如下——”

编程范式

核心概念

程序运行

典型应用

命令式/过程式

Imperative/Procedural

命令/过程

Command

/Procedure

命令执行

交互式、事件驱动型系统;数值计算等

声明式

Declarative

函数式/应用式

(Functional

/Applicative

函数

Function

表达式计算

微积分计算;数学逻辑;博弈等

逻辑式

Logic

断言

Predicate

逻辑证明

机器证明;专家系统;自然语言处理等

对象式(Object-Oriented

对象(Object

对象间信息交换

大型复杂交互式系统等

并发式/并行式

Concurrent/Parallel

进程/线程

Process

    /Thread

进程/线程间通讯与同步

图形用户界面;多任务系统如操作系统、服务器等;计算密集型系统如科学计算、人工智能等;

泛型式(Generic

算法

Algorithm

算法实例化

(多发生于编译期)

普适性算法如排序、搜索等;集合类容器等;

元编程(Metaprogramming

程序

Program

动态生成代码或自动修改执行指令

自动代码生成;定义结构化配置文件;IDE;编译器;解释器;人工智能;领域特定语言(DSL)等

切面式(Aspect-Oriented

切面(Aspect

在接入点处执行建议

日志输出;代码跟踪;性能监控;异常处理;安全检查;事务管理等

冒号作结案陈词:“编程范式当然不止以上八种,但暂时不必贪多求全。不同的范式各擅胜场,有风格之别而无高低之分。现在请大家畅所欲言,谈谈这段时间的学习感受。”

叹号表情有点复杂:“通过前面的学习,让我长了不少见识,只是——”

“但讲无妨。”见叹号有些吞吞吐吐,冒号鼓励道。

“只是觉得有点——纸上谈兵。”叹号鼓足勇气说出心里话。

引号不以为然:“我倒觉得应该更深入地去了解这些范式,现在有了一些感性认识,但还非常肤浅,希望以后能进一步展开。”

逗号挺实在:“有些地方似懂非懂,听起来挺费劲的,直到情景编程才觉得轻松了些。以后可不可以多谈些具体的编程知识、编程技巧和编程经验?”

句号拍了拍他的肩膀:“你想学的是招法,老冒传的是心法。”

逗号不服:“没有招法再多心法也白搭——光说不练假把式。”

句号反驳:“只关注招法,境界永远得不到提升——光练不说傻把式。”

“二位请暂停争论。”冒号把头转向问号,“你怎么看?”

问号很干脆:“管它心法还是招法,能解决问题就是好法。”

“你倒滑头,整个一白猫黑猫论嘛!”冒号哈哈一笑,“首先,编程范式绝非中看不中用的屠龙之术,它有助于我们在更高的层次上去理解编程语言,故有心法之谓。其次,心法只有通过招法才能落到实处,也只有通过招法才能融会贯通。”

“那传说中的‘无招胜有招’呢?”引号问。

冒号哂道:“武侠小说看多了,容易想入非非,那种境界岂是一般人所能达到的?对绝大多数人来说,无招就意味着自己没招而将中他人之招。”

众人窃笑。

“还有一样是至关重要的。”冒号提醒道,“那就是实战。”

句号深有体会:“以前在学校里编程似乎还得心应手,到了公司就时感力有不逮。”

“花拳绣腿对付小喽啰绰绰有余,真碰到高手自然漏洞百出了。”冒号总结道,“编程水平的提升之道是:在实战中演练招法,在招法中领会心法,心法反过来提升招法,进而提高实战水平,如此循环往复呈螺旋式上升过程。正所谓熟能生巧,巧能生通。”

问号询道:“下面我们的主题是什么?”

冒号亮出他的学习理论:“软件工程中有个迭代开发法,本班则采用迭代学习法:即在具体知识与抽象理论之间进行折返式学习。当然这种迭代不是机械式的重复,而是增量式的循环。假定你们以前更关注具体的编程语言,那么遵循这种方式,先介绍抽象的编程范式是合适的。在初步了解范式之后,不妨重新回到编程语言上来。

叹号求之不得:“是啊,在空中飘久了,会染上恐高症的。”

冒号笑着警告:“不要高兴太早,着陆后我们还会再次起飞的——别忘了我们的迭代式学习是周而复始的。至于眼下谈什么,还是先征求各位的意见,这样开放式教学才名副其实嘛。”

众人开始交头接耳、七嘴八舌地议论起来。