如果你开始接触编程,肯定会听说“框架”这个词,“Django”、“Spring”、“TensorFlow”、“Flask”这些名字也随处可见。我一度被这些概念困扰,毕竟它们不像clojure,kotlin一样是名字奇怪的编程语言,而是“基于某种语言”;它们的介绍里会开门见山地说“这是一个框架”,然而你此时并不知道什么是框架。

  我也可以开门见山地说,框架就是一个库(用于import或include之物)——但你需要重新思考什么是库。

  举个例子,用python写一个网页服务程序,完全可以不使用任何框架,python自带的库(urllib)完全足够。如果是教程里的简单例子,代码可能仅有十几行。但是当你想做更大、更复杂的东西,你就会发现代码开始膨胀,重复的代码越来越多,你意识到应当把重复的部分单独出来写成一个函数,然后用不同的参数调用它。当这些函数也多起来的时候,你意识到应当把这些函数放到一个额外的文件里。于是你原本的文件由于调用了函数,会变得非常精炼:实现不同的服务程序,互相重复的代码变得很少。此时你就可以称那个存放了一堆函数的文件为一个“框架”了。

  在完成其他任务的时候,这一过程是一致的:把重复的工作打包成一些函数,装进一个单独的地方。但是之所以有“框架”这个名字,是因为相比之前,所用的代码在整体上换了逻辑,写代码的重心发生了改变。你也不能用先前的逻辑写代码了,因为可能一堆if else判断被字典代替,不同语句的参数变成了同一个函数的参数……你得重新学习这些风格,这仿佛是“语言中的语言”——语言是对使用机器的抽象,而框架是对使用语言的抽象,不过每次抽象都是要花费额外的精力的。