粗略阅读《Agile Software Development》后的感想
大致配合翻译和词典阅读了一下这篇文章之后,我另外还查阅了维基百科、百度百科和MBA智库百科还有一些网络上的文章。对敏捷开发有了一个大致上的浅显的认识。
敏捷建模(Agile Modeling,AM)的价值观包括了XP(Extreme Programming:极限编程)的四个价值观:沟通、简单、反馈、勇气,此外,还扩展了第五个价值观:谦逊。
我在互联网上又查阅了一些其他的关于敏捷开发的资料,包括一些有过这样实践经验的程序员对敏捷开发的看法,还有他们用敏捷开发的办法实际上达到的效果。首先,我个人很喜欢敏捷开发的功能。我不喜欢阅读长篇的文档,和别人合作写程序的时候,如果对方给我一份很长的说明文档,那我的工作效率不会很高,还需要另外花时间去阅读文档和代码。我最喜欢敏捷开发里的一点就是面对面沟通。如果我能在程序前面对面地和我一起合作的同伴进行讨论,那么我们交流会顺利很多,效率也会高很多。敏捷开发讲究面对面沟通,这一点对小组内的效率有很大的提高。另外,敏捷开发的小组会议主张的是站立会议即强调“stand up”,既然是站立会议,那么就不会有太长的时间,这也强调了小组成员之间交流的效率。就我自身的一个例子来说,在上一次的结对编程作业中,我一开始拿着代码毫无思路,然后和同学一起面对面讨论了不多久,就明显感觉对代码有了一个比较完整的理解。不同的人在讨论的过程中,一句不经意的话有可能就会给别人刚好需要的提示。在结对编程过程中,读懂代码之后,有段时间还是对新的算法毫无头绪。在和高小洲同学讨论的过程中,我们就一起想出了更好的算法。而我们讨论的时间其实也并不长,实际上关键的也就是讨论中的那么一两句话,但是这一两句话对于整个工作的意义非常重要。之后的实现算法编写代码都很简单轻易了。
另外,敏捷开发讲究实际讲究效率,第一位的是做出能够运行的软件。我十分赞同这种讲究高效率的态度。在软件编写的过程中,其实很难去说清楚现在的进度进行到百分之多少了,有可能工作只差一点点就完成了,但是这个难关需要耗费的时间有可能比之前所有的零碎工作加起来还要长也不一定。因此只有一步一步脚踏实地,做出能够运行的软件了,才能认为是进度向前推进。一切不能运行的东西都是浮云。我很喜欢这个观点。敏捷开发本来就比较适合规模不大的团队来运用。这样的脚踏实地的观点,能够让整个队伍更加求实,减少在队伍中划水的人。让整个队伍更加有效率的运行起来。
敏捷开发讲究的重在做出可以运行的软件,进行小版本发布,不仅仅能够在组内让效率更高,整体上来说,经常有小版本发布,也能让外界对于这个软件的热情更加持久,不会出现一段时间没有更新这个软件就没有人气的状况。持续的小版本更新也能够让客户更加快地体验到软件的进行方向,让客户更好地进行反馈,让开发人员得到更多的信息,更加好地获得需求,从而让软件开发不至于走向错误的路线。
敏捷开发需要较少的文档。太多的文档很烦,我深有体会,敏捷开发强调要“较少的”文档,而重在面对面的快速高效的交流,这在前文中我已经说过我对此的看法了,因此不再多做赘述。敏捷开发的文档要少要精炼,要少但不是不要。没有文档很多工作会很难进行,因为毕竟开发人员不可能把所有相关的东西都记在脑海中,还是要进行一些记录的。但是重点是要怎样在不多的文档中把必要的事情记录下来。这一点上,我还没有过进行这类工作的经验,网络上的别人写的资料中,也基本都仅仅是提到了敏捷开发的小组的文档需要简短精干这一点,而且必要记录的东西是不能少的这几点,并没有多做陈述,因此我也只能说在今后的编程中尽量往这个方向去做去努力。
在文中,提到了“Is Design Dead?”,我认为并不能这么说。文中说敏捷开发的确不会在工程一开始就对每个步骤进行详细的设计与谋划,这是因为刚刚开始整个工程的时候,不可能把开发过程中会遇到的问题完全考虑到,那么如果在开发过程中遇到问题,就有可能被之前妄加的谋划倒入误区,导致问题复杂化。但是敏捷开发不再一开始进行详细地设计,并不是说敏捷开发要完全放弃设计。敏捷开发也会进行相应的设计,只是使用了不一样的方法而已,不会在工程一开始便谋划清楚所有事情,但是每个部分也会有设计,最终的工程会按照设计满足用户的需求,达到开发的目的。
对于我个人来说,值得一提的是,结对编程也是敏捷开发的工作小组常用的方法之一。在进行上一次的结对编程作业的时候我就明显地感受到了这个工作方法的好处。这个方法看似来两个人干一个人的活,对整体效率有降低。但是,首先,如上文说的,至少在我个人来说,我明显感受到了成员之间的讨论对于工作特别是整体思路上的好处,有些一个人冥思苦想不得解的问题,能够在两个人的讨论中很快地解决掉,而这其实就在很大程度上提高了开发效率。其次,两个人结对编程,一个人在编写代码的时候,犯下的简单错误,经常能够由另一个人很快指出,这样一来节省下来很多调试的时间。在一个人单独写程序的时候,有很多时间都用在调试上了,结对编程就能够把这些时间中的很大一部分节省下来。再次,两个人的知识面比单独一个人的知识面要广得多,有很多时候,编程过程中遇到一个问题不会,或者一个需要的技术不会,如果是一个人独立编程的话,那么我必须去查阅资料啊文档之类的,学习相关知识再来解决问题。而如果是结对编程的话,同伴能够互相高效率的解决对方不会的问题。这样能让整体进度势如破竹。结对编程是敏捷开发的常用方法之一,也是敏捷开发的思想的具体表现之一。敏捷开发的高效交流等等特点都能体现在结对编程方法上。
虽说,我个人很喜欢敏捷开发这种开发方法,但是敏捷开发也并非适用于所有情况下。我之所以觉得这个方法很好,是因为我身为一个学生,开发的软件种类、规模有限,组成的工作小组能力、人数有限。对于编写规模不大的软件的人数不多的小组,要实现面对面地高效交流、保持人员精干、保持队伍工作效率之类的都并非难事。但是如果是规模相当大的软件开发,比如说微软的windows7操作系统的开发,上千万行的代码量,成千上万的工作人员,这种规模的软件开发每次都要实现面对面的高效交流基本是不可能的。因此进行这样规模的开发,就需要在文档中,把敏捷开发中在面对面交流时说清楚的东西完全写清楚,这样虽然不比面对面交流来得效率高,但是却能够让这个大规模多人数的工作组织正确地运行起来,完成小团队无法完成的大工程。
以上观点均是我的个人观点,错误和纰漏的地方,敬请各位大神和各位老师、前辈指正。
粗略阅读《Agile Software Development》后的感想的更多相关文章
- 关于敏捷开发方法(Agile Software Development)的阅读笔记
对“敏捷开发”(Agile Software Development)这个词,我是在这学期邹欣老师<现代程序设计>课上第一次听到的,刚听到时并不知道其具体指什么,只是从字面上直觉其意思应该 ...
- 敏捷软件开发 Agile software Development(转)
原文链接: http://www.cnblogs.com/kkun/archive/2011/07/06/2099253.html 敏捷软件开发 Agile software Development ...
- 谈敏捷,谈开发 --《Agile Software Development》读后感
谈敏捷,谈开发 --<Agile Software Development>读后感 北航计算机学院 110616班 11061171 毛宇 联系方式:maoyu815930@sina.co ...
- 敏捷软件工程(agile software development) VS传统软件工程(traditional software development)
敏捷软件工程(agile software development) VS传统软件工程(traditional software development) Agile principle ...
- Agile software Development
转自:https://www.cnblogs.com/kkun/archive/2011/07/06/agile_software_development.html 敏捷软件开发 Agile soft ...
- Agile Software Development ——敏捷开发
敏捷? 过去几年中,软件行业中出现了一个新词汇——agile:与此同时,一个关于新的软件开发方式的变革正悄然兴起. 在老师的引导下,我阅读了Agile Guide网站上的几篇文章,并查阅了相关资料.不 ...
- [转] Agile Software Development 敏捷软件开发
原文作者:kkun 原文地址:http://www.cnblogs.com/kkun/archive/2011/07/06/agile_software_development.html 敏捷是什么 ...
- 软件工程个人作业——Agile Software Development读后感
昨天利用了半天的时间看了下老师给的网页下的8篇文章和一段宣言,将感悟整理为下面的一篇博客. 首先先介绍一下这个网页.记得我们上学期上过一门课叫做面向对象建模方法,在这门课上刘超老师极力推荐的一本教材— ...
- Agile software architecture design document style..( sketches and no UMLs)
http://www.infoq.com/articles/agile-software-architecture-sketches-NoUML If you're working in an agi ...
随机推荐
- Js解析json
var sysModule=[]; var treeJson = <%=(sysModule) %>; if (treeJson.length ...
- Mybatis 动态获取字段值(不需要创建javabean)
最近遇到一个这样的需求,如下: 用户可以通过自定义模板选择需要查询显示的字段,需要动态查询显示. 前提:数据库有一张表,里面有400多个字段. 要求:用户在前台可以自定义模板,一个模板可能对应x个字段 ...
- 关于Collections中的sort()方法总结
用Java集合中的Collections.sort方法对list排序的两种方法 本文部分引用自:http://my.oschina.net/leoson/blog/131904 用Collection ...
- css扁平化博客学习总结(三)header代码实现
页头.banner.正文.页脚的宏观布局 1.布局顺序的重要性: 由大到小,着眼最大的部分,慢慢细分. <body> <header><!-- 页头开始 --> & ...
- Java中startWith方法的使用!
今天看Java代码时,看到了字符串有一个方法是startsWith(String str)当时觉得见名之意,很简单吗,然后就自己动手做了一下,没想到发现了一个startsWith()方法的重载,sta ...
- 第五章 jQuery中的动画
通过jQuery中的动画方法,能轻松地为网页添加精彩的视觉效果,给用户一种全新体验. 1.show()方法和hide()方法 该方法的功能与css()方法设置display属性效果相同. 给show( ...
- 小学英语课文朗读APP开发笔记(一):创建Win7虚拟机
1 缘起 以小米盒子为代表的OTT机顶盒.智能电视的快速普及,快速推动了Android技术在机顶盒.智能电视领域的普及.既然都是用的Android操作系统,那么从技术上来说应该是大同小异的,当然和手机 ...
- 使用for xml path 分组查询
SELECT OLevel, WorkOrgID, WorkOrgName, PlanNum, PlanFinishNum, PlanUnFinishNum, PlanCanceledNum, P ...
- css 盒子模型理解
盒子模型是html+css中最核心的基础知识,理解了这个重要的概念才能更好的排版,进行页面布局.下面是自己积累和总结的关于css盒子模型的知识^_^,希望对初学者有用. 一.css盒子模型概念 CSS ...
- Vue.js中Directive知识
近期所学的Vue.js这个MVVM前端技术缓解了我一直愁于前后端开发杂糅所带来的痛苦.今天就来说说关于Vue.js里面的Directive知识. Directive Directive看上去虽然和An ...