【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

AgileChina2009 演讲人、极限编程创始人 Kent Beck 谈“设计困境”

  • 2009-08-27
  • 本文字数:1271 字

    阅读完需:约 4 分钟

软件设计需要解决一系列相互矛盾的需求,这也是为什么会有很多人拥有不同的设计思路,而这些思路在某些场景下又都好用的原因。没有什么能让这些矛盾 消失,设计风格的好坏依赖于如何化解矛盾,哪些约束在早期满足,哪些放到后期处理。想要让设计考虑周全,第一步就得先承认世上不存在完美的设计。

约束

下面这些约束是无法去除的:

  • 成本。设计应尽可能降低开发成本,包括短期成本和长期成本。
  • 先于实现。因为设计良好的特性会比设计低劣的特性成本低得多,所以应该在实现之前就完成设计。
  • 变更成本。更改设计决策的代价很高,如果只设计一次而且不再修改,就可以降低成本。
  • 收益。设计应该让收益最大化。如果能够在恰当的时机交付恰当的特性,完成既定的销售,那么从长期来看代价很高的设计,也能够创造更高的价值─尤其是当产品还处于起步阶段的时候。
  • 时间价值。成本和收益不应该在产品的生命周期内一直简单的增加。今天的一美元要比明天的一美元值钱,所以设计应该把成本推到将来,把收益放到现在。
  • 选择价值。因为软件本身存在不确定性,所以如果设计能够保证以后的开发工作有选择的余地,那么它就比那些刻板的设计更有价值。
  • 不确定的需求。你不可能事先知道设计需要支持哪些特性。正因为如此,你应该推迟设计决策,直到必需的时候再做。
  • 设计改进。你会在工作的同时,学到如何做出更好的设计。要准备好随时把你学到的东西结合进来。
  • 循序渐进方能成功。所以设计也要不断进化。
  • 不存在绝对正确的答案。对于任何一个特定的问题,都有若干组可行的设计,以及几乎无数种糟糕的设计。但即便是糟糕的设计也不是错到极点,至少短时间内还能用。

把这些约束放到一起,就组成了一个约束过多的系统。你根本找不到解决方案,举个例子来看,你可能即想尽可能减少成本,又想降低变更成本,还想在过程中学习。

在不同情况下,这些约束的强度也不同。有时候,产品的特性范围可能是非常模糊的。在为人熟知的领域中,团队基本上不会发现新的设计要素。相对于成熟 产品而言,还处于初期阶段的产品,其时间价值就尤为突出。成熟产品的长期成本对利润起着决定性作用。没有任何一组设计规则能够满足所有情况。有些价值和原 则比较通用,但是具体到实践就会迥异。

我现在提倡并实施的是响应式设计。我认为比较重要的是“不确定的需求、时间价值、选择价值、设计中的学习、循序渐进”。我把“变更成本高”这一点放 到以后去考虑。我努力以我的开发风格工作,在设计变更的时候,通过组合使用技术、社会组织、工具和普通实践来降低变更成本。其结果就是,以某些长期成本为 代价交付成果,当项目中某些不确定性被解决以后,又可以很快降低成本。

没有任何一款设计风格能够同时最小化成本,最大化收益,还能从短期长期来看都保有选择的余地。选择好哪一个约束先满足,哪些推后,就可以得出价值和过程都很明确、易于沟通的设计风格。让一切变得明确,就是讨论设计的开始。

我将会首次针对“响应式设计”作全天的培训,第一次是 9 月 4 号,在首尔;然后是9 月10 号,在北京

查看英文原文: The Design Dilemma

(注:本文原发作者博客,经作者允许后翻译发布,译者──李剑)

2009-08-27 21:482659
用户头像

发布了 197 篇内容, 共 52.5 次阅读, 收获喜欢 20 次。

关注

评论

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

喜马拉雅基于DeepRec构建AI平台实践

阿里云大数据AI技术

人工智能 深度学习 推理 企业号 3 月 PK 榜 稀疏学习

ChatGPT作者John Schulman:我们成功的秘密武器

OneFlow

人工智能 深度学习 ChatGPT

面向新时代,海泰方圆战略升级!“1465”隆重发布!

电子信息发烧客

什么是信创产品?怎么成为信创产品?

行云管家

信创 国产化

bucket表:数仓存算分离中CU与DN解绑的关键

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 3 月 PK 榜

如何通过C#/VB.NET代码在Word中插入或删除脚注

在下毛毛雨

C# .net word 脚注

易观分析:银保监会成为“历史”,金融行业将面临哪些重点影响?

易观分析

金融 经济

defi质押LP流动性挖矿dapp系统开发详情(案例)

开发微hkkf5566

及刻周边惠:拥抱HarmonyOS原子化服务

HarmonyOS开发者

HarmonyOS

云图说丨云数据库GaussDB(for MySQL)事务拆分大揭秘

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 3 月 PK 榜

GitLab 凭借什么连续 3 年上榜 Gartner 应用程序安全测试魔力象限?听听 GitLab 自己的分析

极狐GitLab

DevOps DevSecOps 安全测试 极狐GitLab 安全合规

【物联网开发实战】- 设备上云方案详解——设备接入类

阿里云AIoT

物联网 传感器

排序算法 Quick Sort

控心つcrazy

JavaScript 面试 前端 数据结构算法 算法、

喜讯!阿里云数据库PolarDB荣获第12届PostgreSQL中国技术大会“开源数据库杰出贡献奖”

阿里云数据库开源

开源数据库 polarDB 阿里云数据库 PolarDB-PG PolarDB for PostgreSQL

数据安全特点有哪些?现在企业如何保障数据安全?

行云管家

数据安全 堡垒机 数据泄露

汇率市场大幅波动,用友BIP全球司库助力企业外汇避险

用友BIP

金融 外汇避险

车载小程序发展现状:使用环境、用户体验、应用场景及未来趋势

没有用户名丶

小程序化

如何判断多账号是同一个人?用图技术搞定 ID Mapping

NebulaGraph

图数据库 风险控制 安全控制

中小企业需要统一的快速开发平台吗?

力软低代码开发平台

浪潮 KaiwuDB x 山东重工 | 打造离散制造业 IIoT 标杆解决方案

KaiwuDB

数据库 iiot 制造业

Java面试一个月,心态崩了……

程序知音

Java java面试 Java进阶 后端技术 Java面试八股文

物联网平台提醒欠费该如何查询和处理?——普及类

阿里云AIoT

物联网

IoT平台设备标签功能和规则引擎组合最佳实践——设备接入类

阿里云AIoT

sql 监控 物联网 API 定位技术

瓴羊Quick BI更合适“中国式报表”需求!

巷子

云计算生态该怎么做?阿里云计算巢打了个样

云布道师

云计算 阿里云

设备离线时控制指令如何下发:通过设备影子实现离线设备的控制指令触达方案——设备管理运维类

阿里云AIoT

物联网

DLRover:蚂蚁开源大规模智能分布式训练系统

SOFAStack

人工智能 互联网 DLRover

博睿“她”力量 :这份专业值得信赖

博睿数据

博睿数据 节日祝福

什么是大前端技术?微信小程序用户占比达25%

没有用户名丶

DLRover:蚂蚁开源大规模智能分布式训练系统

AI Infra

互联网 智能 训练智能

解密数仓高可用failover流程

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 3 月 PK 榜

AgileChina2009演讲人、极限编程创始人Kent Beck谈“设计困境”_研发效能_Kent Beck_InfoQ精选文章