-逻辑思维:推理和演绎,以数学为代表。如:A→B,B→C,则有A→C。
-实证思维:实验和验证,物理为代表。如:物理学家提出引力波的概念,但需要大量实验来验证引力波的存在。
-计算思维:设计和构造,计算机为代表。如:汉诺塔递归。
---------------------------------------------------------------------------------------------------------------------------
-计算思维:Computation Thinking。
-抽象问题的计算过程,利用计算机自动化求解。
-计算思维是基于计算机的计算方式。
---------------------------------------------------------------------------------------------------------------------------
数学思维:高斯小时候这样弄:1+100=101,2+99=101,……这样的循环有50次,则有:首项加末项,然后乘项数除以二。此为数学思维。
计算思维呢?用Python语言来做,此项代码可以写为:
s = 0
for i in range(1, 100):
s += i
这是计算思维,是现代人的方法。
数学思维:当时,没有其他方法。数学家一直在找方法计算圆周率,最后、找到了一公式:
这个公式,k从零到无穷。
计算思维:我们用正方形,中间画一个内切圆,用random()方式向整个正方形撒点,撒好多,最后用点迹大约算出π的大小
前面的数学家推导过,把最下面的圆盘移到另一根柱子上,要次换圆盘。计算思维迭代就可以了。
count = 0
def hanoi(n, src, dst, mid):
...#(略,这一章我会在后面写道,里面内容在另一个网站上可以看,当时我记在本子上了,后面发到博客上)
hanoi(3, 'A', 'C', 'B')
print(count)
原先,我们来靠实证思维和逻辑思维来猜后面的天气。
现在,计算机有MM5@超算模型,这个模型把地球化成好多方块,分成一格一格的,把天气模型按照以前的顺序往后面推。
以前,不用计算机的时候,分析股票涨跌,根据经验,往后判断涨跌。这是实证思维和逻辑思维。
有计算机时,通过机器学习的方式,预测未来涨跌,利用计算机完成未来交易。
---------------------------------------------------------------------------------------------------------------------------
1、抽象问题的计算过程,利用计算机自动化求解。
-计算思维基于计算机强大的算例及海量数据
-抽象计算过程,关注设计和构造,而非因果
-以计算机程序设计为主要实现手段
2、编程是将计算思维变成现实的手段
=======================================================================
-1983年,Richard Stallman启动GNU项目,通过这个项目,他希望能做出来一个操作系统
-1989年,GNU通过许可协议诞生,自由软件时代到来(自由软件,就是不再像工业产品一样通过商业来分发销售,而是通过互联网,通过免费的拷贝和使用来进行分发)
-1991年,Linus Torvalds发布了Linux内核(第一个操作系统极小内核)
-1998年,网景浏览器开源,产生了Mozilla,开源生态逐步建立
---------------------------------------------------------------------------------------------------------------------------
开源思想深入演化和发展,形成了计算生态
计算生态以开源项目为组织形式,充分利用“公式原则”和“社会利他原则”组织人员,在竞争法治、相互依存和迅速更迭中完成信息技术的更迭换代,形成了技术的自我演化路径。
计算生态没有顶层设计、以功能为单位、具备三个特点:
计算生态与Python语言
-以开源项目为代表的大量第三方库
Python语言提供超过13万个第三方库
-库的建设经过野蛮生长和自然选择
同一个功能,研究的人不同(学生、老师、科学家……),做法也不同,有可能有2个及以上的第三方库
-库之间相互关联使用,依存发展
Python库间广泛联系,逐级封装
-社区庞大,新技术更迭迅速
AlphaGo深度学习算法采用Python语言开源
计算生态的价值
创新:跟随创新、集成创新、原始创新
-加速科技类应用创新的重要支撑
-发展科技产品商业价值的重要模式
-国家科技体系安全和稳固的基础
计算生态的应用
刀耕火种 变为 站在巨人的肩膀上
-编程的起点不是算法而是系统
-编程如同搭积木,利用生态计算为主要模式
-编程目标是快速解决问题
---------------------------------------------------------------------------------------------------------------------------
=======================================================================
实现功能 → 关注体验
-用户体验指用户对产品建立的主观感受和认识
-关心功能实现,更关心用户体验,才能做出好产品
-编程只是手段,不是目的,程序最终为人类服务
方法1:进度展示
-如果程序需要计算时间,可能产生等待,请增加进度展示
-如果程序有若干步骤,需要提示用户,请增加进度展示
-如果程序可能存在 大量次数循环,请增加进度展示
方法2:异常处理
-当获得用户输入,对合规性需要检查,需要异常处理
-当读写文件时,对结果进行判断,需要异常处理
-当进行输入输出时,对运算结果进行判断,需要异常处理
其他类方法:
-打印输出:特定位置,输出程序运行的过程信息
-日志文件:对程序异常及用户使用进行定期记录
-帮助信息:给用户多种方式提供帮助信息
……
---------------------------------------------------------------------------------------------------------------------------
=======================================================================
-I:Input 输入,程序的输入
-P:Process 处理,程序的主要逻辑
-O:Output 输出,程序的输出
首先确定IPO,明确计算功能和功能边界;然后编写程序,将计算求解的设计变成现实;最后调试程序,确保程序按照正确逻辑能够正确运行。
模块化设计
-通过函数封装或对象封装程序划分为模块间的表达
-具体包括:主程序,子程序和子程序间关系
-分而治之:一种分而治之、分层抽象、体系化的设计思想
-紧耦合:两个部分之间交流很多,无法独立存在
-松耦合:两个部分之间交流较少,可以独立存在
-模块内部紧耦合,模块之间松耦合
配置化设计
-引擎+配置:程序执行 和 配置分离,将可选参数配置化
-将程序开发变成配置文件编写,扩展功能 而不修改程序
-关键在于接口设计,清晰明了、灵活性可靠
从应用需求到软件产品
-产品定义:对应用需求充分理解和明确定义
产品定义,而不仅是功能定义,要考虑商业模式
-系统架构:以系统方式思考产品的技术实现
系统架构,关注数据流,模块化、体系结构
-设计与实现:结合架构完成关键设计及系统实现
结合可扩展性、灵活性等进行设计优化
-用户体验:从用户角度思考应用效果
用户至上,体验优先,以用户为中心