1、计算机的诞生和发展
计算机的诞生和发展
图灵
图灵测试
图灵奖
计算机诞生背景
冯诺依曼理论
CPU
寄存器
缓存
Cache高速缓存
总线
存储器
内存储器
外存储器
输入输出设备(IO设备)
第二代计算机
商用计算机诞生
计算机主要特点
计算机内部信息存储单位
程序
编程基础
汇编语言
低级语言
高级语言
低级语言到高级语言
解释性语言
编译性语言
高级语言的发展
非结构化语言
结构化语言
面向对象语言
函数式语言
程序
数据类型
图灵
图灵测试
图灵奖
计算机诞生背景
冯诺依曼理论
CPU
寄存器
缓存
Cache高速缓存
总线
存储器
内存储器
外存储器
输入输出设备(IO设备)
第二代计算机
商用计算机诞生
计算机主要特点
计算机内部信息存储单位
程序
编程基础
汇编语言
低级语言
高级语言
低级语言到高级语言
解释性语言
编译性语言
高级语言的发展
非结构化语言
结构化语言
面向对象语言
函数式语言
程序
数据类型
计算机的诞生和发展
对计算机的诞生做出重要贡献的人有很多,主要有三个,第一个为查尔斯·巴贝奇,它是英国的发明家,也是数学家,说到数学家,那就说明,他们会经常做一些大量的运算,所以查尔斯·巴贝奇在织布机的启发下,就有了一个想法,能不能造一台机器来运算呢,通过多年的大量的研究,在1834年,查尔斯·巴贝奇就发明了分析机(现代计算机的前身);
需要注意的是1834年,是十九世纪,这个年代是没有电子设备的,有的只是一些机械式的设备,所以分析机是一台机械式的通用计算机,这台计算机由于种种原因,没有得到广泛的应用和发展,但是它体现了现代计算机的结构和设计思想,所以说分析机是现代电子计算机的雏形,或者说现代计算机的前身,是机械式的通用计算机;
查尔斯·巴贝奇去世之后,人们就想要研究它的大脑,究竟是怎么样构成的了,所以查尔斯·巴贝奇的大脑现在还保存在英国的博物馆,查尔斯·巴贝奇去世之后,我们的第二个计算机先驱就出现了,图灵;
图灵
图灵,它是英国的数学家,图灵除了在计算机界做出贡献意外,还有一个非常重要的贡献,就是在二战时期,破译了德军的密码,也正因为这一密码的破译,缩短了二战的进程,拯救了成千上万的生命,由此之后图灵被授予英国政府最高奖-大英帝国荣誉勋章;
值得惋惜的时候,这样的一代天才,死在了自己的家中,枕边有图灵吃过一口的苹果,苹果上有沾过剧毒物质的氰化物,享年41岁,主要是因为图灵的性取向有问题,背叛有罪,给了它两个选择,第一,坐监狱,第二是进行激素的治疗,图灵为了能够继续的研究,所以选择了后者,到后期图灵已经奄奄一息,最后默默的离开人世;
图灵为计算机做出重大贡献的关键点,主要在于,他在1936年的一篇论文当中提到了一部机器,图灵机,这部机器,可以替代人们去计算,用来计算所有能想象得到的可计算函数,就是将需要计算的问题,通过纸袋将要计算的信息录入读写头,然后读写头通过有线的步骤,计算和分析,最后得到结果,得到结果后,再用卡带进行输出;
虽然说,这一是一台假想的机器,但是它为我们后面计算机的软件工业我发展奠定了基础,所以说图灵机它揭露了计算机的本质;
图灵测试
图灵测试(The Turing test)由艾伦·麦席森·图灵发明,指测试者与被测试者(一个人和一台机器)隔开的情况下,通过一些装置(如键盘)向被测试者随意提问,进行多次测试后,如果机器让平均每个参与者做出超过30%的误判,那么这台机器就通过了测试,并被认为具有人类智能,所以此次测试被称为图灵测试,它开启了人工智能的研究;
图灵奖
再说图灵奖,图灵奖是人们为了纪念图灵设立的奖项,为后世在计算机界做出重要贡献的人,颁发奖项,我们将其称为计算机界的诺贝尔奖,图灵本身也就被称为计算机科学之父,和人工智能之父;
计算机诞生背景
有了以上人物做出的贡献,第一台计算机也就诞生了 ,这是在世界大战期间,打游戏的人应该很清楚,如果我们想要在游戏当中取得胜利,是需要好多装备的,那么美国也是一样的,它想要赢得战争,所以进行了导弹的研究,那么导弹的研究过程当中,又需要进行大量的微分和积分的运算,这个时候仅靠人工,已经远远达不到要求,所以需要一台机器来进行运算;
这样的要求变得非常的迫切,那么这个时候,美国军方就把这个任务交给美国宾夕法利亚大学,宾西法利亚大学总结了前人的经验,然后做出了改良,终于在1946年的时候,世界上第一台计算机诞生,它的名称叫做ENIAC;
ENIAC可以说是一台超大型的机器,占地300平方公里,重量达到六十多吨,通过上述图形可以看到,很多的连线,而且需要人工来进行操作,这台计算机采用的是,电子管和继电器,并没有采用存储程序;
没有存储程序,那么计算机就不能够自动工作,所以中间就需要很多的人工来进行线路的改连线,来进行程序的控制,控制这台计算器来完成工作,从而达到运算的目的,这就是关于第一台计算机;
由于第一台计算机是有很多的缺点的,所以人们就开始对第一台计算机进行改良了,这个任务就交给了一个美籍匈牙利人,冯诺依曼,被称为科学界的全才之一,它在现代计算机、博弈论、核武器和生化武器领域都有卓越贡献;
由于1944年,冯诺依曼参与了原子弹的研究工作,所以这就能解释通,为什么第一台计算机研究的初期冯诺依曼没有加入,就是因为他当时在进行原子弹的研究,当计算机研究的后期,冯诺依曼才加入了研究小组,加入进来之后就发现第一台计算机有非常多的缺点,然后提出了非常重要的冯诺依曼理论;
冯诺依曼理论
冯诺依曼认为计算机要进行严格分工,将用来专门进行运算的称之为运算器,用来发出控制信息控制整个计算机工作叫做控制器,存储程序就叫做存储器了,接着就是输入和输出设备了,那么就把计算机划分为五大部件,他们之间进行协调工作;
冯诺依曼在研究工作当中,发现,进行逻辑运算,或者是进行电子元器件制作的时候,就发现采用十进制会有非常多的弊端,而采用二进制,就刚好能够解决这些难题,所以冯诺依曼提出,我们的计算机应该采用二进制表示程序和数据;
因为第一台计算机没有存储程序,所以不能自动执行,所以冯诺依曼就提出了,我们的程序和数据都要存储在计算机当中,执行的时候,自动顺序执行,这样就可以让计算机自动工作了,那么反过来说,计算机能够自动工作,主要由于咱们的程序存储,那么程序存储,也是冯诺依曼的一个核心思想;
程序和数据都存在计算机内部,那么存和取的时候,首相得先找到它,那么怎么找到呢,这个时候就需要一个地址了,所以,我们的存储空间,就需要进行编址,然后就采取了线性编址的方式进行了编址,每个地址具有唯一性;
那么有了存储器之后,我们的计算机就可以开始工作了,计算机在执行程序的过程中,实际上就是在执行指令,所以咱们的指令就按照咱们的存储顺序执行,当然,特定情况下,也可以改变顺序,这大概就是冯诺依曼理论的核心思想;
CPU
将运算器和控制器合起来,称之为CPU,也叫中央处理区,这个我们可以称之为大脑,大脑是可以运算的计算机的五脏六腑也全部都是靠它来控制的,所以CPU和大脑是一样的,它既要做控制也要做运算,所以它就有控制器和运算器两个部件;
运算器,就说明它能够进行运算,它能够进行算数运算、逻辑运算、位移、比较等,那么数据从哪里来呢,内存,运算器的数据来源于内存,运算结果也送往内存当中;
控制器,对于控制器来讲,它主要的作用就是协调工作,它是计算机的指挥中枢,它能够依靠指令来控制计算机的各个部件,来协调工作,指令同样,也来源于内存、所以我们的控制器也有这么一个作用,从内存中取出指令,然后分析指令和向其他部件发出控制信息,比如,控制器控制将内存中的数据持久化到磁盘,等等等等,于是来完成整个系统的调度;
寄存器
CPU当中是有寄存器和缓存的,随着技术的变革,CPU当中就逐步加入了缓存的能力,而寄存器打诞生就有,寄存器是CPU计算的时候临时存储指令的和临时存储数据的设备,CPU从内存拿来的数据会临时存储在寄存器当中,CPU内部也有所谓的指令操作,这些指令去操作数据也是从寄存器中拿的,操作的结果会写入寄存器中;
实际上它是间接的从寄存器搬到内存当中去的,虽然它也可以直接操作内存,但是为了速度的原因,就采用了及存储器的间接寻址方式,寄存器是集成在CPU芯片当中的,寄存器和CPU是同频的,CPU有多快,寄存器就有多快;
缓存
CPU当中还有缓存,因为内存相对于CPU还是比较慢的,每次CPU到内存中拿都要耗费大量的时间,所以就采用了缓存的方式,将数据临时存放在缓存里面,CPU下次还要处理时,就直接从缓存里面拿,因为缓存的频率比内存的频率还要高,这样的话,拿数据,但是缓存的频率是略低的;
缓存分一级缓存,二级缓存和三级缓存,一二三级缓存的频率是逐次下降的,但是CPU中的所有的缓存都比内存快,CPU每次拿数据都会在缓存中存一份,以防下次还需要数据的时候还需要问内存要,如果从缓存中拿到数据了,那就大大提高了计算速度的,但是缓存是有限的,缓存是以K、M计量的,内存则是亿M、G计量的,而我们是磁盘则是以T、P计量的;
所以说,速度越快,成本越高,所以没办法,但是一二三级缓存,如果我们能够充分利用缓存,这样的话效率就会大大提升,这个其实也就是我们程序的优化点,尤其是在特定程序优化的时候,我们必须要考虑的问题;
Cache高速缓存
Cache是介于和CPU和内存之间的一种高速存取信息的芯片,由于CPU比较快,而内存相对而言较慢,他们俩之间就存在速度的差异,有了速度差异就容易造成冲突,或者容易引起数据的丢失,所以就需要用到Cache来平衡他们俩之间速度冲突的问题,Cache集成在CPU的内部,速度是与CPU相匹配的,里面存放的就是一些常用的数据,CPU访问的时候,它会先访问Cache,如果Cache里面没有数据,那么才会到内存中去读取数据,使用完成之后会直接缓存在Cache里面,这就是高速缓存的主要目的;
如果CPU需要再次使用该部分数据时可从Cache中直接调用,这样就避免了重复存取数据,减少了CPU的等待时间,因而提高了系统的效率。Cache又分为L1Cache(一级缓存)和L2Cache(二级缓存),L1Cache主要是集成在CPU内部,而L2Cache集成在主板上或是CPU上;
总线
总线BUS,总线实际上就是控制和传送信号用的,总线其实就是一根线复用,简单介绍下,现在只有一个车道,这个车道一次只能走一个车,有五个车要走,至于谁走,由控制器来控制,现在信号归谁用,五大部件协同工作,然后我们就可以写程序,将程序转化成指令,由指令来控制计算器,让计算机来按照我们的意愿去工作;
总线按用途区分,可以划分为三种,数据总线(DB)、地址总线(AB)、控制总线(CB),地址总线只是CPU像各个部件之间传送地址信息,这个地址信息只需要传输给部件,并不需要把信息再回传给CPU,所以说地址总线是单向总线;
数据总线和控制总线,他们需要在部件和CPU之间来回传递信息,所以他们是双向总线,数据总线主要用于一组CPU向主存储器和I/O接口传递地址信息的公共通路,而控制总线,它主要用来在存储器、运算器、控制器和I/O部件之间传输控制信号;
存储器
那么在计算机中呢,还有存储器,这个存储器实际上指的是Memory,这个内存有一个特点,掉电易失,虽然这个一个特性看似不好,但是它的另一个特性就非常有优越性了,也就是速度,它的速度非常的高,那些掉电不易失的设备往往速度是非常低下的,所谓的速度就是晶体震荡的一个频率,对于现代计算机来说,我们CPU可以达到3G多,再往上造价就非常高了,这就是频率,频率越高,它一秒运行的次数也就越多了;
内存储器
存储器指的是内存储器和外存储器,CPU能够直接访问的叫做内存储器,CPU不能直接访问的就称之为外存储器,内存是用来临时记忆程序数据的,CPU的运算器它并不直接与输入输出设备打交道,也就是说虽然我们的电脑里面有硬盘,也有网卡,但是CPU并不直接与这些设备交互,CPU的运算器只会与内存打交道,运算器要数据只能从内存中来,它要写出去数据也之能写到内存中去,并不直接写入磁盘,所以CPU做什么运算就是直接与内存交互的,这也是有原因的,因为所有的计算机内部都是靠晶体振荡器,产生频率的,CPU的频率是最高的,但是IO设备就不行了,所以说CPU是没有时间等待磁盘的,因为它太慢了;
所以了,CPU就使用了存储器Memory,它与内存的速度是相当的,但是这个相当,实际上还是差着几千倍的数量级的,但是内存再往上造的话,造价就太高了,买不起了,也就退而求其次要数据就直接放在内存了,至于这个数据要不要存储在磁盘,我们再想办法控制它,从内存搬到磁盘中去;
所以如果有数据需要进行处理,就需要先从磁盘搬到内存当中,再由内存搬到CPU内部进行计算,所以CPU的运算器,并不直接与磁盘或者网络这些IO设备打交道,CPU只认内存,并不直接操作其他IO设备,它所谓的操作,是控制,CPU有所谓的的控制器,控制器可以管理各种设备;
存储器指的是内存,内存是掉电易失的,它不是永久存储,永久存储是放在IO当中的,指的是磁盘,IO指的是输入输出设备,比如键盘鼠标、网卡、磁盘等,IO设备是最慢的设备了,这也是写程序需要优化的点;
外存储器
对于外存储器而言,CPU的运算器是不能够直接访问的,这也是它的一个显著特征,而且对于外存储器而言,它的存储量较大,但是它的速度是非常的低下的,所以它的造价也并不是非常的高,并能长期保存数据和程序,从而达到随时处理和加工,也正因为拥有这些特性,外存储器得以广泛应用;
常见的外存储器有,硬盘存储器、光盘、优盘和移动硬盘等,这些CPU不能直接访问的存储器,都属于外存储器;
输入输出设备(IO设备)
输入/输出设备(IO设备),其实就是接受用户输入的原始数据和程序,然后计算机就会进行处理,处理完成之后就会存储到内存当中,这种设备我们简而言之就是将信息输入计算机去处理的这种设备,我们就称之为输入设备,常见的输入设备,比如键盘、鼠标、扫描枪等;
当计算机已经处理完成了,需要把这个结果转变成用户可以接受的这种形式,将处理结果反馈出来,这种设备,我们就称之为输出设备,常用的输出设备,如显示器、音响、打印机等;
第二代计算机
有了冯诺依曼理论的支撑,世界第二台计算机也就诞生了,称之为EDVAC(离散变量自动电子计算机),这台计算机采用二进制表示数据,也进行了程序存储,同时,将硬件划分成了五大部件,可以看到,全部采用了冯诺依曼理论,所以人们就将这个结构称为冯诺依曼体系架构;
商用计算机诞生
在1951年的时候,计算机正式进入商业领域,第一款商用计算机UNIVNC诞生,接下来,计算机就进入了飞速发展的阶段,计算机所用主要元器件将计算机历史分为四代,分别是电子管计算机、晶体管计算机、中小规模集成电路计算机、大规模和超大规模集成电路计算机,这几代的计算机典型特征就是速度变得越来越快,从几千次每秒到以亿亿为单位的每秒次数;
计算机主要特点
现代计算机已经广泛运用到科研、商业、军事等等领域,作为现在最普通的一台计算机,运算速度已经可以达到每秒几十亿次的速度,这样的速度是人工远远不能及的,所以说,运算速度快是计算机的第一大特点;
第二点,对于圆周率的计算,现代计算机已经可以运算到小数位数十一位以上了,这说明,计算机的精度高,这是第二大特点;
第三点,如果有个图书馆的信息,依靠人工是非常困难的,但是使用计算机就可以简单的完成,所以记忆存储能力强,也是计算机大第三大特点;
第四点,具有高强度的逻辑判断能力,是计算机的第四大特点;
第五点,支持人机交互;
计算机内部信息存储单位
计算机当中所有的信息都要转换成二进制,然后一位一位的进行存储,那么我们经常在日常生活中提到有MB、KB这样的说法,那么位又是什么呢,位其实就是计算机的最小存储单位,比如010101,一个0或者一个1就是一位,英文表示法bit,其实还有很多单位表示法,具体如下;
位(bit/b):计算机的最小存储单元,简写b;
字节(Byte):每8位一个字节,简写B;
KB:1KB相当于1024个字节,也就是1024*8位,简称k;
MB:1MB相当于1024个kb,简称M;
程序
计算机原本就是用来写程序的,程序实际上就是能让计算机根据我们编写好的流程来进行数字运算的一个工具,这就是程序,它能够与计算机交互,说到底,就是指令,早起的计算机是非常庞大的,算力不比现代计算机强,但是在当时已经是很了不起的东西了;
随着大规模的集成电路的发展,到后来的超大规模的集成电路的发展,到今天,计算机的制造工艺不断提高,就容纳的晶体管就越来越多了,它的算力也就越来越强,直到现在,计算机已经做很多的事情了,甚至模拟大千世界;
编程基础
计算机语言也是一种语言,只不过人类的语言是人类之间互相交互的,计算机语言是人类与计算机之间交互的语言,要让计算机,按照我们的意愿去工作,就需要一种语言,让计算机能够懂得我们的意愿;
计算机发展初期,使用的语言是机器语言,机器语言实际上是非常难懂的,因为当时计算机属于野蛮发展的过程,各自都在研发,没有什么标准,这是个新生事物,后来所有人都按照冯诺依曼体系的二进制,使用二进制作为计算机的逻辑处理,那么这个时候,以二进制为基础的技术就发展起来了;
那么如何能够让计算机通过我们的意愿来工作呢,那么我们需要对其发生指令,假设我们要让计算机做加法 (add A,B),但是如何让计算机读懂这个指令呢;
汇编语言
那么后来就出现了编码,比如我们要让计算机做加法,那么我们就规定了001是加法,002是减法,我们用一张表来记录了,这些所有的0和1组合的公式,所以后来人们写程序就采用这些0和1的编码来写,每次写加法程序、减法程序等,我们都需要先查表,但是这个查表只适用于一种CPU、换一种CPU就可能不是这一套逻辑了,需要重新建立一张表,这个表代表了这个CPU支持的指令;
太麻烦了,没法记,也不通用,那个时候,就没有说写一个程序,各个计算机都能运行的程序,没法通用,因为每家制造CPU的程序员都各自发展,他们各自搞一张表来记录这个CPU所支持的指令,非常难记,它需要对应我们0和1的组合与我们的加法减法等运算公式的对应表;
后来就慢慢发展出一个助记符,程序员不需要记0和1了,我们只需要记住加减乘除所对应的自然语言就可以了,比如说,以后加法就叫做add,减法就叫sub等,我们通过这些助记符来编程,编程完成之后,由一个专门的汇编器,汇编器负责将我们的助记符转成这个CPU型号所对应的机器指令码;
这个转的过程,我们就称之为,编译的过程,或者汇编的编译过程,助记符其实就接近了人类的自然语言,但是它比我们现在所使用的高级语言还是差了很多,它不过就是把机器指令改成了助记符而已,改成了助记符实际上就是改成了字符串,得把这些字符串改成机器指令0和1的组合,其实内部还是查表,根据指定的型号的CPU查询对应的机器指令表,然后映射成对应的0和1的组合,就可以了;
这个汇编器,就大大的减轻了,写机器指令的负担,因为如果直接编写机器指令的话,因为机器指令都是0和1的组成,只要敲错了一位指令就变了,这个时候,我们要找错误就太难了,满眼看过去全是0和1,但是我们如果使用助记符的方式,就一眼能够看到了,因为它是自然语言的助记符;
有了助记符之后,我们就可以类似(ADD A,B)、(SUB C,D)这样的方式来进行编程了,我们也一眼能够看懂,虽然这个指令与我们所想的加法减法还比较远,但是已经比机器语言的0和1已经好很多了,目前汇编在很多领域中使用,尤其是底层编程,我们不得不使用汇编语言;
助记符是好了一点,但是还是没解决问题,依旧还是很麻烦,但这个与当年的编程也有关系,因为当年写汇编的时候,计算机的算力是很差的,内存都是以M计算的,那个时候还是软盘的时代;
那么随着计算机的算力增加,我们就需要更高效的编程,那么机器语言和汇编语言就都不能成为高效编程的语言了,那么这个时候就分了低级语言和高级语言;
低级语言
低级语言是面向机器的,机器就能直接识别,但是人看得就别扭了,这东西和人类的自然语言相差太大了,这个时候得根据不同的CPU来单独学习,包括对寄存器的操作,非常的难学;
高级语言
由于低级语言的低效,所以科学家们就在想解决办法,寻找一种与人类相近的一种计算机语言,既然都有了汇编器了,那么也可以有更高级的东西,让人类语言用来编程,这个时候就出现了高级语言;
高级语言要么很像人类语言,要么很像数学语言,其实计算机的诞生最初就是为了解决数据处理的问题,所以它也能够更像数学语言,也就是说这种编程语言编程写完之后,就像数学公式一样;
后来经过不断努力,1954年Fortran语言正式诞生,Fortran的本意就是公式翻译,翻译就是写数学,我们用人类自然语言写一段数学公式,然后,这个时候就就有编译器出来了,由编译器将你写的人类自然语言转换程机器指令,也就是机器语言,因为CPU到今天为止还是只认识0和1,我们必须使用这种编译器将我们这种语言,转换成机器能够识别的机器指令;
那么以后程序员只需要使用自然语言写一段程序即可,然后直接交给编译器,由它来转换成机器语言就可以了,大大的提高了生产力,所以高级语言也是比较容易学习的一门语言;
低级语言到高级语言
下图说明了,高级语言就是人类的可以理解的自然语言,然后中间通过一个编译器或者解释器,解释成机器语言,供机器使用,或者,使用低级语言,是使用低级语言是机器可以识别的,最低级的就是机器指令,但是机器指令千差万别,有的机器支持指令A,有的机器支持指令B,所以我们在买CPU的时候,可能有时候看到了,支持什么指令集;
是X86系统的还是什么系统的,这就是指令集的差异,还好,因为现代计算机发展到今天,大多数企业都采用了廉价的计算机,不约而同的选择了,英特尔坚持下来的X86系统,都称之为X86指令的指令集,所以我们就没必要去考虑指令集的问题了,因为他们指令集都是兼容下来的;
机器语言:机器能够直接识别的0和1的语言;
低级语言:通过某种特定的CPU支持的指令集编译成机器语言的代码,不同平台的CPU无法共用;
高级语言:需要通过编译器来转换到机器指令的语言,大部分都兼容平台;
低级语言是要通过编译器将源代码转化成本地能够直接运行的机器代码,就是0和1的机器指令,针对某种特性型号的CPU指令集来做的编译器,如果能够针对这个指令集编程的话就能够直接使用到机器支持的指令集,这样可以大大的提高效率;
这就是为什么在人工智能时代大家都去研究芯片的原因,专为它生产的芯片,这样可以使用专用指令集,大大的提高效率,因为AI是大量计算的,这个时候我们要专门设计芯片,指令集非常重要,指令集就能把硬件发挥到极致;
像目前所使用的JAVA、Python他们都是使用虚拟机运行的,他们并不会直接将源代码转义成机器指令,它会给我们转义成中间代码,中间代码就是与CPU无关的,这个代码和虚拟机配合,由虚拟机编译成本机支持的CPU指令集的机器指令,所以中间隔离一层,这一层也就是我们锁说的JAVA虚拟机、Python解释器;
所以我们才能实现跨平台,因为平台的差异,就被虚拟机自己解决了,我们只需要写Python代码就行了,因为我们能够把Python安装在当前这个CPU之上,说明了Python就可以支撑当前CPU的指令集了,这就是虚拟机的好处,但是恰恰因为有了虚拟机,中间隔了一层,它确实比C++、C直接编译,性能要低得多得多;
解释性语言
解释性语言,实际上就是就是先将其编译成中间代码,由解释器,来解释执行,解释执行也是执行,执行的时候也是转行成机器代码;
编译性语言
编译性语言,就是直接将程序编译成当前操作系统CPU能够支持的二进制的可执行文件;
高级语言的发展
计算机高级语言的发展,主要分为几个部分,非结构化语言、结构化语言、面向对象语言以及函数式语言;
非结构化语言
非结构化语言,现在应该非常少了,这种语言和汇编有点像,有的非结构化语言是有循环和分支的,但是它内部的子程序或者函数这样的程序和现在的高级语言不太一样,他们可以随意进出,函数可以有多个出口或者入口,总之这些程序写完了就是一团乱麻,随着软件工业的发展如果还是这种编程模式的话,那基本上没法开发了,多人协作就更别提了,同时还支持GOTO语句;
结构化语言
就是因为非结构化语言带来的弊端,也导致了结构化语言的诞生,结构化语言对一些基本结构进行了约束,比如程序入口必须要规范下来,出口也必须规范下来,就例如像函数一样,同时将顺序、分支、子程序这种结构也固定下来了,并且GOTO语言不准使用了,将语言中的一些不安全技术全部去除,比如JAVA还舍弃了C++中的指针,不允许随便直接操作内存,因为大多数人无法掌握底层原理,也不能要求每个人对内存都了如指掌,所以将底层细节用语言层面包装起来,让我们不能直接接触到底层,这是结构化语言;
面向对象语言
结构化语言只能像类似函数一样写,像C语言一样,第一件事干什么,第二件事干什么,遵从步骤去解决问题,这个是没问题的,但是随着计算机工业的发展,这样去解决一个大问题的时候,非常的麻烦,因为大的问题是一个大系统,大系统内有很多子系统,这些子系统相互依赖,相互干扰,如果第一步干什么第二步干什么这样的顺序结构去解决问题,慢慢会发现无法描述,这个时候就会发展成了现在的面向对象;
面向对象将世间万物,都理解成不同的类,类里面有对象,比如说人类,人类里面有具体的个体,那么人就是人类的一个实体,这种方法论就可以解决结构化语言的问题,并且能够将一个复杂的系统,通过语言去描绘出来,基本上大部分的高级语言都支持面向对象;
函数式语言
函数式语言,在现在也用得不少,尤其是在大量的数学计算中,函数式语言很早就出现了,现在是数据为中心的处理时代了,这个时候对我们来讲,能够有一个像函数一样的处理方式就非常好,函数就像数学公式一样,在这种语言当中,它的函数就和有的语言不一样了,在其他语言中,参数是不允许有函数的,在这种语言中就允许函数作为参数或者返回值,函数和个体是一样的,所以这种语言在Python中也可以简单,比如高阶函数;
程序
程序说到底就是算法加数据结构,算法就是解决问题的办法,算法解决问题需要物料,这个物料在计算机领域就是数据,所以数据+解决问题的办法,就是程序;
数据毕竟是要放在计算机体系当中的,这个数据最后还得放在内存当中,那么在内存中存放,内存是线性编址的,如何存放最合适,最高效的去使用它,这个就是数据结构的问题了,也就是数据在内存中如何摆放,它的存储方式不懂,我们去读取的方式也不同,效率也是有差异的;
数据结构已经处理了,那么我们用什么算法去高效的解决问题呢,这个时候就要看算法的优劣了;
数据类型
程序是要解决数据的类型的,有了数据结构的概念,为了数据更高效的存储,所以数据也就所谓的类型区分了,其中字符串和数值是我们最长用的数据类型,不管任何语言都一样。这些数据结构往往都被称之为容器,这个容器里面是可以放数据的,放数值、字符串等;
整数:在Python2之前分长整数和短整数,在Python3之后,直接舍弃了短整数,直接将长整形命名为int,变为一个普通的整数,并且没有了上限,这个整形可以很大,一直大到内存占满为止;
>>> number=1
布尔型:整形里面还有布尔型,也就是0和1,分别代表True和False;
浮点数:浮点型和整数存储空间还是一样大,但是它的小数点一直在变化,要么保证数值特别大,要么保证小数点后面的位数特别多,在一般情况下做工程计算时对小数位数有要求的时候,就必须使用带精度的浮点型;
>>> float=123.123
字符串:将人类能敲出来的字符,用单引号或者双引号包括起来就是字符串,但是因为双引号本身也是字符,那么此时我们可以使用三引号或者转义字符来表示,然后还提出来r前缀,表示字符串不做特殊处理,Python 3.6也提出了一个f前缀,叫做格式字符串;
>>> f=r"'1231ad'"