编程,人与计算机的对话

-回复 -浏览
楼主 2019-01-16 05:28:43
举报 只看此人 收藏本贴 楼主


亲爱的儿子:

这是爸爸写给你的第9封信。

在第7封信里,爸爸给你讲了编程那些事儿,尽管爸爸确实想让你了解和学习编程,但妈妈觉得还没到时候,所以也算是作罢了。可是我没想到,这已经引起了你的兴趣,上周就让我再给你写写编程的内容。但上周爸爸给你写的是《微习惯大力量》,因为从一开始决定要给你写信,就不是想要教给你某种技术,或者某种技能,也不是讲课,只是想达到“沟通感情、传递价值观”的目的。比如根据我的人生经验,说一些关于如何学习、如何做人的道理等等。


这周你又跟我讲让详细写写编程,说要系统化的介绍编程的套路,甚至还说要做个连载,这可真是又有点难为我了。


不过你既然说了,我就试一试,当然很多内容都是网上搜索的,只不过按照我的理解和你的接受程度,做了很多编排。


我也不奢望通过这些内容,能让你学会编程,这也是不现实的,更不是让你以后从事编程有关的工作。但如果能通过这些皮毛的内容,激发你的学习兴趣,尤其是激发你探究世界的好奇心,就足够了。就像在你上幼儿园大班的时候,我根据两本马晓春的围棋入门书、一副简陋的棋盘棋子,带着你学了一点围棋的基础概念和基本走法,后来逐渐引起了你的兴趣,再后来跟着专门的老师学棋,大概3年多的时间,就拿下了业余5段的段位。说起这个,爸爸还是蛮自豪的!因为尽管这是你自己学习修炼的结果,但却是爸爸引进门的,而且还能算是你的启蒙老师呢。

 

一、什么是编程

编程是编写程序(Programming)的简称,就是让计算机帮忙解决某个问题。因为计算机的计算能力、计算速度实在太强大了,是人类没法比的,但人的思想和想法也是计算机所不具备的(高级人工智能产生之前)。所以人和计算机成为了最佳拍档---人提出问题、计算机帮解决问题,这两最佳拍档一唱一和,成就了现在五彩斑斓的互联网时代,什么大数据、云计算、人工智能等等,如果没有编程,统统都没戏。

 


为了使计算机能够理解人的意图,人类就必须将需解决的问题的思路、方法和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。这种人和计算体系之间交流的过程就是编程

看到这儿,你会不会问,现在语音输入、用触摸屏操作手机等等,这些是不是就是编程呀?然而并不是,这些只是人跟计算机程序(比如APP)的对话,而计算机程序跟机器硬件(计算能力)之间的对话才是上面所说的“交流的过程”。

 

简单来说:编程(programming)就是告诉计算机要做什么。计算机只是一些没有生命的机器,它们自己可不知道该做什么,一切都得你来告诉它,而且你还必须把细节都说清楚。不过,一旦给计算机“下达”了正确的指令,它们就能做很多让人惊奇的事情,比如卫星上天、蛟龙入海、高铁奔驰、微信聊天、网上购物、手机支付等等等等,可以说人类离开了计算机已经没法生存了。

 


二、什么是编程语言

上面我们说到了人与计算机的交流,既然是交流,就得能互相听懂。就像你学习语文、学习英语,用于你跟同学、跟老师之间对话一样,计算机语言是用于人与计算机之间通讯的语言。为了使电子计算机进行各种工作,就需要有一套用以编写计算机程序的数字、字符和语法规划,由这些字符和语法规则组成计算机各种指令(或各种语句),这些就是计算机能接受的语言

 

指令(instruction)就是下达给计算机的一个基本命令,通常要求计算机做某件特定的事情。计算机程序是由多个指令组成的。为什么计算机能做到这么多了不起的事情呢?这是因为有许多聪明的程序员编写了程序或者软件(software)来告诉它们该怎样做。软件就是你的计算机上运行的程序,有时软件也可能运行在与你的计算机相连的另一台计算机上,比如Web服务器。

 


三、编程语言的种类

编程语言总的来说可以分成机器语言汇编语言、高级语言三大类,分别是第一代、第二代和第三代。

第一代-机器语言:软件的产生始于早期的机械式计算机的开发。从19世纪起,随着机械式计算机的更新,出现了穿孔卡片,这种卡片可以指导计算机进行工作。但是直到20世纪中期现代化的电子计算机出现之后,软件才真正得以飞速发展。在世界上第一台计算机ENIAC上使用的也是穿孔卡片,在卡片上使用的是专家们才能理解的语言,由于它与人类语言的差别极大,所以我们称之为机器语言,即由0和1构成的代码,也就是二进制。这就是第一代计算机语言。这种语言本质上是计算机能识别的唯一语言,但人类却很难理解它。

 

第二代-汇编语言他的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作,例如移动、自增,因此汇编源程序一般比较冗长、复杂、容易出错,而且使用汇编语言编程需要有更多的计算机专业知识,但汇编语言的优点也是显而易见的,用汇编语言所能完成的操作不是一般高级语言所能实现的,而且源程序经汇编生成的可执行文件不仅比较小,而且执行速度很快。汇编语言是大学计算机专业的必修课之一。


 

第三代-高级语言:高级语言是目前绝大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等(计算机专业会学习他的原理,但对于其他专业的人来说最多知道怎么回事就行),这样就大大简化了程序中的指令。同时,由于省略了很多细节,编程者也就不需要有太多的专业知识。

高级语言主要是相对于汇编语言而言,它并不是特指某一种具体的语言,而是包括了很多编程语言,据说有几百种。如各个不同时期目前流行的C、VC、FoxPro、Delphi、Java、Python等,这些语言的语法、命令格式都各不相同,但都接近人类的语言(当然是英语)。

 


四、程序的执行原理

前面我们说了,计算机对除机器语言以外的源程序不能直接识别,也不能理解和执行,所以,用高级语言编写的程序,需要通过某种方式转换为计算机能够直接认识的语言。就像人类不同国家不同语言的人交流的时候一样,需要用到“翻译”。

翻译的方式有两种:

第1种是解释方式,就像国家领导人讲话,实时同声翻译给外国记者,说一句翻译一句。这种解释方式下,计算机对高级语言书写的源程序一边解释一边执行,不能形成目标文件和执行文件。

 

第2种是编译方式,就像一个美国专家写的书,中国专家把他翻译成中文,在中国出版,这样中国读者就会看到一个完整的能够看懂的书。

编译方式下,首先通过一个对应于所用程序设计语言的编译程序对源程序进行处理,经过对源程序的词法分析语法分析、语意分析、代码生成和代码优化等阶段将所处理的源程序转换为用二进制代码表示的目标程序,然后通过连接程序处理将程序中所用的函数调用、系统功能调用等嵌入到目标程序中,构成一个可以连续执行的二进制执行文件。调用这个执行文件就可以实现程序员在对应源程序文件中所指定的相应功能。现在大部分高级语言都是用的这种编译方式。

 

最后,还是重复前面说过的话:不奢望通过这些内容,能让你学会编程,更不是让你以后从事编程有关的工作。但如果能通过这些皮毛的内容,激发你的学习兴趣,尤其是激发你探究世界的好奇心,就足够了。如果还有兴趣,下次跟你说说目前比较流行的高级语言Python.

 爱你的爸爸

2018年5月12日


上一封:微习惯 大力量


主编 / younger      编辑 / 二毛



我要推荐
转发到