C、C++、Java、javascript、数据库语言
我想从上面五个具有代表性的语言,来整理我对代码的理解:
在起初,没有编程语言,计算机刚发明的时候,计算机只认识二进制,即0和1 ,而且只能完成数学运算,因为二进制 十进制本质上是数字的不同表达方式,虽然仅仅只能完成数学运算,但是我们可以编写一道方程让计算机求解,而且计算机可以完成复杂的方程求解,我们甚至可以编写分支运算,所以在计算机发明之后,很快 在政府 科研 宇宙探索三个方面施展拳脚,因为这三个领域 都需要复杂的数据统计和运算。后来IBM推出了商业电脑,即大型机 主打银行 公司和学校,因为其价格相对低廉,同时大型机支持客户编写程序然后在上面运算,但是IBM不可能让所有人使用二进制编写程序,所以汇编语言出现了,汇编语言是在二进制上面的再次封装,通过友好的语义化命令,使得客户可以轻松编写程序,同时 计算机会将汇编语言转为二进制来执行,再到后来,新的问题出现了,因为IBM每个大型机都是单独定制的系统,每次需要更换电脑的时候,意味着原来的程序需要新写一遍,客户非常抱怨,于是IBM推出了IBM360,这是一个全新的领域,IBM首次提出了操作系统,即把计算机硬件与软件分离,每次客户需要更换电脑的时候,不需要再重新编写程序,因为每个大型机上面的操作系统都是一个系统,而IBM这套系统是使用汇编语言编写的,汇编语言在编写小型程序非常有效,但是在编写非常庞大的项目的时候,汇编语言的问题就出现了,因为在庞大的系统里面,诸如if switch 数据类型 内存操作 文件读取 数据操作等等是非常常用的操作,而汇编语言没有这些概念,开发人员需要先先把if实现 才能去使用if,于是新的语言出现了,这就是C,C是在汇编语言更上一层,他封装了大型项目所需要的一些基本的概念,使得开发人员可以专注于业务的编写,用C语言编写的程序同样可以使用汇编语言完成,只是c语言会更快的开发完成而已,c语言本质上是将在汇编语言开发过程中 常用的一些概念给封装成语言,最终使用c语言开发出来的程序还是会被编译成汇编语言,汇编语言是底层cpu可以执行的命令,就这样c语言逐渐流行开来,后面随着需求越来越多,项目越来越大,代码的组织逐渐成为问题,因为c语言没有封装的概念,所有的代码最终是在一起的,开发人员在合作开发过程中不得不小心的处理代码,因为在C++出现的时候,人们开发的都是操作系统,操作系统所需要的代码量是非常大的,于是C++出现了,他提出了 面向对象 模块化两个重要的概念,使得多人合作开发的问题大大缓解,C++底层应该也是直接编译为汇编语言或者直接编译为机器语言,所以汇编 C C++在运行效率上面应该是一致的,他们本质上都是将二进制语言进行的更高程度的封装,人们在编程语言从1960年到1980年探索了20年,最终精炼出了C++,实际上 是在不断的开发过程中 将一些共用的部分 已经思想用语言的方式给抽象出来,如果说汇编 c c++属于全人类的共同探索,后面的语言 则主要是依据商业决策而创造出来的语言,java的诞生 是因为sun公司希望 实现在所有的物理设备上运行一款操作系统,这样就可以实现物联网,sun公司的策略是 编写一个java虚拟机,然后java虚拟机运行在操作系统中,然后使用java语言编写出一套可以在java虚拟机运行的系统,最终java虚拟机还是将java字节码 转为机器码执行,所以java虽然实现了跨平台,但是从效率而言 是不如c++ c的,javascript是浏览器层面了,如果我们仔细思考一下,浏览器本质上是实现了sun公司的愿望,浏览器本质上就是一个虚拟机,而javascript本质上就是java,所以我们使用js编写好程序之后,最终浏览器需要将js字节码转化为机器码 然后让机器取执行,所以js的运行效率 也是极慢的,数据库语言 是人们发现数据的操作是非常频繁和耗时的,所以我们发明了数据库 专门用于数据的处理,数据库软件针对数据的查询 操作等做了极致的优化,代价是 你必须使用它的语言来编写,这很好理解,其实就是你使用他的规则 然后来利用他的优化措施 来达到数据操作优化的目的,所以语言本质上是分两种 一种是直接运行在计算机上的语言,一种是运行在软件上的语言,java js 数据库语言就是运行在软件上的语言,而c c+是直接运行在计算机上的语言,运行在软件上的语言 也叫做解释型语言,即软件需要不断地解释程序 然后转化为底层二进制命令,这里面存在一个读取 转化的时间,这也是为什么js很慢的原因.
编程语言有几十种,但是其实是可以概括起来的,
1:语言本身的特性
从c c++到java js我们发现总有一些概念是一致的,这包括 数据类型、变量常量、分支循环、函数、模块化、面向对象,虽然他们实现的手法不一样,但是这些理念是基本一致的,只是不同的表现形式而已
2:所在平台的api
每个语言的诞生 都有其意义,在c++之前,api更多的是与计算机打交道 主要包括 文件读取、多线程、内存处理、网络通信。然而在js这里事情出现了变化,js阉割了文件读取和多线程这两个领域,在最近才加入内存处理这块内容,在03年才出现ajax处理网络读取,相应的js增加了dom和bom用来访问所在平台的api,而所在平台的api本质上是读取所在平台的信息以及使用平台完成特定的功能,如果后面vr成熟,必然会出现一个vr语言,他除了包括前面所说的语言特性,还包括使用vr的api 来完成特定的功能。
3:所属行业的协议
在商业语言出现之后,语言更多的与行业挂钩,erp软件 对于业务知识极为看重,银行领域的it可能不是你的技术有多高,而是你在该行业的沉淀,你是否能将你的技术与业务相结合已解决特定问题,每个行业都会指定共同的协议,web行业在tcp之上构建了http1.0 http1.1 http2.0,在erp行业应该也会存在一些约定俗成的规范 协议,
代码本身的组织:
语言本事只是一个载体,我们通过根据语言和平台api来实现特定的功能,随着项目越来越大,代码的组织和维护逐渐成为问题,面向对象和mvc这两种思想的本质是解耦,我们需要将一个复杂的项目进行解耦,而解耦目前有两种通用的解决方案:面向对象和mvc 他们分别解决两个层面的问题,面向对象是在复杂软件开发过程中 通过对不同事物的抽象来达到理清项目逻辑的问题,而mvc是在特定的界面开发过程中凝结的一种思想,通过将视图与数据分开实现降低项目复杂度 实现并行开发和代码复用,