写点什么

适应性重用——来自土木工程的经验

  • 2010-02-11
  • 本文字数:1411 字

    阅读完需:约 5 分钟

随着敏捷方法逐渐被越来越多的主流人群所接受,不管是新接触者、转化过来的人还是支持者,都会发现敏捷的内在理念其实并无新意,而且在软件工程之外的其它领域也能发现它们。软件工程师常常质疑顺序式的开发过程,而这样的过程又是土木工程项目的核心。“为什么你们不能像修桥那样构建软件?”类似的批评常常施加到软件开发之上。而现实情况是:土木工程项目经常采取的一些方式方法,敏捷人士会从中发现类似之处。

这样的交叉可以在最近的一些文章中看到范例。

Howard Podeswa 在 Modern Analyst 博客中提到了一个建筑项目:

我在和一个朋友吃饭——他是一个非常出色的建筑师和设计师。我们在讨论他当时正着手的一个项目,他在其中负责一个大型商业开发地产项目的设计。这个项目有些东西充满了挑战,同时让他充满惊奇,其中一点是:建筑本身在不断增高的同时,其设计也在不断发展。也就是说,很多不同的活动是同时进行的。人们并没有先经历一个很长的前期设计过程,再去搞建设;实际上人们通过一系列循环周期完成了这个项目的开发。每个周期中,他们会先敲定整个建筑的某个方面或某个区域,然后为了构建成功只做足够的设计,再在工地上完成建筑过程。

接下来,他讨论了建筑师如何在短时间段内应对建筑工程上的挑战,同时还要在有些需求未知的情况下设计建筑物。

要是能够推迟到明天,就不要在今天做出承诺。换句话说,如果你能在不拖延项目的前提下延迟某项决策,那就别急着决策。如果必须要做出决定,那就别犹豫了。 选择对未来影响最小的决策。这样就能将错误决策造成的负面影响最小化。

他提供了一个实用的例子,用以说明上面的做法对于建筑设计师的意义。

下面这个例子说明了第二个原则如何在他的行业中起作用:在不知道某层楼的房屋用途的情况下,设计师需要在其中加入一个螺旋梯,可连房屋各自的大小和布局还不知道呢。因此,设计师在选择螺旋梯的位置时要考虑最大的灵活性,这样以后安排房屋更方便。此时就不能使用中央的螺旋梯了,相对于将其放在一边,这样做给房屋布局留下的余地更小。

适应性重用,这是土木工程的一个原则,而在软件开发的世界中也能引起共鸣。把旧的结构加以调整,使之适用于并非其原本设计目的之场合,这个过程就是适应性重用。在敏捷软件开发的世界中,设计模式的使用、重构,它们都是使用适应性重用的例子。

Rich Maltzman 是 Scope crêpe 博客的作者,他提到:即使在搭建金字塔的过程中,人们也需要适应不断变化的需求,还要掌握项目动力学;他还说到敏捷如何能够用来解决类似问题。

他提到项目经理应该如何自行调整,以及在项目进行到半途而且处于不稳定的状态下展示自己的敏捷性。

这篇博客有个评论,其中包括了一个链接,指向 Damian O’Malley 和 Steven Stark 在 Slideshare 上发布的演示幻灯片——《西斯廷教堂简介》。这个演示说明:一个清晰定义的远景规划产生的产品能够达到并超过客户的需求预期。

米开朗基罗对于教堂的简要远景是: 为了彰显天主的无限荣光,为了激励他的子民,请在我们的天花板上作画。 米开朗基罗根据这个简述画出了西斯廷的壁画,其中展示出了世界的诞生和堕落、人类因罪导致的堕落、神灵之怒引发的大洪水,还有诺亚及其家族的保留。他知道应该做什么,并被该项目的重要意义所激励。有了这样的指示,他就可以全心投入,以自己最好的方式,来尽力实现简述中的种种细节。

软件行业还能从其它行业吸收哪些经验、教训呢?

查看英文原文: Adaptive Reuse - Lessons from civil engineering

2010-02-11 07:331643
用户头像

发布了 479 篇内容, 共 161.0 次阅读, 收获喜欢 51 次。

关注

评论

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

高性能 JavaScriptの五 -- 快响应用户界面

空城机

JavaScript 大前端 5月日更

架构实战营-作业四

大可

Go 并发编程-goroutine 初体验

Rayjun

Go 语言 goroutine

Authorization object在哪些ABAP代码里使用到

汪子熙

CRM SAP abap Netweaver

自我复盘

lenka

5月日更

模块四-千万级学生管理系统试卷存储方案

华仔架构训练营

找出 SAP OData service出错根源的小技巧

汪子熙

SAP Fiori SAP UI5 OData

利用Chrome的Heap Snapshot功能分析一个时间段内的内存占用率

汪子熙

JavaScript chrome

设计千万级学生管理系统的考试试卷存储方案

9527

Shell脚本-简单爬虫

追风的少年

SAP 不同 ABAP 系统里同一 Customizing activity 的显示差异分析

汪子熙

CRM SAP ERP abap 定制化

另一种方式实现事务码SE16里的结果集修改

汪子熙

JavaScript SAP Fiori

到底哪种类型的错误信息会阻止business transaction的保存

汪子熙

CRM SAP abap

MySQL主从网络延迟解决方案

运维研习社

MySQL 运维 主从同步 5月日更

🚄【Redis 干货领域】帮你完全搞定 Cluster 原理(实践篇)

洛神灬殇

redis redis集群 redis cluster 5月日更 redis架构

架构实战营模块4作业

Vic

架构实战营

如何在SAP CRM WebClient UI里创建HANA Live Report

汪子熙

CRM SAP WebClient UI

Go 并发编程 — 深入浅出 sync.Pool ,围观最全的使用姿势,理解最深刻的原理

奇伢云存储

并发编程 云存储 Go 语言

基于Mac的手动搭建WordPress个人站点的方法

三掌柜

5月日更

Inner Join, Left Outer Join和Association的区别

汪子熙

SAP abap ST05

SAP Fiori Launchpad Tile点击后跳转的调试技巧

汪子熙

JavaScript SAP Fiori SAP UI5

开发中Docker常用容器记录

Docker

C4C Cloud Application Studio做ABSL开发的一些性能方面的最佳实践

汪子熙

Cloud CRM SAP C4C

SAP Fiori 应用 Footerbar 区域按钮的高亮显示逻辑

汪子熙

JavaScript SAP Fiori SAP UI5

如何根据日志来了解一个请求经历了什么?

我爱娃哈哈😍

软件架构 架构设计 架构实战

Python 持久化 - 文件

若尘

文件 持久化 持久化存储 5月日更

和另一半过不一样的520

小英

520单身福利 520 单身福利

再谈前端性能监控及4个最佳工具分享

devpoint

大前端 sentry

☕【Java技术之旅】从底层角度去认识线程的原理

洛神灬殇

Java 线程 Thread 线程协作 5月日更

如何将BSP应用配置成Fiori Launchpad上的一个tile

汪子熙

SAP abap Fiori SAP UI5 bsp

一个查看 SAP UI5 控件所有公有方法的小技巧

汪子熙

JavaScript SAP SAP UI5

适应性重用——来自土木工程的经验_研发效能_Shane Hastie_InfoQ精选文章