简单谈谈编程语言(一)_编程语言c/c++-程序员宅基地

技术标签: 日常聊聊  编程语言  

 

       本文基于我个人的一些学习和开发经验,以机器语言、汇编语言、C/C++、Java、C#为例,谈谈我的看法,如有不对的地方,欢迎指出。感谢我的老师和师兄师姐在我提出这个问题后,给出了他们的看法。本文尽可能用更容易理解的角度去编写,帮助理解编程语言。

       对于编程语言的初学者,以及学过一些编程语言的科班学生、培训机构的学生等等而言,编程语言似乎很难理解。为什么会有这么多编程语言?为什么需要这么多编程语言?为什么有了这么多编程语言了还不停出新的编程语言?编程语言之间的区别是什么?等等一系列的问题就出来了。如果不能很好地去理解,望着层出不穷的编程语言,以及语言流行上不断变化的最火的编程语言,最火的框架,然后我们就开始害怕,开始犹豫,开始抱怨,开始焦虑,开始跟不上时代的步伐。

       这样的感觉我也有过,但是我并没有后面这么复杂的情绪,因为我还只是个大三的学生。但是,我知道如果我没有去解决这个问题,我以后的情绪可能会更复杂。百度、谷歌很难找到合适的答案,说的过于抽象或者太深,所以,我还是决定说说自己的理解,简单谈谈。

       最开始出现的,就是传说中的机器语言,就是那一大串0和1做成的符号。我们都知道,计算机比较笨,它所能理解的状态只有两种,开(1),关(0),你也可以看成开关变量。为什么只有它只能理解两种状态?不深入讲,从浅层来说,有一个电路,最简单的控制方式是什么?毫无疑问,给它一个开关,开(1)对应的电路就开始工作,关(0)对应电路就不工作。所以,机器语言的操作就是基于二进制(0,1)来操作,最接近底层,计算机能看懂的语言。然后就出现了一大串0,1的代码,你也可以称作操作码,但是计算机是看着舒服了,可苦了编写机器语言的程序员了。前几天刚写完的代码,成就感满满,然后招了新人进来,新人看了好久才看懂,密密麻麻的0和1。所以,那时候能编程的人都非常厉害,但是谁又愿意一直看着这一堆可怕的0和1呢?

       后来,想出了一个办法,给特定的操作加上一些英文符号,用来代替机器指令的操作码,这样看起来就容易懂很多了,编写、维护和阅读都方便了很多,最具代表性的,就是汇编语言了。容易懂,当然是相对于机器语言来说。我们最常见到的可能就是MOV这个指令了,亲切而自然。但是汇编中还是涉及到了大量的硬件方面的知识,比如寻址方式、寄存器,并且不同的机器中,对应着不同的汇编指令集,这让汇编基本不可能做到跨平台。那么,我们能不能再封装一层,让编程与当前的硬件环境再分一分,然后去掉汇编中那些相对难理解的知识,让编程更加贴近我们的思维,更加简单一点?

       时光加速一下,我们便来到了我们高级语言的世界了,最负盛名的便是C语言了。函数、条件、分支、循环等等用的非常舒服,而指针,相对于汇编来说就容易理解多了,虽然也有地址的概念,但是也做了相当多的包装,理解起来也相对容易很多。而C语言又相对好地解决跨平台的问题(没有完全解决,但是语法上已经没有什么差异了,移值性也非常强了),并且指针的操作也能让我们更贴近底层去编写高速运行的代码。经常听到一种说法,C语言是高级语言中的低级语言,高级贴近我们人类的思维,而低级在于贴近底层,有指针能直接操作地址,甚至寄存器。C语言的优秀,我们不需要去质疑,一门语言能流行这么长时间,自然是有它的强大之处。

       C语言虽然很优秀,但是随着需求的增大,代码量的增大,是不是可以对C语言进行拓展?C语言的思路是将整个过程完整地做下来,更加侧重于实现的过程,我们往往称之为面向过程的语言。但是如果我们换一种思路,把我们的需求分成几个对象,每个对象都有自己的特性、还有自己特有的动作,然后我们再将这些对象的关系处理一下,然后便完成了整个程序的编程工作。但是仅仅有对象可不行,如果我把一个学生看成一个对象,那么我一个班有50个学生怎么办?难道也要写50个对象?当然不是,我们把对象再抽象一下,把他们的共性都找出来装在一起,我们称之为类。这样是不是更加贴近我们日常生活的思维?把现实中的事物看成对象,再抽象成装有共性的类。面向对象思维的优势就不描述了,可自行百度、谷歌。

       这样在C语言的基础上不断做新的拓展,然后就成为了我们非常熟悉的C++了。从后面的“++”就可以明显看出,C++的特性了,能向下兼容C语言,我们常用的指针在C++中也非常出色。当然,这样也使得C++的难度变得很高,掌握如此大量的API并非易事。并且,指针操作也让很多程序员饱受折磨,即使是很厉害的程序员也不例外。终于还是有一批程序员受不了了,决定出逃,建立他们的新天地,编写一门更加简单易用的编程语言。

       他们决定将他们最痛恨的指针打入禁地,封起来,自己研制了一套很好的方案,由他们自己编写的库去操作指针。然后他们包装包装,形成了一个虚拟机,专门用于转化。上层开发人员都不能直接使用,一用就给你报错。封好指针后,他们就开始编写API/库,将一些常用的操作都封装起来,供开发人员调用,然后慢慢形成了一门新的语言。因为它是在C++的基础上做了简化,那就叫它C++--吧。可是又太长了,一番折腾考虑之后,决定叫Java。没错,就是鼎鼎大名的Java,上面的虚拟机就是Java虚拟机,API/库就是JDK。

       简单易用的特性,让越来越多的程序员转向了Java,Java越混越好。后来又出现了一门语言,C#。接触过Java和C#的人,就会发现两种语言的相似度很高。C#可以看做C++++,只是后面的“++”不再是拓展的意思,更有一些简化优化的意思,添加了一些很不错的特性,也更加简单易用,同时向下兼容C/C++,但C#一直不温不火。

       上面是一部跳跃版的编程语言发展史,阅读下来后,相信大家对编程语言已经有了自己的理解和看法。对于第一段提出的问题,相信也已经有了自己的答案。可以简单地理解为:

        编程语言从来都只是工具,帮助我们解决问题的工具,并一直致力于成为简单易用的工具。

 

后记:

       第二篇已经更新,可以继续查看,简单谈谈编程语言(二)

       不定时更新文章,尽可能坚持下去。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_19257541/article/details/88117767

智能推荐

(最终)如何利用印象笔记搭建自己的知识体系_印象笔记建立个人知识体系-程序员宅基地

文章浏览阅读1k次。1、 为什么要记录笔记这个问题我印象中探讨过很多次,但是简单来讲就是方便日后在遇到相似问题时查询解决方式,并在记录笔记的过程汇总中对知识进行一轮新的复习。这样一生,如果作为一个技术人员来讲的话,我不可能只学习一门技能,需要学习的东西很多。当只会一门技能时,做不做笔记其实无所谓,但是当你学会多种技能时,你需要笔记这样一个第二大脑来帮助存储那些琐碎并不通用的知识,你自己的大脑来记忆通用性的知识,可以迁移的方法。在遇到问题时,知道做什么永远比怎么做更重要。1.1 知识的分类1.1.1 元认知解释:能指导_印象笔记建立个人知识体系

FATFS文件系统详解-程序员宅基地

文章浏览阅读2.7k次,点赞13次,收藏96次。随着硬盘/flash容量不断增大,存储的数据也越来越多,早期单一的对应地址存放对应数据的方案已经无法满足我们的需求,因此一群大佬们便开始设计文件系统这样一个东西,用来管理硬盘/flash上的数据信息。本文主要分享关于FAT文件系统的详细设计。通过对FAT文件系统组成介绍,字段分析并采用新增文件实践分析的方式,详细阐述FAT文件系统的工作原理!_fatfs

【企业架构师】12 项企业架构师认证-程序员宅基地

文章浏览阅读3k次,点赞2次,收藏7次。企业架构师是使 IT 战略与业务目标保持一致的重要且不断增长的角色。无论您对云、应用程序、软件还是系统感兴趣,企业架构认证都可以提升您的职业生涯。如果您计划从事企业架构师 (EA) 的职业,那么认证是验证您的 EA 技能的好方法。作为 EA,您将负责为企业制定 IT 战略,以使业务目标与 IT 目标保持一致。公司严重依赖技术,因此 IT 现在是任何强大业务战略的基础部分。..._企业架构师认证

如何构建一个自己的代理ip池_如果制作代理ip池-程序员宅基地

文章浏览阅读5.9k次,点赞2次,收藏29次。相比前两种搭建IP池的方法来说,付费代理IP更能满足用户的需求,但对于有些特殊要求的朋友来说,他们想一次提取很多个或者多次提取很多个,存放在本地建立的IP池里,这种方法在一定的程度上优化了方案。只不过长期下来的话,服务器的维护成本较高,并且需要定时的维护,消耗大量的时间,如果是个人的话,搭建起来后期维护的成本太高了,如果您不是高端玩家的话,不建议使用这种方式搭建IP池。相对于免费的代理IP来说,收费代理IP虽然需要付出一定的成本,但是IP资源都是真实IP,并且高匿性,稳定性也好。一、默认自动切换IP。..._如果制作代理ip池

Linux下解压与压缩命令_linux解压rpm-程序员宅基地

文章浏览阅读4.3k次,点赞4次,收藏34次。本文主要是总结题主在学习与工作中使用到的Linux环境下解压与压缩命令,内容不算很全,但是囊括了大部分需求场景,如有误笔之处,还请同学指正。_linux解压rpm

前端展示后台服务器中图片的功能实现_前端访问后端图片展示-程序员宅基地

文章浏览阅读451次,点赞11次,收藏8次。这里的按钮我是放在了table表格的末尾,目的是获取每一行中的批次号,然后根据批次号读取后台服务器的图片,并且展示在前端的dialog中。有图片的效果图,这里只是做了个测试,图片的大小暂时还未调整。主要是一个接口还有个工具类,代码如下。dialog部分的代码。_前端访问后端图片展示

随便推点

面试ASP.NET程序员的笔试题和机试题-程序员宅基地

文章浏览阅读128次。面试 一般会叫你填两个表 1个是你的详细信息表 1个是面试题答卷 两个都要注意反正面是否都有内容不要遗漏,如果考你机试一般也有两种,就是程序连接数据库或一些基本的算法(二分查找,递归等),公司一般都是测试你的基本功是否扎实,如果你基本功好就游刃有余不必紧张! asp.net面试题 1.new有几种用法 第一种:new Class(); 第二种:覆盖方法 public new XXXX()..._.net面试机试题

【二、大数据环境篇】001、方法论_方法论semma-程序员宅基地

文章浏览阅读405次。1、官网的文档无论是学习Hadoop的hdfs、hive,还是hbase等,都要非常看重官网的文档。大数据的很多框架,都是Apache的顶级项目,各个组件框架的官网链接都可以从下面的链接进入:Hadoop:http://hadoop.apache.org/Avro: 序列化系统HBase: 分布式数据库Hive: 数据仓库Mahout: 机器学习与数据挖掘库Pig: 并行计算的高级数据..._方法论semma

LDA算法的数学推导过程详解-程序员宅基地

文章浏览阅读411次,点赞8次,收藏21次。主题模型是自然语言处理和文本挖掘领域的一个重要研究方向,它可以自动发现文档集合中潜在的主题结构。其中,潜在狄利克雷分配(Latent Dirichlet Allocation, LDA)是最常用和最成功的主题模型之一。LDA是一种无监督的贝叶斯概率模型,能够有效地发现文档集合中隐藏的主题结构。LDA模型的核心思想是:每个文档可以表示为多个主题的概率分布,每个主题又可以表示为词语的概率分布。通过学习这些潜在的主题分布和词语分布,LDA模型可以发现文档集合中蕴含的语义主题信息。

Python利用fitz库提取pdf中的图片(针对多种类型pdf)_import fitz-程序员宅基地

文章浏览阅读2.3w次,点赞17次,收藏98次。目录一. 安装fitz二. pdf文件格式问题2.1 pdf文件存在多种格式2.2 分析问题三. 代码一. 安装fitz安装:需要安装fitz和PyMuPDF,否则会报如下错误:ModuleNotFoundError: No module named ‘frontend’pip install fitz PyMuPDF二. pdf文件格式问题2.1 pdf文件存在多种格式pdf文件的格式有好几种,用Adobe Acrobat比较正常的如下所示:这种类型的pdf文件可以比较正常地提取里面的图片_import fitz

for循环倒序java_for循环-程序员宅基地

文章浏览阅读5.4k次。除了while和do while循环,Java使用最广泛的是for循环。for循环的功能非常强大,它使用计数器实现循环。for循环会先初始化计数器,然后,在每次循环前检测循环条件,在每次循环后更新计数器。计数器变量通常命名为i。我们把1到100求和用for循环改写一下:// for----public class Main {public static void main(String[] arg..._java for 倒序

VS中未定义标识符cout,endl_未定义标识符 "endl-程序员宅基地

文章浏览阅读1w次,点赞6次,收藏10次。VS中未定义标识符vs2017中显示未定义标识符cout,endl。一种方法是:先看有没有包含输入输出流#include,以及命名空间using namespace std;第二种:如果上面都已包含,还是显示未定义标识符的话,检查一下,#include"pch.h"是否是在#include上面我就是犯了第二个错误..._未定义标识符 "endl

推荐文章

热门文章

相关标签