我觉得问题核心在于重构对于客户创造了什么价值。
近日从金融学的角度来进行分析,略有所悟。
重构其实提供了"需求变化"的"看多期权"(call)--事实上还提供了其他多种变化的看多期权。需求变化的可能性越大,这份期权就价值越高。而在金融市场上充满了明码标价的期权交易。
以TDD的三步骤(不可运行,可运行,重构)为例,可以看做实现一个功能的"现货价值"并附加该功能需求变化的"看多期权"。
而只完成功能要求程序,不进行重构,只能看单纯含有一个功能的"现货价值"。
对于客户而言,附加有"需求变化看多期权"的程序价值要高于只含"现货价值"的程序。
对于"需求变化看多期权"最坏的情况也就是"需求不变化",这份期权就没必要行使。
这就是"需求稳定项目(如:学校大作业)"和"需求总是与时俱进的项目"在开发行为上存在差异的原因之一。
事实上,我觉得软件项目开发,充满了时间序列上的发生的不确定性,项目的过程中需要不断的吸收这种不确定性,并追求项目达到更高的价值。这种情况很适合以金融学的视角进行分析。
看了前面的帖子,想到刚看的书,不由得想谈谈自己的看法,班门弄斧,见笑大方了
从game的角度看重构:
注意:本文的重构都不包括过度重构
根据Cockburn的敏捷软件开发,软件开发是"下一盘很大的棋":长期有长期的玩法,短期有短期的玩法;客户有客户的玩法,开发团队有团队的晚饭;
项目经理有自己的晚饭,程序员有程序员的玩法....每个人都是在其中谋求自己的利益最大化。
所以,对于重构
从短期来看:浪费
从长期来看:必要
从客户来看:浪费
从开发团队来看:必要
从项目经历来看:浪费
从程序员来看:必要
所以,基本上客户都不支持重构,程序员都希望重构。短期项目都不倾向重构,长期的则倾向于重构。为了程序员的利益,就有必要建立长期稳定和谐的客户关系
以及上下级关系,然后再进行重构。否则,怎么定性都是没用,就是吃力不讨好,不懂轻重。
On 5月9日, 下午4时51分, "jayden guan" <jayden.g...@gmail.com> wrote:
> 前些日子在InfoQ看到篇文章 "抛砖引玉----重构是必要的浪费"http://www.infoq.com/cn/news/2007/12/refactoring-is-waste.
看了前面的帖子,想到刚看的书,不由得想谈谈自己的看法,班门弄斧,见笑大方了 从game的角度看重构: 注意:本文的重构都不包括过度重构 根据Cockburn的敏捷软件开发,软件开发是"下一盘很大的棋":长期有长期的玩法,短期有短期的玩法;客户有客户的玩法,开发团队有团队的晚饭; 项目经理有自己的晚饭,程序员有程序员的玩法....每个人都是在其中谋求自己的利益最大化。 所以,对于重构 从短期来看:浪费 从长期来看:必要 从客户来看:浪费 从开发团队来看:必要 从项目经历来看:浪费 从程序员来看:必要 所以,基本上客户都不支持重构,程序员都希望重构。短期项目都不倾向重构,长期的则倾向于重构。为了程序员的利益,就有必要建立长期稳定和谐的客户关系 以及上下级关系,然后再进行重构。否则,怎么定性都是没用,就是吃力不讨好,不懂轻重。 On 5月9日, 下午4时51分, "jayden guan" <jayden.g...@gmail.com> wrote:
前些日子在InfoQ看到篇文章 "抛砖引玉----重构是必要的浪费"http://www.infoq.com/cn/news/2007/12/refactoring-is-waste. 文中认为 "重构并不能为客户创造可衡量的价值。所以将重构归为必要的浪费。 个人对这样的解读不太赞同。 我觉得问题核心在于重构对于客户创造了什么价值。 近日从金融学的角度来进行分析,略有所悟。 重构其实提供了"需求变化"的"看多期权"(call)--事实上还提供了其他多种变化的看多期权。需求变化的可能性越大,这份期权就价值越高。而在金融市场上充满了明码标价的期权交易。 以TDD的三步骤(不可运行,可运行,重构)为例,可以看做实现一个功能的"现货价值"并附加该功能需求变化的"看多期权"。 而只完成功能要求程序,不进行重构,只能看单纯含有一个功能的"现货价值"。 对于客户而言,附加有"需求变化看多期权"的程序价值要高于只含"现货价值"的程序。 对于"需求变化看多期权"最坏的情况也就是"需求不变化",这份期权就没必要行使。 这就是"需求稳定项目(如:学校大作业)"和"需求总是与时俱进的项目"在开发行为上存在差异的原因之一。 事实上,我觉得软件项目开发,充满了时间序列上的发生的不确定性,项目的过程中需要不断的吸收这种不确定性,并追求项目达到更高的价值。这种情况很适合以金融学的视角进行分析。 http://tuti.javaeye.com/admin/blogs/190154
对客户的关系其实也和面向对象软件设计的一些思想很类似,需要针对不同客户设
计不同的交互模式,呵呵。
Liang Qiao 写道:
> 不能对客户说:"我们要做重构,所以在两个星期(或两个月)内不能交付显式
> 价值。你看到的功能将和原来的一样。"
>
> 想像一下,你如果是客户,你会为这句话付两个星期(或两个月)的钱吗?
>
> 大体来说(并不绝对),"如何做软件"是承建方的事,"想做成什么样的软件"是
> 客户的事。你是否做重构是"开发团队内部的事!"
>
> 也就是说:你在做开发的时候,就应该做重构。而不是把它单拿出来和客户说。
>
> 2008/5/14 yiding.he <yidi...@gmail.com <mailto:yidi...@gmail.com>>:
>
> 对客户来说,重构属于开发细节----你能够在我接受的价格内完成这个功能
> 就行了,重构是什么东西我才懒得管。
> 项目经理应该认识到适当的重构带来的长远利益,否则就是目光短浅。
>
> ming 写道:
>> 看了前面的帖子,想到刚看的书,不由得想谈谈自己的看法,班门弄斧,见笑大方了
>>
>> 从game的角度看重构:
>> 注意:本文的重构都不包括过度重构
>>
>> 根据Cockburn的敏捷软件开发,软件开发是"下一盘很大的棋":长期有长期的玩法,短期有短期的玩法;客户有客户的玩法,开发团队有团队的晚饭;
>> 项目经理有自己的晚饭,程序员有程序员的玩法....每个人都是在其中谋求自己的利益最大化。
>>
>> 所以,对于重构
>> 从短期来看:浪费
>> 从长期来看:必要
>> 从客户来看:浪费
>> 从开发团队来看:必要
>> 从项目经历来看:浪费
>> 从程序员来看:必要
>>
>> 所以,基本上客户都不支持重构,程序员都希望重构。短期项目都不倾向重构,长期的则倾向于重构。为了程序员的利益,就有必要建立长期稳定和谐的客户关系
>> 以及上下级关系,然后再进行重构。否则,怎么定性都是没用,就是吃力不讨好,不懂轻重。
>>
>>
>> On 5月9日, 下午4时51分, "jayden guan" <jayden.g...@gmail.com> <mailto:jayden.g...@gmail.com> wrote:
>>
>>> 前些日子在InfoQ看到篇文章 "抛砖引玉----重构是必要的浪费"http://www.infoq.com/cn/news/2007/12/refactoring-is-waste.
>>> 文中认为 " <http://www.infoq.com/cn/news/2007/12/refactoring-is-waste.%E6%96%87%E4%B8%AD%E8%AE%A4%E4%B8%BA>重构并不能为客户创造可衡量的价值。所以将重构归为必要的浪费。
是呀,重构是最基础的,是编码过程每时每刻发生的,是默认的。这是开发者和开发团队的事情----本分的事情,根本没有必要去跟客户做negotiation。正如QiaoLiang所说,开发团队还好意思跑到客户面前说:"我们代码写的不好,现在很难加入新的功能,我们需要做个重构!"
我想,重构可以看作是一个保证质量的工艺,同时也是一个成本负担。任何企业,他们都要保障他们产品的质量。这之中必然有成本的 投入。成本高自然价格高,体现在软件开发中,就是日期可能会长。这里面就有一个成本控制的问题了。好的企业,质量高,成本控制的好,差的企业一要求质量 高,成本就控制不住,但这绝不是怀疑保证质量的工艺的理由。
任何企业也确实很少跟客户沟通说,我质量高,所以我成本高,所以我价格高。但是好的企业的客户自然能接受一分钱一分货的"洗脑"。
2008/5/14 徐毅 <kave...@gmail.com>:
2008/5/14 Anchuan Qian <qiana...@gmail.com>:
是 呀,重构是最基础的,是编码过程每时每刻发生的,是默认的。这是开发者和开发团队的事情----本分的事情,根本没有必要去跟客户做 negotiation。正如QiaoLiang所说,开发团队还好意思跑到客户面前说:"我们代码写的不好,现在很难加入新的功能,我们需要做个重构! "
重构这个说法在何时诞生?
诞生之前大家在干什么,初构?
transparency不是敏捷一个重要元素吗,为什么说没必要和客户做negotiation?
--
- - - - - - - - - -
Xu Yi, Kaverjody
Certified Scrum Mater
Blog : http://damianji.spaces.live.com
- - - - - - - - - -
看了前面的帖子,想到刚看的书,不由得想谈谈自己的看法,班门弄斧,见笑大方了
从game的角度看重构:
注意:本文的重构都不包括过度重构
根据Cockburn的敏捷软件开发,软件开发是"下一盘很大的棋":长期有长期的玩法,短期有短期的玩法;客户有客户的玩法,开发团队有团队的晚饭;
项目经理有自己的晚饭,程序员有程序员的玩法....每个人都是在其中谋求自己的利益最大化。
所以,对于重构
从短期来看:浪费
从长期来看:必要
从客户来看:浪费
从开发团队来看:必要
从项目经历来看:浪费
从程序员来看:必要
所以,基本上客户都不支持重构,程序员都希望重构。短期项目都不倾向重构,长期的则倾向于重构。为了程序员的利益,就有必要建立长期稳定和谐的客户关系
以及上下级关系,然后再进行重构。否则,怎么定性都是没用,就是吃力不讨好,不懂轻重。
On 5月9日, 下午4时51分, "jayden guan" <jayden.g...@gmail.com> wrote:
> 前些日子在InfoQ看到篇文章 "抛砖引玉----重构是必要的浪费"http://www.infoq.com/cn/news/2007/12/refactoring-is-waste.
2008/5/14 徐毅 <kave...@gmail.com>:
--
Jeff Xiong
Software Journeyman - http://gigix.thoughtworkers.org
Open Source Contributor - http://fluorida.googlecode.com/
Technical Evangelist - http://www.infoq.com/cn/
有些东西可以negotiate,有些东西不可以,有些东西需要negotiate,有些东西不需要。先做这个story还是先做那个,抓紧时间做更多的story还是紧着这两天发布一个版本,这些是可以并且需要negotiate的;保持必要的质量标准还是舍弃对质量的要求来追求短期的交付速度,这就是不需要、不可以negotiate的。不需要negotiate,因为项目的质量要求应该和scope、budget一样,是在项目启动之前就达成共识的,项目开始了就意味着双方都认可我们要的是一定质量标准基础上的尽快交付;不可以negotiate,因为这是软件开发者的本分之事,就好像你到饭店点菜从来不会附加说明"要做得好吃点"一样──自己想想,如果一家饭店需要你告诉他做得好吃点他才会做得好吃点,你会怎么做?
这就是在软件这种新兴行业里工作的有趣之处:有很多人高喊着向制造业学习并且致力于把软件变成制造业但实际上他们根本就不知道制造业到底在做些什么。
2008/5/9 jayden guan <jayde...@gmail.com>:
> 前些日子在InfoQ看到篇文章 "抛砖引玉----重构是必要的浪费"
--
但不太同意把软件简单类比成制造业的模式。软件其实是制造业和服务业的混合体。以往的理论里,制造业和服务业是各有特点的。但在软件业里面,制造业与服务业的特性巧妙地混合在一起,分不开。
----------------------------------------
2008/5/17 Jeff Xiong <gigi...@gmail.com>:
工业管理这个学科发展了小一百年,可学的东西很多很多。然而作为一个新兴行业的软件业,最好是从一些最基本的东西开始学起,比如说首先想办法知道自己的浪费在哪里,想办法消除浪费。不然尽是搞些浮沙高台,全无用处。
2008/5/18 Steven Mak <stev...@gmail.com>:
--
Jeff Xiong
现代制造业生产的是标准化产品,软件行业则不是。生搬硬套制造业的那套方法怕是会淮南橘而淮北枳。
我说的是哲学。不知道你的政治只的是什么?
"不要把中国传统文化当成武侠小说中的老家伙一样",你了解中国的武术吗?
很明显,武侠小说上面是夸大其词,很多是无种生有。如果在你眼里,这就是中国的传统武术,那是受了武侠小说的误导。
当然,对这个我也不会。不过,我了解一点,看到一些,亲身接触过一些。在敏捷中国,有一些人比我有发言权。