# 1具有功能的建筑抽象

> 译者： [https://sicp.comp.nus.edu.sg/chapters/1](https://sicp.comp.nus.edu.sg/chapters/1)

 <chapter>> 头脑对简单思想施加力量的行为主要是以下三个方面：1.将几个简单思想组合成一个复合思想，从而形成所有复杂思想。 2.第二种是将简单或复杂的两个思想融合在一起，并相互设置，以便立即查看它们，而又不将它们融合为一个，从而获得所有关系的思想。 3.第三个是将它们与实际存在的所有其他思想分开：这被称为抽象，因此形成了其所有一般思想。John Locke 关于人类理解的论文 1690

<chaptercontent></chaptercontent>

我们将研究_计算过程_的思想。 计算过程是居住在计算机中的抽象生物。 随着它们的发展，流程会操纵其他称为_数据_的抽象事物。 流程的演变由称为_程序_的规则模式指导。 人们创建程序来指导流程。 实际上，我们用咒语来让人联想到计算机的精神。

计算过程确实非常像巫师的精神观念。 无法看到或触摸它。 它根本不是由物质组成的。 但是，这是非常真实的。 它可以执行智力工作。 它可以回答问题。 它可以通过在银行付款或在工厂中控制机械臂来影响世界。 我们用来召唤过程的程序就像是巫师的咒语。 它们由奥术和深奥的_编程语言_中的符号表达式精心组成，这些语言规定了我们希望流程执行的任务。

在正确运行的计算机中，计算过程可以精确，准确地执行程序。 因此，就像巫师的学徒一样，新手程序员必须学会理解并预见其魔术师的后果。 即使是程序中的小错误（通常称为_错误_或_毛刺_），也可能导致复杂而出乎意料的后果。

幸运的是，学习编程比学习巫术的危险要小得多，因为我们所处理的精神都以安全的方式方便地包含了下来。 但是，现实世界中的编程需要谨慎，专业和智慧。 例如，计算机辅助设计程序中的小错误可能导致飞机或大坝的灾难性倒塌，或导致工业机器人的自毁。

熟练的软件工程师可以组织程序，以便他们可以合理地确定所产生的过程将执行预期的任务。 他们可以预先可视化其系统的行为。 他们知道如何构造程序，从而使未曾预料到的问题不会导致灾难性的后果，并且当确实出现问题时，他们可以_调试_他们的程序。 设计良好的计算系统（例如设计良好的汽车或核反应堆）以模块化方式进行设计，因此可以分别构造，更换和调试零件。

 <split>## 用JavaScript编程</split>  <split>我们需要一种适当的语言来描述过程，为此我们将使用编程语言JavaScript。 正如我们的日常想法通常以自然语言（例如英语，法语或日语）表达，定量现象的描述以数学符号表达一样，我们的过程描述也将以JavaScript表达。 JavaScript于1990年代初开发，它是一种编程语言，用于通过嵌入在网页中的脚本来控制万维网浏览器的行为。 该语言是由Brendan Eich构思的，最初的名称为 _Mocha_ ，后来被重命名为 _LiveScript_ ，最后重新命名为JavaScript。 名称 &lt;quote&gt;JavaScript&lt;/quote&gt; 是Oracle Corporation的商标。</split>  <split>尽管JavaScript是一种用于控制浏览器的语言，但它是一种通用的编程语言。 JavaScript _解释器_是执行以JavaScript语言描述的过程的机器。 Netscape Communications Corporation的Eich为Netscape Navigator Web浏览器实现了第一个JavaScript解释器。 JavaScript的主要功能是从Scheme和Self编程语言继承的。 Scheme是Lisp的一种方言，被用作本书原始版本的编程语言。 JavaScript从Scheme继承了其最基本的设计原理，例如静态范围的一流函数和动态类型，因此，将本书中的程序从Scheme转换为JavaScript相当简单。</split>  <split>JavaScript仅与Java语言具有表面上的相似之处，之后才对其进行了命名。 Java和JavaScript都使用语言C的块结构。与通常使用编译为低级语言的Java和C相比，JavaScript程序最初是由Web浏览器解释为_的。 在Netscape Navigator之后，其他Web浏览器提供了该语言的解释器，包括Microsoft的Internet Explorer，其JavaScript版本称为 _JScript_ 。 用于控制Web浏览器的JavaScript的流行引起了标准化工作，最终导致 _ECMAScript_ 。 ECMAScript标准的第一版由Guy Lewis Steele Jr.领导，并于1997年6月完成（ &lt;citation&gt;Ecma 1997&lt;/citation&gt; ）。 本书使用的第六版由艾伦·维尔夫斯·布洛克（Allen Wirfs-Brock）领导，并于2015年6月由ECMA大会通过。_</split>  <split>在网页中嵌入JavaScript程序的做法鼓励了Web浏览器的开发人员实现JavaScript解释器。 随着这些程序变得越来越复杂，解释器执行它们的效率也越来越高，最终使用了诸如即时（JIT）编译之类的复杂实现技术。 截至2020年，大多数JavaScript程序都嵌入网页中并由浏览器解释，但JavaScript也用于在运行OS X操作系统的Ap​​ple计算机中为仪表板小部件编写脚本，以控制诸如Adobe Reader之类的软件系统以及诸如此类的设备。 使用Node.js作为通用远程面板以及在服务器软件中。</split>  <split>但是，浏览器执行JavaScript程序的能力使它成为编程教科书在线版本的理想语言。 通过单击网页上的内容来执行程序自然是用JavaScript来完成的-毕竟这是JavaScript的目的！ 从根本上来说，JavaScript的功能使其成为研究重要的编程结构和数据结构以及将它们与支持它们的语言功能相关联的极佳媒介。 JavaScript的静态作用域一流的函数提供了对抽象机制的直接，简洁的访问，而动态类型消除了声明程序所要处理的数据类型的需要。 除了这些考虑之外，JavaScript编程非常有趣。</split> <chaptercontent></chaptercontent></chapter>