免费下载!由 O’Reilly 出版的《NGINX 完全指南》中文版已正式上线 了解详情
写点什么

软件设计真的有回报吗?

  • 2007-07-31
  • 本文字数:1118 字

    阅读完需:约 4 分钟

许多开发者都曾遇过被要求减少设计的环节并“尽快把东西做出来”。Martin Fowler对这种做法表示质疑,并认为对于大多数项目来说,以设计质量为代价换取开发速度是不现实的。Martin 说道:

设计活动的确要花费时间和精力,但这是有回报的,因为设计使得将来程序的发展更为畅顺。忽略设计能使你在短期内节省时间,但这笔技术负债越积越多,最终会逐渐降低你的生产效率。为软件设计投注精力可以让你的项目更具生命力,让你的项目可以走得更快更长久。

这里所说的设计活动包括各种风格,从经典的预先设计(Up-Front Design)到自然出现设计(Emergent Design),都是在敏捷项目中常见的。

人们对好的设计的影响程度意见不一,而 Martin 更多次听到一种相当极端看法:

确实有数次让我印象深刻的看法是,即使降低开发速度,也要使设计上的成果让程序员们保持心情愉快。

牺牲设计上的投入来或换取开发速度在大多数项目中都行不通,这是因为系统很快就变得难以下手,在设计上节省的时间很快就由于生产效率的降低而得不偿失。

在削减任何设计投入之前,如果我们能找到正在开发的系统的设计投入和回报的边际曲线,当然结果会最好,但我们只能依靠经验和直觉来做到这一点,因为我们没办法测量软件开发的生产效率。

然而,在特定条件下,估算设计回报的边际需要经验,正如 Antti Tarvainen 所指出的,缺乏经验不光让软件开发的新手难以作出直觉判断——也使经理难以评估设计投入的经济价值

我们的软件开发新手无法直觉判断设计的价值,因为他的概念模型还不够丰富……问题是,他不知道与没有设计直接去编写软件功能相比,设计到底有多大的价值。对设计的低估导致糟糕的代码质量,并陷入编码——修补错误的循环。高估设计的价值导致项目瘫痪在分析阶段(对于大型的预先设计)或者降低迭代速率(对于敏捷方法)。

Dennis E. Hamilton (又名 Orchid)将设计成熟前就武断结束设计环节归因于几个常见错误

这解释了新手常犯的疏失:好高骛远。我已经揪住了猪尾巴,下一步该怎么做红烧肉?如果一开始能预见到结局,我就不会搞砸了,但谁说我一定会搞砸呢,对不对?让我在没有设计的野地里撒撒野,反正在这里我也没有起到什么作用。除了 Fowler 说的安全降落区域,肯定会有什么看不见的东西接住我,摔不死的。

这也解释了常见的管理疏失:没有深思熟虑就将泰山压顶的技术负债丢到一边,也从不想法去补救。管理层也许应该比软件工人们更加理解软件生命周期和风险管理,虽然他们没有技能(当然也不会蠢到)自己去完成这些工作。

Fowler 的文章以他对设计回报的边际所在的看法作结:

我认为它比大多数人想象的要低:通常是数周而非数月。但这仍然只是我的直觉判断。

如果这个观点是正确的,那么几乎所有软件系统都会为设计上的妥协付出代价。

2007-07-31 09:00578
用户头像

发布了 225 篇内容, 共 57.5 次阅读, 收获喜欢 45 次。

关注

评论

发布
暂无评论
发现更多内容

遇到或问过的一些Spring面试题(持续更新)

Lazy

Java spring

可视化开发主流开源流程引擎与设计器研究对比

全象云低代码

低代码 流程 低代码开发 低代码平台 可视化软件

当游戏爱上MongoDB–参会赢Kindle!

MongoDB中文社区

mongodb

IAST 在去哪儿 Q-SDL 体系中的应用

火线安全

信息安全 DevSecOps IAST

Dubbo框架学习笔记九

风翱

dubbo 12月日更

深入解析Apache Pulsar系列: Broker消息确认的管理

博文视点Broadview

全链路在线生产数据库压测利器:Apache ShardingSphere 影子库特性升级

SphereEx

开源 技术分享 ShardingSphere SphereEx 影子库

叮咚买菜自建MongoDB上云实践

MongoDB中文社区

mongodb

作业三

施正威

公安重点人员动态预警管控系统建设,警务情指一体可视化决策系统

电微13828808271

黑客实验环境的搭建与使用

喀拉峻

黑客 网络安全 环境配置 网络攻防 环境搭建

面对复杂微服务系统观测时,如何化繁为简?

尔达Erda

云计算 程序员 云原生 程序员微服务

如何使用pFuzz以多种方法验证Web应用程序防火墙的安全性

H

网络安全 防火墙 信息安全

什么是立体车库?立体车库企业如何管理业务流程?

优秀

低代码 业务流程管理 立体车库

教你用Camtasia简单几步制作精美片头

淋雨

Camtasia

行云管家V6.5正式发布:喜大普奔,主机临时授权功能上线啦!

行云管家

云计算 云资源 云管理

重启iptables为啥内核参数不对了?

BUG侦探

Linux iptables

为什么孩子会有拖延症?

Tiger

28天写作

【MongoDB学习笔记】-使用 MongoDB 进行 CRUD 操作(下)

恒生LIGHT云社区

数据库 mongodb

百度王海峰:深耕自然语言处理近30年,推进AI融合创新

百度大脑

人工智能

公安大数据合成作战平台建设,合成作战指挥中心平台开发

电微13828808271

【等保小知识】等保一级二级三级哪个要求更高?

行云管家

网络安全 等保 等级保护 等保20

软件设计真的有回报吗?_架构_Niclas Nilsson_InfoQ精选文章