跳转到内容

电脑入门/编程

来自维基教科书,开放的书籍,开放的世界

踏入编程世界的第一步

[编辑 | 编辑源代码]

计算机编程(通常简称编程)是使用特定的编程语言将一个或多个相互关联的抽象算法转换为具体的计算机程序的过程。编程包含了艺术、科学、数学和工程的元素。编程的第一步是理解你试图通过编写程序来解决的问题。编程通常通过在文本编辑器中编写人类可读的代码,然后将该代码编译成计算机能够理解的格式,即二进制可执行文件来完成。

编程语言的类型

[编辑 | 编辑源代码]

根据使用的代码或语法,存在多种类型的编程语言。

它们之间的差异在于我们编写代码的方式以及它们允许我们实现的不同类型的解决方案。

例如,汇编语言是一种低级语言,用户在其中编写的代码与计算机理解的代码几乎相同(有关更多信息,请参见下文)。高级编程语言使用更自然、人类可读的语法,使人类更容易理解和编写代码。

如今,大多数程序员使用某种高级语言,因为它们更容易学习和理解,通常需要更少的工作量。

低级汇编代码

汇编语言是一个典型的低级编程语言示例。汇编语言提供最低级别的编程体验,这意味着程序员可以完全控制机器执行的所有操作。虽然这为程序员提供了最大的权力,但它非常难学,即使是最基本的任务也可能需要程序员付出巨大的努力。汇编程序编译后通常提供最快的执行速度和最精确的处理器控制。汇编语言通常用于更小的、对速度要求严格的项目,例如编写设备驱动程序,但由于其语法难以理解且复杂,如今它正在被高级语言取代。低级语言和高级语言之间最大的区别在于代码如何编译成二进制形式。用于编译汇编代码的编译器称为汇编器,正如程序员所说,编写的代码被汇编成二进制形式,而不是编译(有关更多详细信息,请参阅编译器)。此外,还存在许多汇编语言,通常特定于处理器平台。虽然它们极难使用,但它们是一个很好的学习工具,因为汇编程序员需要了解机器的工作原理(主要是 CPU 和 RAM)才能编写代码。MASM(微软的宏汇编器)是 Windows 80x86(奔腾/酷睿)平台上的一个流行汇编器,其他流行的汇编器包括 TASM(Borland 的 Turbo 汇编器)和开源的 FASM(Flat Assembler)。NASM(Nationwide Assembler)是目前存在的最通用和最受欢迎的编译器。

Randall Hyde 还为 80x86 平台编写了一个流行的汇编器,称为 HLA(高级汇编),它试图通过使用高级语法来简化汇编语言的学习。虽然可以使用高级语法,但 Randall Hyde 一再强调程序员仍然可以使用一系列 CMP 和 Jcc,而不是例如 .IF。

以下是一个用 MASM 编写的程序的汇编代码片段,它将两个数字(在寄存器 eax 和 ebx 中)加载进来,将它们相加并将结果(在寄存器 ecx 中)存储起来。

.model small, C
 .586

 .data

 mov eax,5
 mov ebx,10

 add eax,ebx
 mov ecx,eax

 end

高级语言

由于汇编语言编程的复杂性极难学习,并且编写的程序难以维护,低级语言通常无法移植到另一个平台,因为它们使用平台,或者更确切地说,是 CPU 特定的指令,因此为 PC 编写的汇编代码无法移植到另一个平台(例如 Mac)而无需对程序进行完全重写。程序员需要一种易于理解且可移植的语言,因此出现了高级语言。高级语言和低级语言之间的主要区别在于它们的编写和编译方式。

虽然汇编代码被直接汇编成二进制形式,而无需进行任何修改,只是将语法转换为 CPU 指令,但高级语言使用编译器,它也把代码转换为二进制形式,但它不使用表示 CPU 指令的语法,而是使用可读的、人类可理解的代码,因此更容易、更快地编写、学习和维护。缺点是编译器负责转换代码,并且它通常会生成比汇编程序生成的运行速度更慢的二进制文件。

编译器非常擅长优化代码,大多数情况下会生成与汇编程序生成的二进制文件具有相同运行速度的二进制文件,前提是使用正确。它们也很聪明,可以告诉我们代码中是否存在问题,有时甚至可以自行修复问题。如今,在速度不如多年前重要的时代,高级语言是大多数程序员的选择。

虽然我们已经了解了两种类型的语言,但在高级语言中也存在低级语言和高级语言。一种编程语言甚至可以同时是高级语言和低级语言。C 或 C++ 是一个典型的例子。它们都提供低级操作(甚至操作计算机已知的最小形式 - 位),但它们也提供自然且易于使用的语法。C# 或 Java 是一个典型的完全高级语言的例子,它们不提供任何低级操作,因此更容易学习和编写。

编程语言级别之间的差异是速度 - 语言级别越高,二进制文件越慢,学习曲线越快。

以下是使用 C 编写的代码(与之前的汇编示例一样)将两个数字相加并将结果存储起来。

int main()
{
  // assign to the variable result the value of 5 + 10
  int result = 5 + 10;

  return 0;
}

数学中的“等于”运算符('=')在 C 中有不同的含义,所以让我解释一下这个程序的功能。它取两个数字 5 和 10,将它们相加并将它们存储在一个我们称之为“result”的局部变量中(该变量存储在 RAM 中)。

另一种流行的高级编程语言是微软的 Visual Basic。由于其易用性和易于理解,它经常被用于学习编程。所有编程语言都需要一些基本的数学知识(主要是代数)以及计算机工作原理的基础知识。此外,每种编程语言都有其用途。例如,PHP 用于编程动态网页,而 C# 用于编程 Windows 应用程序,Java 用于编程平台无关的应用程序。

程序的工作原理

[编辑 | 编辑源代码]

理解计算机工作原理的基础知识非常重要,因为学习任何语言都需要先了解这些知识。计算机使用处理器 (CPU) 来执行指令,使用内存 (RAM) 来存储正在运行的程序,使用硬盘驱动器 (HDD) 来存储未在此时运行的数据和程序。为了使程序能够像我们在前一个例子中那样添加两个数字,程序必须在编译时以及程序运行之前知道应该请求多少内存以及在其中存储什么内容。计算机使用变量来执行此操作。变量是存储在 RAM 中的数据,可以在程序运行时随时更改。在我们的示例中,我们没有使用变量,而是使用了常量 - 无法在运行时更改的普通数字。你会发现,这非常没用,因为大多数情况下我们不知道我们的程序将要执行什么操作。

没有用户输入,计算器将毫无用处,如果它只能添加在编译时已经给出的数字。因此,变量是你学习编程时要了解的第一件事。当你运行我们用 C 编写的程序时,程序知道它包含两个数字,并要求操作系统为 2 个整数分配内存空间。整数是诸如 1、24 和 1497 之类的整数。程序不仅要知道它需要请求多少空间,而且还要知道它将存储什么类型的变量。它将是整数还是字符串?

无论何时使用需要用户输入的程序(例如计算器),它已经在 RAM 中为将要输入的数字预留了空间。当你输入数字时,它会将数字存储在该位置并标记其类型 - 如果你输入 33,它将标记为整数,如果你输入 3.14,它将标记为实数。

实数是带有小数部分的数字。例如,1.33 是一个实数,0.25 也是一个实数等等。程序知道存储的是什么类型的变量,就知道可以对它执行什么操作。因此,如果我们有实数或整数,我们可以对它们进行乘法、除法等操作。但是,我们不能对字符串执行这些操作。我们不能除以单词和字母。

关于编程需要了解的另一件重要的事情是,计算机无法思考。没有人类操作,计算机几乎毫无用处。计算机只会完全按照你告诉它做的去做,不会做更多的事情。你可能已经注意到,这在现实生活中似乎并不总是如此,但这几乎从来不是计算机的错,几乎总是程序员的错。计算机不理解数字、单词或任何其他人类可读类型。它们只理解两种状态:真和假。

你可能听说过计算机使用 1 和 0 来工作,但事实并非如此。它们使用电力,仅此而已。我们发明了 1 和 0 来让我们更容易理解它们(1 和 0 代表电压变化)。如果没有人的编程,计算机无法思考或执行任何有用的操作。它们只能比较数字,其他什么也做不了。了解这一点很重要,这样你就可以开始以计算机程序员的方式思考。

华夏公益教科书