编程第一课:什么是编程语言
到底什么是编程语言,你是否好像有一肚子话要说,却又无从开口,那就是还没有搞清楚,概念有些模糊,让我们一起来理一理。

如果我们现在直接给出编程语言的定义,然后以几种编程语言为例,简单介绍一下语言的发展历程。恐怕很难得到大家的共鸣,对初学者来说只不过又多了一些需要记忆的知识点。因此我们换一个思路,像计算机一样去思考这个问题。我相信只要你不是从古代穿越来的,并且能够看懂这段文字,你应该知道“编程语言”与“计算机”之间一定存在某种联系。让我们思考一下下面这张图:

你可能听说过思维导图,很多老师喜欢使用思维导图整理思路。我和他们不一样,我路子比较野,我喜欢用栈。栈的英文是stack,翻译过来就是“堆栈”的意思。栈就栈吧,怎么还堆上了,对于有一定基础的程序员来说,这个翻译令人困惑,因为在内存的概念中,“堆(heap)”和“栈(stack)”恰恰是需要严格区分的两个概念。对于新手来说,只要知道我们这里谈的是栈是一种数据的组织结构就行了,和内存概念里的栈是两种不同的概念。(当然会有在栈内存中使用栈数据结构组织数据的情况,而且很常见很有用。)等一下,我们好像跑题了,这可是编程第一课呀,对新手来说这些并不需要掌握吧?是的,我们继续,我不但路子野,还很固执。我自然有我的道理,栈这种数据结构还是有必要介绍一下,毕竟它非常容易掌握,而且与我们现在谈论的主题密切相关,别急有点耐心,说不定会有惊喜。
栈是一种先进后出(FILO,First In Last Out)的数据结构,而数据结构就是用来存放(或更准确的说,组织)数据的结构(或理解为框架、容器等)。那先进后出(FILO)又是什么意思?回想一下stack的中文翻译:堆栈。“堆”字(碰巧?)十分准确的描述了栈这种数据结构!比如,一堆书,一堆干草,一堆金条等等。最先放进一堆东西的某个元素,一定是被压在最下面,而拿的时候从最上面开始,也就是从顶部(栈顶)开始拿。
言归正传,栈在这里只是我们用来存放(组织)思路的容器(工具),我们首先把“什么是编程语言?”放进去,压在容器的最下面,这是我们目前需要解决的终极目标。现在我们需要一个策略,把大目标化解成一些小目标,这样更清晰更容易实现,这种策略有一个名字,叫“分而治之”,这种策略在算法中很常见。我又提了一个概念:算法,现在让我们把这些概念联系起来,体会一下这个说法:编程==数据结构+算法。现在的问题是,怎么个分而治之呢?首先把“什么是编程语言”分解为两个问题:
什么是编程?
什么是语言?
废话不多说,接着细化:
什么是编程?
编程就是编写程序,那么什么是程序?
计算机程序是一组计算机能识别和执行的机器指令。
从业务实现的角度来说:程序 == 数据结构 + 算法
什么是语言?
语言是沟通交流的工具,例如人与人之间通过中文,英文等进行交流。与计算机沟通需要使用机器语言。机器有语言?什么是机器语言?
机器语言是用二进制代码表示的计算机能直接识别和执行的机器指令集。
机器指令通常由操作码和操作数两部分组成,操作码指出该指令所要完成的操作,即指令的功能,操作数指出参与运算的对象,以及运算结果所存放的位置等。
二进制的机器指令太繁琐,于是有了汇编语言,汇编语言是历史的必然,可以简单理解为对二进制指令的直接翻译。
人类还是更习惯使用人类语言的语法、逻辑来描述解决方案,于是就有了高级语言,从此我们可以从更抽象的层次进行编程。
问题分解完,把每个小问题的答案返回给提出它的大问题,大问题再把自己的答案返回给更大的问题,这样我们最初的问题也就有了答案:

编程语言是编写计算机程序的语言:
直接使用机器语言,即二进制机器指令。
使用汇编语言,然后翻译成机器语言。
使用高级编程语言,然后翻译成汇编语言,再翻译成机器语言。
思考题:编程语言真的仅仅是用于人类写给机器看的吗?
提示:负责软件维护的倒霉蛋可不是这么想的,评价一个源码的标准:准确、简洁、高效。简洁甚至排在高效前面。语言本身的简洁也重要,需要对初学者足够友好才能得到推广。
文字部分就到这里了,我将会把这部分录制为视频,记得观看点赞哦!