一. 编程语言介绍
编程语言(Programming language),是用来定义计算机程序的形式语言。它是一种被标准化的交流技巧,用来向计算机发出指令。一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应用采取的行动。[维基百科]
1. 通俗的讲什么是编程?
“编程”是个动词,“编程”就等于程序员“写代码”。
2. 为什么要编程?
为了让计算机做你想要做的事情,例如:为了减少异地交流的成本,建立线上交流平台,出现QQ,微信,陌陌等聊天软件;为了减少物流及人力成本,建立线上的商业平台,出现淘宝,京东,苏宁等商城软件,其软件就是一堆代码的集合,这些代码是计算机能理解的语言。
那计算机能理解的语言是什么呢?
计算机只能理解2进制0、1,那程序员总不能输入一堆2进制让计算机工作吧,这样的开发速度太慢了。所以最好的办法是输入简单的指令,计算机把指令转成2进制进行执行。
3. 有哪些编程语言
编程语言总体分为机器语言、编程语言、高级语言。
图1.编程语言的进化
3.1. 机器语言
由于计算机内部只能接受二进制代码,因此,用二进制代码0和1描述的指令称为机器指令,全部机器指令的集合构成计算机的机器语言。
机器语言属于低级语言。
编出的程序全是些0和1的指令代码,直观性差,还容易出错。除了计算机生产厂家的专业人员外,绝大多数的程序员已经不再去学习机器语言了。
机器语言是微处理器理解和使用的,尽管机器语言好像是很复杂的,然而它是有规律的。
存在着多至100000 种机器语言的指令。这意味着不能把这些种类全部列出来。
图2.机器语言
3.2. 汇编语言
汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。
它同样需要编程者将每一步具体的操作用命令的形式写出来。汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作。例如移动、自增,因此汇编源程序一般比较冗长、复杂、容易出错,而且使用汇编语言编程需要有更多的计算机专业知识。
但汇编语言的优点也是显而易见的,用汇编语言所能完成的操作不是一般高级语言所能够实现的,而且源程序经汇编生成的可执行文件不仅比较小,而且执行速度很快。
打印一句Hello,world!,需要写十多行。
图三.汇编语言
3.3. 高级语言
高级语言是大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。同时,由于省略了很多细节,编程者也就不需要有太多的专业知识。
高级语言主要是相对于汇编语言而言,它并不是特指某一种具体的语言,而是包括了很多编程语言,如C\C++,JAVA,PHP,Python,GO,C#等都属于高级语言
相比机器和汇编语言,高级语言对开发人员更友好,在开发效率上大大提高!
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
D:\>python2 >>> print("Hello World!") Hello World! >>> name = "yj" >>> print("Hello,my name is,name) ('Hello,my name is', 'yj')
高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行,按转换方式可将它们分为两类:编译性和解释性。
4. 编程语言分类
编程语言主要从以下几个角度进行分类,编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言。
4.1. 编译与解释
编译是将源程序翻译成可执行的目标代码,翻译与执行是分开的;而解释是对源程序的翻译与执行一次性完成,不生成可存储的目标代码。这只是表象,二者背后的最大区别是:对解释执行而言,程序运行时的控制权在解释器而不在用户程序;对编译执行而言,运行时的控制权在用户程序。
解释具有良好的动态特性和可移植性,比如在解释执行时可以动态改变变量的类型、对程序进行修改以及在程序中插入良好的调试诊断信息等,而将解释器移植到不同的系统上,则程序不用改动就可以在移植了解释器的系统上运行。同时解释器也有很大的缺点,比如执行效率低,占用空间大,因为不仅要给用户程序分配空间,解释器本身也占用了宝贵的系统资源。
编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;
解释器则是在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的,这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式)
图四.编译与解释型语言执行流程
表1.语言分类
4.2. 编译型vs解释型
编译型
优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。
缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。
解释型
优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。
缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。
参考图4.编译与解释型语言执行流程
4.3. 动态语言和静态语言
通常我们所说的动态语言、静态语言是指动态类型语言和静态类型语言。
动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言。
静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等。
4.4. 强类型定义语言和弱类型定义语言
强类型定义语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。举个例子:如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。
弱类型定义语言:数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。
强类型定义语言和弱类型定义语言对比
强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。另外,“这门语言是不是动态语言”与“这门语言是否类型安全”之间是完全没有联系的!
例如:Python是动态语言,是强类型定义语言(类型安全的语言); VBScript是动态语言,是弱类型定义语言(类型不安全的语言); JAVA是静态语言,是强类型定义语言(类型安全的语言)。
5. 主流编程语言
世界上的编程语言大约有600多种,但真正被大家主流使用的语言最多有二三十种,不同的语言有各自的特点和擅长的领域,随着计算机的不断发展,新语言在不断诞生,也同时有很多老旧的语言慢慢无人用了。有个权威的语言排名网站,可以看到主流的编程语言是哪些。
最新的TIOBE排行榜,Python赶超C#占据第四。截图日期为:2018年5月17日
图五.2018年5月编程语言排行榜
图六.编程语言长期走势图
[数据来源:https://www.tiobe.com/tiobe-index/]
5.1. C语言
C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件幵发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统幵发。
适合操作系统底层应用程序、驱动程序、对运行速度要求较高的软件幵发。
缺点:幵发效率底,学习成本高。
5.2. C++
C++是C语言的继承的扩展,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。
C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。
运行速度快,适合游戏开发、服务器高性能后台软件、网络编程、图形处理软件、芯片仿真、机器人等。
缺点:开发效率高于C,低于JAVA / Python。
5.3. Java
Java是第一个跨平台的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出,Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
全球使用最广泛的语言,丰富、成熟的生态圈,应用领域极为广泛。
缺点:代码臃肿、各种库太多了、设计复杂。
5.4. PHP
PHP(外文名:PHP:Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web幵发领域。
广泛用于网站开发。
缺点:应用领域相对单一,运行速度慢。
5.5. Ruby
Ruby是一个与Python类似的解释性语言,开发效率高,学习成本低,著名的rUby on rails web框架在国外有很多人用
主要用于WEB开发,虽然其不只能做WEB开发。
缺点:起步晚,它能干的Python都能干,且可以干的更好,所以感觉优势都被Python抢走了。
5.6. Go
Go是从2007年末由谷歌开发,并于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。
Go的主要特点是开发效率高,并发性好,号称是可以接近C的运行速度,接近Python的开发效率!未来必成大器!
主要用于高性能并发程序开发,著名的Docker容器就是基于GO开发的。
缺点:生态圏还不够成熟,应用领域相对单一。
5.7. Python
Python是一门优秀的综合语言,Python的宗旨是简明、优雅、强大,在人工智能、云计算、金融分析、大数据开发、WEB开发、自动化运维、测试等方向应用广泛,已是全球第4大最流行的语言。
6. 小结
6.1. 机器语言
优点是最底层,速度很快,缺点是最复杂,开发效率最低。
6.2. 汇编语言
优点是比较底层,速度最快,缺点是复杂,开发效率最低。
6.3. 高级语言
编译型执行速度快,不依赖语言环境运行,跨平台差。
解释型跨平台好,一份代码,到处使用,缺点是执行速度慢,依赖解释器运行。