写在爬上脚手架之后
今天在公司参加研发的内部交流会,大家张口一个脚手架,闭口一个脚手架,我此时的内心是崩溃的,脚手架是什么鬼,写程序还需要爬架子摸高吗?交流会上不好意思问,只好私下去给自己科普一下,经过一阵忙活,爬上了脚手架,站在脚手架上略有感悟。
从Wikipedia上摘录一段解释:
Scaffolding is a meta-programming method of building database-backed software applications. It is a technique supported by some model-view-controller frameworks, in which the programmer may write a specification that describes how the application database may be used. The compiler uses this specification to generate code that the application can use to create, read, update and delete database entries, effectively treating the template as a "scaffold" on which to build a more powerful application.
中文翻译意思是:
“脚手架”是一种用于构建以数据库为基础的应用的元编程方法。一些MVC框架就支持这种技术,程序员只需要写出一份配置模版,或者说是规格说明书,来描述应用的数据库会被怎样应用。之后编译器用这份配置来生成能够进行相应增删改查数据库的程序。这种模版就被我们叫做“脚手架”,在“脚手架”的基础上可以更方便地构建更加强有力的应用。
通过上面的解释可以明白,脚手架其实就是在做事之前先搭个初始骨架,或者直接用一个现成的框架。也就是工程师不再单纯通过手写代码来完成业务,还会通过代码去生成代码来完成一些事情。
上面所说的“通过代码生成代码”其实就是元编程。元是什么,英文是“meta”,可以这样理解这个词,一个名词加上了“meta”之后就拥有了自我意识,可以跳出自我,类似置身事外、上帝视角地审视自己,在自己的思考之上进行思考。比如元小说,就是小说之上的小说,也就是小说中的主人公去创作小说,或者小说中的人物自我意识觉醒,知道自己身在故事的情节中。
那么很自然地去理解元编程,就是编写出代码之上的代码,能够操控代码的代码。想象一下,你的代码拥有了自我意识,他能够思考自身的想法和行为,然后通过思考结果再去动态地改变自己的动机、行为,也就是拥有自我的检查和控制能力。是不是对你来说就省去很多事情,并且代码对你来说也不是黑盒子了,你能掌握他自身的信息,还能动态地去改变一些事情。
其实这种所谓的自我意识,就是很多编程语言中提供的自省(introspection)、反射(reflect)特性,像Python、Ruby、Lisp就有,Lisp支持元编程更纯粹,理念就是代码也是数据。
很多事情都是相通的,对人来说也有元这个概念,人本身就有元能力,也就是自我意识,你能够思考自己的思考, 可以置身事外冷静地看自己的经历,能够检查自己的情绪、行为,然后控制自己的情绪和行为。
说个元能力应用的情景,到了该去跑步的时间,你的大脑中就会有个声音,“你还可以休息一会儿哦”:
- 元能力强的人:“滚开,我要去跑步”
- 元能力弱的人:“好的”
其实说到这里,我不知道怎么突然想起了一句话:“好生意顺人性,卓越者逆人性”。
好了,以上这些就是我爬上脚手架之后的所思所想。