很多人都想学习编程,但是不知道从何开始?
而且害怕难度会很大,感觉对数学的要求也很高?
有的人以前学过编程却学不会,到底应该怎么学习?
上述的疑问,都能在这里得到解答。
「编程」就是「编写程序」,虽然名字听起来很专业,但其实在生活中,程序是无处不在的,而且几乎人人都编写过程序,只是很多人并不知道什么是程序,所以没有意识到它们的存在。
例如,老王的手机收到一条信息,是他老婆发来的。
信息的内容是:下班后先去学校接一下孩子,再去超市买十五个鸡蛋和一袋面包,最后领一下快递。
例如,青椒炒肉的做法是:
先炒五花肉。
炒好的五花肉出锅,然后再炒青椒。
最后把五花肉倒回锅里混炒,并加入盐和其他调料。
例如,把大象装进冰箱的步骤是:把冰箱门打开,把大象放进去,关上冰箱门。
没错,上述的例子的确都是程序,不过它们不是电脑程序,而是「广义上的程序」。
可以看到它们都描述了「特定的目标」和具体的先后步骤,但后续会知道,一个程序并不一定要有具体的步骤。
在广义上,程序的概念可以定义为:表达了「要实现的特定目标」的相关信息。
按照这个定义,我们可以回想起生活中很多常见的程序。
例如,有的人会编写一个作息时间表,列出每天要做的事情,
什么时候起床,什么时候吃饭,什么时候睡觉……并按时完成。
这里的「作息时间表」就是一个程序,「每天要做的事情」就是要实现的特定目标。
例如,医院的门诊大厅一般会提供就诊流程图,告知人们按照挂号、候诊、就诊、缴费、取药、治疗、复查……等等顺序完成就诊。
这里的「就诊流程图」就是一个程序,「完成就诊」就是要实现的特定目标。
例如,数学老师在黑板上出题:计算1+1的结果。
这里的「题目」也是一个程序,虽然没有写明具体步骤,但是表达出了要「计算1+1的结果」这样的一个目标。
从上述的例子可以发现,「程序」和「计划」的意思有些类似,「程序」这个词的英文「program」也的确有「计划」的含义,例如「阿波罗计划」的英文就是「Apollo program」,可以直译为「阿波罗程序」。总之程序的概念就是这么简单,不要想得很复杂,把「程序」等价于「计划」也没什么问题。
请举出一些生活中的「程序」的例子。
从程序的概念可以得知,编写一个程序并不难,只需要写出「要实现的特定目标」是什么即可,难点在于如何才能执行程序、从而准确实现程序中的「特定的目标」。
由于程序本身只是静态的信息,无法自己行动,这就涉及到一个问题——由谁来实际行动?
我们可以把实际行动、尝试去实现程序目标的那些事物称为「程序的执行者」,简称为「执行者」,要注意的是,程序的执行者可以是人或动物、也可以是机器或设备、甚至可以是某种物质。
例如,数学老师在黑板上出题:计算1+1的结果,并让学生小明回答。
小明算出了正确答案,小明就是「计算1+1的结果」这个程序的「执行者」。
例如,老王按照收到的信息,先后完成了接孩子、买东西等事情,老王就是这些程序的「执行者」
例如,公司的员工按照工作计划进行工作。
员工就是「工作计划」这个程序的「执行者」。
请举出一些生活中的「程序的执行者」的例子。
即使有执行者,也不一定就能保证实现程序的目标,因为执行者自身或客观条件有可能存在某些局限性、也有可能因为程序缺少关键信息导致执行者对目标的细节产生误解,最终无法准确执行程序。
例如,如果学生小明根本不知道加法和加号是什么意思,甚至连数字都不认识,那么对于「计算1+1的结果」这个程序,无法保证小明能够准确执行。
例如,老王发现超市里有很多种面包,不知道应该买哪种,而且此时老婆也不知为何联系不上,孩子也不知道应该买哪种面包,最后可能随便买了一种面包,而恰好就不是老婆想要的面包,这个程序就执行失败了。
例如,如果没有提前把象牙塞进狗嘴里,狗是太不可能吐出象牙的,那么「狗嘴吐象牙」这个程序就有可能执行失败。
例如,从物理原理上来说,手掌里不太可能凭空产生火球,那么「手掌里发出火球」这个程序就有可能执行失败。
请编写一个程序,并思考它有没有执行失败的可能,为什么可能会失败?
严格来说,没法百分百保障程序的准确执行,但是我们可以在程序执行前,尽可能多做一些措施,从而尽量保障程序的执行,主要措施如下:
我们可以改造和强化执行者的能力,从而能够执行程序。
例如,学生小明不知道加法和加号是什么意思,就无法执行「计算1+1的结果」,我们可以先教会小明什么是加法,然后再让小明去执行这个程序。
原理可行的前提下,我们可以再编写一个带有「具体步骤」的第二个程序,用来辅助第一个程序的执行。
例如,可以写出「给狗嘴里塞象牙」的具体步骤:把狗嘴打开,把象牙塞进去,关上狗嘴。
然后让小明执行「给狗嘴里塞象牙」,然后让狗执行「狗嘴吐象牙」。
虽然说程序是由执行者来执行,但很多时候我们所说的执行者本质上并不是真正的执行者,而是一个程序与真正执行者之间的中介,中介的作用是辅助真正的执行者,相当于代理了真正的执行者的一部分工作,我们可以称之为「执行者代理」或者「执行者接口」,「真正的执行者」和「执行者接口」共同构成了「程序的执行环境」,简称为「执行环境」。
例如,学生小明在执行「计算1+1的结果」的时候,其实真正的执行者是小明的大脑某个部分的「神经细胞群」,
而小明的其他身体部分所做的工作则是把程序从黑板传输给大脑,并将程序的执行结果传输回黑板。
那么「小明的部分身体」实际上也是中介,所以我们可以认为小明的部分身体就是一个「执行者接口」,而不是真正的执行者,小明的部分身体和小明的大脑共同构成了「程序的执行环境」,不过小明的部分身体和大脑联系紧密,而且物理结构上相互融合,在不需要那么严谨的时候,把「小明」这个整体称为「执行者」,逻辑上也没问题。
例如,我们在个人电脑上执行「电脑程序」的时候,其实真正的执行者是「CPU或相关处理器」,但我们并不是直接把程序交给处理器,而是通过键盘或鼠标去操作电脑,继而委托操作系统去调用程序,最终在处理器上执行。
那么「鼠标键盘」、「电脑的部分硬件」、「操作系统」实际上都是中介,也都是「执行者接口」,可以看出「接口」也可以和「接口」相互联系,它们和「CPU或相关处理器」共同构成了「程序的执行环境」,后续正式学习电脑程序的时候,「执行环境」这个概念会被反复用到。
要注意的是,「操作系统」自己就是一个程序,但程序只是「信息」,不能自己行动,必须依赖执行者,所以严格来说,上述的操作系统是「执行中的操作系统」,它自身已经被CPU执行了,由此可见,「执行中的程序」本身也可以成为程序的执行环境的一部分。
执行中的程序是程序的一种特殊的存在状态,它能够改变执行者的能力,这里先不深入探讨,以后再详细阐述。
专门为电脑编写的程序就叫做电脑程序,「电脑」就是「电脑程序」的「执行环境」,但是「电脑」只是一个俗称,而且一般指的是个人电脑。
在专业角度,电脑的范畴非常广泛,例如笔记本电脑、手机、平板、计算器、服务器、汽车发动机控制器、洗衣机控制器等等……都是电脑,而且专业上统称为「计算机系统」,简称为「计算机」,后续我们全面使用「计算机」这个专业词语来代替「电脑」,那么专门为计算机编写的程序就叫做「计算机程序」,「计算机系统」就是计算机程序的「执行环境」。
我们来看一个计算机程序的例子,在操作系统的桌面上新建一个纯文本文件(例如.txt文件),并编辑输入以下内容:
<script> document.write(1+1) </script>
然后把文件名的后缀.txt改成.html,并打开文件。
可以看到,浏览器被打开,并显示了结果:2。
我们成功地编写了一个计算机程序,它实现了「计算1+1的结果」的目标,它的执行环境主要是由计算机硬件、操作系统、浏览器三者组成,但是为了方便交流,我们可以省略计算机硬件和操作系统,就说执行环境是浏览器。
我们常用的应用软件,例如浏览器、办公软件、各类手机App、专业设计软件、工控软件、游戏软件,它们最核心的部分都是计算机程序,都能实现特定的目标,而它们的执行环境是操作系统(这里省略了计算机硬件)。
请举出一些自己用过的软件的例子。
至此,我们通过大量的篇幅,深入地了解了程序的相关概念,虽然这只是学习编程的预备课,但是为今后的学习打下了坚实的基础,接下来我们将正式开始学习计算机编程。
视频和音乐素材来源:www.videvo.net