1.程序=算法+结构+方法
编程的第一要务是先把事情分析清楚,把事件先后的逻辑关系和依赖关系搞清楚,然后再去写代码实现。代码是不存在的,存在的只是思想。
编程退到数据结构更合理。
算法是对一个程序的逻辑实现的描述,而结构是逻辑实现所依附的数据实体。
所有算法的描述中,有且仅有顺序、分支、循环这三种执行逻辑。
编程语言只有喜欢不喜欢的问题,没有会不会的问题。语言的差别主要表现在适用范围上。
方法:面向过程是对“流程”、“结构”和“编程方法”的高度概括;
而面向对象本身只解决了“结构”和“编程方法”的问题,并没有对“流程”加以改造。面向对象的数据结构是树。
2.学了长时间的编程,却不会写程序,主要是因为没有把所学的知识分类、归纳,整整齐齐地放在脑子里。
3.项目编程经验:总体结构->面向对象,关系->数据结构,实现->算法
4.软件工程的瀑布模型
瀑布模型将软件开发的过程分成需求、分析、设计、开发和测试五个主要阶段。
6.过程
过程伴生工程而出现。过程解决的是工程中角色间的关系问题。
过程说的是很多人(团队)如何组织在一起进行开发的问题。它首先把工程中的环节分解出来。这样,有了环节,就有了角色;有了角色,就有了沟通。
过程中的问题,就是角色、环节和沟通的问题。
哪些环节重要,取决于具体的编程行为,也就是具体的项目。
8.软件开发的本质需求是:实现。
实现方法总是最先出现的,而后才有分析和设计方法。
9.Scott的“成为敏捷软件开发人员”三个关键见解:(都是围绕“如何解决问题”而提出的“敏捷方法”)
“你不必非要做一个超人”---强调沟通:找别人解决问题比自己解决问题来的迅速
“敏捷性只是一个思维集”---敏捷的根源:学会思维而不是立即着手解决问题
“成为一名博学型的专家”---“知道更多”则更容易找到解决问题的方法,因而比“精通”重要
10.分治
“分类法”也是思维方法的问题。从思维法的角度来看,广义工程考虑的是对工程问题的“统治”,而具体工程则考虑的是“分治”。
所谓分治,关键在于隔离问题域:
找到造成混乱的问题之间的关系,以及分类出无关的问题;
把问题放到界面上去讨论,而不是放在里面去讨论。
在一个项目中:
把问题分解在EHM图的不同层中,用不同的角色去解决;
将“域”间关联密切的问题,放在关注点界面上,由相关的角色去解决。
编程的第一要务是先把事情分析清楚,把事件先后的逻辑关系和依赖关系搞清楚,然后再去写代码实现。代码是不存在的,存在的只是思想。
编程退到数据结构更合理。
算法是对一个程序的逻辑实现的描述,而结构是逻辑实现所依附的数据实体。
所有算法的描述中,有且仅有顺序、分支、循环这三种执行逻辑。
编程语言只有喜欢不喜欢的问题,没有会不会的问题。语言的差别主要表现在适用范围上。
方法:面向过程是对“流程”、“结构”和“编程方法”的高度概括;
而面向对象本身只解决了“结构”和“编程方法”的问题,并没有对“流程”加以改造。面向对象的数据结构是树。
2.学了长时间的编程,却不会写程序,主要是因为没有把所学的知识分类、归纳,整整齐齐地放在脑子里。
3.项目编程经验:总体结构->面向对象,关系->数据结构,实现->算法
4.软件工程的瀑布模型
瀑布模型将软件开发的过程分成需求、分析、设计、开发和测试五个主要阶段。
5.软件工程层状模型(EHM)
6.过程
过程伴生工程而出现。过程解决的是工程中角色间的关系问题。
过程说的是很多人(团队)如何组织在一起进行开发的问题。它首先把工程中的环节分解出来。这样,有了环节,就有了角色;有了角色,就有了沟通。
过程中的问题,就是角色、环节和沟通的问题。
哪些环节重要,取决于具体的编程行为,也就是具体的项目。
7.软件工程体系层次
8.软件开发的本质需求是:实现。
实现方法总是最先出现的,而后才有分析和设计方法。
9.Scott的“成为敏捷软件开发人员”三个关键见解:(都是围绕“如何解决问题”而提出的“敏捷方法”)
“你不必非要做一个超人”---强调沟通:找别人解决问题比自己解决问题来的迅速
“敏捷性只是一个思维集”---敏捷的根源:学会思维而不是立即着手解决问题
“成为一名博学型的专家”---“知道更多”则更容易找到解决问题的方法,因而比“精通”重要
10.分治
“分类法”也是思维方法的问题。从思维法的角度来看,广义工程考虑的是对工程问题的“统治”,而具体工程则考虑的是“分治”。
所谓分治,关键在于隔离问题域:
找到造成混乱的问题之间的关系,以及分类出无关的问题;
把问题放到界面上去讨论,而不是放在里面去讨论。
在一个项目中:
把问题分解在EHM图的不同层中,用不同的角色去解决;
将“域”间关联密切的问题,放在关注点界面上,由相关的角色去解决。