冒号和他的学生们
——程序员提高班纪事
- 范式总结
至精而后阐其妙,至变而后通其数 ——《文心雕龙·神思》
众人落座之后,冒号开始了第四课的讲授:“我们已经涉及了不少编程范式,虽只是走马观花,亦可管窥一斑。现用表格归纳如下——”
编程范式
|
核心概念
|
程序运行
|
典型应用
|
命令式/过程式
(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)
|
在接入点处执行建议
|
日志输出;代码跟踪;性能监控;异常处理;安全检查;事务管理等
|
冒号作结案陈词:“编程范式当然不止以上八种,但暂时不必贪多求全。不同的范式各擅胜场,有风格之别而无高低之分。现在请大家畅所欲言,谈谈这段时间的学习感受。”
叹号表情有点复杂:“通过前面的学习,让我长了不少见识,只是——”
“但讲无妨。”见叹号有些吞吞吐吐,冒号鼓励道。
“只是觉得有点——纸上谈兵。”叹号鼓足勇气说出心里话。
引号不以为然:“我倒觉得应该更深入地去了解这些范式,现在有了一些感性认识,但还非常肤浅,希望以后能进一步展开。”
逗号挺实在:“有些地方似懂非懂,听起来挺费劲的,直到情景编程才觉得轻松了些。以后可不可以多谈些具体的编程知识、编程技巧和编程经验?”
句号拍了拍他的肩膀:“你想学的是招法,老冒传的是心法。”
逗号不服:“没有招法再多心法也白搭——光说不练假把式。”
句号反驳:“只关注招法,境界永远得不到提升——光练不说傻把式。”
“二位请暂停争论。”冒号把头转向问号,“你怎么看?”
问号很干脆:“管它心法还是招法,能解决问题就是好法。”
“你倒滑头,整个一白猫黑猫论嘛!”冒号哈哈一笑,“首先,编程范式绝非中看不中用的屠龙之术,它有助于我们在更高的层次上去理解编程语言,故有心法之谓。其次,心法只有通过招法才能落到实处,也只有通过招法才能融会贯通。”
“那传说中的‘无招胜有招’呢?”引号问。
冒号哂道:“武侠小说看多了,容易想入非非,那种境界岂是一般人所能达到的?对绝大多数人来说,无招就意味着自己没招而将中他人之招。”
众人窃笑。
“还有一样是至关重要的。”冒号提醒道,“那就是实战。”
句号深有体会:“以前在学校里编程似乎还得心应手,到了公司就时感力有不逮。”
“花拳绣腿对付小喽啰绰绰有余,真碰到高手自然漏洞百出了。”冒号总结道,“编程水平的提升之道是:在实战中演练招法,在招法中领会心法,心法反过来提升招法,进而提高实战水平,如此循环往复呈螺旋式上升过程。正所谓熟能生巧,巧能生通。”
问号询道:“下面我们的主题是什么?”
冒号亮出他的学习理论:“软件工程中有个迭代开发法,本班则采用迭代学习法:即在具体知识与抽象理论之间进行折返式学习。当然这种迭代不是机械式的重复,而是增量式的循环。假定你们以前更关注具体的编程语言,那么遵循这种方式,先介绍抽象的编程范式是合适的。在初步了解范式之后,不妨重新回到编程语言上来。”
叹号求之不得:“是啊,在空中飘久了,会染上恐高症的。”
冒号笑着警告:“不要高兴太早,着陆后我们还会再次起飞的——别忘了我们的迭代式学习是周而复始的。至于眼下谈什么,还是先征求各位的意见,这样开放式教学才名副其实嘛。”
众人开始交头接耳、七嘴八舌地议论起来。