- 浏览: 83534 次
文章分类
- 全部博客 (136)
- 我的技术资料收集 (98)
- 具体技术 (1)
- 的技术资料收集 (4)
- All Articles (1)
- 机器学习 Machine Learning (1)
- 网络编程 (1)
- java (2)
- ava (1)
- 零散技术 (1)
- C# (3)
- 技术资料收集 (1)
- CQRS (1)
- 数据库技术(MS SQL) (1)
- .Net微观世界 (1)
- Oracle SQL学习之路 (1)
- C/C++ (1)
- JS/JQ (1)
- Js封装的插件/实例/方法 (2)
- 敏捷个人 (2)
- Javascript (1)
- 程序设计---设计模式 (1)
- Bug (1)
- 未知分类 (1)
- 程序设计 (1)
- Sharepoint (1)
- Computer Graphic (1)
- IT产品 (1)
- [06]JS/jQuery (1)
- [07]Web开发 (1)
- .NET Solution (1)
- Android (3)
- 机器学习 (1)
- 系统框架设计 (1)
- Others (1)
- 算法 (1)
- 基于Oracle Logminer数据同步 (1)
- 网页设计 (1)
- 原创翻译 (1)
- EXTJS (1)
- Jqgrid (1)
- 云计算 (1)
最新评论
原帖地址:http://www.cnblogs.com/huang0925/archive/2013/05/24/3096581.html
<article class="hentry" role="article"><div class="entry-content">
<p>原书标题为<a href="http://www.amazon.cn/mn/detailApp/ref=asc_df_B0033WSFAO622894/?asin=B0033WSFAO&tag=douban-23&creative=2384&creativeASIN=B0033WSFAO&linkCode=asn">《Practices of An Agile Developer》</a>。中文名为<a href="http://book.douban.com/subject/4164024/">《高效程序员的45个习惯-敏捷开发修炼之道》</a>。敏捷这个词已经烂大街了,关于敏捷的书籍俯拾皆是。很多人是敏捷的狂热粉丝,而另一些人却讨厌敏捷,认为只是个噱头。我觉得很可能的原因之一是敏捷这个名字没起好。它的原名为“轻量型软件开发过程”(”lightweight process”),但后来阴差阳错成了agile(敏捷)。</p>
<!-- more --><p>既然书名是敏捷开发者的实践,那么就必须认识敏捷。只有深入的理解了这些实践的来源和目的,才能更好的践行甚至改进实践。</p>
<p><strong>敏捷可以用一句话来概括:敏捷开发就是在一个高度协作的环境中,不断的使用反馈进行自我调整和完善,最终交付用户想要的软件。</strong></p>
<p>从这句话中可以得出很多东西。</p>
<h2>首先,项目适不适合敏捷有两个先决条件:</h2>
<ol>
<li><p><strong>项目是以价值为导向的。</strong>也就是整个团队有一个总体一致的目标,那就是产出高质量、高价值、符合用户需求的软件。以价值为导向,看似简单,实则很难,甚至某些时候要要求公司的组织架构做出一定的调整。试想在一个等级森严、官僚化严重、各种无谓的考评泛滥的公司,有多少人能静下心来好好的搞开发,搞产品?只有打造一个相对扁平的组织,给予充分的信任和自由度,才有利于敏捷的实施。这反过来又要求团队中的每个人有高度的自律性。</p></li>
<li><p><strong>团队能够达到高度协作。</strong>必须能够保证团队中的成员能够流畅的交流。如果在团队中大搞一言堂,信息不透明,很容易打击团队人员工作的积极性,致使团队分崩离析。另外,客户也属于团队中的一员。我们做出的产品最终是给客户看的,如果客户不能保证与团队紧密的合作,那么很容易使产品偏离客户的期望,最终交付失败。</p></li>
</ol>
<h2>再次,可以看到敏捷的基础:反馈。</h2>
<p>一旦你意识到走错了路方向,就要立即做出决策。举个例子,办公室另个团队给我们分享了这样一个故事。在项目刚开始时他们设计了叫做CoreService的类来封装所有的服务。随着项目的进行,CoreService类由于需要处理的服务越来越多,导致类越来越庞大。每个人在修改这个类时,写单元测试要建立对N个服务的mock,苦不堪言。问题在于,没人及时的提出这个bad smell,导致了人们花费了大量的时间来维护它。</p>
<p>这说明了及时反馈的重要性。<strong>反馈包含提出反馈和接受反馈。</strong></p>
<p><strong>提出反馈需要勇气和时机。</strong>要勇敢的提出自己的想法,这既需要自身具有对项目负责的精神,还要团队提供安全的环境。要及时的指出项目中不好的地方,千里之堤,毁于蚁穴。大灾难是逐步演化而来的,项目中切忌温水煮青蛙。</p>
<p><strong>接受反馈需要气度和行动。</strong>这就要求团队成员做事要有专业的态度,对事不对人,重结果轻过程。同时要拿出具体的行动,否则很容易打击积极性。</p>
<h2>其次,可以看到敏捷的精髓:拥抱变化。</h2>
<p>软件开发行业是一个不停发展和永远变化的领域。现在没有将来也不会有一个人能够了解你的项目的方方面面。</p>
<p>变化无处不在,这就要求我们不断的学习。而迭代和增量式的学习则不失为一个好办法。一个学习型的团队才是较好的团队。当然,在学习的同时,你也要懂得丢弃。打破旧习惯很难,更难的是自己还没意识到这个问题。丢弃的第一步,首先是意识到你还在使用过时的方法,这也是最难的部分。</p>
<p>同时,变化意味着我们要主动应对。德国陆军元帅Helmuth von Moltke说过一句话“没有任何计划在遇敌后还能继续执行。”在软件开发中,我们可以这样理解,任何设计在开发中只是一个起点,它如何你的代码一样,会不停地进一步发展和提炼。</p>
<h2>最后,敏捷的目的:交付用户想要的软件。</h2>
<p>试想客户将需求交付给你,要你几年后交付系统。然后,你基于这些需求构建了系统并按时交付。客户看了软件以后连声称赞。从此你多了一个忠实客户,接着开心的投入到下个项目中。请问这样的事情在你的项目中发生过吗?</p>
<p>通常情况是客户看到后暴跳如雷,这根本不是我想要的。这是因为用户的需要、技术和我们对需求的理解,都会随着时间的推移而变化。</p>
<p>那么,如何解决这个问题那?方法之一就是采用敏捷的迭代式开发。每个迭代至少有两个活动不可或缺。一个是展示会议(show case),向客户展示目前的项目进展,已完成的功能,从而收集客户的反馈,即时对产品的方向做出调整。另一个是回顾会议(retro)。回顾会议则是提出反馈的一个好时机。通过回顾会议分析出这个迭代中的做的好的地方和不好的地方,并提出具体的改进行动。</p>
<p>要将团队带入新的领域,必须首先要以身作则。我们需要的是领导者,而不是管理者。无论你目前的项目是否是敏捷项目,这本书中你都可以找到能够借鉴和提高的地方。敏捷中的持续改进不仅局限于项目开发,其实更适合于个人。通过持续改进自己的习惯、处事方法,保持一颗好奇心,勇敢的尝试未知领域,只要自己能力提高了,何惧其他?</p>
<p>改变从自身做起,不能自暴自弃,而要奋起直追。</p>
</div></article>
发表评论
-
C#WebBrowser控件使用教程与技巧收集--苏飞收集 - sufeinet
2013-06-28 12:07 1066原帖地址:http://www.cnblogs.com/suf ... -
我要喷一个自认为很垃圾的网站架构 - 老赵【苏州】
2013-06-28 12:01 1125原帖地址:http://www.cnblogs.com/lao ... -
[翻译] Oracle Database 12c 新特性Multitenant - Cheney Shue
2013-06-28 11:43 619原帖地址:http://www.cnblogs.com/ese ... -
memcahd 命令操作详解 - 阿正-WEB
2013-06-28 11:37 468原帖地址:http://www.cnblogs.com/azh ... -
面向过程的代码符合大众的思维方式吗? - 史蒂芬.王
2013-06-27 10:28 592原帖地址:http://www.cnblogs.com/ste ... -
面向过程的代码符合大众的思维方式吗? - 史蒂芬.王
2013-06-27 10:28 556原帖地址:http://www.cnblogs.com/ste ... -
RPG游戏之组队测试 - zthua
2013-06-27 10:22 556原帖地址:http://www.cnblogs.com/zth ... -
IT人们给个建议 - SOUTHER
2013-06-26 14:06 521原帖地址:http://www.cnblogs.com/sou ... -
Java向前引用容易出错的地方 - 银河使者
2013-06-26 14:00 491原帖地址:http://www.cnblogs.com/nok ... -
使用Func<T1, T2, TResult> 委托返回匿名对象 - 灰身
2013-06-26 13:54 798原帖地址:http://www.cnblo ... -
【web前端面试题整理03】来看一点CSS相关的吧 - 叶小钗
2013-06-25 10:45 781原帖地址:http://www.cnblogs.com/yex ... -
Windows 8 动手实验系列教程 实验6:设置和首选项 - zigzagPath
2013-06-25 10:27 616原帖地址:http://www.cnblogs.com/zig ... -
闲聊可穿戴设备 - shawn.xie
2013-06-25 10:21 561原帖地址:http://www.cnblo ... -
CentOS下Mysql安装教程 - 小学徒V
2013-06-23 15:24 606原帖地址:http://www.cnblogs.com/xia ... -
vmware安装ubuntu12.04嵌套安装xen server(实现嵌套虚拟化) - skyme
2013-06-23 15:18 835原帖地址:http://www.cnblogs.com/sky ... -
之前专门为IE6、7开发的网站如何迁移到IE10及可能遇到的问题和相应解决方案汇总 - 海之澜
2013-06-23 15:12 946原帖地址:http://www.cnblogs.com/wuz ... -
Android学习笔记--解析XML之SAX - 承香墨影
2013-06-23 15:01 406原帖地址:http://www.cnblo ... -
SQL Server 性能优化之——T-SQL TVF和标量函数
2013-06-19 09:32 667原帖地址:http://www.cnblogs.com/Boy ... -
Nginx学习笔记(二) Nginx--connection&request
2013-06-19 09:26 662原帖地址:http://www.cnblogs.com/cod ... -
从郭美美霸气侧漏看项目管理之项目经理防身术
2013-06-19 09:20 497原帖地址:http://www.cnblogs.com/had ...
相关推荐
这45个习惯覆盖了态度、学习、开发流程、用户、编程以及团队协作等多个方面,旨在帮助程序员成长为更高效、更优秀的专业人士。 1. **态度篇**: - **做实事**:解决问题,勇于承担责任,避免抱怨和指责。 - **...
### 高效程序员的10个习惯 #### 一、对事不对人 在软件开发过程中,团队成员之间经常会因为设计方案、技术选择等方面的意见不合而产生冲突。这种情况下,很容易将注意力从问题本身转移到个人身上,导致原本的技术...
Phil Chu 提出的高效程序员的七个习惯是每位IT从业者应当关注和实践的。以下是对这些习惯的详细解析: 1. **理解你的需求**:正确理解和把握项目需求是避免浪费时间和资源的关键。快速建模和创建原型有助于快速验证...
《035-10x程序员工作法》这个主题聚焦于高效编程实践,旨在帮助程序员提升工作效率,达成所谓的“10x程序员”水平。在软件开发领域,10x程序员通常指的是那些能以远超平均水平的效率完成工作的程序员。他们不仅能够...
- **开发和维护现有的网站程序**:持续改进现有系统的性能和稳定性,确保网站能够应对不断变化的市场需求。 - **技术支持、日常维护,服务器常规管理**:确保网站的平稳运行,及时处理各种技术故障,进行必要的...
程序员应该具备自我测试的习惯,即在编写完代码后主动进行单元测试和集成测试,以确保代码的质量。测试不仅包括功能测试,还包括性能测试、压力测试等多种类型的测试。通过全面的测试可以及早发现并解决问题,从而...
### 一个程序员的自我修养(编程修养) #### 1. 代码规范的重要性 - **背景**:在软件开发过程中,编写高质量、易于维护的代码至关重要。这不仅能够提高工作效率,还能减少错误的发生。 - **意义**:良好的编码...
如何成为一个优秀的程序员:深入解析与实践指南 在IT行业,成为一名优秀的程序员是众多技术追求者梦寐以求的目标。在《如何成为一个优秀的程序员》一文中,作者罗伯特·L·里德(Robert L. Read)列出了多达一百条...
- 强调持续改进的重要性。 4. **提升工作效率:** - 每天尝试提高一点点,长期坚持将显著提升效率。 - 举例说明:以每日1%的增长率计算,一年后效率将是原来的37倍。 5. **关注行业动态:** - 通过阅读新闻...
// 改进后的做法 int sum = 0; int n = 10; int nSquared = n * n; for (int i = 0; i ; i++) { sum += i * nSquared; // 避免重复计算 } ``` 通过减少循环内的计算量,可以提高程序的运行效率。 #### 13. 函数名...
《程序员思维修炼》这本书主要探讨了如何提升软件开发者的思考和学习能力,这对于任何想要在IT行业中取得成功的人来说都是至关重要的。在这个快速发展的领域中,不断学习和适应新技能是保持竞争力的关键。以下是对该...
根据提供的文件信息,我们可以提炼出以下相关知识点,主要聚焦于Java程序员在开发过程中经历的转正答辩准备,包括个人简介、工作回顾、项目流程分析、工作体会等方面。 ### 一、个人简介与工作回顾 #### 1.1 入职...
### 对程序员的忠告 #### 1. 选择学习领域并持续扩展视野 在IT行业中,技术更新迭代迅速,作为程序员应该不断探索新的技术领域,拓宽自己的知识面。这意味着不仅要在现有的技能上深耕细作,还要时刻关注新技术的...
此外,书中还探讨了学习和持续改进的重要性。在快速变化的IT行业中,程序员需要保持学习新技能和新技术的热情,以适应不断发展的环境。这包括学习新的编程语言、框架、工具,以及了解软件工程的最佳实践。通过持续...
在软件开发过程中,持续改进和优化是必不可少的。同时,对软件工程原则的理解,如敏捷开发、测试驱动开发等,也是现代程序员应当掌握的技能。 总之,成为一名合格的程序员并不仅仅意味着编码技术的娴熟,更在于具备...
良好的工作习惯,如撰写工作日志和总结经验,展示了持续学习和改进的决心,这对于在不断发展的IT行业中保持竞争力至关重要。 综上所述,即使非典型的程序员工作经历,也可以从中提炼出适应IT职位的技能和经验,如...
### 每个程序员都应该知道的97件事 #### 知识点一:行动谨慎(Act with Prudence) - **作者**:Seb Rose - **核心内容**:本章节强调了作为程序员,在做出决策时应该保持谨慎的态度。无论是编写代码、设计系统...
- 通过阅读书籍如《细节决定成败》,程序员可以提升自己的思维方式和习惯,这直接影响到个人工作质量和效率。 3. **岗位职责与技能提升**: - 程序员的主要任务包括软件开发与测试,以及系统维护,这些都需要良好...