`
djsl6071
  • 浏览: 579377 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

软件工程设计架构中的思想

阅读更多
转自:http://www.blogjava.net/alwayscy/archive/2007/12/05/165610.html 

今天读到一些UNIX下的编程哲学,对自己相当的有冲击力,把我觉得有用并且有道理的,自己组织了一下:

“编程的核心是数据结构,而不是算法”,即使最简单的程序逻辑人类来验证也很困难,但就算复杂的数据,对人类来说也相对容易推导和建模。五十个节点的指针树要比五十行程序的流程图更清楚。

“编程的本质是控制复杂度”,而流程图、过程化、结构化、面向对象以及其它方法论恰好“成功”将复杂度提升到人脑不能处理的地步。所以,降低整体复杂度的方法是用清晰的接口把若干简单模块组合成一个复杂软件。

“简洁最美”,最错综复杂的美妙设计,常常使我们的设计能力超出排错能力,结果是代价高昂的废品。

“接口和引擎分离”,把复杂的GUI界面与后台处理分做两端,中间用简单协议架桥。

“可见才可掌控”,软件系统的透明性就是说,你能一眼看出它在干什么,要能监视到内部状态。

“撑不下去,马上退出”,出现异常,补救措施明明又没成功,还挺在那里,很久才发现是最坏的一种情况。要么“响亮的倒塌,要么为工作链下一环程序输出一个严谨干净的正确数据”。

“过早的优化是万恶之源”,先要求运行,再求正确,最后再求快。还不知道瓶颈就匆忙优化,是唯一一个比乱加功能更损害设计的错误。“最强大的优化工具是DELETE键”。

“善用工具”,教会电脑生成一些简单的代码;一旦有人解决了某个问题,就直接拿过来用,尽可能一切都自动化。

“宁花机器一分,不花程序员一秒”。

综上所述,4个字母:KISS--Keep It Simple, Stupid!


最后,还是把UNIX哲学的17个原则完整列一下:
1、 模块性原则:写简单的,通过干净的接口可被连接的部件。
2、 清楚原则:清楚要比小聪明好。
3、 合并原则:设计能被其它程序连接的程序。
4、 分离原则:从机制分离从策略,从实现分离出接口。
5、 简单原则:设计要简单;只有当你需要的时候,增加复杂性。
6、 节俭原则:只有当被证实是清晰,其它什么也不做的时候,才写大的程序。
7、 透明原则:为使检查和调试明显更容易而设计。
8、 健壮性原则:健壮性是透明和简单的追随者。
9、 表现原则:把知识整理成资料,于是程序逻辑能变得易理解和精力充沛的。
10、最小意外原则:在接口设计中,总是做最小意外事情。
11、沉默原则:当一个程序令人吃惊什么也不说的时候,他应该就是什么也不说。
12、修补补救:当你必须失败的时候,尽可能快的吵闹地失败。
13、经济原则:程序员的时间是宝贵的;优先机器时间节约它。
14、产生原则:避免手工堆砌;当你可能的时候,编写可以写程序的程序。
15、优化原则:在雕琢之前先有原型;在你优化它之前,先让他可以运行。
16、差异原则:怀疑所有声称的“唯一真理“。
17、可扩展原则:为将来做设计,因为它可能比你认为来的要快。

 

转自:http://www.blogjava.net/alwayscy/archive/2007/12/02/164663.html

设计不在乎一开始就非常完备,并且考虑到所有情况和变化;设计的精髓在于当某种变化来临时,能够重新审视,甚至是调整全部的设计,让它能够兼容之后的“同种类”变化,从而使今后再有这样的变化时,带来最少量改动。为此目的,哪怕是推翻重来也在所不惜。

也即,我们不能将就第一次错误,这样才不会被同样的错误击倒第二次!

我想,这就可以指导我们在项目设计时并非要考虑得面面俱到,有些时候限于经验和能力也考虑不了那么周全,变化是无穷的。以自己的能力尽量有个好的开始,之后,关键是掌握一种应变的能力和决心。

就像自助旅游,第一次去陌生的地方,出门前做好N多功课,可能天气突变,车船晚点,所有计划都会改变,关键是遇变不惊,冷静处理。

瞎扯的,只是觉得之前做项目,总是到处比较各种方案,设计来设计去,耽误了大量时间,最后又会发现还是没想周全,这句话让我豁然开朗,我想是有道理的,共享给大家。  

分享到:
评论

相关推荐

    软件工程设计思想

    这是一本写的用实用的软件开发设计思想文本,对搞软件设架构及软件开者都有很大的帮助

    软件架构设计的思想与模式.pdf

    软件架构设计的思想与模式.pdf 对软件架构设计的思想和模式进行了些阐述,中科院计算所培训教程

    北京中科信软VS.NET设计模式与软件架构设计培训1

    第一天 基于微软 .net框架的解决方案设计概述-从理论到实践 第一天将为大家全面介绍基于微软产品和框架的解决方案...软件构架(Architecture)是软件工程中发展迅速的一个研究实践领域。根据教育部关于紧缺人才报告,

    软件工程思想-经典版

    软件工程思想,讲述软件开发,设计及架构思想

    软件工程课程设计 教学资源网系统分析与设计

    学校教学资源网,运用软件工程的思想和UML建模技术进行面向对象的软件分析和设计。纯文档型有用例图,顺序图,流程图,数据库设计,接口设计,部署图,总体架构设计、活动图,状态图,类图,界面设计。rational rose...

    java设计架构[1].doc

    本文首先考察企业级应用的一般概念和需求,然后简要阐述面向对象程序设计的基本原则,并结合软件工程的思想来讨论多层的J2EE应用架构,分析它们满足企业级应用的方式,,再通过讲述常用的几种Java设计模式和Java反射...

    软件架构设计的思想与模式

    很好的软件工程的书籍,希望能帮助到大家!!!!

    办公自动化论文文档 通过用ASP.NET2.0(C#)来编写系统,主要采用三层架构的B/S模式,利用软件工程的可行性研究、需求分析、概要设计、详细设计等来完成论文。

    办公自动化系统称为OA系统,即Office Automatization System。...通过用ASP.NET2.0(C#)来编写系统,主要采用三层架构的B/S模式,利用软件工程的可行性研究、需求分析、概要设计、详细设计等来完成论文。

    基于微服务架构的基础设施设计_蒋勇.pdf

    本文首先分析传统的单体架构进而解释微服务架构以及分布式环境下四层架构,详细分析了迁移需解决的关键...最后针对微服务架构基础设施在运维管理中的应用场景进行了探讨,说明了微服务架构设计思想优于单体架构设计思想。

    软件工程-08-设计优化.pptx

    软件工程 软件工程-08-设计优化全文共51页,当前为第1页。 2022/6/30 2 第8章 设计优化 高质量的设计,一方面要忠于设计,另一方面要能够尽可能地适应未来的变化,做到以不变应万变。 绝对应万变的设计是不存在的,...

    软件设计精要与模式

    《软件设计精要与模式(第2版)》关注的焦点是软件设计,涵盖了大部分与设计有关的基本要素,包括面向对象思想、设计模式、重构、测试驱动开发、极限编程以及软件体系架构。其中,尤以设计模式为主,深入探讨了软件...

    软件工程知识点

    在基于软件工程的软件开发过程中,编码往往只是一项语言转译工作,即把详细设计中的算法描述语言转译成某种适当的高级程序设计语言或汇编语言。 为了方便程序调试,针对基本模块的单元测试也往往和编码结合在一起...

    【微软讲稿】软件架构设计概述 —— 陈桦

    概述 功能设计 架构视图设计 ...短短64页,介绍了从80年代面向对象,到90年代面向组建,继而目前的面向服务等架构思想、方法、模型。不仅是从历史角度对软件工程的说教,更是实用性非常强的方法论。

    软件工程毕业设计-基于C#的房屋租赁信息管理系统

    从需求分析、应用技术平台、设计架构思想、数据库设计、各个模块的实现等方面描 述了系统的设计原理及实现方案。以软件工程理论和方法为指导进行产品架构设计, 设计开发出具有可修改姓、有效性、可维护性、可重用性...

    UML与Rational Rose 2003软件工程统一建模原理与实践教程Part2 of 2

    全书内容丰富,包括对软件工程思想、面向对象思想、UML相关概念、Rational Rose工具等方面内容的详细介绍,本书最后是一个图书馆借阅系统的研究实例,通过该综合实例,对使用Rational Rose进行UML建模的全程进行了...

    UML与Rational Rose 2003软件工程统一建模原理与实践教程Part1 of 2

    全书内容丰富,包括对软件工程思想、面向对象思想、UML相关概念、Rational Rose工具等方面内容的详细介绍,本书最后是一个图书馆借阅系统的研究实例,通过该综合实例,对使用Rational Rose进行UML建模的全程进行了...

    《软件设计精要与模式》高清带书签

    本书关注的焦点是软件设计,涵盖了大部分与设计有关的基本要素,包括面向对象思想、设计模式、重构、测试驱动开发、极限编程以及软件体系架构。其中,尤以设计模式为主,深入探讨了软件设计过程中的原则与模式,并...

    多层J2EE系统的架构与模式设计

    本文首先考察企业级应用的一般概念和需求,然后简要阐述面向对象程序设计的基本原则,并结合软件工程的思想来讨论多层的J2EE应用架构,分析它们满足企业级应用的方式,,再通过讲述常用的几种Java设计模式和Java反射...

    培养软件工程思想的面向对象程序设计课程改革与实践.pdf

    培养软件工程思想的面向对象程序设计课程改革与实践.pdf

    STM32面向对象_程序架构 整个工程DEMO 我自己常用的

    STM32面向对象_程序架构 整个工程DEMO,我自己常用的;很多初学STM32编程的同学,常常对多任务调度、全局变量处理、编程规范处理的不专业或者很乱,本demo是我自己做STM32项目常用的编程架构,内含面向对象思想,...

Global site tag (gtag.js) - Google Analytics