大约在2021年3月笔者写过
正式学习 Python 之前,我们有必要先搞清楚 [编程语言]
这个概念。在我们很小的时候,父母就教我们开口说话,也教我们如何理解别人讲话的意思。经过长时间的熏陶和自我学习,我们在不知不觉中学会了说话,也能听懂其他小朋友说话的意思,于是我们开始用语言与他人交流。世界上存在许多种语言,包括汉语、英语、日语、俄语等等,每种语言都有固定的格式,比如汉语(中国话),每个汉字代表着不同的意思,我们必须正确的表达,才能让对方理解。例如让父母给你10元零花钱,你会说 "爹地给我10元钱,我要买零食"
,如果说 "10元爹地给钱我零食买我要"
,父母就会觉得很奇怪,听不懂我们的意思,甚至引来他们的责备。通过有固定格式和固定词汇的 "语言"
来与父母沟通,让父母满足你的心愿,从而达到 "控制"
父母的目的,这就是语言的作用。同样,我们也可以通过 "语言"
来控制计算机,让计算机为我们做事情,这样的语言就叫做 编程语言(Programming Language)。
和人类的语言一样,编程语言也有很多种,据不完全统计,全世界大概有 600 多种编程语言,其中比较流行的语言有 20 多种,比如C语言、C++、Java、Python、PHP、C#、JavaScript 等,这些语言各有千秋,都有自己擅长的方面:
Python:
数据科学和机器学习:Python 在数据科学和机器学习领域非常流行,有着丰富的库和工具支持,如 NumPy、Pandas、SciPy 和 TensorFlow。Web 开发:Django 和 Flask 是 Python 的主要 Web 开发框架,提供了构建高性能 Web 应用程序所需的工具和功能。自动化和脚本编程:Python 的简洁性和易读性使其成为自动化任务和脚本编写的首选语言。
JavaScript:
前端开发:JavaScript 是 Web 前端开发的核心语言,用于构建交互式用户界面和动态网页。后端开发:Node.js 让 JavaScript 也能用于服务器端开发,它有着强大的异步编程能力和丰富的第三方模块。游戏开发:JavaScript 在游戏开发中也有一席之地,尤其是通过框架如 Phaser.js 和 Three.js 实现的 Web 游戏。
Java:
企业级应用开发:Java 是构建大型企业级应用程序的首选语言,它的强类型和面向对象特性使得在大型项目中保持代码的可维护性和可扩展性。Android 开发:Android 应用程序的主要编程语言是 Java,开发者可以利用 Java 的强大功能构建丰富的移动应用。大数据和云计算:Java 在大数据处理和云计算领域得到广泛应用,如 Apache Hadoop 和 Apache Spark 等项目就是基于 Java 构建的。
C/C++:
系统级编程:C/C++ 是系统级编程的主要选择,包括操作系统、嵌入式系统和驱动程序开发等领域。游戏开发:大型游戏引擎如 Unity 和 Unreal Engine 使用 C/C++ 作为主要的开发语言,因为它们对性能的要求非常高。高性能计算:C/C++ 被广泛应用于需要高性能的科学计算和工程应用,如数值模拟、仿真和计算机视觉等领域。
C#:
游戏开发:Unity 引擎的主要开发语言是 C#,因此在游戏开发领域有广泛应用。Windows 应用程序开发:C# 是
.NET
框架的首选语言,用于开发 Windows 应用程序、桌面应用程序和服务器端应用程序。Web 开发:通过 ASP.NET,C# 也可用于 Web 开发,尤其是针对 Microsoft 技术栈的企业应用。
Swift:
iOS 和 macOS 应用程序开发:Swift 是苹果公司推出的编程语言,用于开发 iOS 和 macOS 应用程序,它结合了功能强大和易用性。应用程序性能优化:Swift 提供了更安全和更快的运行时性能,使得开发者能够构建高性能的应用程序。
Ruby:
Web 开发:Ruby on Rails 是一种流行的 Web 框架,Ruby 语言的简洁和优雅性使其成为快速构建 Web 应用程序的理想选择。
快速原型开发:Ruby 的简洁性和高级特性使其成为快速原型开发的有力工具。
Go:
并发编程:Go 语言原生支持并发编程,提供了轻量级线程(goroutines)和通信机制(channels),适用于构建高并发系统。
微服务开发:Go 语言的简洁性和性能使其成为构建微服务架构的理想选择,例如,Docker 和 Kubernetes 就是使用 Go 语言编写的
可以将不同的编程语言比喻成各国语言,为了表达同一个意思,可能使用不同的语句。例如,表达 "美女"
:
汉语:美女
英语:beauty
日语:ビューティ
法语:Beauté
对于编程语言来说,执行同一个操作,也需要使用不同的语句。举个简单的例子,在屏幕上显示 "hello,美女"
:
C语言:printf("hello,美女");
Python:print("hello,美女")
JavaScript:console.log("hello,美女");
Java:System.out.println("hello,美女");
通过例子可以看出,编程语言和人类语言类似,都由直观的词汇组成,我们很容易理解它的意思。比如在 Python 中,我们使用 print() 让计算机在屏幕上显示文字,print 英文原意为打印、输出的意思,我们能够轻易地理解它;同时,我们还要注意语句格式,把待显示的内容 "hello,美女"
加上英文状态的引号 ""
放在括号内,这是 Python 语言规定的格式,我们必须这样写。每一种编程语言都有固定的词汇和格式,学习一门编程语言,本质上就是学习如何使用这些词汇和格式。总结: 编程语言是用来控制计算机的一系列指令(Instruction),它有固定的格式和词汇(不同编程语言的格式和词汇不一样),必须遵守,否则就会出错,达不到我们的目的。习惯上,我们将这一条条指令称为代码,这些代码共同组成一个计算机程序,而用编程语言来编写程序的过程称为编码。
补充:在之前提到的编程语言,都是高级计算机语言,设计它们的目的是为了方便程序员理解和使用。但严格意义上来说,计算机只能理解一种非常低级的编程语言,也就是机器语言。
一定位数的二进制的0和1组成的序列,也称为机器指令
机器指令的集合就是机器语言
与自然语言差异太大,难学、难懂、难写、难记、难查错
举个简单的例子,计算 2 个数的和,机器语言需要控制计算机依次完成以下操作:
CPU(Central Processing Unit,简称 CPU)即中央处理器,是计算机的运算和控制核心,相当于计算机的大脑,所有的机器指令都是由 CPU 负责执行的。可以看到,对 2 个数执行求和操作需要做这么多工作,这还只是笼统地描述,实际上会更加复杂。而使用 Python 这样的高级语言,对 2 个数求和可以直接用 a + b 的形式表示。下面使用 Python 进行演示:
这种方式虽然轻便快捷,但同时也带来了问题,我们需要设计一种方法,将高级语言翻译成计算机可以执行的机器语言。目前,有两种方法可以实现,分别是 编译器 和 解释器。 使用编译器将自身转换成机器语言的高级语言,通常称为 编译型语言; 而使用解释器将自身转换成机器语言的高级语言,称为 解释型语言, Python 就是一种解释型编程语言。
小结:
机器语言:
一定位数的二进制的0和1组成的序列,也称为机器指令
机器指令的集合就是机器语言
与自然语言差异太大,难学、难懂、难写、难记、难查错
汇编语言:
用一些助记符号替代机器指令,称为汇编语言。ADD A,B 指的是将寄存器A的数与寄存器B的数相加得到的数放到寄存器A中
汇编语言写好的程序需要汇编程序转换成机器指令
汇编语言只是稍微好记了些,可以认为就是机器指令对应的助记符。只是符号本身接近自然语言
低级语言:
机器语言、汇编语言都是面向机器的语言,都是低级语言
不同机器是不能通用的,不同的机器需要不同的机器指令或者汇编程序
高级语言:
接近自然语言和数学语言的计算机语言
高级语言首先要书写源程序,通过编译程序把源程序转换成机器指令的程序
1954年正式发布的Fortran语言是最早的高级语言,本意是公式翻译
人们只需要关心怎么书写源程序,针对不同机器的编译的事交给编译器关心处理
语言越高级,越接近人类的自然语言和数学语言。语言越低级,越能让机器理解。高级语言和低级语言之间需要一个转换的工具:编译器、解释器,关于编译型语言和解释型语言的含义和区别,后续小节会进行详细介绍。
通过高级语言编写的源码,我们能够轻松理解,但对于计算机来说,它只认识二进制指令,源码就是天书,根本无法识别。源码要想执行,必须先转换成二进制指令。
所谓二进制指令,也就是由 0 和 1 组成的机器码,能被计算机直接识别并执行。
然而,究竟在什么时候将源代码转换成二进制指令呢?不同的编程语言有不同的规定:
.exe
文件),比如C语言、C++、Golang、汇编语言等,它们都属于 编译型语言,使用的转换工具称为