关于Silver Bullet

  Brooks在“No Silver Bullet”主张并断言在未来的十年之内(从1986年文章发表后开始计算),不会有任何单一的软件工程上的突破,能够让程序设计的生产力得到一个数量级的提升。软件开发困难分为本质性(essence)和附属性(accident),Brooks认为,附加性的困难会随着工具的改善而逐渐淡化,反而是本质性的困难最难以解决,因为大部分的活动是发生在人们的脑海里,缺乏有效的辅助工具,这是造成本质性困难的原因。而附属性的困难可以由过去的突破解决,一些高级语言和开发环境的发展使得附属性的困难大大降低。

  但就我个人浅薄的见识来说,我觉得这种“不会有任何单一的软件工程上的突破”的说法过于悲观和绝对了,好吧,这其实只是我对于这个瞬息万变的世界的“变化”的肯定,只有“变化”是不会变的,这种悲观的预测在我生活的信息化时代是不可想象的,不过这或许没有什么关系,我没有生活在1986年我也不甚了解那个时候的信息技术是怎样的。不过我只从看文章的角度来说比较赞同“There is a silver bullet”,查阅相关资料时发现Caper Jones曾提出的一个见解:

“〈没有银弹〉就如同大部分的论文一般,都把焦点集中在生产力,也就是软件每单位的输入成本能得到多少输出效果。Jones则表示:“把重点放在品质上,生产力将随之而来。”他认为,只要是成本过高和时程落后的专案,都耗费了非常多的额外时间和工作在查找并修正规格、设计、实现中的错误。Jones并提出数据佐证,缺乏有系统的品质控制与发生时程落后的灾难,这两者之间有强烈的相关性。

Caper Jones相信,两份同等的Cobol程序分别花10年编写,但其中一份使用结构化的方法,另一份则否,那么所得到的效果将相差3倍。”

  我觉得Jones讲的比较有道理,但是由于我自身对于软件工程的了解和实践很少,也说不上来一些理由啥的,我只能表明一下我赞同的方面。

关于big ball of mud:

  对于软件开发过程中的大泥球我真是感同深受,随意化的杂乱和结构化的系统,只是代码的堆砌和拼凑,导致很多错误和缺陷。在上一次的结对编程项目中,对于电梯的调度算法的改进确确实实让我们的工程成了一个大泥球,遇到问题不是用最合适或最优的解法,而是更方便修改的,没有对整个工程做一个好的规划,需要哪就改哪,整个工程是碎片式增长起来的,缺少前期的设计就直接做修改,以至于对于相同的需求都不能完全满足,也因为碎片式的结构无法完全的找出bug,彻彻底底成了一个无法改进也回不到原点的垃圾,最后我们还是放弃了做过修改的代码,重新设计规划修改了源代码。那一次的经历真是刻骨铭心,连续几天的熬夜做出了没用的东西也真让人挫败,也让我意识到做工程前期设计和考虑全局用最合适的解法修改是多么重要的事情。

关于Cathedral and the Bazaar:

  Cathedral model:每个版本开发有专属团队控管

  Bazaar model:放在因特网上供人检视及开发

  我们团队是做学霸网站的团队,采用的是Cathedral model。

关于lost in catB

  代码频繁的被重用但是没有经过适当的修改,使得重用部分有各种冗余也可能有缺陷,并不是最适合工程的代码,如今信息开放的时代,各种代码重用滥用屡见不鲜,但很多并没有经过修改,而是“拿过来就用”,B用A,C用B,如此循环下去代码质量会越来越差。

  就像这篇文章中提到的“学会计算机编程很容易,就像学会用钉子把两块木板钉到一起一样简单”,“但问题是——打个不恰当的比方,市场对“钉在一起的两块木板”的需求,除了“自豪的爷爷”的那点天伦之乐以外,真的是太小了。而且,由此再进一步学习钉椅子或做碗橱,都需要天分、实践和训练。我们增长的这99倍恰恰都来自那些既没有实践经验,又没有受过良好训练的人。” 模块化和代码重用都是好主意,但是现实是“各种包把Web搞得一团糟, 随便依赖,互相纠缠,代码越重用,浪费越严重。”

  作者批判了现在的bazaar model,他指出了我对于软件工程的印象比较倾向于Cathedral model的一方面:Bazaar model可以供很多人开发,而你去找相关功能时并不知道哪一部分才是你真正需要的,就好像我遗失了一朵花在路上,回去找时发现那里已经变成花园了,我不知道哪一朵是我要花,可能这个例子举的并不好,但是Bazaar总给我一种杂乱的感觉。但Bazaar相比于Cathedral是有它的优势的,Given enough eyeballs, all bugs are shallow。很显然Bazaar在这方面是Cathedral无法相比的。

关于worse is better:

  我始终记得小时候看的一本儿童文学里的“她的缺点就是她没有缺点”,“精致完美并不代表一切”。WIB提出的总的思想应该是“Simple is Best”。(原谅我很多地方用了“应该”之类的词,因为我也不确定对于作者的思想的理解对不对)比较simple和perfect,simple不一定不perfect,而软件工程中的perfect确不是简单的,考虑到各个方面的因素,将产品做的尽善尽美肯定是耗时耗力的,而Richard Gabriel提出的WIB可以快速推出软件应用,持续完善易推广并且拥有简洁的界面,相比于那些精致完美的工程(耗时长,不能快速更新满足客户源源不断的需求)来说是在现代软件工程领域比较受客户喜爱的,至少我比较喜欢。

关于瀑布模型:

  瀑布模型将软件生命周期分成了六个阶段:制定计划,需求分析,软件设计,程序编写,软件测试和运行维护。它规定了软件开发的顺序自上而下、相互衔接的固定次序,如果有信息未被覆盖或者发现了问题则返回上一阶段查找问题并进行适当的修改。

  优点是:每个阶段有自己的目标,不需要再关注前面的阶段,按部就班来做很省时省力;缺点是:各个阶段之间很少有反馈,只有在整个项目后期才能看得到结果,各个阶段都有deadline(这个点简直神烦,deadline什么的最讨厌了),对于经常变化的项目瀑布模型毫无作用。

关于敏捷开发我们团队的思想和做法:

  在12条敏捷原则里面我们至少做到了如下几条:

    1,我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。

        学霸网站基础的雏形已经有了,基本功能是用的,只是部分更高级的功能不能更好的满足用户的需求。

    2,即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。

    3,围绕被激励起来的人来构建项目。给他们提供所需要的环境和支持,并且信任他们能够完成工作。

    4,在团队内部,最具有效果并且富有效率的传递信息的方法,就是面对面的交谈。

    5,敏捷过程提可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。

        团队PM会持续的督促开发者按时完成自己的工作。

    6,每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。

        定时会议让大家指出工作上的不足,相应的进行调整。

经过几周的开发,自己的心得总结:

  首先是了解自己拿到的需求是什么,仔细思考后明确在现有的代码基础上如何进行最适合的改动才能满足需求。而不是随意的在改动最少的地方最方便改动的地方修改代码,那样会使得整个工程代码呈碎片式的增长,容易出现一次性代码的情况。现在要做的就是磨练自己,多思考,增加开发的经验和技巧,不让手中的程序成为一个大泥球。

  在团队协作方面,我觉得最重要的是沟通,面对面交流是最具有效果并且富有效率的传递信息的方法,所以在开发过程中一定要时常保持和队友的交流。并且工作中要保持一个长期恒定的开发速度,不能拖不能懒,因为不是一个人的项目而是一个团队的项目,对自己的放纵就是对团队的不负责任,不负责任的人是不会有好结果的。

ps:文章中可能引用到别的作者的观点,鸣谢且侵删歉!

转载于:https://www.cnblogs.com/ppxiaotongxue/p/4092361.html

Reading Task 2 —— by12061154Joy相关推荐

  1. 高中英语话题阅读 计算机,高中英语说课稿:Unit 3 Computers Reading Task Who Am I ?

    一.说教材 1.说教材的地位及作用 Who am I 出自人教版高中英语教科书第二册第三单元第一课时,本单元的话题是工厂技术,计算机的发展史和机器人.计算机对于高中生来说是较熟悉的一个话题,但&quo ...

  2. hadoop报错:WARN mapred.JobClient: Error reading task outputNo route to host

    解决方案: /etc/sysconfig/network /etc/hosts $hostname 这三处的主机名都要一样. 具体参考:http://blog.itpub.net/28254374/v ...

  3. 【渝粤教育】国家开放大学2019年春季 1062文学英语赏析 参考试题

    试卷代号:1062 2 0 1 9年春季学期期末统一考试 文学英语赏析试题 2019年7月 注意事项 一.将你的学号.姓名及分校(工作站)名称填写在答题纸的规定栏内.考试结束后,把试卷和答题纸放在桌上 ...

  4. Java8学习笔记(七)--Collectors

    本系列文章翻译自@shekhargulati的java8-the-missing-tutorial 你已经学习了Stream API能够让你以声明式的方式帮助你处理集合.我们看到collect是一个将 ...

  5. 5教程 watchout_初中英语阅读课教学交流

    初中英语阅读课教学交流 东棘坨镇中学 张国岭 教师应该重视阅读过程,把阅读分为阅读前.阅读中和阅读后三个阶段,总结出以下教学模式: Pre- reading: Lead in --Presentati ...

  6. 大学英语句子课文翻译clamber

    翻译  一单元 1 We have a problem with the computer system, but I think it is fairly minor. 我们的计算机系统出了毛病,但 ...

  7. 【FreeRTOS】小白进阶之如何使用FreeRTOS事件标志组

    事件标志组使用浅析. 1.头文件声明 #include "FreeRTOS.h" #include "task.h" #include "event_ ...

  8. ### java8之collector详解,以及结合toMap,sorted,groupingBy使用例子

    最近接触到java8的collector功能,网上查了下资料学习,这里记录一下. collect方法,它是一个能够把stream管道中的结果集装进一个List集合的终极操作. collect是一个把s ...

  9. 【深度学习系统连接分子结构与生物医药文本】

    KV-PLM:处理分子结构和医药文本 将预训练语言模型BERT 作为骨架 分子结构 → SMILES串 → 用BPE算法分割 为了学习不同语言单元的元知识,我们使用masked language mo ...

最新文章

  1. Git命令集十五——拉取命令
  2. ActiveMQ消息形式
  3. 从羊毛党看一个成功的裂变活动
  4. Express新建工程以及新建路由规则、匹配路由规则、控制权转移
  5. VS 配置外部DLL的引用路径【可执行文件的环境路径】
  6. libevent 1.4.13 / 源代码文件组织
  7. 在workflow中,无法为实例 ID“...”传递接口类型“...”上的事件“...” 问题的解决方法。...
  8. Linux下ctrl+c,ctrl+z,ctrl+d的区别
  9. ZSKAME大白菜2013官网下载
  10. 解决Windows Server 2008 System4进程占用80端口 net stop http
  11. 【kafka】kafka UnknownProducerIdException raised broker locate producer metadata producerId
  12. 如何在SQL Server中实现错误处理
  13. 怎么得到hid设备名_上海海关旧设备进口清关公司这个不错
  14. 浅谈Linux用户权限管理之三(文件与权限的设定)
  15. 《老路用得上的商学课》91-95学习笔记
  16. 优化家庭广电宽带网络设置
  17. 验证用户名和密码的C语言程序,客户端验证用户名和密码的方法详解
  18. puppet kick 报错返回值code3 求解答(finished with exit code 3)
  19. x86代表电脑的操作系统是32位 和 x64代表电脑的操作系统是64位
  20. PHP 接入 Apple 登录对 access_token/identityToken 进行 JWT 验证

热门文章

  1. 零基础微信完整版小程序开发之微信表情包小程序前端+后台源码(java)
  2. C#中的 int?是什么意思
  3. postgres 数据库架构介绍--1
  4. 计算机科学与工程学院彭骜宇,情系义卖,爱暖人心——计算机科学与工程学院开展“雷锋家乡学雷锋”爱心义卖活动...
  5. Niagara解决设备连接应用的软件框架平台技术。
  6. Phalcon之教程 2:INVO 项目讲解(Tutorial 2: Explaining INVO)
  7. envi与arcgis文件转换_如何用ARCGIS进行图像格式转换
  8. linux下QT去掉边框,qt 界面去掉系统边框
  9. Android Accessibility实践 程序检查微信被删好友
  10. 关于开展2020年全国大学生电子设计竞赛模拟电子系统设计专题邀请赛(TI杯)的第二次通知