我对上帝说西班牙语,对女人说意大利语,对男人说法语,对我的马说德语。

——法国国王查理五世(1500——1558)

首先,让我们先来玩个记忆游戏,请你仔细地浏览这张图,并尽可能记住所有的细节。仔细浏览的意思是说,从上至下,从左至右,从实线到虚线,每一个字、每一幅图都仔仔细细地看一遍。

自然 - 语言 - 符号

吾爱汝。

我愛你。

I love you.

Te amo.

上面四句话,是什么意思?换句话说,它背后的本质是什么?相信你一定懂得第一句和第二句话,即便你不懂第四句话,但通过前三句话,你也一定知道第四句话表达的是同样的意思——“我爱你”——就是这四句话的本质,它们唯一的区别是符号不同。

发现了吗?文字仅仅只是一种符号,光是看着 Te amo 这些符号的组合,你什么都不明白,也什么都做不了。只有当你把Te amo背后的那个“东西”与前面三个等同起来,它才有了意义和本质。

你完全可以自己设计出一套符号系统,用来表达,你想表达的含义,摩尔斯电码和盲文就是很好的例子。

数学,也是一种语言,某知名高数教材,面向大一新生直接引入极限的精确定义,使得初学者无法理解背后的本质,学起来必然痛不欲生。

机器语言与动物语言

小猫喵喵喵喵,小狗汪汪叫,语言学家和动物学者可能会说小动物不会语言。我不这么认为,难道发不出26个汉语拼音,英文字母的音就无法交流吗?实际上,小动物才是真正的交流高手。高手过招往往都是点到为止,因此小动物的交流也很简单,吃、喝、拉、睡——一个动词,无需多余的编码(code)组合就能表达完所有意思,且不会造成歧义,快捷又高效。

编码(code)

a. 一种在信息传输过程中用来表述祖母或数字的信号系统。

b. 由被赋予了一定主观意义的符号、字母以及单词所组成的系统,该系统可用于传输需要保密或简短的信息。

c. 一种由若干符号和规则组成的系统,用来向计算机表述指令。

相比之下,我们的语言就复杂得很多了,一说到学习英语,一些人就会苦恼,小的时候记26个字母的发音、写法,再大一点要记住它们的排列组合,也就是编码,再来还有它们的语法规则,主、谓、宾、定、状、补、从句……甚至人类的语言还有很多的“噪音”,歧义重重——往往越解释,越不清楚,越描越黑。

被误解是表达着的宿命。

——马东《奇葩说》

20世纪40年代末,第一台计算机诞生了,随着计算机的出现,一种新的语言也诞生了,叫做机器语言(machine language)。程序员使用这种语言编写程序,输入到计算机中,经过计算机的处理,产生结果再返还给程序员。机器语言(也称机器指令、机器码)是计算机可以直接识别的二进制位(binary digit)编码,之所以采用二进制,因为电路的电压便于用“高”和“低”两种状态来表示,就像这样:

10001100 10100000 // A加B

同样的它们都是符号,一旦经过设计和编码,就可以表达特定的含义。

和小动物一样,计算机也有基本的需求——做算术运算。“0”和“1”经过编码,就可以做出加、减、读、写等基本操作了。

但是,编程人员很快就发现了——作为人类自身的不足,用两种状态表达计算过程,容易出错,记忆困难,不便阅读,编写起来十分枯燥。

机器语言(machine language):以二进制形式表示的机器指令。

二进制位(binary digit):也成为位。基数为2的数字中的0或1,它是信息的基本组成元素。

汇编语言

程序员认识到这个问题,很快就设计出了汇编语言(assembly language),利用助记符来编写程序,顾名思义,是帮助编程人员记忆的符号语言。

add $t0, $s0, $s1 // 将寄存器$s0的值和$s1值相加,赋值给$t0

add $t1, $s2, $s3 // 将寄存器$s2的值和$s3值相加,赋值给$t1

sub $t0, $t0, $t1 // 将寄存器$t0的值和$t1值相减,赋值给$t0

但是根本问题依旧没有解决,计算机懂的是机器语言,不是汇编语言,因此每次使用汇编语言编写完程序后,还是需要程序员翻译为机器语言,这时,汇编器(Assembler)就诞生了,它充当翻译官的角色,将汇编语言翻译为机器语言。

由于汇编语言与机器语言十分接近,机器语言与汇编语言又统称为低级语言。虽然助记符比机器语言要容易记忆,但用它编写程序依旧十分繁琐,编程人员必须将注意力和时间消耗细节上,告诉计算机每一条指令的执行:第一步从内存的某一个位置取一个数,第二步加到某个寄存器中,第三步再……这些工作,费时费力,因此产生了新的需求。

汇编语言(assembly language):以助记符形式表示的机器指令。

汇编器(Assembler):也叫汇编程序,将指令由助记符形式翻译成二进制形式的程序。

高级语言与自然语言

记忆、阅读与理解起来困难,不符合人类的认知规律,高级语言应运而生。只要你学过四则运算,和初等代数,你就一定能理解下面这句话在做什么,满足了什么样的需求。

a = (b + c) – (d + e);

这段代码,和上面的汇编代码本质所做的事,满足的需求,所表达的含义是等同的,却更符合,人类的认知,容易记忆。

高级语言:如C、C + +、Java、Visual Basic等可移植的语言,由一些单词和代数符号组成,可以由编译器转换为汇编程序。

编译器:将高级语言翻译为计算机所能识别的机器语言的程序。这个过程相当复杂,不作过多介绍。

高级语言与低级语言在某些方向上是一致的,因为其本质的工作,所需要完成的任务本质上并无变化,不外乎要做基本的运算,所有的高级语言都有基本的运算符号,运算规则:

I love you.

She needs me.

They eat hamburgers.

人也有基本的需求,我爱你,我需要你,我吃汉堡,我喝可乐。语法老师在教你时,肯定会告诉你:

I 是 主语

love 是 动词

you 是 宾语

一个完整的句子必须有动词,同时你必须按照主+谓+宾的顺序来听说读写,那是因为“我”和“你”本身本无任何联系,“她”和“我”本身并无联系,“他们”和“汉堡”也无联系,而 love, need, eat 产生了动作,才使得他们产生了联系。自然语言中 I, you, she, me, they, hamburger 归类为名词,在编程语言中我们把它们称为类型。我们用编程语言的形式,可以将上面的三句话改写为:

love(I, you);

she(needs, me);

eat(they, hamburgers);

这时 I, you, she, me, they, hamburger 也叫作参数。love, she, eat 表示它们所完成的动作,称为函数。

汉语和英语相比较而言,英语有16种时态变化,我们在学习与理解不同的语言时,要注重的是它们的共性与特性:

词性(名词,动词,形容词,副词···)

句子结构(主+谓+宾···)

···

同样的,学习现代编程语言,也需要去学习和理解它们的特性:

面向过程

面向对象

变量定义、引用

算术运算

函数定义、调用

···

一部分初学者,甚至某些已经学过编程语言的人,还纠结于在选择什么样的编程语言这种问题上,是不正确的。

学习、理解或者掌握一门编程语言别无他法,就是学会使用其语言的特性,编写出一定数量的代码,像学英语一样仅仅靠背语法规则,但从不去使用在听、说、读、写上是行不通的。

更重要的是,带着问题,带着目的去运用语言。

后记

还记得开篇的图吗?同样的,与汇编语言一样,机器永远只能识别二进制,无法识别高级语言,我们需要将高级语言先转化为汇编语言,编译器就是用来翻译高级语言的。

我已经带着你遍历了自然语言、低级语言甚至是动物语言,希望看完之后你对所有的语言都有了更进一步的认识。

为了便于初学者学习,基本上已在文中出现的计算机相关术语下方,给出了较为准确的解释,希望可以帮助初学者更好的理解这些专业术语。

感谢阅读,全文完,喜欢记得关注打赏

版权所有,禁止转载

认识和理解计算机语言,如何理解所有的编程语言和语言相关推荐

  1. java的接口怎么理解_如何理解Java 中的接口

    一.接口(Interface) 在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法.接口并不是类,编写接口的方 ...

  2. NLP-阅读理解:“阅读理解”综述(Machine Reading Comprehension, MRC)【完形填空、多项选择、抽取式(答案片段抽取)、生成式(自由作答)】《机器阅读理解数据集》

    <原始论文:Neural Machine Reading Comprehension: Methods and Trends> 一.阅读理解概述 所谓的机器阅读理解(Machine Rea ...

  3. 计算机语言与硬件相关,搞懂程序语言与计算机硬件的关系

    IT行业程序开发使用到了很多种高级语言比如Java,C,Python,JavaScript,也有个别领域用到了低级语言即汇编语言,这些都是程序语言,程序语言就是人类能够理解的语言,计算机硬件也有语言即 ...

  4. 最严谨的计算机语言p,一款全新的 高级PLC编程语言 P语言 简介-专业自动化论坛-中国工控网论坛...

    几年前,我带研究生做了个"高级PLC编程语言[P语言]",不知是否有意义? 现贴出看看,望指点,指教.谢谢! 摘要:本文介绍了一款国产的.自主的.全新的计算机高级语言[简P语言]. ...

  5. 算法理解|从头开始理解梯度提升算法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者:Prince Grover 编译:ronghuaiyang ...

  6. 管中窥“视频”,“理解”一斑 —— 视频理解概览

    ©PaperWeekly 原创 · 作者|Lingyun Zeng 学校|北京航空航天大学 研究方向|计算机视觉 本文通过对视频理解/分类(Video Understanding/Classifica ...

  7. java回调如何理解_如何理解java中的回调

    以android中的Button的setOnClickListener这个回调为例: Button button = (Button)this.findViewById(R.id.button); b ...

  8. java传参怎么理解_如何理解Java的值传递

    结论 为了加深印象,先把结论放在文章开头. ++Java中只有值传递++. 形参与实参 在理解Java的值传递 实参Argument 实际参数,主调用函数传递给调用函数的参数 形参Parameter ...

  9. 场景理解_7分钟理解JS的节流、防抖及使用场景

    前言 据说阿里有一道面试题就是谈谈函数节流和函数防抖. 糟了,这可触碰到我的知识盲区了,好像听也没听过这2个东西,痛定思痛,赶紧学习学习.here we go! 概念和例子 函数防抖(debounce ...

  10. 如何理解python_如何理解 Python

    匿名用户 1级 2016-09-04 回答 简单例子: def foo(): print('i am foo') 现在有一个新的需求,希望可以记录下函数的执行日志,于是在代码中添加日志代码: def ...

最新文章

  1. 孙子算经余数C语言,行测数量关系备考:探索《孙子算经》之剩余定理
  2. 解决Windows7 Embedded连接手机问题
  3. linux安装apache mysql tomcat
  4. python学习日常-编码与字符串格式化
  5. 初学大数据之Python中5个最佳的数据科学库的学习
  6. hyper-v 安装centos7 后,虚拟机无法访问网络。
  7. jinja Evnironment
  8. java处理json的工具类(list,map和json的之间的转换)
  9. 加拿大11年级计算机课程代码,加拿大高中选课那些事儿
  10. python中求2-1000的完数_C++求2→1000之间的完数。
  11. 悦保OCR识别,提供票据、卡证、保险场景识别新方案
  12. mysql提示表不存在的解决方法error: 1146: Table doesn‘t exist
  13. cypress测试脚本_用 Cypress 拯救业务项目的前端自动化测试
  14. Spring Cloud Ribbon
  15. 美国出台最严技术出口管制!14项前沿科技面临封锁
  16. 使用python语言调用科大讯飞离线语音合成
  17. 第三次人工智能热潮和企业SaaS
  18. ImageIO.read(URL) 返回 null
  19. 动态路由ofps协议配置
  20. dnsenum子域名破解

热门文章

  1. 廊坊金彩教育:关键词有什么技巧
  2. Revealing latent characteristics of mobility networks with coarsegraining
  3. Cobuyor持续回报模式在电子商务支付交易体系中的地位和趋势
  4. layer非常不错的web弹窗/层解决方案
  5. Learn Git Branching学习笔记 Git常用命令
  6. ShoeBox制作字体
  7. CI 与 CD 有什么区别
  8. php halt,thinkphp-调试halt
  9. 面向功利编程,面向Star开源? 一个开发者的2019反思总结
  10. edm邮件直投_EDM邮件直投专家V3.8.5官方版下载 - 下载吧