编程基础
电子计算机:能够执行程序的机器
现代计算机
艾伦·麦席森·图灵 (Alan Matnsion Turing ,1912年6月23日 - 1954年6月7日),英国数学家、逻辑学家,被称为计算机科学之父,人工智能之父。图灵提出的著名的图灵机模型为现代计算机的逻辑工作方式奠定了基础。
冯·诺伊曼著名匈牙利裔美籍犹太人数学家、计算机科学家、物理学家和化学家,数字计算机之父。他提出了二进制作为数字计算机的进制基础,计算机应该按照程序顺序执行,计算机应该拥有五大组件。
冯·诺伊曼体系架构
cpu由运算器和控制器组成
运算器,完成各种算数运算、逻辑运算、数据传输等数据加工处理
控制器,控制程序的执行
存储器,用于记忆程序和数据,例如内存
输入设备,将数据或者程序输入到计算机中,例如键盘、鼠标
输入设备,将数据或程序的处理结果展示给用户,例如显示器、打印机等
cpu有还有寄存器和多级缓存cache
计算机语言
人与计算机之间交互和语言
机器语言
一定位数组成二进制的0和1的序列号,称为机器指令。机器指令的集合就是机器语言
与自然语言相差太大,难学、难懂、难写、难记、难查错
汇编语言
用一些助记符代替机器指令,称为汇编语言。ADD A,B 指的是将寄存器A的数和寄存器B的数想加得到的数放到寄存器A中
汇编语言写好的程序转换成机器指令
汇编语言知识稍微好记了些,可以认为就是机器指令对应的助记符。知识符号本身接近自然语言。
语言分类
低级语言
面向机器的语言,包括机器语言、汇编语言
不同的机器不能通用,不同的机器需要不同的机器指令或者汇编程序
高级语言
接近自然语言和数学语言的计算机语言
高级语言首先要书写源程序,通过编译程序把源程序转换成机器指令的程序
1954年正式发布的Fortran语言是最早的高级语言,本意是公式翻译
人们只需关注怎么书写源程序,针对不同机器的编译的事交给编译器关心处理
低级语言到高级语言
语言越高级,越接近人类的自然语言和数学语言
语言越低级,越能让程序理解
高级语言和低级语言之间需要一个转换的工具:编译器、解释器
c、c++等语言的源代码需要本地编译
Java、Python、c#的源代码需要被解释器编译成中间代码(Bytecode),在虚拟机运行
编译语言,把源代码转换成目标机器的cpu指令
解释语言,解释后转换成字节码,运行在虚拟机上,解释器执行中间代码
高级语言的发展
非结构化语言
编号或者标签、GoTo,子程序可以有多个入口和出口
有分支、循环
结构化语言
任何基础结构只允许是唯一入口和唯一出口
顺序、分支、循环,废弃GoTo
面向对象语言
更加接近人类认知世界的方式,万事万物皆抽象成对象,对象间关系抽成类和继承
封装、继承、多态
函数式语言
古老的编程范式,应用在数学计算、并行处理的场景。引入到了很多现代高级语言中
函数式“一等公民”,高阶函数
程序Program
程序
算法 + 数据结构 = 程序
数据是一切程序的核心
数据类型是数据在计算机中的类型和组织方式
算法是处理数据的方式,算法有优劣之分
写程序难点
理不清数据
搞不清处理方法
无法把数据设计转换成数据结构,无法把处理方法转换成算法
无法用设计范式来进行程序设计
世间程序皆有bug,但不会debug