What Is Wrong with Mainstream Programming
你知道这则古老的谚语:"If it ain’t broke, don’t fix it". 主流编程方法很明显不完整,我见过它带来的很多问题,而大部分滋生于这样一个事实:general-purpose的语言没有一种方法来完全支持任意的领域,同样也没有一种统一的domain-specific language;下面是将被LOP解决的主流编程中三个最糟糕的问题:
Time Delay to Implement Ideas
对我来说,最严重的问题是,在我确切的知道如何解决一个问题,和我通过一个程序成功的向计算机传达解决方案之间,有一个很长的时间差;我可以用几个小时的时间向另外的程序员解释问题和解决方案,而将解决方案编码到计算机中将花费长的多的时间;这是因为对另外的程序员,我可以使用表达能力非常丰富的自然语言,而对计算机,我只能使用某种表达能力差很多的general-purpose的编程语言;今天的编程语言只能表达几十种概念,而自然语言能够简洁的表达千万种概念;因此,向另外的程序员解释问题,我可以表达很高层的思想,而对计算机,我必须表达每一步的每一个细节
在主流编程中,大部分花在“编程”上的时间,实际上是在寻找用编程层次的抽象的术语来表达自然语言的概念的方法,而这是很困难的,没多少创造性的,或多或少是一种时间的浪费
举个例子,今天大量的开发时间花费在面向对象的设计(OOD)上,在程序员表达类、继承、关联等方面这确实是一种还算有创造性的过程;这项实践的目的是用面向对象的术语,如类和方法,来表达程序;OOD的过程是必要的,因为诸如类和方法等是面向对象语言能够理解的仅有的抽象,它看起来是必要和有创造性的,但是使用Language Oriented Programming,OOD根本就不需要
Understanding and Maintaining Existing Code
下一个问题是理解和维护现存代码;不管它是另一个程序员写的还是我写的,问题都一样;因为general-purpose的语言需要我把高层的领域概念翻译为低层的编程语言特性,在最终的程序中,很多高度概括的视角、蓝图都丢失了;当我在以后重新翻阅程序时,我不得不通过逆向工程来了解我最初的意图是什么,我头脑中的模型是什么;至少,我必须在脑海中重新建造最初在翻译到general-purpose的编程语言的过程中丢失的信息
解决这个问题的传统方法是写注释或其它形式的文档来记录设计信息和模型信息,已经有几个方面的因素证明了这是一种脆弱的解决方案,至少包括编写这些辅助文档的成本、以及文档和代码逐渐不同步的趋势;并且,还有一个没被广泛认识到的事实,就是文档并不能直接连接到它所记录的概念;注释和源代码被绑定到同一个地方,但是概念可能在源代码的多个地方被表达;其它类型的文档彻底从源代码中分离出来,只能间接的引用源代码;理想情况下,代码应该是自我描述的,我应该只阅读代码本身来理解代码,而不是什么注释和外部的文档
Domain Learning Curve
第三个主要的问题是对语言进行领域相关的扩展;例如,在OOP中扩展语言的主要方法是使用类库;问题是类库不是用领域概念相关的术语来表达的,而是用低层的 general-purpose的抽象诸如类和方法等来表达;因此,库很少能够直接表述领域概念,它们必须引入额外的枝节(如一个类的运行时行为)来完成到领域概念的映射;两个很好的常见例子是GUI库和Database库
文章来源于领测软件测试网 https://www.ltesting.net/