问题解决(problem solving)
-
所有问题分为几个状态
- 开始状态
- 目标
- 执行
- 阻碍
-
解决问题是从一个状态到另一个状态最终到达目标
-
练习是能够解决问题的关键。
- 识别相似的问题
- 熟悉不同问题的解决办法
- 建立解决问题时的自信心
-
解决问题的方式,计算法和探索法
- 计算法会按照所写程序执行
- 探索法会尝试多种方式最终达到目标,但有时探索法并不是最优解
问题类型
- 好定义的与不好定义的
- 好定义的指:所有必要的信息都已经提供了
- 好解决的与不好解决的
- 好解决的指:拥有已学的知识可以解决的问题
解决方法
- brute force: 暴力解决,每个选项都尝试一次
- trial&error:尝试单个选项,等效于排除法
- analogy:运用之前的经验解决
- divide&conquer:拆分问题,逐个解决,然后把每个串联起来
- heuristic: 探索
总结:完全理解问题,制定要运用的策略,执行你的策略,检查。
一步一步稳扎稳打的走
编程计划与研发周期
- 分析问题
- 定义问题并去解决问题
- 编写程序
- 测试程序
- 完善必备的资料
- 必要的修订
分析问题
- 定义问题
- 识别出要求的结果,即目标
- 确定产生这些结果,即到达目标,所需要的投入
IPO: input process output
设计程序
- 制定问题的解决方法,有很多的解决办法
- 建立一个细节的程序描述,可以使用一些工具软件
- 识别所需要的计算,这个计算要好定义,好排序,必须要有结果,必须要在有限的时间里终止
编写程序
- 翻译你在工具软件上的描述到代码
- 用详细明确的程序代码,比如python,这个阶段要在有坚实的设计之后开始
文件编制
加入陈述来向读者描述这个代码是在做什么
分外部文件与内部文件,外部文件是给使用者看的,内部文件是给程序员看的
语法
每个编程语言都有他们自己的语法,熟练掌握这些语法
检测程序的正确性
-
定位程序中出错的位置
-
test data
-
经常问自己这几个问题
- 我翻译的数据对吗
- 我写的程序完成了要求吗
- 我的公式和程序正确吗
-
在设计阶段:Desk checking
-
在码字阶段:
- 检查程序能否通过之前设计的test data发现错误
- 软件能否在语法中提醒你错误而不是在程序的逻辑方面
-
最终,检查你的程序
错误类型
- 语法错误
- 违反程序的语言规则
- 标点符号错误,错误语法,单词拼写错误
- 语法错误会导致程序无法运行
- 逻辑错误,run time错误
- 程序运行了,但是没有产生想要的结果,所以逻辑错误会更难检查
- 可能是因为使用了错误的公式导致,也可能是错误的排列顺序
- 逻辑错误程序必须要进行调试
- 能够被程序循环的desk checking phase所检测
完善文件
- 组织所有描述程序的材料
- 做一个程序大纲,要明显的看出主要的任务和次要任务确保完成,以及主要次要之间的关系
- 细节的描述这些每个任务是如何完成的
- 做一个用户向导
程序研发是一个过程
程序研发是一个周期的,循环的过程,经常要求重返上一个步骤,并花费上月时间
设计过程中可能会发现一些分析的缺陷
编码也可能会发现要修改或添加的问题
测试无疑会发现一些需要倒回去解决的问题
软件和程序语言
电脑程序就是软件,是给计算机执行任务的指令
应用软件
-
是一个程序,他会使得电脑在每天的任务中更有用
-
增加产量;解决问题;提供信息;提供接待服务;
比如浏览器和图片编辑器
系统软件
-
一系列程序用于管理,控制,增强电脑的操作
-
和用户沟通
-
管理和与应用沟通,应用程序运行时不能没有运行系统
比如Windows,Linux
机器语言
- 最早被编写进每一台电脑里
- 每个命令只包含1,0
- 计算机语言很烦,看起来也不舒服,二级制的
汇编语言
- 使得写代码更容易
- 机器语言的符号表示
- 使用更短更好记的字
- 因为电脑看不懂汇编语言,所以有个叫assembler的程序用来把汇编语言转换成机器语言
高级语言
包含英语单词,短语和代数表达式
不需要知道CPU如何运作,更容易的学习和编写
受欢迎的高级语言,C++ JAVA python
编译源代码
一个在高级语言中的程序,被称为源代码
因为电脑看不懂源代码,称为编译器的程序,用于翻译源代码给电脑看,被称为目标程序
在目标程序用于电脑上之前,他也经常被用于连接其他支持的库代码
编译器
是一个程序,用于翻译和运行在高级语言中的指令
前端后端
- 汇编语言只翻译,不编制
- 客户端,java-scrip,前端
- 服务器端,后端,PHP,ASP
写代码
要想在高级语言中写代码,需要:
- 合适的软件
- 文本编译器
- debugger,发现问题
- 一个compiler或interpreter,翻译给电脑看
程序逻辑与设计
所有的编程语言都用的最基础的编程逻辑
如果理解逻辑,会帮助你更好的学习其他的特定语言
程序逻辑和设计的目的时着重于流程图和伪代码(flowchart,pseudocode)
设计是好的程序的基础