软件工程的大泥球

(原文地址:http://www.laputan.org/mud/)

  大泥球的定义:BIG BALL OF MUD is a casually, even haphazardly, structured system. Its organization, if one can call it that, is dictated more by expediency than design.

  文中作者拿软件构建和建筑做类比,我觉得是很合理的。软件架构师对应于建筑设计师,要做整体规划,设计“建筑图纸”;开发人员则与施工人员相对应,做具体的构建工作。

  作者提到What forces drive good programmers to build ugly systems?在后面也给出了答案:

  Time
  系统的设计和实现必须要考虑时间因素,建筑的修建有工期的限制,软件的构建同样有deadline
  Cost
  引用文中的话Architecture is expensive, especially when a new domain is being explored.成本的影响毋庸赘言。 
  Experience
  经验的缺乏会导致很难“discover and develop new abstractions”,从而影响软件架构的复杂程度。(domain experience和architectural experience还不太理解。)
  Skill
  程序员之间的技能水平、适应能力以及开发工具的偏好等方面都有差异
  Visibility
   可见性是建筑和软件构建的差异之一:所有人走进一栋大楼就可以看见这栋大楼的内部结构,而软件的内部结构只有开发软件的人才能知晓。
  Complexity
  软件本身的复杂度直接影响了设计一个清晰的架构的困难度;the software is ugly because the problem is ugly, or at least not well understood.
  Change
  软件的需求一旦改变,软件的体系架构也要相应地改变。
  Scale
  项目规模变大,即便采用了分而治之的思想,也无法很好地解决问题
  这部分提到了艾伦·凯的一句话:"good ideas don't always scale."
  Scale的动词含义我特意查了下,衡量,攀登,脱落似乎都不太符合。
  然后去查资料,发现这句话出现在下面这篇访谈中http://www.folklore.org/StoryView.py?project=Macintosh&story=Creative_Think.txt
  于是我的理解:好的想法,倘若要付诸实现,不会要求其涉及的规模很大。
  (附:艾伦·凯Alan Kay是Smalltalk的最初设计者,说过"The best way to predict the future is to invent it."预测未来的最佳方式就是去创造它。

个人能力有限,所以下面还是摘录几段文中的话,算是记一点笔记。

  1.The time and money to chase perfection are seldom available, nor should they be. To survive, we must do what it takes to get our software working and out the door on time. Indeed, if a team completes a project with time to spare, today’s managers are likely to take that as a sign to provide less time and money or fewer people the next time around.
  追求软件的设计完美,是不太现实的。时间和预算都会成为不可忽视的因素,不断提醒着你做出一个能用、按时交付的软件才是正道。一个团队提前完成了一个项目,不要高兴得太早,或许下一个项目的开发时间会有所缩减的!
  2.focus first on features and functionality, then focus on architecture and performance.
  3.BIG BALL OF MUD might be thought of as an anti-pattern, since our intention is to show how passivity in the face of forces that undermine architecture can lead to a quagmire. However, its undeniable popularity leads to the inexorable conclusion that it is a pattern in its own right. It is certainly a pervasive, recurring solution to the problem of producing a working system in the context of software development. It would seem to be the path of least resistance when one confronts the sorts of forces discussed above. Only by understanding the logic of its appeal can we channel or counteract the forces that lead to a BIG BALL OF MUD.
  4.One of mud's most effective enemies is sunshine. Subjecting convoluted code to scrutiny can set the stage for its refactoring, repair, and rehabilitation. Code reviews are one mechanism one can use to expose code to daylight.
  代码复审或许正是化解“大泥球”的阳光
  5.Indeed, reviews and pair programming provide programmers with something their work would not otherwise have: an audience. Sunlight, it is said is a powerful disinfectant. Pair-practices add an element of performance to programming. An immediate audience of one's peers provides immediate incentives to programmers to keep their code clear and comprehensible, as well as functional.
  极限编程-结对编程,有人在旁边盯着你敲代码,这就好比有观众在专心致志地看着你在舞台上表演,你会不由自主地投入其中。并且,这样一来代码的清晰度和可读性都会有大幅的提升。我记得结对编程时,我的同伴每敲出一段代码,我一旦不明白就会问她这个是什么意思,是要实现什么功能,在这样的一问一答中,我们对自己写的代码的理解得更清楚了,也使得代码的逻辑性有了一定的保障。毕竟两个人都能看懂的代码的可读性,是要高于一个人能懂的代码的可读性的。
  6.An additional benefit of pairing is that accumulated wisdom and best practices can be rapidly disseminated throughout an organization through successive pairings. This is, incidentally, the same benefit that sexual reproduction brought to the genome.
  结对编程的好处:智慧的累加
   7.There are three ways to deal with BIG BALLS OF MUD. The first is to keep the system healthy. Conscientiously alternating periods of EXPANSION with periods ofCONSOLIDATION, refactoring and repair can maintain, and even enhance a system's structure as it evolves. The second is to throw the system away and start over. TheRECONSTRUCTION pattern explores this drastic, but frequently necessary alternative. The third is to simply surrender to entropy, and wallow in the mire.
  处理大泥球的三种方式:1在大泥球的基础上,不断修复、改善,甚至增强系统结构;重新构建3干脆放任自流,随它自己去发展。
  8.Master plans are often rigid, misguided and out of date. Users’ needs change with time.
   9.Successful software attracts a wider audience, which can, in turn, place a broader range of requirements on it. These new requirements can run against the grain of the original design. Nonetheless, they can frequently be addressed, but at the cost of cutting across the grain of existing architectural assumptions.
  又是用户需求的问题。软件构建之前的整体规划往往会随着用户需求的变化而不断改变。
  我觉得有趣的是描红的那句话。软件做的成功会吸引大量的用户,反过来,正因为用户量之大,才会导致需求更多。所以这个暗示着需求增加也许不是坏事,反而说明你开发的软件很受欢迎?这一点挑明了,程序员们面对需求的改变就不会如此郁闷了吧。
   10.Maintenance needs have accumulated, but an overhaul is unwise, since you might break the system.
  维修需要积累,大修不明智,因为可能会破坏系统
   11.Microsoft mandates that a DAILY BUILD of each product be performed at the end of each working day……Indeed, this approach, and keeping the last working version around, are nearly universal practices among successful maintenance programmers.
  每日构建
  12.If you can’t make a mess go away, at least you can hide it.
  接口

  (后面的漫画,画风很别致呀..可惜没有看懂)

 

转载于:https://www.cnblogs.com/encoin/p/4085706.html

阅读笔记-软件工程的大泥球相关推荐

  1. 软件工程的瀑布, 大泥球, 教堂,集市,和银弹

    0x1 No Silver Bullet 1           There is no royal road, but there is a road 软件工程缺乏一剂良药,在硬件成本随着发展速度快 ...

  2. 软件工程的瀑布, 大泥球, 教堂,集市,银弹以及我的感想

    银弹 Brooks在他最著名的<没有银弹-软件工程中本质性和偶然性>文章里指出,在软件开发过程里是没有万能的终杀性武器(即银弹)的,只有各种方法综合运用,才是解决之道.而各种声称如何如何神 ...

  3. 阅读作业:大泥球、敏捷、人件

    "大泥球" 我了解到的就是这几点: 第一,有很多条件促使大泥球产生,包括"一次性代码",时间紧缺,急于完成最小集,初期尝试,功利主义等等. 第二,有些时候可以允 ...

  4. 《Microsoft.NET企业级应用架构设计(第2版)》——第2章 为成功而设计 2.1“大泥球”...

    本节书摘来自异步社区<Microsoft.NET企业级应用架构设计(第2版)>一书中的第2章,第2.1节,作者: [意]Dino Esposito(埃斯波西托) , Andrea Salt ...

  5. 是否存在分布式的【大泥球】?

    2021-11-11 15:08 是否存在分布式的[大泥球]? 人们往往把微服务架构当成一剂良药,用以解决单体应用内的大泥球问题.然而,大泥球的本质问题是因为代码都位于同一个进程里运行的吗?换言之,如 ...

  6. 阅读笔记——软件工程的瀑布、教堂和集市

    (个人阅读作业2:http://www.cnblogs.com/jiel/p/4030382.html ) 一.教堂与集市 1.1 定义 "两种不同的自由软件开发模式: 大教堂模式(The ...

  7. 阅读笔记-软件工程的银弹

    (最近看了两篇关于"银弹"的文章,做一点笔记,其中,英文基本上是引用原文) 一.No Silver Bullet: Essence and Accidents of Softwar ...

  8. 大崩溃-正在降临的危机与金融风暴史(The Great Crash)阅读笔记 第一章 大崩溃:货币战争的真相

    图书信息 李晓鹏著 北京邮电大学出版社 修改记录 记录第一章 2012年2月21日6:10 - 2012年2月21日7:30 记录第二章 2012年2月22日6:04:58 -2012年2月22日7: ...

  9. 答“我们的团队项目是否有大泥球?”

    总结了一下,产生大泥球的主要原因有下面这些原因: (1)一次性代码 (2)碎片式增长 (3)为了让软件不出问题 (4)Copy/paste导致问题转移(有问题的代码被复制到很多地方,不断蔓延) (5) ...

最新文章

  1. 视频插帧--Video Frame Interpolation via Adaptive Convolution
  2. micropython 模块_MicroPython添加Module(一)
  3. MySQL中有哪些锁?
  4. POJ3422简单费用流
  5. python三十三节_第三十三节,sys解释器相关模块
  6. 设计模式(一)工厂模式Factory(创建型)
  7. MV* 框架 与 DOM操作为主 JS库 的案例对比
  8. java怎么看具体被挂起的线程_Java线程的挂起、恢复和终止
  9. C语言中return和exit的区别
  10. LeetCode 1790. 仅执行一次字符串交换能否使两个字符串相等
  11. 项目管理中网络图的看法和相关参数阅读说明
  12. bin文件编辑_为MediaWiki安装可视化编辑器VisualEditor
  13. [.net 面向对象程序设计深入](36)Redis——基础
  14. java imap收邮件_android pop3与imap方式接收邮件(javamail)
  15. (六)Oracle学习笔记—— 约束
  16. 浮动Float(HTML、CSS)
  17. 安装svn 汉化包 也不能设置中文
  18. EAN13条形码生成器
  19. 原生JS封装拖动验证滑块方法
  20. 华为手机Root方法(推荐)

热门文章

  1. CSS样式之块元素行内元素
  2. 网络广告CPA、CPC、CPM、CPO、PPC、PPL、CPTM缩写解释
  3. 青岛计算机考试试题,2016年计算机一级上机考试题「word版」
  4. pixhawk飞控接口含义
  5. WebSphere升级:sMash、eXtreme Scale、Virtual Enterprise、Business Even
  6. jdk8安装教程及环境变量配置
  7. python输入名字配对情侣网名_定制情侣网名输入名字
  8. 【洞见研报】研报速读:厨房小家电行业报告——“沙发经济”走向“厨房经济”(小家电,厨房小家电,厨房经济)
  9. 12.8 Daily Scrum
  10. 开源应用架构之​Selenium WebDriver(上)