Reading Task 2 —— by12061154Joy
关于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:文章中可能引用到别的作者的观点,鸣谢且侵删歉!
Reading Task 2 —— by12061154Joy的更多相关文章
- 《移山之道》Reading Task——by12061154Joy
最近因为作业的原因所以接触到了这本书,给我最特别的感觉就是很新鲜,主要是因为这本书是以故事展开的,大概是我读的书太少,基本没有看到过专业书的知识体系是用故事串讲起来的,这样帮助读者理解了一些概念并且不 ...
- last individual reading task 12061183叶露婷
http://www.cnblogs.com/yltyy/p/4025426.html 1.Different people deserve different tasks; Once team ro ...
- individual reading task ---12061183 叶露婷
Different people deserve different tasks; Once team roles are settled, there comes along a lot of ot ...
- hadoop报错:WARN mapred.JobClient: Error reading task outputNo route to host
解决方案: /etc/sysconfig/network/etc/hosts$hostname 这三处的主机名都要一样. 具体参考:http://blog.itpub.net/28254374/vie ...
- Reading task(Introduction to Algorithms. 2nd)
Introduction to Algorithms 2nd ed. Cambridge, MA: MIT Press, 2001. ISBN: 9780262032933. Introduction ...
- 《移山之道》Reading Task
老师布置的阅读任务虽然是附加的作业,但是对我来说是个很好的学习机会.软件工程主要是对工程的开发进行学习,毕竟在学校老师教了那么多的知识,我们课下做了那么多的练习并没有提高我们做一个工程的能力.一个项目 ...
- Java8新特性之Collectors
参考:Java8新特性之Collectors 在第二天,你已经学习了Stream API能够让你以声明式的方式帮助你处理集合.我们看到collect是一个将管道流的结果集到一个list中的结束操作.c ...
- Java8学习笔记(七)--Collectors
本系列文章翻译自@shekhargulati的java8-the-missing-tutorial 你已经学习了Stream API能够让你以声明式的方式帮助你处理集合.我们看到collect是一个将 ...
- java阳历转农历
package com.reading.task; import java.text.ParseException;import java.text.SimpleDateFormat;import j ...
随机推荐
- Request获取客户端IP
获取客户端的IP地址的方法是:request.getRemoteAddr() ,这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了. ...
- Git永久删除文件和历史记录
目录 Git永久删除文件和历史记录 使用filter-branch 添加到.gitignore文件里并push修改后的repo 清理和回收空间 Git永久删除文件和历史记录 造成你想从git存储库中永 ...
- 【PAT】B1078 字符串压缩与解压(20 分)
主函数接收下第一个字符,接着一个分支就转到两个函数中的一个 1.压缩简单,只要与下一个一样就只计数,如果不同了就直接输出 2.至于解压不知道数字是几位数,所以我直接用了sscanf,然后判断是几位数字 ...
- LNMP下动静分离部署phpmyadmin软件包
LNMP环境肯定是先要配置好的.可以参考我之前的博客.那我们直接进行配置,我这里使用了三台机器进行动静分离部署,第一台负责nginx反向代理,第二台负责php-fpm应用程序以及mariadb的服务器 ...
- MySQL使用索引的场景分析、不能使用索引的场景分析
一.MySQL中能够使用索引的典型场景 1.匹配全值.对索引中的列都有等值匹配的条件.即使是在and中,and前后的列都有索引并进行等值匹配. 2.匹配值的范围查询,对索引的值能够进行范围查找. 3. ...
- debian 7.4 安装配置
改用debian差不多有半年了,之前一直用fedora,大概3年多,虽然软件包都很新,总是不太稳定,有点软件用着用着就自动退出了. 换了debain之后,这半年还真是一直没啥问题,这里总结了一些安装配 ...
- web笔试
类型判断用到哪些方法? typeof和instanceof 值类型和引用类型的区别? 根据 JavaScript中的变量类型传递方式,又分为值类型和引用类型,在参数传递方式上,值类型是按值传递,引用类 ...
- CentOS 7下安装Python3.6.4
CentOS 7下安装Python3.5 •安装python3.6可能使用的依赖 yum install openssl-devel bzip2-devel expat-devel gdbm-deve ...
- 【js】++i和i++
解析: i++ 执行完语句后再加1 ++i 先加1再执行后面的语句 例如 var i=0; ++i 的值为1 i++的值为0 注意:不管前置++还是后置++,i的值都会发生变化,值为1 例子 1.va ...
- MySQL主从同步原理
mysql主从复制用途 实时灾备,用于故障切换 读写分离,提供查询服务 备份,避免影响业务 主从部署必要条件 主库开启binlo日志(设置log-bin参数) 主从server-id不同 从库可以连同 ...