- 浏览: 68733 次
- 性别:
- 来自: 沈阳
最近访客 更多访客>>
文章分类
最新评论
-
hexawing:
请问我怎样指定它去哪个服务器下载gem呢?之前默认的貌似不能用 ...
[转载]使用RubyGem -
bryanzk:
我说兄弟,你从豆瓣上直接全文copy我的内容,也要打个招呼吧? ...
[转载备份]Rails创始人DHH新作《Rework》读书笔记:“少!快!精!”
“我会更加努力地工作”——一匹名叫Boxer的马(出自乔治·奥威尔的《动物农庄》)
彼得·圣吉在其著作《第五项修炼》中提到的系统思维定律同样适用于软件开发。
1. 今日的问题源于昨日的解决方案(Today’s problems come from yesterday’s solutions)
当解决问题时,我们会感到很高兴。我们经常不考虑后果。令人感到意外的是,我们提出的解决方案可能会产生反作用,并带来新问题。
作为对取得巨大成功的团队的奖励,公司决定为团队中的少数骨干成员发放奖金并晋升职位。团队中的其他成员会感到不公平,并且会丧失积极性。最终使团队成员之间的关系更加紧张,后续项目也就很难再取得成功。
项目经理频繁要求开发者修复一个新的软件Bug,或者处理客户的紧急需求,而开发者尽力满足这些要求。但是,过于频繁地分散精力会妨碍他们完成迭代过程中的主要任务。因此,项目进展很慢。
2. 用力越大,系统的反作用力也越大(The harder you push, the harder the system pushes back)
当事情的进展结果并非如我们所愿时,我们会固执地坚持自己的方法。我们没有时间来停下来思维并寻找更好的替代方案,而是“义无反顾”地向前冲。有时候虽然解决了问题,但往往又发现深陷于其他问题之中。
当一个系统远未完成时,经理通常会不断催促员工加班加点地工作,并且要求按时完成。系统bug数量的持续增加及整体质量的急剧下降,导致更多的延误。因此,需要做更多的工作来部署软件系统。
为了满足新系统的要求,开发者勇敢的对原有的系统架构进行扩展,但死板陈旧的方法已经不能满足这些新需求。他们忙于做这件事,以至于没有时间停下来仔细分析并且改变方法,从而导致系统质量下降。
3. 福兮祸之所伏(Behavior grows better before it grows worse)
短期的解决方案,会给我们带来短暂的休息和状况的暂时改善,但是不会从根本上解决问题。这些问题终究会使情况变得更糟。
公司为顾客提供丰厚的优惠并投入巨资宣传,让很多人购买软件 。但是,顾客购买之后很不满意,因为软件无法使用也不可靠。
如果开发小组能够按时完成系统开发,管理层承诺,如果开发团队能够按时完成系统开发,公司会提供巨额的奖金。一个团队开始努力的工作,但很快他们就意识到这是不可能实现的。于是开发者变得悲观并丧失动力。
4. 最容易出去的方法往往会导致返回来(The easy way out usually leads back in)
在生活中学到的一些解决方案能够帮助我们轻易地并且更早的地获得成功。我们总是试图把它们强加到任何情形上,而忽略了特殊的背景以及相关人员。
开发者还没有准备好接受结对编程或者测试驱动开发这样的实践时,敏捷教练强行实现完全的极限编程。这会给任何敏捷方法带来压力、冲突以及负面影响。
开发者把设计模式应用到任何地方,这是徒劳的,而且这会让系统变得复杂。
5. 治疗带来的结果可能会比疾病导致后果更严重(The cure can be worse than the disease)
有些熟知的方法可能会更危险,比如在编程的时候喝啤酒,来减轻不切实际的任务期限带来的压力。
由于不信任全职开发者,一家公司雇佣了大量的承包商来开发核心功能。结果,系统不具有概念完整性,自己公司的开发者看不懂,并且无法做出修改。所以,公司员工也不了解相关领域的知识、解释以及概念。
开发者会走捷径,拷贝相似功能的代码来赶进度,并且争取尽快发行第一个版本。他们一开始进展迅速,但是代码最终会变成大泥球(比喻系统结构不清晰)。
6. 欲速则不达(Faster is slower)
当我们看到成功的曙光,我们会全力以赴,不再小心谨慎。然而,最优增长速率通常会比可能的最快增长速率要慢得多。
经理们往往为已经成功的项目增加很多人手,但总体进展就会变慢,因为交流所用的花费增加,以及团队成员之间失去默契。
在没有对代码进行合理重构及改善的情况下,开发者快速的为系统添加新的功能,会使系统变得难懂,而且难以修改。
7. 在时间和空间上,因果并不密切相关(Cause and effect are not closely related in time and space)
我们善于为出现的困难寻找原因,即使这些原因很牵强,并且远非是真正的根本原因。
为了按时完成系统,开发团队不再接受来自客户的需求改变。因此,客户对发行的软件不满意。
实时系统历经坎坷之后,管理层迫使开发者同意,并且在给系统做出任何修改之前撰写详细的技术说明。结果开发者失去了为系统做出任何改进的动力,并且开始拖延。
8. 微小的改变可以产生明显的效果,但这种杠杆效应最大的地方往往也最不明显(Small changes can produce big results-but the areas of highest leverage are often the least obvious)
像改变公司政策、愿景或者广告用语这样显而易见并且关系重大的解决方案往往不起作用。相反,小而普通,但持续的改变却会带来大不相同的效果。
发者每天都与客户进行交流,并且做出大部分决定。因此,能够更好地理解客户的需求、做出更好的决定并且给出最优的解决方案。
开发者为系统的每项功能设计自动化单元测试。因此,设计更灵活、人们更自信、系统在每此修改之后都能得到完全的测试。
9. 鱼与熊掌可以兼得,但不是同时兼得(You can have your cake and eat it too – but not at once)
我们经常会面对刻板的“非此即彼”选择。如果我们改变一下自己的观点及系统规则,这些选择有时并不会使我们进退两难。
经验丰富的项目经理知道增加系统特性的数量与削减时间和开支不可兼得。然而,如果我们完善一下想法、寻找合适的人才并且避免过度开发,这也是可能做到的。
开发者认为他们应该要么采用事务脚本,要么采用域模型体系架构模式。然而,复合域中的高性能解决方案可以将两者结合,以得到最佳性能。
10. 把一头大象分两半不会得到两头大象(Dividing an elephant in half does not produce two small elephants)
无法整体了解系统,往往会做出次优决定。
项目经理往往通过生成的代码量和迭代过程中实现的功能数来评估开发者。而开发者往往会生成大量无用代码。
管理层承诺,每发现一处系统bug,测试者将得到5美元。测试者对跟开发者合作不再感兴趣,并且不再试图消除产生bug的根本因素。团队之间良好而且高效的关系不复存在。
11. 无可非议(There is no blame)
我们喜欢归咎于客观条件,或对别人指指点点,甚至对此深信不疑。但是,我们自己以及问题的原因都是系统的一部分。
今天早上团队没有发布系统完全是乔的过错。即使项目经理亲切地为其提供了免费的啤酒、T恤以及披萨,他也没能在一晚上的时间内修复所有的缺陷。
人们不会使用一个公司优秀的Web 2.0社会化应用,用户喜欢简单实用的东西,并且不会感激你辛勤工作的成果。
以上11条系统思维定律表明,我们提出的所有解决方案都会产生一定的后果,有时非常严重并出乎意料。我们周围的系统本就那样,我们不应苛责它们,而是要从中学习。要掌握系统思维方式并控制这些系统,我们需要做到如下几点:
1. 要明白我们是在跟什么样的系统打交道,是人或是软件;
2. 有意识地学习相互关系、因果链;
3. 把系统看做一个整体,并且视其为其他系统的一部分。
系统思维方面有很多挑战,通过获取并且利用有关系统工作方式的知识,我们可以战胜其中的很多挑战。但是,大部分严峻挑战是我们人类与之相冲突的本性。我们的激情、感情以及本能可以轻易改变我们理智、条理分明的思维方式。掌握系统思维方式的第一步就是要学习如何跟自己合作。
后话
在软件开发过程中,你有(或缺乏)哪些系统思维的使用经验?
编者注:原文作者Andriy Solovey从事软件开发已有15年,做过开发人员、软件经理和系统架构师。关注构建优质、可靠和可用的软件。《如何使用搜索技巧来成为一名高效的程序员》就是他所写。
发表评论
-
我的IT未来预测及个人规划
2011-11-13 21:34 0现状: windows 市场占有率高 linux 市场 ... -
[转]华为时间管理培训
2011-11-04 23:49 669什么是时间管理 “时 ... -
俞敏洪:我让女儿主动学习的秘密
2011-09-15 10:59 528我之所以能够在这 ... -
[俞敏洪]当第一也不容易
2011-09-15 10:58 600其实当第一名也确实不容易,因为他走得很辛苦,往前面一看,一个追 ... -
[转自搜狐]外交部副部长傅莹就中国航母海试接受外媒采访
2011-08-23 20:54 375中新网8月23日电 据外交 ... -
[转载]十个成功励志小故事
2011-03-03 15:16 6801,▲相信自己是一只 ... -
[转载]为什么搞计算机工作的人看上去很清闲
2011-02-18 19:49 638非IT人员经常会产生这样的疑问,这个图片会多少回答这样的问题: ... -
[转载]完美程序员的10种品质
2010-12-31 20:43 528导读:谁是完美程序员?著名博客作家Alex Iskol ... -
[转载]如何解决消极怠工(事业单位)
2010-08-28 05:05 1186消极怠工理由: ... -
[转载]中国人的盲目攀比
2010-08-28 04:37 529徐明旭 拜孔夫子之 ... -
[转载]周鸿伟的成功秘决
2010-08-28 04:24 591不攀比不跟风做事装孙子 -
[转载]系统管理员变程序员 四步转型
2010-08-07 08:09 578作者:Justin James 翻译:PurpleEndure ... -
[学习笔记]微软技术必知的几个网站
2010-05-08 05:20 542http://www.microsoft.com/china/ ... -
[转载]评论:程序员,不止干到35岁
2010-04-24 19:05 505在中国,程序员不能超过35岁,似乎已经是不争的事实,软件开发工 ... -
[转载备份]Rails创始人DHH新作《Rework》读书笔记:“少!快!精!”
2010-03-24 14:01 1066注: 首先向作者致以诚挚的歉意。引用您的文章,并非为了赚 ... -
[转载]对自学编程者的一些建议
2010-03-24 13:56 657学习编程已经不再是少 ... -
[转载]充满荆棘的专家程序员之道
2010-03-24 13:50 556国外程序员常常遇 ... -
读《做单》有感
2010-02-21 17:03 594虽然这是一本写IT行业销售故事的书,但是其中的主人公的心路历程 ... -
[转载]数学是知识,哲学是智慧
2010-01-10 09:54 634至于知识和智慧的区别 ... -
[转载]马云的经典语录(给奋斗者)
2010-01-10 09:52 825*今天很残酷,明天更残 ...
相关推荐
在软件开发过程中,系统思维是至关重要的,因为它可以帮助我们理解并解决复杂问题,避免短期解决方案带来的长期困扰。以下是对这11个系统思维定律的详细解释: 1. 今日的问题源于昨日的解决方案:我们在解决问题时...
### 软件开发中的11个系统思维定律详解 #### 1. 今日的问题源于昨日的解决方案 在软件开发过程中,我们经常会遇到各种各样的挑战。为了解决这些问题,团队常常会制定出一系列的应对策略。然而,随着时间的推移,...
7. **在时间和空间上,因果并不密切相关**:在软件开发中,一个决策的影响可能在很久之后才会显现,或者在系统的不同部分产生。例如,一个模块的改动可能会影响到其他模块,导致意想不到的连锁反应。 8. **系统整体...
总结,大学物理复习中的牛顿定律是理解力学的基础,通过构建思维导图,我们可以系统地梳理这些定律,深化理解,并将理论知识应用于实践。同时,这也是一种有效的复习策略,有助于提升学习效率,巩固记忆,为后续的...
热力学第一定律,也被称为能量守恒定律,是物理学中的一个基本原理,它阐述了能量在系统和环境之间转换和传递的基本规则。这个定律适用于所有封闭系统,即不与外界交换物质但可以交换能量的系统。在大学物理的学习中...
1. **完整性定律**:一个完整的技术系统通常包括执行单元、传动单元、能源单元以及控制系统。这四个部分共同协作以完成系统的功能。例如,汽车由发动机提供动力,通过传动系统传递动力,控制单元则负责操纵车辆。 2...
4. 动量守恒定律:在一个封闭系统中,总动量保持不变。题2-5展示了动量定理的应用,无论物体初始速度如何,只要作用力相同且作用时间相同,物体获得的动量增量(冲量)是一致的。 5. 能量守恒定律:在没有外力做功...
Zipf定律,最初由语言学家G.K.Zipf提出,是描述自然语言中词汇使用频率与词汇排名之间关系的一个统计定律。Zipf定律指出,在任何给定的自然语言样本中,一个词出现的频率与其排名成反比。具体来说,最常出现的词的...
WHY 定律的引入可以让项目经理理清用户最终要的是什么样的系统,在系统的定位和建立上,就有一个明确的最终目标。 WHAT 定律是需求调研的第二步骤,它要求项目经理从各业务流程的要求入手,了解系统要做什么,实现...
Brooks定律则是软件开发中的一个经典原则,指出在项目延期时简单增加人员并不一定能加快进度,反而可能由于新成员的融入成本和沟通问题,导致项目进一步延迟。因此,项目管理者在追加人力时必须谨慎,并考虑到团队...
例如,一个电磁铁吸引铁片上升的问题,整体法可以将电磁铁、铁片和称盘作为一个系统,利用系统中的牛顿第二定律求解电磁铁对铁片的吸引力。 2)另一个例子是,一个物体沿斜面下滑,斜面体保持静止。在这种情况下,...
软件系统模型是软件工程中一个至关重要的概念,它是一种用于理解和描述软件系统的方式,帮助我们构建、分析和交流关于系统的复杂信息。系统模型探讨旨在深入理解模型的本质和它在软件开发过程中的作用。 首先,我们...
晕轮效应:一个人的某种品质,或一个物品的某种特性给人以非常好的印象。在这种印象的影响下,人们对这个人的其他品质,或这个物品的其他特性也会给予较好的评价。这一条定律揭示了人类在评价他人或物品时的偏好心理...
1. **质量保证(QA)**:实验的目的是验证一个已知的物理定律,这类似于软件开发中的单元测试,旨在验证代码的特定部分是否符合预期。实验步骤的详尽描述和注意事项,如同编写测试用例和执行测试计划。 2. **数据...
在实验中,我们使用 Multisim 软件来验证 KCL 定律。我们构建了一个简单的电路,包含三个电阻和三个电源。我们测量了每个节点的电流,结果表明,流入每个节点的电流之和等于流出该节点电流之和,验证了 KCL 定律。 ...
综上所述,基于光敏电阻和单片机的“马吕斯定律”自动测量系统是一个高度集成的自动化测量解决方案,它不仅显著提高了测量效率和数据准确性,而且对于光学实验教学和研究具有重要意义。通过该系统,可以方便地研究光...
这一观点提醒从业者,软件工程的进步是一个长期而渐进的过程,需要不断探索和实践。 ### 4. 结论 《人月神话》不仅是一部理论著作,更是软件开发人员的实战指南。它提出的概念和原则,如布鲁克斯定律、本质与偶然...
一、欧姆定律在电子秤中的应用 电子秤是我们生活中常见的电学应用设备,通过欧姆定律,可以解析电子秤的工作原理。如图 1 所示,秤盘和滑动变阻器通过滑片 P 连在一起,物体质量大小可以通过电流表示数大小显示出来...
机械能守恒定律是物理学中的一个核心概念,尤其在高中物理学习中占据重要地位。这个定律指出,在只有保守力(如重力、弹力)作用的系统中,系统的总机械能(动能和势能之和)保持不变。这个定律在解决一些复杂的动力...
1. 开普勒第一定律(椭圆定律):所有行星都沿椭圆轨道绕太阳运动,太阳位于椭圆的一个焦点上。这个定律解释了为何火星和木星的轨道不是圆形而是椭圆形,且太阳并不位于轨道中心,而是位于一个焦点。 2. 开普勒第二...