Jetbrains公司(就是开发Java IDE IntelliJ IDEA的那个开发厂商)的Sergey Dmitriev在去年发表了一篇技术白皮书,题为“面向语言程序设计:下一个编程范式”(Language Oriented Programming: The Next Programming Paradigm,简称LOP)。
该思想是比较有趣的,Dmitriev的想法是每个程序员都可以按照自己喜欢的方式,构造自己的DSL来实现Little Language,从而达到对领域模型到最终代码的实现的一种映射,是很个性化的想法。
从IntelliJ IDEA的中的特性,我们不难发现,这个灵感的源泉来自于Live Template,这个功能在.NET世界中也有相应的工具,比如在Visual Studio.net 2005中称之为代码片断,而在Visual Studio.Net 2003则需要借助Jetbrains公司的Resharper或DevExpress公司的CodeRush(还有其它的辅助工具,但目前这两个是最好用的)。
我刚见到这个功能的时候,首先想到的是,可以把一些经常使用的代码组合成一个小命令,比如数据访问代码、数据验证代码、常用的名字比较长的函数代码。
后来,仔细思考了一下,如果再进行扩展,还有一个非常有趣的功能。针对每个项目开始前,可以定义好一个标准的变量命名规则的词典,每个开发人员也可以定义自己的词典,只是这个词典必须最终能够映射为标准命名方式的词典,这样可以在一定程度上避免开发人员的变量方式与规范的命名方式间的冲突。
如果再更深入的进行一步扩展,从管理角度考虑,可以让词典作为开发人员源代码的一个必须的文档一起管理,同时为IDE增添一个新的功能:可以查看程序员自己命名方式的代码,也可查看词典映射后的规范后的代码。
LOP则是更进了一大步,这个思想中提出的是每个开发人员,实际上只需要利用工具,构造出自己的DSL,然后用自己的方式,最贴切的方式描述出领域,然后代码的产生过程,是自动的。
这不但与MDA的想法是很相像的,也与“可执行UML”理念很相像,不过,他与MDA或UML不同的地方在于,可以让程序员自己来构造自己的表达方式的模型。
这个想法与MDA和可执行UML想法有一些不同,但我个人认为,这种想法,在实现上,还需要很长一段时间实践与累积才有可能推广。因为UML,它实质上已经成为了一种工业上的标准。虽然标准化的东西,不一定是最好的,很多人也许还仍然喜欢用OMG,但标准化的东西的好处是提供了交流的手段。
从项目的角度看,在软件开发中,最令人头痛的不是如何写代码,也不是如何通过代码实现一个功能,而是开发者之间如何有效地进行合作,从而最终可以达到预期的开发目标。
太个性化的东西,很容易造成沟通上的困难,像Dmitriev提出的非常个性化的DSL,对于程序员来说先不论现不现实,如果考虑从有后来人进行接手用DSL折腾出来的项目的角度考虑话,将是一个非常麻烦的事情。因为接手的人不得不去了解每种DSL构造的过程、思路,也许还需要去试图适应作者的个人风格,即使那是接手者非常厌恶的。
如果要考虑到交流问题,必然要使用一个标准性的东西,这样的,从目前的形势来看,UML是最适合不过的了,但这样的话,似乎LOP并不能称之为“下一代编程范式”,而且LOP的意义也并不重大,LOP的工具看起来只不过是一个MDA的辅助工具罢了。
Dmitriev认为Java、C++、C#无法对现实领域进行很好的描述,所以才提出了LOP思想,力图解决这个问题。