编译
blumin
编辑丨陈彩娴1抽象计算思维以设计问题的抽象模型为中心,应用计算步骤和高效算法解决问题——这一概念不仅服务于计算机科学(CS),而且逐渐渗透到科学和日常生活中。「抽象」(Abstraction)是计算思维的核心,也是本文的主题。「抽象」一直是计算机科学的重要概念,在向广大受众教授计算机知识时,对计算思维的强调更是突显了抽象的重要性。在计算机科学中,抽象并不局限于物理现实,因此我们发现有用的抽象无处不在,例如「量子力学」。它有一种衍生的计算抽象,叫「量子电路」,从物理概念开始,催化出用于模拟的编程语言,以及利用其独特功能的理论算法,有望在大型机器上实现。计算机科学中的「抽象」往往包含以下内容:数据模型包含一种或多种类型的数据以及数据之间可能存在的关系。例如,无向图可以描述为由节点和边组成,每条边连接两个节点。某些编程语言不进行数据操作。这可能是一种传统的编程语言,也可能只进行一些特定的操作。这种语言总是有一个正式的语义——关于程序如何影响数据的规范。因此,每个抽象模型都允许我们设计算法,以特定的方式操作数据。我们的目标是设计「优质」、具有多项优势的抽象模型。在设计解决方案时,抽象的难易程度是一项重要指标。例如,我们将在3.1节讨论关系模型如何导致数据库使用频率的激增。生成的算法还有其他性能指标,例如串行或并行机器上的运行时间。同样,我们倾向易于实现的抽象。最后,一些抽象提供了一种简单的方法来衡量算法的效率(因为对于传统编程语言,我们可以估计程序运行时间的上界),而其他抽象则要求我们即使是近似讨论算法的效率,也要先在较低层级进行实现。1.1编译有些抽象的层次太高,无法提供有意义的性能指标。因此,高级抽象的操作可能需要在较低的层级上实现。实际上,在逐渐接近机器本身的层次上,可能存在多个抽象层次。如图1所示,高级抽象(抽象1)的操作可以由较低级别的抽象(抽象2)实现,而较低级别的抽象又可以由更低级别的抽象(图中未显示)实现。有一些有趣的抽象层次将我们从高级程序带到机器指令、物理硬件、逻辑门、晶体管,最后到电子。不过,我们只