谈谈软件工程设计的艺术

如果生活的方式与你背道而驰,
如果正确的行为被你视而不见,
毁灭就会降临,难得保全。
马基雅维利, 约1514年

作为最重要的事情之一,如果不是唯一最重要的,一个系统的核心性质是它必须在
其生命周期内保持一种 稳定的 结构。
艾瓦耳。雅可布森

以上的两段话,一是引自一位文艺复兴时期的实用主义政治学家,另一是引自一位
当代设计大师。这两段话很好的反映了软件设计工程所面临的困境,两个相反方向
的作用力,就象阴阳相生相克:一方面,软件设计需要尽一切可能减少开发时间,
使软件尽快面市,同时也对市场的和客户需求的变化作出 迅速的反应;而另一方面,
我们又必须花费足够的时间以保证软件的设计有一个好的架构,这样我们可以降低
软件的维护费用,而且软件可以有较长的生命期。

软件设计过分强调任何一个方面都会造成软件工程投资的极大浪费甚至失败。过分
强调软件开发的速度,而忽视软件架构的设计是那些对软件开发工程缺乏经验者最
容易犯的错误。糟糕的软件架构设计会导致所谓的1.0版现象,即软件只能开发到第
一版。后续开发往往因为修改原有代码过於困难而夭折。因为设计者缺乏长远的目
光和足够的项目开发经验而导致过於急躁的作出架构上的决策,因而导致软件结构
的支离破碎是很可悲的,往往很多好的软件设计创意就这样胎死腹中。

另一个极端同样会导致灾难,因为如果过於强调软件结构的优雅和可扩展性,导致
过多的开发时间放在软件架构设计上,结果使 软件的开发时间过长,等到软件推向
市场的时候,虽然设计上是完美的,但是竞争对手却早已占据了市场。软件设计的
完美主义者容易犯这样的错误。这种人通常是设计方面的
行家里手,而且对软件结构的完美有着不懈的追求。但是正是过於追求完美才是工
程开发方面的大忌。不是每一个软件的设计都有时间和精力(同时也是财力)做到象
STL那样的完美设计。

通常一个好的软件设计会努力在这两个互斥的极端之间达到一种平衡。就象儒家讲
的中庸。这两个极端之间的张力是随着软件开发的领域,环境,条件,时间,客户
的要求,竞争对手现有的水平,等等变化而变化的。就象水形之常变。但是若能领
会其中的道,能够把握其中的艺术,就能够象庖丁解牛一样“以无厚而入有间”,
游刃而有余了。但是关键在於经验的积累和对平衡的领悟。经验可以很大一部分从
前人那里得来,但是对道的把握却是另一度的思维空间了。 所以说软件工程既是科
学又是艺术。但是值得注意的是,这绝对不应当成为忽视软件工程规范的借口,就
象杨振宁可以谈论科学研究的艺术并不表示柯云路之流的所谓“生命科学”就不是
纯粹的胡扯。

设计一个容易维护并且有很强生命力的软件不是一件很容易的事;设计一个能够很
快实现的软件也不是小菜一碟。平衡这两者来给出一个可行的,健壮的设计,使软
件能够在市场上获得成功并生存下去是一件需要奇迹般力量的事业, 然而我们却必
须在普通的工作中用我们的创造力去完成这个奇迹。

谈谈软件工程设计的艺术相关推荐

  1. 软件调试的艺术笔记:GDB

    很久之前,在https://blog.csdn.net/fengbingchun/article/details/41413381中简单整理过gdb中常用的一些命令,不齐全,这里按照<软件调试的 ...

  2. 中英互译软件工程设计

    中英互译软件工程设计 引言部分 1.1 目的 该文档的目的是描述中英互译软件工程系统的概要设计,主要内容包括系统功能简介.系统结构设计.系统接口设计.模块设计和界面设计等. 本文档预期的读者包括设计人 ...

  3. JSP 酒店管理系统 软件工程设计 网络编程 myeclipse 编辑 mysql数据库

    一.源码特点     JSP 酒店管理系统 是一套完善的WEB设计系统,对理解JSP java 网页编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发. 应用技术:java| ...

  4. 软件工程通信录管理系统c语言,软件工程设计管理系统附源码.doc

    软件工程设计管理系统附源码 学 年 设 计 课程名称: 软件工程学年设计 实验项目: 通讯录管理系统 姓 名: XXX 专 业: 计算机科学与技术 班 级: XXX班 学 号: XXX 指导教师 XX ...

  5. 了解编程的心理 谈谈软件项目管理的重要性 (转)

    关键词: 了解编程的心理    谈谈软件项目管理的重要性    (转) 了解编程的心理 原著:Bryan Dollery 编译:Jenny Chen 原文出处:Understanding the Ps ...

  6. t04d1清零_4 . 8051 单片机定时器 T0 的溢出标志 TF0 ,在 CPU 响应中断后由 清零 。(硬件 / 软件)_艺术设计概论答案_学小易找答案...

    [单选题]软件工程方法的提出起源于软件危机 , 而其目的应该是最终解决软件的 ( ) 问题.(5.0分) [简答题]When you know programming, what is the nee ...

  7. zen显微镜软件下载_Zen与协作软件开发的艺术

    zen显微镜软件下载 康韦定律表明,设计受组织沟通结构的限制. 我已经看到法律一遍又一遍地表现出来,并且我断言除非存在适当的协作动力,否则不可能开发具有凝聚力的软件平台. 具体来说,要开发一个可以满足 ...

  8. 谈谈软件的开发及成长历程

    每个人身上,都有着独一无二的经历,也有着不一样的成长历程.回顾一下,从大学时期参加校网络中心从事开发工作,到目前在社会上的风雨兼程,也走过十多年的开发路程了,黄金岁月,青春年华,都在这期间度过. 养成 ...

  9. 动与静--软件的雕塑艺术

    "蝉鸣林愈静,鸟鸣山更幽",这是中国古代纯山水诗的绝句,在动与静的映衬下别具一番优美.在软件的领域,其实也存在这种动与静的境界.如果软件设计得当,也可以使软件的设计具有雕塑一般的美 ...

最新文章

  1. 信息系统项目管理师-组织级、流程管理核心知识点思维脑图
  2. python egg文件安装_Python 和 egg 文件
  3. 游走于天才与疯子边缘的创业“鬼才”
  4. Linux学习笔记十三——文件压缩、解压缩和归档
  5. 最长公共子序列LCS(动态规划)—详解
  6. python 仪表盘实现_Python实现数据可视化看如何监控你的爬虫状态【推荐】
  7. AudioSwitcher for mac(音频控制工具)v3.08 版本支持M1芯片
  8. audio realtek 耳机没声_解决Realtek High Definition Audio 声卡前面板耳机无声音方法
  9. deviceOrientation简介
  10. 手机端选择收货地址html写法,jQuery仿手机京东商城收货地址城市选择代码
  11. Android中夜间模式的三种实现方式
  12. Redis数据库 专题
  13. JZ38 字符串的排列
  14. 使用openssl转换pem为pfx证书
  15. 七彩虹平板刷成android,大功告成 七彩虹G808首个MIUI ROM移植
  16. 就离谱!使用机器学习预测2022世界杯:小组赛挺准,但冠亚季军都错了 ⛵
  17. Flink之Trigger
  18. Sylvester结式法求解多项式方程
  19. 1、AI系统简介及AI系统的分类
  20. 记录 Windows 下编译一个开源 SM9 签名验签 C 程序的过程

热门文章

  1. 2021农村电商发展趋势报告
  2. 2021年中国自有品牌行业发展白皮书
  3. 2020年快手短视频直播电商营销增长宝典
  4. 黑马程序员python笔记_三年Python程序员平时学习笔记总结,对于学习Python非常有帮助...
  5. 基于新型存储的大数据存储管理
  6. BDTC 2017 | 中国大数据技术大会全日程和演讲者曝光
  7. 【Java】集合框架基础编程练习题
  8. 【Java】基本语法训练题
  9. 【Java】不正当使用break语句的危害
  10. 神经网络快速搭建之一站式访问