第1部分——编程是什么?
简单的说,“编程就是指导计算机执行任务的行为”。编程通常被认为是编码。
那么,什么是计算机程序?计算机程序就是计算机所执行的一系列的指令。
上面所定义的计算机指的是任何能够执行代码的设备。可能是智能手机、ATM机、黑莓PI、服务器等等。
一个关于编程的好的类比
首先,我们的日常生活是有规律可寻的。宇宙的运行某种程度上来说是可预测的;例如白天黑夜、季节变换、日出日落。人类在早上起床然后去上学或者上班的循环里周而复始。工作上我们从别人那里获得指令,比如上级。再比如烹制一道菜可以分解成有限的几个步骤。
再次,比如当我们使用智能手机的时候,有部分代码运行的在后台不可见的。再比如在电脑上将鼠标从一个地方移动到另一个地方,看起来很简单,但实际上,这需要运行很多行代码。又如在Google Docs上输入文字这样一个看似简单的操作,在后台也需要运行相当多的代码。代码随处可见。
计算机程序也可以称为代码。不要使用'codes'这个词来称呼代码(因为“code”只能用单数形式)。好了,这不是一堂英语课,我们言归正传。
计算机的自然语言
就像人类一样,机器也有属于他们的自然语言。但计算机无法理解人类的语言。计算机的自然语言实际上是二进制代码(binary code)——1和0。它们代表了两种状态:有(1)和无(0)。
它就是电子设备的自然语言。但是要让人类用这种二进制代码来交流的话,我们一定会抓狂的!
进入程序设计语言
为了和这些只讲二进制语言的机器交流,我们需要一种与我们的自然语言(比如英语、法语、阿拉伯语或斯瓦希里语。)比较接近的语言。程序设计语言就是一种和人类语言相近的语言。但是它们跟加结构化而且必须完全学会才能够使用它们。
程序设计语言可能是高级程序设计语言或是低级程序设计语言。高级语言与机器语言的差别要比低级语言更大。这种“大的差别”通常被称之为抽象(abstraction),这一点我们在这个系列中不会深入讨论。这样我们就不会分心(distracted)了:)
计算机需要一种方法来理解我们的语言。为此,我们需要一个翻译器(Translator)。
什么是翻译器
源代码是指以特定编程语言编写的代码。
翻译器有责任将您的源代码转换为机器语言。 这也被称为二进制化。 记住1和0。 我们可以将二进制文件称为目标代码,程序或今天的常用词:应用程序。
翻译器可以是以下任何一种:
解释器
编译器
混合解释编译器
汇编器
解释器
一些语言是被解释的。 翻译器逐行处理源代码,程序或应用程序运行每一行代码。 这意味着解释从运行代码开始,直到它遇到错误。 然后解释器停止工作,报告错误。 Python是解释型编程语言的一个很好的例子。
编译器
编译器的工作方式跟解释器不一样。编译器会通过编译过程将所有源代码全部转换成为二进制文件。然后执行该二进制文件。如果源代码中存在错误,在编译的时候编译器会检测出来并予以标示。这将会中断编译过程,并且不会生成二进制文件。
解释器是一行行的翻译源代码并执行的,只有当前行的源代码执行完后才能进行下一行代码的翻译。而编译器则是一次性将所有源代码翻译成一个文件(二进制),并执行这一整个文件。
还记得计算机程序的定义吗?就是计算机所执行的一系列的指令。
一个正在执行的程序通常被称为进程。这样的程序需要占用计算机或智能手机一定的资源,如内存、硬盘空间还有文件系统。正在执行的程序也可以说成正在运行。
当我们执行一个计算机程序的时候,我们使用“运行(run)”这个词来描述。程序运行所花的时间一般被称为该程序的运行时。
计算机程序通常也被叫做应用程序(Apps)。我们经常会把程序和它们所运行的、或者设计运行的平台或者环境联系起来。比如web应用程序是运行在web浏览器上的,谷歌电子表格(Google Spreadsheet)就是一个例子。还有移动应用程序,是运行在智能手机上的,如CandyCrush。另外还有桌面应用程序,如Evernote的桌面应用。
再说一遍,解释型源代码是直接从源文件上执行的。而编译型源代码则是先转换成二进制文件。之后再执行该文件。编译型源代码编译成功后,在运行时仍有可能发生错误。
混合解释编译器
混合解释编译器是解释器和编译器的组合。流行的混合编程语言是 Java 。Java 首先将你的源代码编译为称为字节码(Bytecode)的中间格式。
字节码然后由称为虚拟机的运行时引擎解释和执行。这使得混合翻译器能够在各种操作系统上运行字节码。
Assemblers 汇编器
汇编器是将底层的汇编语言翻译成二进制。
对于这个系列,我们只关注高级语言。
分析转译器的一个好方法就是把它们看成一个程序。你需要下载或获取它们,将其安装在计算机系统上并了解其基本工作流程。
你现在已经不知不觉进入到了编程中。你需要做好准备开始写第一行代码了。
你需要从下面这些内容开始:
计算机系统
这时候你需要的不是复杂或昂贵的计算机,你只需要一台工作正常的就行。
安装 CLI
我推荐你从这个速成教程开始学习使用 CLI。
安装文本编辑器
我们会在第二部分回到这个主题
学习一门编程语言
在这个系列中你会学习一些基础,建立适用于多数编程语言的基础知识。
询问
开始编程需要哪些基本的工具?
你将在 Bash(CLI) 下使用什么命令?
- 检查你的当前目录
- 进入一个叫 ‘bin’ 的目录(现在 bin 是当前目录)
- 创建一个新叫 ‘lib’ 的新目录
- 创建一个叫 ‘book.py’ 的文件
- 列出当前目录的所有内容
小结
我们已经了解了基本编程知识,也介绍了翻译器。“源码” 对你来说不再陌生。我们将会在下一部分仔细分析源码。
第 2 部分 ——源代码
现在你已经理解了编程的概念,我们来分析源代码。
源代码基本上就是一个文件,就像 Microsoft (.doc) 文件,但略有不同。它是一个原始的文本文件,使用像 Windows 记事本这样的简单编辑器就可以写出来。回忆前面章节中提到过,你需要解释器或编辑器来把源代码转换为二进制。源代码必须保存在文件中,这样可以作为翻译器的输入。
根据你写程序的语言,会将源代码保存在指定扩展名的文件中。Python 的扩展名是 ‘.py’。Java 的是 ‘.java’。Php 的是 ‘.php’ 还有 PERL 的是 ‘.pl’ 等等。
你在写完源代码之后,必须使用翻译器来运行。
Part 3 — Debugging 调试
一旦你开始尝试编写代码片段,或者你正在尝试基于代码解决实际问题,你将很快意识到,你的程序总是会有崩溃、被打断并停止运行的一些时刻。
这通常是由错误引起的,统称为运行时错误或异常。从我们的代码中查找和删除错误的行为被称为调试。通过更好地调试代码,你的程序会变得更好。我们不仅调试我们自己的代码,还可以调试其他程序员编写的代码。
开始之前,我们需要能够识别源代码中可能出现的常见错误。
语法错误
这些错误不会让你的源代码通过编译。它们会在编译期或在解释源码的时候被检测到。这些错误也很容易被 Lint 工具检查到。我们稍后会了解更多关于 Lint 工具的内容。
语法错误多数情况下是由于你在编码时破坏了对应语言的预期形式或结构引起的。比如在某个语句中少写了反括号。
语义错误
语义错误也被称为逻辑错误,它是所有错误中最麻烦的一种。语义错误并不容易检测。语义错误的标志之一是程序可以正确运行但不能产生预期的输出。
Run-time Errors 运行时错误
与语义错误一样,编译时也不会检测到运行时错误。与语义错误不同的是,运行时错误会中断程序,并阻止其进一步执行。它们通常由源代码中的一些意外计算结果引起。
调试
以下是几条关于如何调试你代码的小贴士:
使用 Linters
Linters 是辅助扫描源代码的工具,用以检查它们是否符合你所编写的语言中的预设的标准。许多编程语言都有对应的 linters。一定要找一个你正在学习的语言的版本。
优选 IDE,而不是简单的编辑器
你可以选择为你正在学习的语言所设计的 IDE。IDE 代表集成开发环境。它们是用于编写、调试、编译和运行代码的软件。他们通常带有强大的调试工具包,支持查看或单步执行代码。
Jetbrains 创造了很多伟大的 IDE,例如 Webstorm 和 IntelliJ。IDE 还有 NetBeans, Komodo, Qt editor, Android Studio, XCode (已移植到 Mac 上),这里仅罗列部分。.
大声地朗读你的代码
当你正在查找语义错误时,这通常很有用。在大声朗读代码的同时,你很可能会找到错误位置。这可能会让你灵光乍现,发现错误所在。
阅读错误日志
当编译器给出错误时,请确保查看行号或被标记的代码部分。
第四部分:基本编码流程
代码行,表达式和语句
所有源代码的基本单位是 LOC (Line of Code,代码行)。最简单的程序是一行代码。LOC 可以是一个关键字、一个符号或者一个语句。只要代码位于单独的一行,它就是 LOC。
让我们来看看一个简单的代码行:
area = 0.5 * base * height
0.5 * base * height 是一个表达式。一个表达式是有运算符和运算子组成的。在上面给出的例子中,运算子是 0.5,base 和 height。你可能会回想到 0.5 是一个浮点型常量,而 base 和 height 是变量。运算符是 *(乘法运算符)。
作为 LOC,表达式单独存在可能并没有什么意义。当我们将表达式的值赋值给另一个变量时,比如在上述代码中的 area,我们将其称之为语句。当我们将表达式附加到关键字之后时,它仍然是一个声明,例如:return 0.5 * base * height
在本节的后续部分我们将用符号 S 表示一条语句。在一系列语句或语句集中,第 n 条语句将使用 Sn 表示,
要快速掌握编程,一个很好的起点是理解基本的编码流程。基本流程也被称为控制流。一旦你理解了这些流程,你会发现他们在许多你所学习的编程语言中都存在。
请注意,本文中给出的例子都是非常基础的。你需要参考你正在学习的语言,以深入了解其所提供的关键字。
此外,这里介绍的基本流程与编程中的设计模式是不同的。首先了解这些基本流程。 随着你学到更多的东西,你可以在编程中慢慢涉及到常见的设计模式。
下面是基本的编程流程:
Sequential 顺序
Conditional/Branching 条件/分支
Iteration/Repetition/Loops 迭代/重复/循环
联系客服