程序设计–内部原则

程序设计的演化(C++只是其中的一步)从程序设计模型强加于内部开始,也就是允许程序员为内存位置和机器指令取别名。这是数字机器程序设计的一次飞跃,带动了其他方面的发展,包括从初级机器中抽象出来,向更方便地解决手边问题的模型发展。不是所有这些发展都能流行,起源于学术界并延伸进计算机世界的思想常常依赖于所适应的问题。
命名子程序的创建和支持子程序库的连接技术在50年代向前飞跃发展,并且孕育出了两个语言,它们在当时产生了巨大冲击,这就是为科学工作者使用的FORTRAN(FORmula-TRANslation)和为商业者使用的COBOL(COmmonBusiness-OrientedLanguage)。纯计算机科学中很成功的语言是Lisp(List-Processing),而面向数学的语言应当是APL(A Programming
Language)。

这些语言的共同特点是对过程的使用。Lisp和APL的创造专注于语言的高雅—语言的“mission语句”嵌入在处理所有任务情况的引擎中。FORTRAN和COBOL的创造是为了解决专门的问题,当这些问题变得更复杂,有新的问题出现时,它们又得到了发展。甚至它们进入衰退期后,仍在发展:FORTRAN和COBOL的版本都面向对象进行了扩充(后时髦哲学的基本原则是:任何具有自己独特生活方式的组织,其主要目标就是使这种生活方式永存)。
命名子程序在程序设计中起了重要作用,语言的设计围绕着这一原则,特别是Algol和Pascal。同时另外一些语言也出现了,它们成功地解决了程序设计的一些子集问题,并将它们有序排列。最有趣的两个语言是Prolog和FORTH。前者是围绕着推理机而建立的(在其他语言中常常称作库)。后者是一个可扩充语言,允许程序员重新形成这个语言,以适应所解决的问题,观念上类似于面向对象程序设计。FORTH还可以改变语言,因而很难维护,并且是内部原则概念最纯正的表达,它强调的是问题一时的解,而不是对这个解的维护。人们还创造了其他许多语言,以解决某一部分的程序设计问题。通常,这些语言以特定的目标开始。例如,BASIC(BeginnersAll-purposeSymbolicInstructionCode)是在60年代设计的,目的是使程序设计对初学者更简单。APL的设计是为了数学处理。两种语言都能够解决其他问题,而关键在于它们是否是这些问题集合最理想的解。有一句笑话是,“带着锤子三年,看什么都是钉子”。这反映了根本的经济学真理:如果我们只有BASIC或APL语言,特别是,当最终期限很短且这个解的生命期有限时,它就是我们问题最好的解。

然而,最终考虑两个因素:复杂性的管理和维护(将在下一部分讨论)。即这种语言首先是为某一领域开发的,而程序员又不愿花很长时间来熟悉这门语言,其结果只能使程序越来越长,使手头的问题屈服于语言。界限是模糊的:谁能说什么时候您的语言会使您失望呢?这不是马上就出现的。问题的解开始变长,并且对于程序员更具挑战性。为了知道语言大概的限制,你得更聪明,这种聪明变成了一种标准,也就是“为了使该语言工作而努力”。这似乎是人类的操作方式,而不是遇到缺陷就抱怨,并且不再称它为缺陷。
最终,程序设计问题对于求解和维护变得太困难了,即求得的解太昂贵了。人们最终明白
了,程序的复杂性超出了我们能够处理的程度。尽管一大类程序设计要求开发期间去做大部分工作并创建要求最小维护的解(或者简单地丢掉这个解,或者用不同的解替换它),但这只是问题的一部分。一般情况是,我们把软件看作是为人们提供服务的工具。如果用户的需要变化了,服务就必须随着变化。这样,当第一版本开始运行时,项目并没有结束。项目是一个不断进化的生命体。程序的更新变成了一般程序设计问题的一个部分。