论坛首页 综合技术论坛

双倍赤裸裸的真理——评《软件工艺》

浏览 71936 次
该帖已经被评为精华帖
作者 正文
   发表时间:2004-06-08  
ozzzzzz 写道
多关注软件工程的目标--建造质量更好的、成本更低、功能更强大的软件。


这句话精辟。
0 请登录后投票
   发表时间:2004-06-08  
凤舞凰扬 写道
我大学毕业就在一个规范进行软件过程的企业中工作,不过我的观点并不认为软件工程如何强大,同样我绝对不否认《软件工艺》的作用。
   我觉得要理解一个软件系统的开发,两个因素历来是不能被忽视的,人才和控制(其实对于其他的工程都是如此,只是软件对人的依托更加重要和明显罢了)。我想dlee兄是赞成首先要抓人的,而那些附庸软件工程的人认为首先是要抓控制的。其实说白了,是双方的出发点不同。dlee认为,中国的项目组不大,管理太多,技术也就是工艺则会后退;而另外支持软件工程的人认为中国程序员的技术水平已经相当高(也就是认为比印度的高吧),或者理解为工艺不错,但是工程欠缺。双方的出发点或者说对中国软件的认识导致了这样的误差。
    一般说来,来自于大公司的程序员(应该说更加高级的软件人士)比较推崇软件工程,而一般在底层摸爬滚打出来的技术人员一般在意软件工艺。其实说白了,也就是高级钳工和管理人员的冲突。
    我只所以提出反对的声音,只是怕双方都走入极端,一个没有工程概念的管理团队永远是做不大,做不强的;而一个没有好的技术水平和合适的控制粒度的项目团队却是极其难以成功或者容易失败的。
    中国的软件业非常的浮躁,非常喜欢跟风,从最高层的领导到最低层的程序员都是如此,一个新的概念,一个新的观点,非常容易被一大群人翻来抄去,我始终觉得,不要轻易去批判一样东西,不要轻易去下达一个容易误导的观点(虽然我的态度经常被一些非常不喜欢就事论事的朋友批驳为永远只会谈概念,不过我想,这应该才是一个比较务实的态度)
    我只希望,论坛中会有一群朋友,笑看抄作,保持一份冷静,更全面地看待一个问题。


这里有几个关键的问题:
  1. 用软件工程的Best Practice去管理"软件工艺"能管好的项目可以吗(前提是能够达到同样的生存要求,比如 Time & Budget,下同)?
  2. 用"软件工艺"的Practice软件工程的观点去管理能管好的项目可以吗?
  3. 如果两个问题大答案都是no的话,那么那种方式改变一下,花费代价更小的能够使用管好另外一种项目?或者是两者根本没有改变的可能性?
  4. 假设融合后的机制更能管理好项目,那么这种融合的项目会更趋向于工艺还是工程派?(ie, 更像爸爸还是更像妈妈?)
  5. 两种方式,尤其是大项目的方式,当中很多假设的时候,比如文档要全,那么制作和同步文档的花费和文档的详细程度之间到底有什么样的数量关系?和它的benefit又又什么样的数量关系?  各种工艺数据和实例数据,大家求证的可能性或者实践的机会有多大?工程量决定的最最因素是什么?(我的答案是50%工艺,50人的素质)
  
     我记得Martin Fowler说过通过他干建筑工程师的老婆的沟通,原来软件开发根不能使用建筑工程的假设,因为...(具体上网去看)
 
   就拿软功的经典例子开发os/390来说吧?现在开发有会是个什么模样?用原来的模式怎样?使用WindowsNT开发的模式?应该没有什么人有任何有信心的答案吧.可是我们不就是到书中寻求这样的答案的吗?
   
    我的经验让我对这些问题有了倾向性的答案,我比较趋向于"工艺派".

    在活着才是关键的公司当中,我见过我最佩服的一个PM(自称参加过Internet的成立小会,因为才几十号人在开会)恰恰是做事根本不管你是什么派的老外,而且解决起工艺问题来比"内行"还厉害,用逻辑,用沟通,用常识.项目哪里behind schedule就会帮忙catch scedule,而不是像有的"PM"那样,要么就是逼你,要么就是随便让人找个理由推脱过去,其实对于整个项目没有任何的帮助.

  自从和他工作过以后,才知道,原来理想中的"PM"就是这样的.管他什么专家,其实,聪明和常识以及工作经验才是真正高素质人才和成功项目的不变因素,其他一切都真是"术"的一种而已.
0 请登录后投票
   发表时间:2004-06-08  
ozzzzzz 写道
凤舞凰扬
你说的功能增量开发(这个词我想才是你应该的意思),是建立在对系统功能很好的划分粒度的基础上的,RUP在这个方向上依然是问题。
功能增量,或者说增量开发往往是和迭代伴生的,这也是迭代能进行更好的风险控制的基础。而RUP对于增量开发的支持不好,最大的原因还是在于其对于architecture的混乱定义。在《统一软件开发过程》P342是这样定义的:“对以下一系列重要问题的决策的总和:软件系统的组织;对组成系统的结构元素、接口以及这些元素在协作中的行为的选择;由这些结构与行为元素组合成更大的子系统的方式;用来指导将这些元素、接口、它们之间的协作以及组织起来的构架风格。软件构架不仅涉及到结构和行为,而且涉及使用(关系)、功能、性能、适应性、重用、可理解性、经济和技术约束及其权衡以及美学考虑等。”也就是说这个构架是包括了功能性等实际功能的,而不是一个纯粹抽象的、系统无关的规则性的结构。于是你就可以看到RUP中的框架中提到构架的5个视图的核心是用例视图,也就是说RUP中的设计思维重点是建立在系统功能而非系统概念和行业概念的基础上。当我们实施RUP的时候,所进行的最开始的工作也就是建立这个很实例化的architecture。我们需要把用户的需求进行风险和重要程度的划分,从中产生一个最小而包括系统主要核心功能的系统骨架,并且这个骨架是需要可以运行和可以测试的。这从表面看似乎和xp的这些纯粹敏捷方法的做法一致,其实其内涵差别巨大。在xp中只有一个抽象的隐喻负责解释这种结构性的约束,并且通过重构不断的强化这个约束。而其建立的最早核心只是面对一个迭代计划的,符合隐喻的一个实在程序,并不负责今后的所谓扩展和增强的责任。从这一点上说RUP对于构架的应用过于实际化,不够抽象,因而其系统的扩展必将受到其构架功能约束的约束。而xp则只是一个隐喻,更加抽象,对功能的增强只会扩展这个隐喻,或者加强这个隐喻,而不会受到这个隐喻的限制。也就是说在RUP下进行功能扩展有的时候是会成为不可能的。当然在这里我要说XP对于构架的支持只是比RUP好一些,他自身还没有达到一个真正以构架为核心进行开发的程度,但是他确实在这一点上比RUP强很多。
RUP的问题其实也就是UP的问题,其原因大多数属于其产生较早,所以显得粗糙而简陋。在国外之所以大公司很多都实施RUP或者实施过RUP,是由于国外大公司使用面向对象的开发方式比较早,在敏捷等等没有出现的情况下,使用CRM或者TSP这样明显不适合OO的方法进行开发是肯定不行的,因此他们就选择了唯一的OO开发方式。而最近敏捷成为一种主流的趋势发展这么快,就是因为很多组织都有过RUP或者其他UP的基础,从而转移到敏捷上非常的顺利。而从内核上说UP是一个支持敏捷的方法,而只是由于其产生的年代限制,其种种做法还不敏捷。所以最近2年来rational才会着重加强使RUP敏捷化的研究和实践。
其实说正统和主流,RUP现在已经成为一种二流货了,真正的正统现在是敏捷。所以现在问题也很悲哀,我们看看随便一本什么书,只要是最近出版的,就必须说点敏捷,说点XP。
其实真正使敏捷成为一种系统化说法的实践,是产生于IBM的一次方法改革实践,也就是水晶系列的调查和设计。cockburn在这个时候真正的把敏捷的理论做了总结和发挥,从而使方法论从欧洲色彩浓厚的UP又回到了美国色彩浓厚的美洲。

     开卷有益,很荣幸得到O6Z兄的指点,感觉上升不少,呵呵,多谢了。
0 请登录后投票
   发表时间:2004-06-08  
dlee 写道
glchengang 写道
如果牺牲程序员的乐趣可以产生出和高质量的软件,为什么不这样做. 软件公司不是为程序员的工作乐趣而存在的.

一听这句话就知道你没有任何的管理经验。你对管理的理解还停留在美国 30 年代泰勒的水平,连戴明都没有超越。
glchengang 写道
我那句话的意思是觉得dlee说的话有太多程序员中心论味道了,

“程序员”这个称呼 8 年前对于我来说是个神圣的称呼,至今仍然是这样。

    dlee兄的话有些绝对了,在管理学上历来有两种理念:一是认为人是有积极的,需要去挖掘;另一种认为人是惰性的,需要去催促管制。这两种理念从来没有说哪个对哪个不对(在香港,相当一部分大公司就是这么认为后者的)。
   公司的角度和员工的角度其实是不同的。想想那么多职业跳蚤,难道一定就是公司的错么?未必吧!况且任何一个企业(起码是经济学中定义的企业)向来都是追求利润最大化(现在很多企业改为追求利润最合理化),再好的公司在必要的时候一样可以裁员,可以牺牲员工利益。
   当然,我这么说,不是说我赞成后者,恰恰相反,我是支持前者的,在我的实践中,也以前者为目标。
0 请登录后投票
   发表时间:2004-06-08  
liloboy 写道

这里有几个关键的问题:
  1. 用软件工程的Best Practice去管理"软件工艺"能管好的项目可以吗(前提是能够达到同样的生存要求,比如 Time & Budget,下同)?
  2. 用"软件工艺"的Practice软件工程的观点去管理能管好的项目可以吗?
  3. 如果两个问题大答案都是no的话,那么那种方式改变一下,花费代价更小的能够使用管好另外一种项目?或者是两者根本没有改变的可能性?
  4. 假设融合后的机制更能管理好项目,那么这种融合的项目会更趋向于工艺还是工程派?(ie, 更像爸爸还是更像妈妈?)
  5. 两种方式,尤其是大项目的方式,当中很多假设的时候,比如文档要全,那么制作和同步文档的花费和文档的详细程度之间到底有什么样的数量关系?和它的benefit又又什么样的数量关系?  各种工艺数据和实例数据,大家求证的可能性或者实践的机会有多大?工程量决定的最最因素是什么?(我的答案是50%工艺,50人的素质)

    回答一下liloboy很有意思的提问。
首先,没有任何一个人在项目最初就能判断和确定何种管理能管理好项目。
其次,一个项目的成功不会是纯粹管理理念的问题,更多的是来自于管理的实践。也就是说究竟像谁(工程或者工艺)不是绝对的,所以我才强调两者的充分性,而非必要性。
最后工程及工艺之间的量化差是需要进行数据累积和统计分析的(在这一点上是工艺和工程最大差别之一)。这个数值因公司而异,因项目而异,因员工而异,但是长期的统计分析值会在一个区间(这也就是为什么有些IT企业已经开始6σ的认证)。
软件工程和建造工程当然不一样,怎么能够照搬那?但是工程的概念对于任何的工程实践都是一样,所以ISO可以通用,6σ可以同样,采样分析也可以同样(不同的只是中间的指标和比重不同罢了)
0 请登录后投票
   发表时间:2004-06-08  
liloboy 写道
自从和他工作过以后,才知道,原来理想中的"PM"就是这样的.管他什么专家,其实,聪明和常识以及工作经验才是真正高素质人才和成功项目的不变因素,其他一切都真是"术"的一种而已.

     你这是典型的以点概全了,一种纯粹的英雄主义!一个项目成功与否的因素怎么可能纯粹在人那?(有这样的高手自然好)我不想引用CMM的概念去反驳你什么,避免带来更多的对于CMM的讨论。
    不过最起码一点,把工程当作“术”,这是你最大的误区。
0 请登录后投票
   发表时间:2004-06-08  
凤舞凰扬 写道
一个项目成功与否的因素怎么可能纯粹在人那?


我想起《最后期限》里面Mr. T说的一句话(第二章):所谓管理,就是(1)找到合适的人;(2)给他分配合适的工作;(3)保持他们斗志昂扬;(4)保持团队凝聚。其他的,都是“案牍”。

不是说案牍不重要,而是我们研究案牍已经有年头了,边际收益曲线已经变得很平缓了。关于人的问题很重要,但是很难把握,所以如果在人的问题上下一些功夫,可以得到更大的边际收益。软件工程和软件工艺的问题也是如此:工程和工艺都是隐喻,但工程的隐喻已经用了这么多年,有什么好的都已经探索清楚了,它很难再给我们提供什么灵感;现在提出工艺的隐喻,就给了我们另外一种思考问题的方式和角度。
0 请登录后投票
   发表时间:2004-06-08  
凤舞凰扬 写道
liloboy 写道
自从和他工作过以后,才知道,原来理想中的"PM"就是这样的.管他什么专家,其实,聪明和常识以及工作经验才是真正高素质人才和成功项目的不变因素,其他一切都真是"术"的一种而已.

     你这是典型的以点概全了,一种纯粹的英雄主义!一个项目成功与否的因素怎么可能纯粹在人那?(有这样的高手自然好)我不想引用CMM的概念去反驳你什么,避免带来更多的对于CMM的讨论。
    不过最起码一点,把工程当作“术”,这是你最大的误区。


工程就是"术",用好它靠的因素就是两条:人和工具.

CMM基于它的指导思想得到的对企业有用的程度,和ISO的有用程度是在一个数量级上的,当然比ISO优秀真是毋庸置疑的.

可能当时那个软件有相当的技术难度吧(没有前人做过类似的应用,即使别人有我们当时也找不到),技术不确定,所以需求就很难稳定,所以用不用工程的方法应该是没有任何实质性帮助.

不客气的说,我的看法是,leader们的素质那么高以后(有这样的leader,手下被训的也聪明起来了),用什么么工程的方法不就是那么一回事情(要想抄,到处有的超),不符合企业的东西,磨一下就得了(当然,企业和官位都要能保住的前提之下),反正会工程手段的人/书那是不计其数,数不胜数/超不胜超,而且我又不是不会,要说算帐,成本会计学的还不错吧.

一句话,读过中国大学大学的,esp 理工科的,让他遵守规矩容易,让他打破规矩,自己发明点什么可就难了.先把难的干会了,搞容易的,不是更加容易吗?

换句话说,核心竞争力大概就是这个东西(不是IBM自己也在说按需应变吗,能够按需应变又要担心什么形式呢?),仅仅次于企业的机遇.
0 请登录后投票
   发表时间:2004-06-08  
凤舞凰扬 写道
liloboy 写道

这里有几个关键的问题:
  1. 用软件工程的Best Practice去管理"软件工艺"能管好的项目可以吗(前提是能够达到同样的生存要求,比如 Time & Budget,下同)?
  2. 用"软件工艺"的Practice软件工程的观点去管理能管好的项目可以吗?
  3. 如果两个问题大答案都是no的话,那么那种方式改变一下,花费代价更小的能够使用管好另外一种项目?或者是两者根本没有改变的可能性?
  4. 假设融合后的机制更能管理好项目,那么这种融合的项目会更趋向于工艺还是工程派?(ie, 更像爸爸还是更像妈妈?)
  5. 两种方式,尤其是大项目的方式,当中很多假设的时候,比如文档要全,那么制作和同步文档的花费和文档的详细程度之间到底有什么样的数量关系?和它的benefit又又什么样的数量关系?  各种工艺数据和实例数据,大家求证的可能性或者实践的机会有多大?工程量决定的最最因素是什么?(我的答案是50%工艺,50人的素质)

    回答一下liloboy很有意思的提问。
首先,没有任何一个人在项目最初就能判断和确定何种管理能管理好项目。
其次,一个项目的成功不会是纯粹管理理念的问题,更多的是来自于管理的实践。也就是说究竟像谁(工程或者工艺)不是绝对的,所以我才强调两者的充分性,而非必要性。
最后工程及工艺之间的量化差是需要进行数据累积和统计分析的(在这一点上是工艺和工程最大差别之一)。这个数值因公司而异,因项目而异,因员工而异,但是长期的统计分析值会在一个区间(这也就是为什么有些IT企业已经开始6σ的认证)。
软件工程和建造工程当然不一样,怎么能够照搬那?但是工程的概念对于任何的工程实践都是一样,所以ISO可以通用,6σ可以同样,采样分析也可以同样(不同的只是中间的指标和比重不同罢了)


1. 我觉的你回避了我的1,2的问题,所以没有解决任何和帖子主题有关的内容.
2. 问题3的含义(如果你知道CMM的话),CMM的流程就是要把其他的流程(比如现存的XP,假设,注意假设它在CMM1里面)改成很Formal又很精简的流程(CMM5比如),那么,如果你喜欢CMM举的例子的话,那么问题就不是一个无聊的问题,至少CMM就在干这样的事情.
3. 我举Martin Fowler的例子是说明,SE那一派的人很多著书立说的基本原理就是应用其他工程项目里面几十上百年的经验其实是软件是个"工程"和建筑工程等等一样,所以用了建筑工程的所以best practices,那么就能获得成功,可以完全不牵涉工具工艺层面的(ISO一定可以被规类为这样的类别,口径在宽点CMM也是).你说的情况和我说得情况那个普遍,那个又是初学者的期望?
4. 问题4,我只问一句,软件企业不能像建筑行业那样有造价手册那样细的东西,难道不能有几个重要因素的公认公式吗?(技术成熟度,
换句话说,CMM的级别,至少大行业有一个粗略的数据吧?
比如CMM5的金融软件企业,CMM3的物流软件企业,4级别的电信软件企业?
是少有这样的数据才是能说软件是倾向于工程层面的,否则,老老实实的在多呆在工艺的地方吧?
还有6-sigma,是bug的数量少到10万分之0.3(大概就是这个数字?),还是工作小时数的误差达到6-sigma的估计值?IT企业肯定不是指软件企业吧?6-sigma,Hacker帝国吧.3sigma已经很好了.

我希望软件项目能朝这样发展,想法太大了,但是确实是有用.
0 请登录后投票
   发表时间:2004-06-08  
gigix 写道
凤舞凰扬 写道
一个项目成功与否的因素怎么可能纯粹在人那?


我想起《最后期限》里面Mr. T说的一句话(第二章):所谓管理,就是(1)找到合适的人;(2)给他分配合适的工作;(3)保持他们斗志昂扬;(4)保持团队凝聚。其他的,都是“案牍”。



真是对极了,我没看过最后期限,但这也是我10来年管理软件团队来认为最重要的东西,反面和正面的例子都证明了这一点。到现在,我还在孜孜以求这样的目标。

具体到软件团队管理来说合适的人就是具有合作精神,愿意创新并愿意做好手上活,具有一定的开拓和学习精神的人,合适的工作就是尽量让他做愿意做的事情,有这样的能力或潜能做好这件事情的人,保持他们的斗志就是在合适的时间内完成合适的工作,有成就感,每次都要让他们感觉到有长进,凝聚力就是要在不同的场合、不管是在工作、还是在抽烟、还是在讨论问题中充分尊重每一个人的意见,充分发挥每一个人的长处,充分吸收每一个人的观点,(即使不接受一个人的观点也要让他明白你的权衡),让工作的作品成为每一个人的成就,也就是作为整个团队的成就。

我对XP(以及敏捷方法)的推崇就是在XP的实施过程中让我实实在在地看到我自己、我的团队能够一步步地朝这个方向发展。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics