> For the complete documentation index, see [llms.txt](https://coding-girls-club.gitbook.io/python-turtle-tutorial/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://coding-girls-club.gitbook.io/python-turtle-tutorial/1-yu-bei-zhi-shi/1.1-ji-suan-ji-cheng-xu/1.1.3-ji-qi-yu-yan-hui-bian-yu-yan-gao-ji-yu-yan.md).

# 1.1.3 机器语言、汇编语言、高级语言

直接给计算机下一个类似于“帮我做完作业”的指令显然还停留在人类的幻想之中。

## 机器语言、汇编语言

计算机可以*直接*执行的指令集合叫机器语言，而[汇编语言](https://zh.wikipedia.org/wiki/汇编语言) 是与机器语言有强烈对应关系的一种语言。下图是机器语言和汇编语言的一个实际例子，程序的作用是输出'Hello World!'。

![](https://1286398926-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LAYbsl1NkUt_BQ7HwaY%2F-LAYby8Y8JCpA9-GPVbV%2F-LAYbzVXU6Uvox5T2k4N%2Fmachine_code_and_assemble.png?generation=1524237336274002\&alt=media)

左边一栏是机器语言，右边两栏合在一起是汇编语言

**Learning By Thinking 难度：★ 重要性：★★★**

* 谈谈自己看到机器语言和汇编语言的感受。

可以看出，机器语言很难看懂，即**可读性**很差，汇编语言虽然把机器语言变成了一个一个单词组成的句子，但实际上仍然很难看懂。 此外，不同型号的CPU使用的机器语言也可能不相同，因此，机器语言/汇编语言的**可移植性**很差。而很差的可读性也会给程序的编写和调试增加难度。

## 高级语言

高级语言是相对于低级语言的一个概念，一般来讲，它没有特别明确的定义，任何**对用户友好**且**独立于硬件**的语言都可以叫 [高级语言](https://www.techopedia.com/definition/3925/high-level-language-hll) 。我们平时接触到的编程语言基本都是高级语言，比如C，Pascal，Perl，Java等。

高级语言不能直接被执行，必须先被转化为机器语言，我们将在下一个章节简要介绍转化的过程。

高级语言的一条指令通常会被转化为机器语言的多条指令，例如求一个数的平方根，用机器语言写一个 求平方根的程序需要很多指令，但在大多数高级语言中，只需要一条指令就可以完成， 这种把多条指令变成一条指令的技术叫做\[**抽象**]\(<https://zh.wikipedia.org/wiki/抽象化_(計算機科學>)) 下图是C语言和Perl语言的例子。

![](https://1286398926-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LAYbsl1NkUt_BQ7HwaY%2F-LAYby8Y8JCpA9-GPVbV%2F-LAYbzXXcsV0JvVEh4FJ%2Fperl_c.png?generation=1524237336230117\&alt=media)

下边是C，上边是Perl

**Learning By Thinking 难度：★ 重要性：★★★**

* 谈谈自己看到高级语言的感受，与机器语言、汇编语言有什么不同？

显而易见，高级语言更加可读。虽然我们现在还看不懂，但还是能辨认出若干英文单词来。

高级语言大多是为了让人们更方便地编程而设计出来的，也有一些编程语言不是为此而设计的。 比如下图便展示了一种叫brainf\*\*k的编程语言。

![](https://1286398926-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LAYbsl1NkUt_BQ7HwaY%2F-LAYby8Y8JCpA9-GPVbV%2F-LAYbzYm0qnVeXSFSJJM%2Fbrainfuck.png?generation=1524237336257870\&alt=media)

brainf\*\*k，大神们的休闲娱乐方式\~[图片来源](https://github.com/dotzero/brainfuck-php/blob/master/examples/99bottlesofbeer.bf)

**Learning By Reading 难度：★★ 重要性：★★**

* 如何看待brainf\*\*k这类语言？它和汇编语言有怎样的异同和优劣？请看 [这里](https://www.slant.co/versus/120/128/~assembly_vs_brainfuck)
* 从brainf\*\*k出发哲学地看高级语言与低级语言，请看 [这里](https://esolangs.org/wiki/Category_talk:Low-level)

计算机发展这么多年，编程语言也在不断变化中。 一种语言的发明通常会借鉴许多其他语言的思想。

![](http://www.digibarn.com/collections/posters/tongues/tongues.jpg)

既然编程语言有这么多，应该如何选择呢？ 这里有一张有趣的图，看看就好。

![](http://www.dailyinfographic.com/wp-content/uploads/2015/06/OBHEr1J.png)

总之，按照这个图的意思就是，如果你不知道学什么，那就学Python吧。
