1、单元开篇
- 计算思惟与程序设计
- 计算生态与Python语言
- 用户体验与软件产品
- 基本的程序设计模式
2、计算思惟与程序设计
2.1 计算思惟
2.1.1 第3种人类思惟特征
- 逻辑思惟:推理和演绎,数学为表明,A->B B->C A->C
- 实证思惟:实验和验证,物理为表明,引力波<-实验
- 计算思惟:设计和构造,计算机为表明,汉诺塔递归
2.1.2 抽象和自动化
- 计算思惟:Computational Thinking
- 抽象问题的计算过程,利用计算机自动化求解
- 计算思惟是基于计算机的思惟方式
2.1.3 计数求和:计算1-100的计数和
逻辑思惟(数学家高斯的玩儿法):算法
\[ S=\frac{(a_1+a_n)n}{2} \]编程
计算思惟(现代人的新玩儿法):设计模式
s = 0
for i in range(1, 101):
s += i
2.1.4 圆周率的计算
逻辑思惟:浏览器
\[ \pi = \sum_{k=0}^\infty[\frac{1}{16^k}(\frac{4}{8k+1}-\frac{2}{8k+4}-\frac{1}{8k+5}-\frac{1}{8k+6})] \]安全
计算思惟:架构

2.1.5 汉诺塔问题
逻辑思惟(\(2^n-1\)):模块化

计算思惟:函数
count = 0
def hanoi(n, src, dst, mid):
… (略)
hanoi(3, "A", "C", "B")
print(count)
2.1.6 天气预报

2.1.7 量化分析

2.1.8 抽象问题的计算过程,利用计算机自动化求解
- 计算思惟基于计算机强大的算力及海量数据
- 抽象计算过程,关注设计和构造,而非因果
- 以计算机程序设计为实现的主要手段
2.2 计算思惟与程序设计
编程是将计算思惟变成现实的手段学习

3、计算生态与Python语言
3.1 计算生态
从开源运动提及…

开源生态逐步创建
- 1991, Linus Torvalds发布了Linux内核
- 1998, 网景浏览器开源,产生了Mozilla

开源思想深刻演化和发展,造成了计算生态
计算生态以开源项目为组织形式,充分利用“共识原则”和“社会利他”组织人员,在竞争发展、相互依存和迅速更迭中完成信息技术的更新换代,造成了技术的自我演化路径。

没有顶层设计、以功能为单位、具有三个特色

3.2 计算生态与Python语言
- 以开源项目为表明的大量第三方库:Python语言提供 >13万个第三方库
- 库的建设通过野蛮生长和天然选择:同一个功能,Python语言2个以上第三方库
- 库之间相互关联使用,依存发展:Python库间普遍联系,逐级封装、
- 社区庞大,新技术更迭迅速:AlphaGo深度学习算法采用Python语言开源
API != 生态
3.3 计算生态的价值
创新:跟随创新、集成创新、原始创新
- 加速科技类应用创新的重要支撑
- 发展科技产品商业价值的重要模式
- 国家科技体系安全和稳固的基础
3.4 计算生态的运用
刀耕火种 -> 站在巨人的肩膀上
- 编程的起点不是算法而是系统
- 编程如同搭积木,利用计算生态为主要模式
- 编程的目标是快速解决问题
4、用户体验与软件产品
4.1 用户体验
实现功能 -> 关注体验
- 用户体验指用户对产品创建的主观感觉和认识
- 关心功能实现,更要关心用户体验,才能作出好产品
- 编程只是手段,不是目的,程序最终为人类服务
4.2 提升用户体验的方法
4.2.1 方法1:进度展现
- 若是程序须要计算时间,可能产生等待,请增长进度展现
- 若是程序有若干步骤,须要提示用户,请增长进度展现
- 若是程序可能存在大量次数的循环,请增长进度展现
4.2.2 方法2:异常处理
- 当得到用户输入,对合规性须要检查,须要异常处理
- 当读写文件时,对结果进行判断,须要异常处理
- 当进行输入输出时,对运算结果进行判断,须要异常处理
4.2.3 其余类方法
- 打印输出:特定位置,输出程序运行的过程信息
- 日志文件:对程序异常及用户使用进行按期记录
- 帮助信息:给用户多种方式提供帮助信息
软件程序 -> 软件产品
用户体验是程序到产品的关键环节
5、基本的程序设计模式
5.1 从IPO开始…
- I:Input 输入,程序的输入
- P:Process 处理,程序的主要逻辑
O:Output 输出,程序的输出
- 肯定IPO:明确计算部分及功能边界
- 编写程序:将计算求解的设计变成现实
调试程序:确保程序按照正确逻辑可以正确运行
5.2 自顶向下设计
- I:Input 输入,程序的输入
- P:Process 处理,程序的主要逻辑
- O:Output 输出,程序的输出
5.3 模块化设计
5.4 配置化设计

- 引擎+配置:程序执行和配置分离,将可选参数配置化
- 将程序开发变成配置文件编写,扩展功能而不修改程序
- 关键在于接口设计,清晰明了、灵活可扩展
5.5 应用开发的四个步骤
从应用需求到软件产品

- 1 产品定义:对应用需求充分理解和明肯定义:产品定义,而不只是功能定义,要考虑商业模式
- 2 系统架构:以系统方式思考产品的技术实现:系统架构,关注数据流、模块化、体系架构
- 3 设计与实现:结合架构完成关键设计及系统实现:结合可扩展性、灵活性等进行设计优化
- 4 用户体验:从用户角度思考应用效果:用户至上,体验优先,以用户为中心
6、单元小结
- 计算思惟:抽象计算过程和自动化执行
- 计算生态:竞争发展、相互依存、快速更迭
- 用户体验:进度展现、异常处理等
- IPO、自顶向下、模块化、配置化、应用开发的四个步骤