大泥球,是指杂乱无章、错综复杂、邋遢不堪、随意拼贴的大堆代码。这些年来,为了对付这个泥球,我们看到了多种指导方法,比如SOLID、GRASP和KISS,与其他诸多年代久远的、提倡高内聚、低耦合的方法一起出现。然而,实际情形没多大变化,“大泥球”看起来仍然是设计软件架构的最常见方法。我们现在惯用的敏捷性开发(Agile)的很多方面会直接导致泥球,包括:缺少前期设计、应对需求变化过晚、应对架构变化过晚、碎片式增长。

  我们理想中的代码是清晰的,优雅的,云淡风轻,一望无垠,坐在电脑前深呼吸,都能闻到雨后泥土的芬芳。但是现实呢?一打开编译器就头痛。代码看得眼花,整天去修BUG,还要花半天时间先读以前的代码。好不容易改完提交了,第二天却报出更多的新BUG。

  其实,我们的软件,在发布前,其实就已经百病缠身了,随着功能的增加,便有了BUG,老的BUG改了,可能引入新的BUG。复杂的商业软件多少都会有BUG。我们思考这样几个问题:我们如何发现烂代码?烂代码要不要改呢?应该怎么改?如果烂代码不是先天性的,那是不是可以预防?

  很多时候无论花费多少时间试图去找出完美的软件结构,客户总是引入一个变化破坏这个结构,不存在完美结构,只存在那些试图平衡当前的代价和收益的结构。有时候,我们会把原因归咎于客户,责怪他们总是改变需求。有些人认为,只要客户的需求仅限于他们最初所声明的,那么我们的设计就是没问题的,所以错就错在客户改变了他们的需求。需求变化是非常正常的,JOBS说“用户根本不知道他想要什么,直到你把产品交到他的手中”。这种情况也是或多或少存在的。但是,客户连源代码都看不到,这种怨念却是没道理的。

  制约程序员编写高质量代码的因素有哪些?对需求和设计的理解不透彻,对软件业务流程不熟悉,没有开发经验,不知道怎样的代码是好的,对开发工具或开发语言不熟悉,缺少监督体系或不重视质量评估,受情绪因素的影响等因素,其它非代码因素也起着关键作用。很多时候,好的代码会促生好的代码,糟糕的代码也会促生糟糕的代码。没人想去整理糟糕的代码,同样没人想把完美的代码弄得一团糟。因此,保持代码整洁很重要。

  函数的第一规则是要短小,第二条规则是要更短小。 我无法证明这个断言,我给不出任何证实了小函数更好的研究结果,我能说的是,40年来,我写过各种不同大小的函数,我写过另人憎恶的长达3000行的厌物,也写过许多100行到300行的函数,我还写过20行到30行的。经过漫长的试错,经验告诉我,函数就该小。

    ——《代码整洁之道》

  我们团队的代码中也肯定存在着大泥球,有些已经被发现的我们都已经尽力优化,比如我写用户排名RANK类的时候需要多次判断同一调用函数Sum的返回值,这时候定义一个变量就能避免没有必要的多次调用,大大提高了代码效率。当然肯定还存在一些还没被发现的大泥球,还有待我们进一步检查。

转载于:https://www.cnblogs.com/honghong1191/archive/2012/11/14/2769228.html

阅读作业之Big Ball of Mud——洪虹相关推荐

  1. 第二次阅读作业--12061161 赵梓皓

    阅读笔记之No Silver Bullet 本文中,作者的观点是没有任何一项技术或方法可使软件工程的生产力在十年内提高十倍(1986) 作者列举的原因是 代码的完成分为两部分: 抽象(建模)和 代码实 ...

  2. 个人阅读作业+个人总结

    个人阅读作业+个人总结 关于软件工程中的银弹之我的见解 首先我要提一下这篇文章的作者 Fred Brooks,这位大师写了一本很经典的书是<人月神话>. 我粗略拜读了一点,当时是为了寻找软 ...

  3. 第二次阅读作业感想——在混沌的英文中爬取软件工程的哲学 刘宇翔

    第二次阅读作业,第一次一口气读完好几篇英文技术论文.在不断的翻译中匍匐前进,在各种生涩的单词中爬取软件工程的哲学.在这里简单谈一下我对这几篇文章的看理解和看法. <No Silver Bulle ...

  4. 【SE】Week7 : Silver Bullet Cathedral and Bazaar Big Ball of Mud Waterfall ...

    1. Silver Bullet No Silver Bullet: Essence and Accidents of Software Engineering -- 无银弹理论,出自于美国1999年 ...

  5. 软件工程阅读作业感想

    软件工程老师给我们留了阅读作业,刚开始觉得老师留的作业阅读量太大,而且时间太短,对此感到不是很理解,但是当我开始阅读<移山之道>这本书的时候,感觉这本书真的写的很通俗易懂,利用移山软件公司 ...

  6. [Week17] 个人阅读作业

    个人阅读作业Week17 reading buaa software 解决的问题 这是提出问题的博客链接:http://www.cnblogs.com/SivilTaram/p/4830893.htm ...

  7. [2019BUAA软件工程]第1次阅读作业

    [2019BUAA软件工程]第1次阅读作业 Tips Link 作业连接 [2019BUAA软件工程]第1次阅读作业 读<构建之法>的疑惑 个人开发流程(Personal Software ...

  8. 软件工程网络15个人阅读作业1 201521123038 游舒婷

    软件工程网络15个人阅读作业1 201521123038 游舒婷 1.博客园地址 sakurai3104 2.码云地址 sakurai3104 3.阅读与思考 (1)回想一下你初入大学时对网络工程专业 ...

  9. final个人阅读作业

    一.软件工程M1/M2总结 1.M1阶段总结: 我们团队的软件工程开发是按照前后端来分别开发的,我是负责后端的.我们的项目是做一个北航的社团平台,是一个网站.在后端我们使用的是ruby on rail ...

最新文章

  1. EOS之记事本智能合约
  2. Hadoop的mapper输出中key和value之间的分隔符
  3. hadoop 学习(1):搭建环境
  4. xp共享文件win7访问时不能保存密码
  5. brother打印机清零步骤_兄弟打印机清零方法兄弟打印机清零方法步骤
  6. mac音频剪辑合并软件哪款比较好用,求推荐
  7. 关键帧、时间重映射、文本工具
  8. 怎样提高数据库查询效率
  9. php写出个人所得税,PHP如何计算个人所得税
  10. C语言 :探究Char 到底是啥
  11. uniapp 微信支付功能
  12. rasp 系统_浅谈RASP技术攻防之基础篇
  13. python爬虫-多线程小说批量下载
  14. 机械硬盘函数不正确要如何办啊
  15. 高德地图是直线距离吗_是直线直线
  16. lenovo thinkpad e435 升级DDR3 1600 16G内存成功
  17. 【问】“1005:DBPROCESS处于不可用或未启用状态”
  18. 做好一块PCB板不难,但做一块好PCB板却不容易!
  19. int,float与double的区别
  20. 协会福利|世界区块链大会(乌镇)门票免费领啦!

热门文章

  1. 电脑变小,技术员解决电脑屏幕变小了怎么办 【解决方法】 的教程介绍_
  2. Partial convolution Gated convolution
  3. 搭建zabbix监控及邮件报警(超详细教学)
  4. 【设计模式】从菜鸟到大鸟之23个模式整体观
  5. 本次操作因为计算机的限制而取消,Win7提示本次操作由于这台计算机的限制而被取消怎么办?...
  6. win10装mysql哪个版本好用吗_在win10系统安装两个不同版本的mySQL数据库
  7. 虹科方案|适用于VMware vSphere®环境的Mac Pro®和微型服务器存储连接
  8. 51单片机心形灯实现旋转呼吸灯流水编程
  9. 实时数仓-维表维护方案
  10. SCEA考试(SUN认证架构师)考什么(含真题及考点)