陈小速:一名职业技术学院计算机技术与应用专业的学生,他梦想成为一名程序员,我来为大家科普一下关于教你学习编程在哪里学?下面希望有你要的答案,我们一起来看看吧!

教你学习编程在哪里学(什么是编程语言)

教你学习编程在哪里学

陈小速:一名职业技术学院计算机技术与应用专业的学生,他梦想成为一名程序员。

吴进:一所重点大学软件工程专业大三学生,编程经验丰富。

阅读本文需要一些基础知识,可以先温习一下历史文章:小速学编程:CPU的结构、指令与程序初探

没有学习能力差这回事

“吴大哥,我又来啦。” 陈小速在一个月之后,又过来找吴进了。这一次陈小速随身带着笔和精装记事本,他要将自己的学习体会都记下来,回去好好温习。

吴进热情地邀着陈小速,来到了学校东面的大草坪上。两人席地而坐,此时正值下午,暖融融的阳光洒向大地,令人心旷神怡。

“小速,最近学习什么新内容了吗?” 吴进关切地问着。

“除了那些基础课,专业方面的还是讲计算机系统导论那些内容。老师说我们的学习能力一般,所以进度放得比较慢。但我自从听了吴大哥的讲解之后,觉得挺好理解的呀。” 陈小速自顾自地说着。

“根本就没有学习能力差这回事!” 吴进皱着眉头急促地说。他的表情和语气都让陈小速有些吃惊。

可能意识到自己有些失态,吴进缓和了一下情绪,说:“可能你们老师的本意是好的,想让大家都跟得上。但这么说其实是不合适的。尽管你们高考确实是没有发挥好,但不能因此就给自己贴上一个不会读书的标签了。”

吴进顿了一下,继续说:“计算机科学虽然看起来是高科技,但它的核心理念和基本原理都是很简单的。就像小速你现在这样,并没有感觉到这是多么高深的东西。从我们交流时的反馈就可以看得出来,你掌握这些知识和你以前的考试成绩有关系吗?”

“没有。” 陈小速很诚实地回答。

“所以,我也希望你回去以后能多和同学们交流。不仅是专业知识上的,还有学习认知上的。99%的正常人,智商相差都不会太大,天才只是极个别。关键还在于学习的方法和专注度上,小速你觉得呢?”

“要说以前,我真的会认为是自己脑子笨,不会读书。但跟着吴大哥学习之后,我能体会到你说的意思。解决问题,就是要抓住它的本质去下手。这样才会快而且好。”

“非常正确。” 吴进欣慰地笑着。

机器语言

“那吴大哥,我现在就想开始学编程了,我应该怎么下手?” 陈小速打开记事本,热切地望着吴进。

“先把你的笔记本合上。” 吴进笑着下了命令。陈小速依令而行,他知道吴进要通过闲聊的方式,以浅显的语言把一些核心的知识说明白。

“上回我们讲到,CPU是怎么工作的,你也知道程序是由一条条指令构成的,对吧?” 吴进一边问着,陈小速一边点头表示明白。

“那么问题来了,CPU最终能识别的指令是二进制形式的。这里先解释一下,二进制就是只由0和1两个数字构成的数字体系。我们以后会详细讲解计算机的数字系统,包括八进制、十六进制。你只要知道,一条指令表示出来,就是一串长长的、只包含0和1两个数字的字符。这种的就叫机器语言。”

陈小速听到这里不禁心中啧啧称奇,他也在脑子里记下了“二进制”这个术语,回去他要好好学习一下。

说到这里,吴进忽然笑了起来,“其实最早的程序员们真的就是写只有0和1两个数字表示的代码,而且还是在一卷长长的纸带上打孔。”

“这叫穿孔纸带,老师倒是有讲过,我终于知道这是干啥的了。” 陈小速长吁了一口气,忽然问:“那如果有一个孔打错了怎么办?”

“只能重新打啦。” 吴进耸了耸肩说,两个人都因此笑了起来。

汇编语言

“好啦,小速你肯定也发现了,如果要以这样的方式来开发程序,估计这个世界上没几个人愿意干程序员了。怎么办?” 吴进开始发问了。

“我记得上次吴大哥给我看过一段指令代码的,那个好像还好理解一些。” 陈小速回忆着,他翻开记事本,从里面找了出来。

load 寄存器1 a; 将数字a从内存中复制到寄存器1中 load 寄存器2 b; 将数字b从内存中复制到寄存器2中 add 寄存器1 寄存器2; 将寄存器1和寄存器2的内存相加,结果保存在寄存器1中 store 寄存器1 主内存; 将寄存器1的内存写到主内存中

看着陈小速笔记本中的内容,吴进赞许地点了点头,说:“对,你看只要学过几年英语的人,都能知道这几个单词的意思。load就是装载,add就是相加,store就是把一个东西给到另一个,对吧?”

“是啊、是啊,这些指令的意思我上回就已经明白了。” 陈小速回答着。

“那这种形式的编程语言就被称之为汇编语言。英文名称是Assembly Language,它含有把一堆零件组装成一体的意思,是不是挺形象的?”

“还真的是,那汇编语言和机器语言的语句,其实是一一对应的是吗?就是说汇编语言只是把看起来无意义的0和1序列,变成了可以理解的语句了?”

“你的理解很正确。” 吴进为陈小速的主动思考而感到开心,没想到陈小速紧接着又提出了下一个问题。

“我还记得上回吴大哥说,这种汇编语言写起来很费事,开发一个程序效率很低,是吗?”

“对的,所以后来就有了高级语言。”

高级语言

“高级语言?是说这种编程语言,比机器语言和汇编语言更厉害的意思吗?” 陈小速充满了好奇。

“这倒不是,” 吴进笑了起来,“高级这个词其实我觉得并不完全准确,可能用高层会更合适。这里对编程语言的划分,其实依据的是它距离CPU的远近。” 吴进开始了细致的讲解。

机器语言,它是CPU可以直接执行的,离CPU算是最近的。而汇编语言,已经包含了自然语言的英文单词,就需要经过一次翻译,将汇编语句翻译成对应的机器语言。因此汇编算是在机器语言之上了。

但因为机器语言与汇编语言在编程时,要从CPU的角度来思考程序的编写,因此也被称为低级语言。后来,计算机科学家们为了提高工作效率,发明了更贴近自然语言的编程语言,这一类的都被称为高级语言。

例如上节示例中所展示的汇编级加法运算,用大多数高级语言都支持的语法写出来,就是下面这样。

c = a b;

看到这里,陈小速频频颔首,说:“这样看起来确实简单的多。吴大哥,我们下学期会开C语言课,这就是一种高级语言吧?”

“对,C语言的历史可悠久了,而且它的生命力还十分蓬勃。大多数的操作系统底层实现用的都是C语言。现在十分热门的物联网IOT应用里,就大量使用到了它。从编程模式上说,C属于过程式语言,在它之后还有面向对象编程语言,例如C ,java等。”

“呀,好想现在就开始学起C语言啊。” 陈小速感叹着。

“这个你还真别着急,记得我说过的吧,一定要先把基础打牢了。在此之前你还有许多理论要学习,不过不用担心,我会一步一步告诉你的。” 吴进温和地告诫他。

编译与解释

“我现在有一个问题要问你了,就是c = a b这样的语句,它最终是如何让CPU去执行的?” 吴进问道。

“应该也是翻译,就像汇编翻译成机器语言。那么高级语言是不是也先翻译成汇编语言呢?” 陈小速的回答让吴进都有些惊喜。

“你进步得很快啊,小速。” 吴进由衷地赞叹了一句,这倒让陈小速不好意思起来了。

“你的理解很到位,高级语言的翻译方式有两种,一种是编译型,一种是解释型。” 吴进开始详细说明。

C语言就是一种典型的编译型语言,它会将程序语句先进行预处理,然后经过编译、汇编、链接过程,最后得到一个可执行程序。这个程序包含的,就是CPU可以直接执行的二进制指令。

解释型语言不用产生可执行文件,程序代码放在解释器中就可以运行。这个解释器看起来就像一个软CPU,它会负责将文本代码实时转换成机器指令,最终交给硬件CPU去执行。

说到这里,陈小速的问题就出来了,他问:“吴大哥,我发现一个问题啊。就是编译型语言是一步到位的,它产出的直接就是机器指令。而解释型每次运行都要做翻译,那么效率不是很低吗?那还有存在的意义吗?”

“这是一个很好的问题,下面我就说明一下为什么。” 吴进已经不再惊讶于陈小速的接受能力了,他又开始了讲解。

程序最终的运行取决于它使用的CPU,而这个世界上CPU的类型有许多种,每一种它的指令集都是有差别的。例如在Intel X86架构下编译出来的程序,放到arm体系的CPU上去,就无法执行。

对于编译型语言来说,那就必须为不同的硬件体系,分别编译出可执行程序来。这样就会增加很多额外的工作,而解释型语言则很好地解决了这个问题。

对于解释型语言来说,代码只需要编写一次,然后在任何平台上都可以交由解释器去执行。而且执行结果也都能保持一致,不会受到硬件指令差异的影响。

当然,缺点也正如陈小速所说,执行效率肯定是远不如编译型语言的。于是,一种改进的方案又出现了,那就是java语言所采用的,先把程序文本编译成中间码形式,然后再将中间码分发到各个平台上去运行。

这样,中间码被执行的效率又会高于解释型,虽然还是多了一步编译过程,但也只需要编译一次而已。不像C语言那样,每个平台都要编译一次。

结语

“啊,了解,明白,原来如此。” 陈小速连连感叹着,“我听同学说过java语言,他们说如果要想找工作,只用学好java就可以了,是这样吗?”

“真不是这样,” 吴进很明确地提出了自己的看法,“这个世界上的编程语言有千百万,每一种都有自己的设计哲学和应用场合。这还是要回到计算机科学本身来说,一定要将基本理论弄明白。这样你就完全不必拘泥于一种特定的语言,任何语言你经过短期的学习,抓住了它的根本,就可以很快上手用到工作中了。

“例如现在人工智能领域,使用python的占比就很大;在后台服务,使用go语言的越来越流行;而前端又是javascript的天下。”

“你说的这些有的听过,有的都没听过呢。” 陈小速看了看笔记本,还是放弃了全部记下来的念头。

“所以呀,小速你现在真不用着急。就踏实把下一步走好,比方说计算机的数字系统,二进制、十六进制这些,这可是计算机说话的方式,你要跟它对话,不得先弄明白么?” 吴进幽默地说。

“吴大哥说得对,我先回去预习一下,下次过来跟你请教!”