Use Uncertainty As a Driver
来源:互联网 发布:淘宝要食品流通许可证 编辑:程序博客网 时间:2024/06/08 17:50

Use Uncertainty As a Driver
Kevlin Henney
ConFRonTEd WiTH TWo opTionS, most people think that the most impor- tant thing to do is to make a choice between them. In design (software or otherwise), it is not. The presence of two options is an indicator that you need to consider uncertainty in the design. Use the uncertainty as a driver to deter- mine where you can defer commitment to details and where you can partition and abstract to reduce the significance of design decisions. If you hardwire the first thing that comes to mind, you’re more likely to be stuck with it, so that incidental decisions become significant and the softness of the software is reduced.
One of the simplest and most constructive definitions of architecture comes from Grady Booch: “All architecture is design but not all design is architecture. Architecture represents the significant design decisions that shape a system, where significant is measured by cost of change.” What follows from this is that an effective architecture is one that generally reduces the significance of design decisions. An ineffective architecture will amplify significance.
When a design decision can reasonably go one of two ways, an architect needs to take a step back. Instead of trying to decide between options A and B, the question becomes “How do I design so that the choice between A and B is less significant?” The most interesting thing is not actually the choice between A and B, but the fact that there is a choice between A and B (and that the appro- priate choice is not necessarily obvious or stable).
48 97 Things Every Software Architect Should Know

An architect may need to go in circles before becoming dizzy and recogniz- ing the dichotomy. Standing at a whiteboard (energetically) debating options with a colleague? Umming and ahhing in front of some code, deadlocked over whether to try one implementation or another? When a new requirement or a clarification of a requirement has cast doubt on the wisdom of a current implementation, that’s uncertainty. Respond by figuring out what separation or encapsulation would isolate that decision from the code that ultimately depends on it. Without this sensibility the alternative response is often ram- bling code that, like a nervous interviewee, babbles away trying to compensate for uncertainty with a multitude of speculative and general options. Or, where a response is made with arbitrary but unjustified confidence, a wrong turn is taken at speed and without looking back.
There is often pressure to make a decision for the decision’s sake. This is where options thinking can help. Where there is uncertainty over different paths a system’s development might take, make the decision not to make a decision. Defer the actual decision until a decision can be made more responsibly, based on actual knowledge, but not so late that it is not possible to take advantage of that knowledge.
Architecture and process are interwoven, which is a key reason that archi- tects should favor development lifecycles and architectural approaches that are empirical and elicit feedback, using uncertainty constructively to divide up both the system and the schedule.
- Use Uncertainty As a Driver
- [文献阅读]dropout as a bayesian approximation: representing model uncertainty in deep learning
- [文献阅读]dropout as a bayesian approximation: representing model uncertainty in deep learning
- Use __doPostBack() As A Bridge
- Use __doPostBack() As A Bridge
- Use __doPostBack() As A Bridge
- Use __doPostBack() As A Bridge
- make your driver as a deb package
- 【翻译】Use a bitmap as a background image
- Use IE userdata behavior as a client-side data storage
- Use the physical standby database as a test environment
- SVN提交问题 You must use a JIRA no. as
- use PostgreSQL async Notification as a chat group
- Use Avahi as a library for Discovering mDNS Service
- Use the Raspberry Pi as a DIY Surveillance camera
- PHP警告Cannot use a scalar value as an array
- Cannot use a scalar value as an array?
- 从is和as想到Is-A、Has-A和Use-A(二)
- python log 日志记录
- 小贝_redis高级应用-发布与订阅
- Database As a Fortress
- 你学会测试了吗(3):测试语法之断言介绍
- 你学会测试了吗(2):测试语法之属性介绍
- Use Uncertainty As a Driver
- 你学会测试了吗(1):推荐工具
- 归并排序MergeSort
- IE8下console undefined
- Linux的特殊文件权限
- NYOJ 36 最长公共子序列 (动态规划)
- 给定4个点判断是否能构成正方形
- 触发easyui combobox 中 onchange 事件
- Linux下 和 Windows 下 Oracle Instant Client 的安装.