1. 首页 > 快讯

计算机基础(4)编程语言

亲爱的旅客朋友们,编程语言站到了。

这一章将向各位朋友介绍什么是编程语言?编程语言有哪些?编程语言的类型和特点。

程序是计算机中重要的灵魂,没有它我们怎么写毕业论文?怎么和朋友开黑?怎么点外卖?怎么白嫖视频?

1. 什么是编程语言

那么你有没有想过程序是怎么来的?

程序就是用编程语言写的,那么又为什么要用编程语言?

前文已说,程序就是具有特殊结构,包含CPU指令集的文件,内部数据我们人脑无法直接读懂,只有计算机才能看懂。计算机是一堆电子元件堆叠的机械怪物,能懂的数据只有电子世界中的通用语言——机器语言,它只包含0/1数据。

要想和计算机交流,让他乖乖执行我们的命令就需要弄懂它的语言,但是真的好难啊。在计算机远古时代,确实就是手打0/1和计算机交流,常用的指令也比较少,手打完全可行,但是随着计算机发展,越来越多的指令被添加了进来,再用0/1就难了,指令越多,0/1越长,常常容易弄混。那个时候能配上计算机的哪个不是重大项目,50位长的指令,我还得一点一点数着验证,执行效率低不说,一不注意把重要文件给删了,那就喜大普奔回家待业。

早上,“嘟嘟嘟,喂?妈妈,我被NASA录取了!晚餐不用做我的了。拜拜!”

下午,“嘟嘟嘟,喂?妈,晚餐还是做我一份吧...”

正是因为人脑中的语言体系和计算机中的不对等,所以需要一座中间桥梁将人脑的语言转换成机器语言,这就是编程语言的使命,它是一种中间语言体系人脑能读懂,且经过一定的转换能变为计算机能执行的机器语言。

2. 历史长河中的编程语言

下图是历史上出现的编程语言和时间,节选了部分:

顶部是机器语言处于Top 1的地位,是编程语言中的老祖。

编程语言从上到下,慢慢从低级走向高级,人脑越来越容易理解,编写效率也慢慢变高,期间涌现了不少优秀的编程语言,也有许多被时代淘汰,现在比较流行的有C/C++、Java、python、C#和JavaScript等。

最先出现的编程语言是1951年的汇编语言(Assembly languague),它使用助记符替代了费解的操作码和地址模式,直接指定对应的硬件进行操作,简单来说就是约定了若干字符集合用来替换机器语言。助记符直接对应着特定的CPU指令集,因此会根据CPU的架构不同而具有不同的语言体系。

FORTRAN是第一门编译型的编程语言,也是第一门高级语言(越高级越接近人类语言体系),它需要先通过编译器将代码转换成机器语言。编译器是一段写好的程序用来将高级语言转换为低级语言。注意,编译器的出现将编程语言划分为高级语言和低级语言(机器语言和汇编语言)。后面的编程语言大部分都继承了这一思想:使用编译器进一步将高级语言转换成更为低级的语言然后运行,比如C/C++、GO、Java等都具有自己的编译器,我们也把这类语言归类为编译型语言,他们需要人为指定数据类型,如int,float,char等表示数据类型以及占据多少字节空间的标注。

时代继续向前,高级编程语言进一步发展从编译型语言中诞生出了解释型语言,这类语言不再人为指定数据类型,语言运行期间会自己判断数据类型,实现同一种功能下,所编写的代码也往往更短,人脑也更容易理解,编写效率也更高,但是也有缺点,执行速度比较慢占用资源也更高,代表语言有python、Perl和PHP等。

接下来让我们拜见一下耳熟能详的编程语言祖师爷,体会一下ta们各自的hello, world 程序编程风格。

凯瑟琳是一位奇女子,曾与冯诺依曼工作,对就是那个提出计算机架构体系的人。她创建的汇编语言是是后面许多语言的源头。

大家想必也注意到了编译型的语言实现hello,world往往具有更多的代码,而解释型的语言一行代码即可。

编写简洁,代码优雅,看来还是解释型编程语言更好,但是并非如此,编译型语言也有着自己的优势,他执行速度更快,运行也更加稳定,也更安全,在做一些大型项目的时候使用的也都是编译型语言。到底是编译型好还是解释型好这取决于你的需求,如果你只是想做做简单的字符处理工作,解释型语言即可。

3. 解释型和编译型区别

区别一:解释型语言不需要编译为可执行文件。

编程语言需要将语言转换为机器语言才可运行,编译器在其中发挥重要作用。解释型语言并不像编译型语言那样通过编译器将源代码转变为可执行文件,然后以这个执行文件运行,解释型语言的编译器被异化为解释器,直接读取源代码逐行解析为机器语言运行,不需要生成可执行文件。

区别二:解释型语言运行较慢。

哪有什么岁月静好,是有人替咱负重前行。解释器在解释型语言执行过程中扮演着载体作用,而编程语言代码越少,解释器负重也越多,去掉可执行文件后,执行环境的压力也来到了解释器上,类型检查、内存清理、释放资源......各种调度要忙得累死,所以解释型语言运行较慢,启动要花的时间也更长。

区别三:编译型语言更安全。

编写的程序如果要交付到客户手中,为防止客户轻易篡改程序,使用编译型语言更加安全一些,毕竟编译型语言需要将源代码编译为可执行文件,可执行文件具有人类不可读性,因此分发到客户手中的程序具有一定的保密性,破解还需拥有一定的反汇编能力,这提高了破解的难度。而解释型语言交到客户手中直接就是源代码(如果不打包为可执行文件的话),客户轻而易举就可以通过阅读源码而破解程序。

区别四:解释型语言更加臃肿,占用资源更高。

偷偷告诉你,其实python是C的私生子。

python的底层代码是用C写的,python中的整型、浮点型、对象还有函数等都是利用C写好封装的,我们只是对其封装好的数据进行调用和计算而已。

比如上图中,python中创建了一个整数变量num并赋值为666,而num实际对应调用C中的结构体(一段连续内存区域,用于封装数据)PyIntObject,封装的正是long整数类型(4个字节容量),此外还附带了一个拖油瓶 PyObject_HEAD,一个宏定义(简单理解为代表了一大段代码)。除了整型外python中其他对象也是一样的,在C封装时除了实际储存空间外,还用了更多的数据来表示。这便是解释型语言更为臃肿和占用资源更高的地方,即存储了额外数据,但是这么做也不是一无是处,这些额外数据具有其他用途,可以为你节省时间,相当于把一些工作已经替你做好了,你只管用就行,因此解释型语言的编写效率更高。

4. 热门的编程语言

编程语言那么多?我们又该如何选择一门编程语言学习呢?

群众的眼光自然是雪亮的,我们来看看最近来比较热门的编程语言榜单吧。

首先出场的是TIBOE发布的全球编程语言热门榜,这是2024年6月的数据,他们通过统计谷歌、百度、必应等搜索引擎中不同编程语言的搜索率而制作的榜单,排名越靠前搜索率越高,也更热门。TIBOE网站:https://www.tiobe.com/tiobe-index/

从排名中可见python高坐榜首,然后是C++和C。大浪淘沙,历史中出现较早的许多编程语言都被挤出了榜单,这并不意味着他们已经消失了,许多他们编写的老古董程序仍然建在,留下的编程语言在一定程度上反应了人们喜爱的编程风格、更在一定程度上反应了当前比较热门的产业方向。

没有产业支持的编程语言都会慢慢衰落。

python主要的产业方向是人工智能和数据分析方向,目前风头正盛。编程风格简单优雅,可读性更强。

C几乎是编程语言中的师祖,比如C++、Java和python等的底层都是用C来实现的,而且他在嵌入式编程(小型系统开发)方面发挥着重要作用,就连操作系统Linux核心和Windows都是用C编写的。

C++是对C的一次封装,将C的编程风格从面向过程进入面向对象,下一章节会解释这两种编程风格。C++因此具有更加强大的库文件,包含了更多方便好用的函数或对象,使用上比C更方便一些。

Java是企业中常用的编程语言,用来实现各种业务逻辑和产品开发,淘宝就是用他编写的。Java编写的程序运行过程非常有趣,他兼顾了解释型语言和编译型语言的部分特点,一方面需要人为指定数据类型,另一方面他生成的“可执行文件”却还需要解释器JVM的解析才能运行。他的这种“可执行文件”并不能直接装载进内存然后被CPU执行,他是一种中间代码形式,必须要JVM解释器的解析才行。这和解释型语言很类似,运行时需要在外部套上一层“壳”,在“壳”中运行。这种形式让Java也被称为跨平台编程语言,编写好的代码在三大操作系统中可以直接使用,不需要做额外的调整,而调整的工作已经被不同平台的JVM承担了。

C#是游戏开发引擎Unity中主要使用的编程语言。C#和Java的特点类似,编译器生成的也是一种中间代码,也需要解释器的解析转换成机器语言才能运行,也是跨平台的。

SQL主要用在数据库方面,学生个人信息,淘宝上的商品信息等数据需要使用SQL语言与数据库进行读写交互。需要注意SQL和其他语言并不太一样,他不编译,更像是一种交互指令,语言也很简单,只适用于对组成数据库的数据结构进行操作,不能用他编写较为复杂的系统。

JavaScript主要用在客户端也称前端,在浏览器页面渲染和交互上发挥着重要作用。

GO语言主要用在服务器端也称后端,具有简单编写高并发程序的特点,非常适合用于某些需要高并发处理的服务器搭建。主要代表作是docker,一种程序虚拟化技术,三大平台通用。你还在为配置程序运行环境而苦恼吗?赶紧用docker吧,一行代码直接完成程序部署。但是目前docker的国内镜像站基本都由于某种不可抗拒原因被下架了,不搭梯子是下不了的。

kotlin和swift是移动端的编程语言分别对应安卓和苹果IOS系统的程序开发。

PHP主要用于网站开发,在当时,PHP可谓一枝独秀,不仅具有许多好用的函数和对象,还能内嵌一个html结构,达到动态页面的效果。不过后来许许多多的语言后来者居上,JavaScript、Java、C#和.NET的出现动摇了PHP的地位,逐渐减弱了他在服务器领域的影响力。

还有一门语言需要介绍,他是R语言并不在20名内,主要在数据分析和可视化方面发挥作用,受众也主要是科研机构的研究人员还有部分金融从业者。

此外还有Perl语言,这门语言在当时凭借优雅简洁和可读性很强的代码风格,被誉为最好的编程语言,主要使用领域是字符处理,不过随着后面优秀语言涌现的越来越多,渐渐被挤出了视线。在生物信息学方面,还有一些祖传的老脚本在发挥着神秘作用。

5. 编程风格

不同编程语言具有不同的编程风格,主要可以分为面向过程和面向对象。面向过程风格起源早,面向对象起源晚,是在前者的基础上发展而来的,目前大部分人也比较偏向面向对象编程。

这里的编程风格不与语言特定的语法相关,是他们内部需要维护和处理的数据结构的风格。

面向过程最具有代表的是C语言,面向对象最具代表的是Java,可以简单认为凡是具有类(class)定义结构的编程语言都是面向对象编程。

头文件、宏定义、结构体还有贴近底层是C区别面向对象风格的特点,如果我们想要用别人写好的一个包,如SDL和easyX等图形库,首先需要导入他们的头文件,再在编译过程中引入他们的静态库或动态库,调用的对象也主要是包中封装好的结构体和函数。

而面向对象将封装好的结构体和函数升级为对象,那是一段集属性(变量)和方法(函数)的集合体,而且可以在对象中再写入一个对象,层层套娃。对象的封装比结构体更简单且易用,调用时直接导入对象所在的包,然后使用对象中已经定义好的接口或方法即可。对象的传播和复制也更变态,如果你要给对象添加一些代码,直接继承(复制原始对象的所有数据)然后添加相关代码,继承而来的子类与他的继承对象——父类相互独立。面向对象编程出现后,代码的易用性和维护性得到了空前加强,但是也更臃肿了,封装了许多目前用不上,未来可能用上的数据在里面。

面向过程风格的编程语言虽然不臃肿,但是可用的工具包较少,有时还得手写许许多多的函数,还得考虑一些底层问题,代码修改起来也麻烦,这导致新的工具包出现速度较慢,且调用也麻烦。而面向对象风格的编程语言复制和修改代码更快,维护也更方便,于是许多人加入了这一阵营,当然也少不了相关公司的推动。于是面向对象风格占据优势,编写的工具包越来越多,任何人只要看一下对象相关的文档,直接调用对应的方法便完成编程工作,很少甚至不需要考虑这些对象实现的原理,只管调包便可。

对以上做个小结

小结一

面向过程编程编写的程序更加简洁、体积也更小、而面向对象更臃肿。

小结二

面向过程编译的程序运行速度更快。

小结三

面向过程的可用工具包较少,改装也麻烦,没有统一的包管理工具和站点源,维护性较差。这导致他的工具包发展缓慢,使用上也不便利。而面向对象对工具包的改装非常方便,数量上升很快,使用上也更方便,因此有更多的群众支持。

从编程风格的发展趋势来看编程是越来越远离底层,变得越来越简单,朝着开箱即用方向发展。而现在的编程风格目前是朝着可视化编程方向发展,即拉拉框,连连线即可,不需要手动打代码。

也有人认为目前的编程语言太偏离底层,更重应用,工具包许多也都是黑盒子,许多编程知识被淡化,不利于学习。确实许多编程语言越来越抽象,理解起来也云里雾里的,比如说对象,我还以为程序员都得面对对象才能打出来代码,其实就是一个集成了继承等功能的特殊结构体。越高级的编程语言实现也往往是对低级语言的封装,而低级语言更偏底层电子层面,编程语言的载体毕竟是电子,许多在语言层面抽象难懂的东西如果放在电子层面去理解,漂浮的思想立马有了依附的载体,理解起来也更容易。

6. 第一门编程语言

如何挑选编程语言?

python也好,Java也好,C/C++也罢,不同编程语言的特点前文已经介绍过了,可以结合自己未来的发展方向,挑一个喜欢的编程语言。最重要的不是编程语言是编程的思维,这种思维需要不断的项目练习和实践才能锻炼出来。编程思维简单来说就是对待解决问题的深刻理解,并能把它分解成不同的执行步骤,最后通过计算机去实现。

作者的第一门编程语言是C,触及底层的东西有点多,而我也非计算机的学生,理解起来也困难,学到指针那就看不下去了。后面学习生物信息便去学了Perl,后面发现Perl没有未来了,于是就转到了python。随着后面学习深入,回过头来看C时突然有了一种明悟的感觉,才渐渐的把C学了下去。后面还有其他需要也去学了其他编程语言,也许是学过了C,也许是功夫到了,发现虽然编程语言各种语法和特点有差异,但是从底层理解的话豁然开朗,他们也都有些共同之处,而且最重要的不是编程语言而是编程的思维。

说到底编程语言都是为了解决一些问题而开发的,这些不同的问题可以用不同的编程语言实现,问题的本质是一致的,比如找最大最小数,排序、组合、寻优等问题。这些问题可以抽离出来,用计算机中的数据结构+算法来解决,而这些数据结构+算法的形式可以由不同的编程语言来实现,这也是编程共同之处。

7. 总结

  • 计算机能直接执行的语言是机器语言。汇编语言和机器语言是低级语言,人类难读懂。

  • 编程语言是用来编写程序,将人类语言转换成机器语言的体系。

  • 高级语言是用低级语言实现的。

  • 编程语言根据编译方式不同可分为编译型语言和解释型语言。编译型语言更安全、运行速度更快、占用资源更少、但是可读性较差,解释型语言反之。

  • 编程语言根据编写风格不同可分为面向过程和面向对象。前者编写麻烦,靠近底层,维护性较差,后者反之。

  • 编程的本质是解决问题,形式上是数据结构+算法。

  • 重要的不是编程语言,是编程的思维。

到这里内容就已经全部结束了,如果有任何问题欢迎私信我或者在评论中留言,希望各位多多点赞、收藏、评论、转发、加关注。你们的支持会加快下一章更新哟。

本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.iotsj.com//kuaixun/3064.html

联系我们

在线咨询:点击这里给我发消息

微信号:666666