Java教程-语言是什么
语言概论
重新认识“语言”是什么
学习一门编程语言与学习一门外语很类似,但是外语是人类之间交谈的工具,存在很多感情和语法,但是编程语言是人类与计算机沟通的工具,相对外语来说更简单一些。语言一般用来交流信息,也就是说出去,听进来。编程语言也是交流信息所用,是让计算机听进去,然后让计算机显示内容出来供人类参考和理解。
大可将一台计算机理解为一个人类朋友,现在如果想告诉计算机一些事情更多的是通过鼠标和键盘或者其他外部设备,这些设备可做的操作都是有限的,在计算机的软件中所作的操作也是有限的。如果我们能像说话一样告诉计算机要做什么,对计算机能力的应用会更好更灵活,它所能做的事情也更多,因为这一切都归根于我们所给与它的信息,它的思考来源于我们的思考和想象力。
人类之间的交流目的有很多,可能让朋友递给你一张纸,或者让老板上一碗面,因为这都是人类可以做的事情。与计算机之间的操作也要贴合计算机的能力,它们的能力就是运算,所以编程语言更多的操作实际就是运算。如果买来一台新的计算机,上面只有冷冰冰的塑料和金属制品,即使通电了以后也不会完成想让他做的事情,我们要装软件程序才能发信息邮件和编辑文档,向计算机装软件实际是交给他了一个能力。就像我们想让朋友给自己一碗面,最起码要教给他分辨面条与粉条,以及怎么生火下面。所安装的软件就是告诉计算机怎么去做一件事,具体做什么事就看你怎么与计算机交流了。
其实所有的软件都是一套由某种编程语言书写的代码,这些代码就能告诉计算机怎么去做一件事情。所以我们说一个能力是由一套代码实现的,代码由编程语言编写,代码实际就是告诉计算机怎么去做一件事,编程语言也就是人类与计算机之间交流的工具。
代码最终的目的是激发计算机的潜能,让它能够满足人类的需求或者拥有更多的功能,这是在开发一项技能。所以书写的代码的人被称为开发人员。
计算机语言
计算机并不比人类聪明多少,它们只会机械的算术,只不过这种算术比较复杂。我们屏幕上显示的内容或者音响里传出的声音都是计算机通过计算得出的,并且计算机只认识0和1这两个数字,这样设计的好处书简化计算机在发明时候的复杂度,让更多需要处理的计算交给聪明的人类去做。
计算机认识0和1,但是他可以通过0和1扩展出世界上所有的文字和字符以及数组,这得益于一种叫做二进制的算法。人类更喜欢使用十进制的方式理解数字,但是世界上并不仅仅只有十进制这样的运算,可能更高等的文明还会嫌我们认识的数字少,只知道0到9之间的数字,实际上还有很多常用的进制。我们现在理解的是十进制计算,计算机理解的是二进制计算,也就是遇到2则向前进一位。如果一个算盘上的每一列都只有两个拨珠那就是一个二进制算盘了。
人类为了让只认识二进制的计算机理解人类的算法煞费脑筋。起初人们要学着计算机的思维方式书写二进制的代码,不过那样的代码实在反人类,慢慢的出现了更近似人类能够理解的十进制和字母的编程语言,但是这样的编码还是有些反人类。懒惰的人类想惯着自己的思维,用人类交谈的方式去控制计算机,教给它们知识,慢慢的单词也在代码中出现,各种符号也在代码中出现了。但是这些符号和字母以及其他与人类认知贴近的代码最终还是要被计算机嚼碎成二进制消化和运行,只是人类能够更方便的输出给计算机罢了。
语言的分类
最初代的二进制代码也是编程语言,因为它们也可以控制计算机或者教会计算机做一些事情,也是人机交流的工具,只不过写起来有点令人费解而已。经过不断的演进语言变得越来越高级,但是编程语言的发展没有尽头,总有更好写好理解的语言出现。
将各种语言进行分类的话,大致可以分为以下几种语言:
- 机器语言:计算机能够读懂的二进制代码,是计算机与计算机之间,硬件与硬件之间交流的语言。
- 自然语言:经过生物进化而不断演进出来的语言,自然形成的语言。像从甲骨文到简体字这样的语言。
- 编程语言:人类与计算机之间交流的语言,这样的语言因为不断演化或者不同的功能出现了很多种。
编程语言的分类
按照等级划分
上文说语言都是进化而来的,语言的进化就出现了等级。
人类折腾语言的结构和语法实际都是为了方便理解和快速掌握,但是初代的编程语言很明显不具备这个特点。所以语言被不停的翻版,实际都是在做一件事情就是与计算机沟通,改变的是人类越来越方便理解和接受。如果现在学习二进制语言或者其他初代语言会是一件很困难的时,就是因为它们与人类认知不同。
与生物进化相同,语言越演化越高级,也越来越容易被人类接受。所以如果在等级方面划分可以分为高级语言和低级语言,这两种语言非常好分辨:如果代码中看到能够读懂的单词或者句子,就表示这是一个高级语言。当然代码中的文字单词不仅限世界上的任何一款语言,毕竟计算机是世界人民的遗产,应该与所有人贴合,不过现在更多的语言都是外国人发明的,用英语的居多。
高级语言:与人类的语言越贴近,越高级。
低级语言:与机器语言越贴近,越低级。
按照编译机制
之前说过计算机只能读懂二进制代码,但是懒惰且聪明的人类发明了高级语言能够用人类语言去控制计算机。但最终被计算机消化执行的还是二进制代码。那人类的语言是怎么变成二进制代码的呢?这就涉及到编译这个词。
编译表示将高级语言的代码转换成二进制代码,这些代码将被保存在一个文件中,然后由计算机执行,或者直接输出到计算机中进行执行。实际编译的过程更像是一个翻译的过程,将人类能够理解的代码转换成机器能够理解的代码,就想把听不懂的英语转换成中文一样。
编译型也就是将人类能够理解的代码转换成二进制代码放进一个文件中,想运行程序的时候直接运行这个文件,这样能让计算机吃到最好消化的代码,执行的效率也就高了。这种语言所生成的文件可以多次的执行不用再次编译。
解释型语言不会生成文件,它们通常是一行一行的执行代码,然后直接让计算机吃掉,但计算机吃掉的不是真的高级语言代码,计算机也会把一行代码编译成二进制后执行。很显然解释性语言并不是追求效率的一方,有点点好处是不会出现编译后的文件看起来清爽一些。
从人类的角度来看,市面上的翻译软件有很多,都是把英文转换成中文,那为什么要出现这么多翻译软件呢?因为有些人就算看翻译软件翻译出来的内容也是看不懂的。思维比较灵活的人翻译单个单词就能看懂一篇文章,因为他们的大脑更聪明,但是有些人整句的翻译也是看不懂的,要换个翻译软件看另一种翻译方式才能看懂。受众群体的不同导致同一个翻译结果没法让所有人看懂,编程语言也面临这个问题。
我们平常使用最多的是微软系统的电脑,采用英特尔的芯片去运算,但世界上有很多的系统比如安卓或者苹果系统,又有很多的芯片比如AMD或者苹果的芯片,那我们就能保证编译出来的代码让所有的系统或者芯片理解和运行吗?计算机所采用的芯片和系统称为“平台”,同样的二进制代码在这个平台能够运行在其他平台可能就跑不起来。如果任何平台都能跑起来最好了,我们称为“跨平台”。
更多的编译型语言都没法跨平台,它在牺牲跨平台的基础上成全了效率。因为很多编译型语言的编译工作是指定平台的,一套代码只能在一种平台上运行。
解释性语言一般都是跨平台的,它在牺牲效率的基础上成全了跨平台,有了更简单的执行方式。解释性语言的跨平台并不是各个系统都能直接编译它们的代码而运行,一般都会在不同的平台上安装相应的运行软件,在运行解释性语言的时候由这个软件一行一行的编译然后交给计算机执行。解释性语言是跨平台的,但是这个运行软件是不跨平台的。
代码的编译是不同的,不同的编程语言为了满足自己想做的事情会有不同的编译方式,有的编程语言是跨平台的,有的是不跨平台的,有的不会生成编译后的文件直接让计算机执行,有的会生成编译后的文件让计算机执行这个文件。
- 追求效率型的编译型语言:C、C++
- 追求跨平台的解释型语言:JavaScript、Python