大家应该都听说过“算法+数据结构=程序”这句话吧? 这是设计师Wirth的一本书的书名,书中描述了过程式编程,尤其是结构化编程的思想。 后来又进一步提出:算法=逻辑+控制。 逻辑是算法的核心,控制主要用于提高算法的效率。 在逻辑编程中,程序员只需要表达逻辑,控制权交给编程语言的解释器或编译器来管理。
1976年,瑞士计算机科学家Algol W和语言设计师Emil Wirth写了一本非常经典的书《+ Data =》(链接是1985年版),即算法+数据结构=程序。
这本书主要写算法和数据结构之间的关系。 本书对计算机科学,特别是计算机科学教育产生了深远的影响。
1979年,英国逻辑学家和计算机科学家发表了论文=Logic+,主要开展了“逻辑编程”相关的工作。
他是一位逻辑学家和计算机科学家,从 20 世纪 70 年代末到整个 80 年代致力于数据库研究,在利用计算机证明数学定理等重要应用方面取得了巨大成就,特别是在逻辑、控制和数学领域提出了革命性的理论。算法等方面,极大地影响了当今的数据库、编程语言和人工智能。
本文提到:
An 可以是一个逻辑,其中要使用该逻辑,而 a 则可以是一个逻辑,通过该逻辑来使用该逻辑。 唯一的逻辑。 an 的 常常可以由 的逻辑来表示。 我们认为,如果他们的逻辑在文本中,那么这种情况会越来越频繁。
翻译过来的意思大概是:
任何算法都会有两部分,一是逻辑部分,用来解决实际问题。 另一个是部分,用来决定用什么策略来解决问题。 逻辑部分是真正解决问题的算法,其他部分只影响解决这个问题的效率。 程序运行的效率与程序的逻辑无关。 我们相信,如果逻辑和部件有效分离,代码就会变得更容易改进和维护。
编程的本质
两位老先生的两句话:
第一个表达往往是数据结构和算法。 它想将两者分开。 这是早期所走的路。 他们认为,如果数据结构设计得好,算法就会变得简单,好的通用算法应该能够用在不同的数据结构上。
第二个表达想要表达的是数据结构不复杂,但是算法复杂,也就是我们的业务逻辑复杂。 我们的算法由两个逻辑组成,一个是真正的业务逻辑,另一个是控制逻辑。 程序中有两类代码,一类是真正的业务逻辑代码,另一类是控制我们程序的代码,称为控制代码。 这根本不是业务逻辑,业务逻辑并不关心这件事。
综上,从这两个表达式我们可以得到:
= 逻辑 + + 数据
如果你结合我们之前讲的各种编程范式仔细思考一下上面的概念,你会不会觉得所有的语言或者编程范式都在解决上面的问题。 无外乎以下几件事。
以上三点是编程范式的本质。
计算机程序的本质
本质上,程序是一系列有序执行的指令。 如何把指令集组织成可靠、可用、值得信赖的软件(奇妙的逻辑塔),这是一个问题。
程序逻辑控制。 从编程的角度来看,开发人员处理的是逻辑,是逻辑的表达、组织和维护。 逻辑是事物从这里到那里的顺序,符合事物发展的规律。 指令是逻辑的具体实现形式。
逻辑成立的前提是它符合事物发展的规律。 程序只能处理数值,但如果传入的是字符串,则只会报错,无法继续; 在处理海量数据时,如果内存不足,会导致程序崩溃; 如果程序中存在内存泄漏,随着时间的推移就会被消耗掉。 内存不足也会导致程序崩溃。 如果多个线程同时修改一个共享变量,在没有控制的情况下,由于不同线程修改变量的时机不确定,导致该变量的最终值将不确定。 这些就是程序执行的发展规律。 要编写程序,首先必须了解这些规则。
定律的表达式为:如果条件(C1,C2,…,Cn)是产生结果(R1,R2,…,Rn)的充要条件,则当C1,C2,…时。 .., Cn any 不满足条件时,无法产生结果(R1, R2, ..., Rn); 反之,如果结果(R1,R2,...,Rn)没有出现,则一定是由于某个条件不满足而导致的C1,C2,...,Cn。 错误和异常是C1、C2、...、Cn中任何一个不满足条件的表现。 规律的本质是必然性,没有可能性; 只取决于人们的探索是否足够准确。 编程开发首先要了解程序执行的规则,然后再进行实际开发; 否则,你将会被程序的结果所折磨。
熟悉了程序执行规则后,程序需要解决以下问题:
让我们暂时回到软件的开头,回顾一下这一切是如何发生的。
—— SDK IDE BUG》 另外,该软件还经历了“单机程序=>多机程序=>分布式程序”的过程。 多机联网程序由于多个子系统的交互而变得更加复杂。 我这里就不详细说了。
但请注意,无论软件开发得多么复杂,总有一群人试图从程序的本质出发去探索软件开发的基本问题。 他们试图演示并确保程序的正确性,完善软件的基本属性并对其进行测量。 ; 程序的正确性本质上是由逻辑来保证的。 没有逻辑,程序根本无法立足,更谈不上今天的大规模应用。
软件开发工具可以让我们更高效地创建逻辑,避免语法错误的麻烦;
公共库将常用的通用逻辑块封装成可复用的组件,避免不必要的重复工作;
设计模式反映了如何可扩展地解决常见的逻辑交互问题;
应用框架解决了应用程序通用逻辑流程的控制问题,让开发者能够更加专注于具体的业务逻辑;
开发技术就是在具体的应用场合,按照既定的总体思路,探索具体的解决问题的方法。
表达和维护大逻辑
表达和维护大逻辑的终极技巧是:把大逻辑切成易于消化的小块,“慢慢吃”。
在该方法的实践中,可以充分利用现有的开发工具、公共库、设计模式、应用框架和开发技术。
软件开发:如何表达和维护大逻辑