一、对于模块划分的理解

  对于一个大型(这里还只是一个中型系统)系统来说,代码的编写不是一日而就的,层次的明细也不是一眼就能看清楚的。

  在这种情况下,需要想好,最好是由上而下地想好。

  能够模块式地划分最好,这样在开发时,也能够很好地进行任务分配(这对于做项目经理比较有用)。还有一个好处,进行功能隔离,这样可以单独进行测试,把某一个模块做得很细。

  操作系统的编写,也是各个模块进行划分,虽然各个模块间的关联特别严重,但是通过中间层,通过接口,最终依然能够实现模块编写。

  为什么?我有一个公式:

系统 = 算法的组合
模块 = 算法

为什么得出上面的公式呢?

算法的特征:
1. 为解决某一特定问题而设计;
2. 输入数据较为单一;
3. 操作模式较为单一。

模块的特征是什么?

模块的特征:
1. 为解决某一特定问题而设计;
2. 输入数据较为单一;
3. 操作模式较为单一。

所以,设计系统就想好各个模块如何进行组合。

设计系统 = 理清+设计 各个模块的组合调用关系

设计模块的思路就是要完成某一特定功能而做的工作

模块设计:
1. 明确特定问题的逻辑;
2.设计输入接口;
3.设计输出接口;
4.设计内部算法逻辑。

写代码,不是写伪代码,伪代码是没有上下文的,可是写代码需要考虑上下文之间的关系。

做一个系统的几个步骤:

    1. 理清并设计 各个模块之间的组合和调用关系。
2. 第二步其实不是编码,因为第一部还是伪代码,不过伪代码的粒度是各个模块。
紧接着第一步的是继续技术选型,选择代码的运行环境(linux,windows,mac),模块之间的调用组合,是通过spring这样的中间层框架,配置文件,还是操作系统服务,或者通过网络rpc进行调用。
并且每一个模块应该用什么成型的技术组件来做,还是自己从零开始设计算法。都是需要在这一步进行考虑的。 并且在这一步,就是把系统架构好。
如何进行架构,就是特定的操作系统,特定的IDE,利用特定的编程语言把这些模块给创建好。

写到这里,我在想变量是用来干什么的,

在大型系统中,从较高的维度(对!我说的就是进行升维),

变量的作用永远只有两个:
一、存储;
二、传递。 模块之间相互调用的数据,虽然数据结构复杂,数据量庞大。
但是如果抽象成变量,也是一样的道理,就是这两个功能,从来没变过。

问题又来了,对于设计软件系统,我还是觉得有点乱,该怎么做呢?

我想起了维特根斯坦的一句话,关于语言的,

 人与人之间之所以不能相互理解,其实是由于语言的差异。而一个人所说的语言,反映了这个人的大脑里装的内容。

回到软件设计上来,就是(这是我自己的话),

 我们能不能设计出一个软件,其实就是我们能不能充分理解我们的问题,充分了解它的需求。当我们和问题,合而为一体的时候,我们便可以和问题进行沟通。虽然问题是死的,人是活的。但是,我们和问题,在精神上已经有了共同的语言。

 模块是我们在较高维度思考用的语言,算法(模块内)是我们在较低维度思考用的语言。

所以,在这里我想到了一个结论,对算法下个定义:

    

算法是一种语言
一种解决特定问题的,领域特定语言。 当我们无法设计良好的算法时,
其实是由于我们还没有对问题有良好的理解。 当我们能够描述问题的解决步骤时,
我们可以开始编码了,编代码的逻辑基础就是问题步骤可描述。 当我们充分理解问题的本质时,
我们就可以用“更精妙的算法,甚至于数学公式”来解决问题。 算法不是万能的
算法就是为了解决特定问题而存在,这就是算法的宿命。

所以,通过我这么一扯淡,《算法导论》上的精妙绝伦的算法到底什么呢?

就是在充分理解某一问题之后,的一种新的描述语言。
对,算法不高深,算法只是一种描述方式。
算法是一种新的语言。
了解问题,思考问题。
和问题进行对话,我们就可以设计自己的算法了。

哦,原来我是在讲算法。

我真的懂了吗,现在的我,就是用这种眼光来看世界的。

什么是系统,什么是算法 -- lemon OA 系统学习总结的更多相关文章

  1. lemon OA 下阶段工作安排

    lemon OA 下阶段工作安排 经验总结 lemon OA系统作为一个中型的java web系统,在架构上还是有着很好地可学习的地方.但是由于经验不足,过程比较迂回.如果真的有经验的话,应该可以做到 ...

  2. OA系统配置文件

    第一章 web.xml配置文件解读 1. web.xml文件解读 lemon OA系统的核心配置文件都放在spring目录下的具有applicationContext的前缀文件.Classpath后有 ...

  3. Lemon OA第3篇:核心功能

    对Lemon OA系统的核心功能进行梳理,分别介绍说明如下文. Portal页面 还是从用户主页开始说起: OA核心的功能就是流程,启动流程,办理流程,查看历史,3个常用功能都罗列在用户主页上,方便用 ...

  4. OA系统是什么,为什么要用OA系统呢?

    OA系统即是办公自动化(OA),是面向组织的日常运作和管理,员工及管理者使用频率最高的应用系统,自1985年国 内召开第一次办公自动化规划会议以来,OA系统在应用内容的深度与广度.IT技术运用等方面都 ...

  5. 资深CIO介绍如何选型OA系统的?

    OA办公系统成为企业管理的标配软件,在于可有效加强组织管理能力,提高员工协同效率,助力企业科学决策,合理分配企业资源,提升企业综合实力与市场竞争力.企业OA选型的经验总结来说也就是品牌.技术.产品.服 ...

  6. Lemon OA第4篇:常用功能

    OA,Office Automation的简写,中文意思办公自动化,不同的人有不同的见解,可以简单的理解为网络化办公,高效.协同是其显著的特点,如今正在朝着智能的方向发展 平时不擅长文字,写出来几句话 ...

  7. Lemon OA第2篇:功能解析方法

    Lemon OA,整个系统功能也算是比较丰富,OA的很多功能都能看见影子,虽然做得不是很强大 接触Lemon OA,起源于Activiti的学习热情,既然这样,研究Lemon OA的目标有3: 1.L ...

  8. Lemon OA第1篇:简单介绍

    官方网站:http://www.mossle.com/ 声明:我不是Lemon OA作者,只是分享好的资源.以下内容均代表个人见解~ 从官网说起 知道Lemon OA,也是最近研究Activiti,看 ...

  9. 整合了一个功能强大完善的OA系统源码,php全开源 界面漂亮美观

    整合了一个功能强大完善的OA系统源码,php全开源界面漂亮美观.需要的同学联系Q:930948049

随机推荐

  1. mysql锁表和解锁语句分享

    对于MySQL来说,有三种锁的级别:页级.表级.行级   页级的典型代表引擎为BDB.  表级的典型代表引擎为MyISAM,MEMORY以及很久以前的ISAM.  行级的典型代表引擎为INNODB.  ...

  2. css:nth-of-type()选择器用法

    今天做一个页面,无意中看到这个nth-of-type感觉挺方便的,之前单双行有的有横线,有的无横线一般在html中单独再写border-right:none等之类的.现在发现这个好东西赶紧记录下来. ...

  3. CSS常见问题及兼容性

    CSS常见问题 1 (IE6,7)H5标签兼容 解决方法1:(只显示核心代码) 1<script>  ; ; ;                    ;;;};;;;;;;;       ...

  4. IE浏览器div错乱问题

    这个问题属于各浏览器的兼容问题,有时候在其他浏览器中,html页面布局都是正常显示,唯独IE浏览器的div块布局错乱了,可能是html文件上面的报头标准出现错误. 就是一段报头,告诉浏览器,你的文档以 ...

  5. .net单元测试——常用测试方式(异常模拟、返回值测试、参数测试、数据库访问代码测试)

    最近在看.net单元测试艺术,我也喜欢单元测试,今天介绍一下如何测试异常.如何测试返回值.如何测试模拟对象的参数传递.如何测试数据库访问代码.单元测试框架使用的是NUnit,模拟框架使用的是:Rhin ...

  6. Nodejs异步流程控制Async

    http://www.cnblogs.com/huair_12/p/4117351.html 很好的总结 关联下 以便以后学习使用

  7. python中的“引用”和C++的引用

    python并不刻意区分“按值传递”和“按引用传递”. 在底层,python将值分为不可变对象(比如int,str)和可变对象(比如列表).所有的变量都是对某个对象的引用,赋值(=)和函数参数传递,都 ...

  8. 将requirejs进行到底(一)

    随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式,我们需要团队协作.模块复用.单元测试等等一系列复杂的需求 ...

  9. jquery text--val--html

    .html()用为读取和修改元素的HTML标签    对应js中的innerHTML .html()是用来读取元素的HTML内容(包括其Html标签),.html()方法使用在多个元素上时,只读取第一 ...

  10. jQuery实现的分页功能,包括ajax请求,后台数据,有完整demo

    一:需求分析 1)需要首页,末页功能 2)有点击查看上一页,下一页功能 3)页码到当前可视页码最后一页刷新页面 二:功能实现思路 也是分为三部分处理 1)点击首页,末页直接显示第一页或者最后一页内容, ...