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