计算机科学与编程导论(Introduction to Computer Science and Programming)。
一台计算机其实就只做两样东西:计算(Performs calculating)以及存储信息(stored information)。计算常称为内置运算(Built in primitives),都是由制造商提供给计算机的。
计算机的运算速度快,存储信息量也大(再大也装不下一盘象棋的所有局势,毕竟可观测宇宙的原子只有10的80次方),然而这样就够了吗?这里就引入了算法,一个好的算法能让计算机工作得更有效率。
可是拥有好的算法有两种事情计算机也是做不了的:相对于目前计算机科技来说太过复杂的问题,还有就是图灵停机(halting problem)。
在了解算法之前得明白两个知识,陈述性知识(Declarative knowledge)只是事实的陈述,并不能求出结果,多用来判断结果,是基石。操作性/程序性知识(Imperative knowledge)是如何做的方法。
将方法转化到机械操作,这里有:固定程序式计算机用于执行一种特定计算,储存程序式计算机被设计为可以运行任何计算。
储存程序式计算机的工作原理:一个预设定的指令序列被储存到内存(Memory)上,控制单元(control unit)中有个程序计数器指向指令序列,按线性顺序浏览,控制单元负责追踪事件的走向,并控制算术逻辑单元*ALU(Arthmetic logic unit)运用原语*(basic primitives)进行计算。
图灵证明一个设备仅需6种原语,就可以计算任何可以计算的东西。任何具备这样属性的计算机、解释器,称为图灵完备。
而现代编程语言除了有一套更为方便的原语集外,还必须要有的关键功能是抽取方法的能力,即创建新的原语,并投入到原语集中。
任何编程语言都提供一种方法或者机制来将原语组合形成更复杂的、但合法的表达式,这里引入了语法、静态语义以及形式语义/全语义。
语法负责判定一个字串是否合法,静态语义判定一个字串是否有意义,形式语义赋予合法的语句 意义。
创建表达式由<操作符>、<对象>、<数据对象>组成。
通常数据对象要么是不可分割的标量对象(对于python来说如整数,浮点数,布尔值),要么就是非标量对象(拥有可以访问的内部结构如字符串)。
操作标量对象的操作符用来操作非标量对象称为:操作符重载。
Python2 可以对数值的字符串与整数、浮点数进行比较,而Python3不能,Python2的round()方法与Python3也不太相同。