• 编程范式,编程语言的语感

    编程范式并非孤立的存在
    服务器君一共花费 117.823 ms 进行了 3 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    我们先来看看一连串常见的概念:编程范式、框架、设计模式、架构、库、工具包、惯用法……

    任何概念和技术都不是孤立的:

    • 库和工具包是为程序员带来自由的,框架是为程序员带来约束的。
    • 设计模式是软件的战术思想,架构是软件的战略决策。
    • 编程范式的学习能增强编程语言的语感。
    • ……
    • 很多人用 OOP 用得非常熟练了,可是却心里总是不踏实,这段为什么要这么写,为什么要继承,为什么要在类内部定义……其实也是半懂不懂。在编程中,自以为懂的未必真的懂,我们需要针对编程范式去系统地理解,才能真正地掌握OOP。

    框架、库与工具包

    为何选择谈编程范式,而不是框架、设计模式还有架构呢?

    我们先来看看各种概念之间的联系。什么是框架(framework)?它与一般的库(library)和工具包(toolkit)有何不同?

    框架就是一组协同工作的类,它们为特定类型的软件构筑了一个可重用的设计。与库和工具包不同之处在于前者侧重设计重用而后两者侧重代码重用。

    框架并不限于OOP,可以是协同工作的类,也可以是协同工作的函数。一个足够复杂的应用软件开发,为确保快速有效,通常采取的方式是:在宏观管理上选取一些框架以控制整体的结构和流程;在微观实现上利用库和工具包来解决具体的细节问题。框架的意义在于使设计者在特定领域的整体设计上不必重新发明轮子;库和工具包的意义在于使开发者摆脱底层编码,专注特定问题和业务逻辑。

    框架与工具包最大的差别在截然相反的设计理念上:库和工具包是为程序员带来自由的,框架是为程序员带来约束的。具体地说,库和工具包是为程序员提供武器装备的,框架则利用控制反转(IoC)机制实现对各模块的统一调度,从而剥夺了程序员对全局的掌控权,使他们成为手执编程武器、随时听候调遣的士兵。

    设计模式和架构

    与前面说的框架与库和工具包不同,设计模式(design pattern)和架构(architecture)不是软件产品,而是软件思想。设计模式是软件的战术思想,架构是软件的战略决策。

    设计模式是针对某些经常出现的问题而提出的行之有效的设计解决方案,它侧重思想重用,因此比框架更抽象、更普适,但多限于局部解决方案,没有框架的整体性。与之相似的还有惯用法(idiom),也是针对常发问题的解决方案,但偏重实现而非设计,与实现语言密切相关,是一种更底层更具体的编程技巧。至于架构,一般指一个软件系统的最高层次的整体结构和规划,一个架构可能包含多个框架,而一个框架可能包含多个设计模式。

    编程范式 = 语感

    知识的学习有几种方式:一种靠记忆,一种靠练习,一种靠培养。就拿英语学习来说吧,学单词,单靠记忆即可;学句型、语法,光记忆是不够的,须要勤加练习方可熟能生巧;而要讲出地道的英语,光记忆和练习是远远不够的。从小学到大学,甚至博士毕业,除了英语类专业的学生外,大多数人英语练了一二十年,水平如何?不客气但很客观地说:一个字,烂。

    原因只有一个,那就是国内的英语教学方式严重失策。教学总是围绕单词、词组、句型、语法转,缺乏对语感的重视和培养,导致学生只会‘中式英语’。同样道理,一个惯用C语言编程的人也许很快就能写一些C++程序,但如果他只注重C++的语法而不注重培养OOP 的语感,那么写出的程序一定是‘C 式C++’。与其如此,倒不如直接用C 呢。”

    一句话:学习编程范式能增强编程语言的语感。

    语感是一个人对语言的敏锐感知力,反映了他在语言方面的整体上的直觉把握能力。语感强者,能听弦外之音,能说双关之语,能读隽永之作,能写晓畅之文。这是一种综合的素质和修养,其重要性是不言而喻的。那么如何培养语感呢?普通的学习和训练固不可少,但如果忽视语言背后的文化背景和思维方式,终究只是缘木求鱼。编程范式正体现了编程的思维方式,因而是培养编程语言的语感的关键。

    语感有了,那些设计模式、框架,甚至架构,等看似神秘高深的东西,也会自然而然地来了。

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [Python程序设计] Django Web环境配置 2 个条目
  2. [移动开发] 从代码角度去认识 Thread 9 个条目
  3. [移动开发] Content Provider内容提供者 3 个条目
  4. [Python程序设计] Tornado源码解析 23 个条目
  5. [移动开发] Android Studio的使用技巧 4 个条目
  6. [Python程序设计] 从PHP到Python 3 个条目
  7. [PHP程序设计] PHP与函数式编程 1 个条目
  8. [Python程序设计] Django后台管理系统 2 个条目
  9. [移动开发] Android加载器Loaders 5 个条目
  10. [软件工程与项目管理] 浏览器的CSS解析 7 个条目
  11. [软件工程与项目管理] 浏览器的HTML解析器 8 个条目
  12. [搜索引擎优化] 百度搜索引擎优化指南 3 个条目
窗口 -- [八点]