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

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

阅读本文需要一些基础知识,可以先温习一下历史文章:小速学编程: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的天下。”

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

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

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

二进制bit0是什么意思_小速学编程:什么是编程语言相关推荐

  1. 单词九连猜python编程_小板栗学编程4-单词九连猜

    原创:小板栗 这周我开始做我的第三个程序了,这个程序叫做单词九连猜.这个游戏比之前做的动物知识竞猜更有难度.单词九连猜的目标就是在血量用完之前找出正确的单词.它还可以选择难度.简单就是12滴血,普通是 ...

  2. 小布机器人怎么断网_小布同学智能机器人好坏判断有诀窍,三大误区要避免

    [摘要]美媒消息,智能机器人行业发生变化10年后,小布同学智能机器人怎么样应对市场的冲击,成为当前最关键的事情.休闲男鞋精选头层牛皮,纹理清晰,融合流畅鞋头设计,于舒适的穿着中二又不失商务的稳重感.& ...

  3. mysql 手工配置_小姜学网络(MySQL数据库的手工安装与配置)附代码

    完成小姜学网络(先电IaaS云平台基本环境配置二)附带完整代码中所有内容,即先电IaaS云平台基本环境配置,或者从小姜学网络(先电IaaS云平台基本环境配置一)附带完整代码的镜像开始 涉及节点: co ...

  4. python从0开始学编程课件_小白从零开始学编程(三)--python基本概念

    前言 从2020年3月份开始,计划写一系列文档--<小白从零开始学编程>,记录自己从0开始学习的一些东西. 第一个系列:python,计划从安装.环境搭建.基本语法.到利用Django和F ...

  5. 编程迷宫_跟我学编程第十期——迷宫游戏

    编程改变世界 图源:APPLE官网 01 效 果 演 示 IEffect demonstration 跟我学编程公益课程又和你见面了!这期ray老师将带大家来学习编程制作一个迷宫小游戏! 怎么样,你也 ...

  6. 第一门语言学python好_零基础学编程,哪一门语言比较适合入门?

    最近,有不少小伙伴问我,说零基础学编程,第一门语言学哪个好?有人推荐学Python,理由是Python简单,对新人友好,上手快,那Python到底适不合适新人学呢. 我今天就这个问题给大家稍微的展开一 ...

  7. 教孩子学编程 python语言版_教孩子学编程 PYTHON语言版 PDF_IT教程网

    资源名称:教孩子学编程 PYTHON语言版 PDF 资源目录: 第1章Python基础--认识环境1 1.1认识Python3 1.2用Python编写程序5 1.3运行Python程序5 1.4本章 ...

  8. 先学python 还是先学c语言_初中生想学编程,请问先学C语言好还是先学Python?

    市面上常见的几种编程语言就是:c,c++,c#,java,python,这几种我都学过,所以建议从python开始. 原因就是: (1)python简单好上手 c的数据类型很麻烦,而python就相对 ...

  9. 二进制bit0是什么意思_模拟信号是什么 模拟信号数字传输原理介绍【图文】

    模拟信号,模拟信号是什么意思 什么是模拟信号 主要是与离散的数字信号相对的连续的信号.模拟信号分布于自然界的各个角落,如每天温度的变化,而数字信号是人为的抽象出来的在时间上不连续的信号.电学上的模拟信 ...

最新文章

  1. 计算机aoa综合题word,AOA-word综合题操作步骤(修正版)
  2. Leetcode 217. 存在重复元素 (每日一题 20210913)
  3. WEB前端:浏览器(IE+Chrome+Firefox)常见兼容问题处理【02】
  4. Android Hook (1) Dexposed原理
  5. 坚持跑步与读书,方不辜负此生
  6. linux PHP ppt 转图片,linux下用php将doc、ppt转图片
  7. 薅羊毛丨5个平价好物,终于终于终于打折了!
  8. VS Code 0.5添加ES6支持和Git工具改进
  9. python3的格式化用法_浅析python3字符串格式化format()函数的简单用法
  10. 解决python报错写入文件 io.UnsupportedOperation: not writable
  11. jbpm与OA项目开发过程实录 (二)
  12. 《单基因疾病的遗传》学习笔记
  13. PPT 不支持打开显示 webp 图片
  14. 中国 移动短消息中心号码大全
  15. 登陆服务器出现身份验证错误,登录服务器,提示“发生身份验证错误。要求的函数不受支持”的解决办法......
  16. 清华梦的粉碎——转自王垠
  17. iOS系统 查看设备序列号 获取UDID
  18. win10设置了睡眠时间,但两分钟无操作仍然黑屏。解决办法
  19. Leetcode 858. 镜面反射 Python解法
  20. BZOJ 3609: [Heoi2014]人人尽说江南好

热门文章

  1. 为什么选择预付费表? 安科瑞 戈静怡
  2. vue页面内容保存为PDF
  3. (计算机组成原理)寻址范围以及机器字长,位等基础知识
  4. 6月29-7月5日成都uber优步司机第一/二/三组奖励政策明细
  5. 小程序生命周期与vue生命周期的关系、区别
  6. 装备制造企业数字化转型白皮书(2022年)
  7. ossim收集linux日志,ossim的日志处理流程
  8. 绿卡日记:2020-09-25
  9. 伊顿将在汉诺威国际商用车展上重点推介可持续商用车技术
  10. 最全加密算法(知识点梳理)