第1章:敏捷 - 高效软件开发之道

在软件开发领域里,在项目研发过程中出现的需求变化和挑战就是你在冲浪时要应对的海浪 - 它们从不停止并且永远变化,像波浪一样。在不同的业务领域和应用下,软件项目具有不同的形式,带来了不同的挑战。甚至还有鲨鱼以各种伪装出没。

软件项目的成败,依赖于整个项目团队中所有开发成员的技术水平,对他们的培训,以及他们各自的能力高低。就像成功的冲浪手一样,开发人员必须也是技术扎实、懂得掌握平衡和能够敏捷行事的人。不管是预料之外的波浪冲击,还是预想不到的设计失败,在这两种情况下敏捷都意味着可以快速地适应变化

敏捷开发宣言

  1. 个体和变互胜过过程和工具
  2. 可工作的软件胜过面面俱到的文档
  3. 客户协作胜过合同谈判
  4. 响应变化胜过遵循计划

虽然右项也有价值,但我们认为左项具有更大的价值。

敏捷开发宣言:一种把以人为本团队合作快速响应变化可工作的软件作为宗旨的开发方法。

开发需持续不断,切勿时续时断。这种持续前进的开发思想根植于敏捷方法中。它不但应用于软件开发的生命周期,还应用于技术技能的学习需求采集产品部署用户培训等方面。它包括了软件开发各个方面的所有活动。

有些人对使用敏捷方法有顾忌,认为它只是另一种危机管理而已,事实并非如此。危机管理是指问题累积并且恶化,直到它们变得非常严重,以至于你不得不立即放下一切正在做的工作来解决危机。而这样又会带来其他的负面影响,你就会陷入危机和恐慌的恶性循环中。这些正是你要避免的问题。

敏捷的修炼之道

敏捷开发就是在一个高度协作的环境中,不断地使用反馈进行自我调整和完善。

下面将扼要讲述它的具体含义,以及敏捷的团队应该采取什么样的工作和生活方式。

首先,它要整个团队一起努力。敏捷团队往往是一个小型团队,或者是大团队分成的若干小团队(10人左右)。团队的所有成员在一起工作,如果可能,最好有独立的工作空间,一起共享代码必要的开发任务,而且大部分时间都能在一起工作。同时和客户或者软件的用户紧密工作在一起,并且尽可能早且频繁地给他们演示最新的系统

不断从自己写的代码中得到反馈,并且使用自动化工具不断地构建(持续集成)和测试系统。在前进过程中,你都会有意识地重构代码。

要以迭代的方式进行工作:确定一小块时间(一周左右)的计划,然后按时完成它们。给客户演示每个迭代的工作成果,及时得到他们的反馈(这样可以保证方向正确),并且根据实际情况尽可能频繁地发布系统版本让用户使用。

第2章:态度决定一切。软件开发是一项智力劳动。在此章,我们会讲解如何用敏捷的心态开始工作,以及一些有效的个人习惯。这会为你使用敏捷方法打下扎实的基础。

第3章:学无止境。敏捷项目不可能坐享其成。除了开发之外,我们还要在幕后进行其他的训练,虽然它不属于开发工作本身但却对团队的发展极其重要。我们还将看到,如何通过培养习惯来帮助个人和团队成长并自我超越

第4章:交付用户想要的软件。如果软件不符合用户的需求,无论代码写得多么优美,它都是毫无用处的。这里将会介绍一些客户协作的习惯和技巧,让客户一直加入到团队的开发中,学习他们的业务经验并且保证项目符合他们的真正需求。

第5章:敏捷反馈。敏捷团队之所以能够顺利开展工作,而不会陷入泥潭挣扎导致项目失败,就是因为一直使用反馈来纠正软件和开发过程。最好的反馈源自代码本身。本章将研究如何获得反馈,以及如何更好地控制团队进程和性能。

第6章:敏捷编码为满足将来的需求而保持代码的灵活和可变性,这是敏捷方法成功的关键。本章给出了一些习惯,介绍如何让代码更加整洁,具有更好的扩展性,防止代码慢慢变坏,最后变得不可收拾

第7章:敏捷调试。调试错误会占用很多项目开发的时间——时间是经不起浪费的。这里将会学到一些提高调试效率的技巧,节省项目的开发时间

第8章:敏捷协作。最后,一个敏捷开发者已经能够独挡一面,除此之外,你需要一个敏捷团队。这里有一些最有效的实践有助于黏合整个团队,以及其他一些实践有助于团队日常事务和成长。

敏捷工具箱

Wiki: Wiki是一个网站,用户通过浏览器,就可以编辑网页内容并创建链接到一个新的内容页面。Wiki是一种很好的支持协作的工具,因为团队中的每一个人都可以根据需要动态地新增和重新组织网页中的内容,实现知识共享。关于Wiki的更多详情,可查阅《Wiki之道》这篇文章[LCO1].

版本控制:项目开发中所有的产物 - 全部的源代码、文档、图标、构建脚本等,都需要放入版本控制系统中,由版本控制系统来统一管理。《版本控制之道使用Subversion》[Mas05].

单元测试:用代码来检查代码,这是开发者获得反馈的主要来源。在本书后面会更多地谈到它,但要真正知道框架可以处理大部分的繁琐工作,让你把精力放到业务代码的实现中。

自动构建:不管是在自己的本地机器上实现构建,还是为整个团队实现构建,都是全自动化并可重复的。因为这些构建一直运行,所以又称为持续集成。和单元测试一样,有大量的免费开源产品和商业产品为你提供支持《项目自动化之道》[Cla04]介绍了所有自动构建的技巧和诀窍(包括使用JavaLamps ).

最后,Ship It ! [RG05]一书很好地介绍了怎样将这些基本的开发环境实践方法结合到一起。

第2章:态度决定一切

态度非常重要,包括你的和团队的。专业的态度应该着眼于项目和团队的积极结果,关注个人和团队的成长,围绕最后的成功开展工作。集中精力,你是为做事而工作

软件项目时常伴有时间压力 - 压力会迫使你走捷径,只看眼前利益。但是,任何一个有经验的开发者都会告诉你,欲速则不达

对事不对人,会让工作更加有效

反馈是敏捷的基础。需要勇气去排除万难,奋勇前进

做事

过程符合标准并不意味结果是正确的。敏捷团队重结果胜于重过程

指责不会修复bug。把矛头对准问题的解决办法,而不是人。这是真正有用处的正面效应。

切身感受

勇于承认自己不知道答案,这会让人感觉放心。一个重大的错误应该被当作是次学习而不是指责他人的机会团队成员们在一起工作,应互相帮助,而不是互相指责。

平衡的艺术

  1. 如果你没有犯过任何错误,就说明你可能没有努力去工作。
  2. 开发者和质量工程师(QA)争论某个问题是系统本身的缺陷还是系统增强功能导致的,通常没有多大的意义。与其如此,不如赶紧去修复它。
  3. 如果一个团队成员误解了一个需求、一个API调用,或者最近一次会议做的决策,那么,也许就意味着团队的其他成员也有相同的误解。要确保整个团队尽快消除误解。

欲速则不达

理解开发过程,尽管我们在谈论理解代码,特别是在修改代码之前一定要很好地理解它,然而同样道理,你也需要了解团队的开发方法或者开发过程。

你必须要理解团队采用的开发方法。你必须理解如何恰如其分地使用这种方法,为何它们是这样的,以及如何成为这样的。

孤立非常危险,① 不要让开发人员完全孤立地编写代码。如果团队成员花些时间阅读其他同事写的代码,他们就能确保代码是可读和可理解的。阅读代码的频率越高越好。② 实行代码复审,不仅有助于代码更好理解,而且是发现bug最有效的方法之一。③ 防止代码难懂的重要技术就是单元测试。单元测试帮助你很自然地把代码分层,分成很多可管理的小块,这样就会得到设计更好、更清晰的代码。

不要坠入快速的简单修复之中。要投入时间和精力保持代码的整洁、敞亮。

平衡的艺术

  1. 你必须要理解一块代码是如何工作的,但是不一定需要成为一位专家。只要你能使用它进行有效的工作就足够了,不需要把它当作毕生事业。
  2. 不要急于修复一段没能真正理解的代码。这种+1/-1的病症始于无形,但是很快就会让代码一团糟。要解决真正的问题,不要治标不治本。
  3. 所有的大型系统都非常复杂,因此没有一个人能完全明白所有的代码。除了深入了解你正在开发的那部分代码之外,你还需要从更高的层面来了解大部分代码的功能,这样就可以理解系统各个功能块之间是如何交互的。

对事不对人

对一个明显的错误的正确的反应。询问你的队友,并提出你的顾虑

好的软件开发作品和好的软件设计,都需要大量的创造力和洞察力分享并融合各种不同的想法和观点,远远胜于单个想法为项目带来的价值。

必须把重点放在解决问题上,而不是去极力证明谁的主意更好。

团队中的每个人都需要自由地表达观点。即使你的建议不被全盘接受,也能对最终解决问题有所帮助。不要害怕受到批评。你不需要很出色才能起步,但是你必须起步才能变得很出色。

设定最终期限。没有最好的答案,只有更合适的方案。设定期限能够帮你在为难的时候果断做出决策,让工作可以继续进行。

逆向思维。团队中的每个成员都应该意识到权衡的必要性。先是积极地看到它的正面,然后再努力地从反面去认识它。目的是要找出优点最多缺点最少的那个方案。

设立仲裁人。仲裁人的责任就是确保每个人都有发言的机会,并维持会议的正常进行。

支持已经做出的决定。一旦方案被确定了(不管是什么样的方案),每个团队成员都必须通力合作,努力实现这个方案。

平衡的艺术

  1. 尽力贡献自己的好想法,如果你的想法没有被采纳也无需生气。不要因为只是想体现自己的想法而对拟定的好思路画蛇添足。
  2. 脱离实际的反方观点会使争论变味。若对一个想法有成见,你很容易提出一堆不太可能发生或不太实际的情形去批驳它。这时,请先扪心自问:类似问题以前发生过吗?是否经常发生?
  3. 这样说是不够的:我们不能采用这个方案,因为数据库厂商可能会倒闭。或者:用户绝对不会接受那个方案。你必须要评判那些场景发生的可能性有多大想要支持或者反驳一个观点,有时候你必须先做一个原型或者调查出它有多少的同意者或者反对者
  4. 在开始寻找最好的解决方案之前,大家对“最好”的含义要先达成共识。在开发者眼中的最好,不一定就是用户认为最好的,反之亦然。
  5. 只有更好,没有最好。尽管“最佳实践”这个术语到处在用,但实际上不存在“最佳”,只有在某个特定条件下更好的实践。
  6. 不带个人情绪并不是要盲目地接受所有的观点。用合适的词和理由去解释为什么你不赞同这个观点或方案,并提出明确的问题。

排除万难,奋勇前进

你应该重写这些代码,并比较重写前后的优缺点。动手证明(不要只是嚷嚷)最有效的方式,是把糟糕的代码放到一边,立刻重写。列出重写的理由,会有助于你的老板(以及同事)认清当前形势,帮助他们得到正确的解决方案。

当然,你也会很担心向团队其他成员说明这个问题,以争取更多的时间和帮助。

你已经把所有对问题的负面情绪抛诸脑后,你的意图很清楚,就是寻找解决方案。这显示出了你的真诚和勇气,同时你也赢得了他们的信任。

要有勇气向其他的项目成员、老板或者客户解释你的不同观点。你要不顾一切,向着正确的方向奋力前进。

切身感受

勇气会让人觉得有点不自在,提前鼓足勇气更需要魄力。但有些时候,它是扫除障碍的唯一途径,否则问题就会进一步恶化下去。鼓起你的勇气,这能让你从恐惧中解脱出来。

平衡的艺术

  1. 如果你说天快要塌下来了,但其他团队成员都不赞同。反思一下,也许你是正确的,但你没有解释清楚自已的理由。
  2. 如果你说天快要塌下来了,但其他团队成员都不赞同。认真考虑一下,他们也许是对的
  3. 如果设计或代码中出现了奇怪的问题,花时间去理解为什么代码会是这样的。如果你找到了解决办法,但代码仍然令人费解,唯一的解决办法是重构代码,让它可读性更强。如果你没有马上理解那段代码,不要轻易地否定和重写它们。那不是勇气,而是鲁莽。
  4. 如果你在压力下要对代码质量作出妥协,你可以指出,作为一名开发者,你没有职权毁坏公司的资产(所有的代码)

敏捷开发修炼之道 (一)高效软件开发之道、态度决定一切相关推荐

  1. 《高质量程序设计指南——C/C++语言》第1章 高质量软件开发之道

    第1章 高质量软件开发之道 本书的第1章之高质量软件开发之道,作者用大量的篇幅介绍了"软件质量"的基本概念,解释了软件质量的十大属性.这十大质量属性又分为功能性和非功能性两类,功能 ...

  2. 从易经中看软件开发之道

    <易经>是阐述天地世间关于万象变化的古老经典,是博大精深的辩证法哲学书. 老祖宗留下的东西,保罗万象,自然不会漏掉软件开发这个行当的. 从软件开发者角度去看易经,其实就是一个高层级的软件架 ...

  3. 读书笔记 -《高效程序猿的45个习惯-敏捷开发修炼之道》

    <高效程序猿的45个习惯-敏捷开发修炼之道> 一本2010年出版的书,当时敏捷还仅仅是在国外開始流行,像我这样的菜鸟级根本听都没听过. 这次通读了这本书,受益良多.回想自己的职业生涯,多是 ...

  4. 读书笔记 -《高效程序员的45个习惯-敏捷开发修炼之道》

    <高效程序员的45个习惯-敏捷开发修炼之道> 一本2010年出版的书,当时敏捷还只是在国外开始流行,像我这种菜鸟级根本听都没听过.这次通读了这本书,受益良多,回顾自己的职业生涯,多是漫无目 ...

  5. 《高效程序员的45个习惯——敏捷开发修炼之道》读书笔记

    <高效程序员的45个习惯--敏捷开发修炼之道>的读书笔记 <高效程序员的45个习惯--敏捷开发修炼之道>[美]Venkat Subramaniam / Andy Hunt 著 ...

  6. 读书笔记—高效程序员的45个习惯,敏捷开发修炼之道

    从公司拿的第一本书<搞笑程序员的45个习惯-敏捷开发修炼之道>,急急忙忙的看完了,写的是什么呢?大概清楚,但具体来说不是很清楚,所以现在总结一下下,里面虽说说的不是很具体,很多是大家都在做 ...

  7. 开发中的“软”与“硬”:高画质移动游戏开发之道

    摘要:游戏的效果不仅与游戏引擎的渲染相关,与硬件优化也有千丝万缕的联系.一款基于芯片优化的移动游戏界面,甚至可以堪比视频游戏的视觉效果.高通半导体事业部资深经理刘晓光从软硬件两个层面分享了移动游戏开发 ...

  8. 软件开发中常见英文缩写和各类软件开发文档的英文缩写

    软件开发中常见英文缩写和各类软件开发文档的英文缩写: 文章复制粘贴来源于:http://blog.sina.com.cn/s/blog_7326867a0100yfdl.html 英文简写 文档名称 ...

  9. 【线上峰会】如何一天掌握物联网全栈开发之道

    当移动红利时代结束,人才需求接近饱和的同时,传感技术.云计算.大数据.人工智能的日益成熟,并与智能家居.智慧城市相融合,将我们带入了真正智能化的物联网时代.那么,作为开发者的我们,又该如何顺势而为? ...

  10. 谷歌的AI应用开发之道

    https://www.toutiao.com/a6718151019873698308/ 全球AI第一大厂,打造AI产品时有何指导思想? 软件+硬件+AI. 没错,这是谷歌CEO皮猜在Google ...

最新文章

  1. 【2022新书】机器学习基础
  2. GDCM:gdcm::VM的测试程序
  3. Ubuntu 14 查看 docker中对应容器的 IP
  4. 子列表只是原列表的一个视图
  5. (并查集)Find them, Catch them
  6. linux下查看中断请求记录 IRQ
  7. Spark sample入门到精通
  8. 用C语言来实现冒泡排序
  9. java的dataset怎么用_ADO DataSet用法
  10. 如何通过IP共享文件
  11. icloud邮箱android手机,如何用iCloud账号登陆邮箱 使用方法【详解】
  12. mysql explain中的名词解释
  13. error和exception区别,throw和throws
  14. 简单控件学习——Lable/HyperLink
  15. cmd 查看端口占用并且结束进程【建议收藏】
  16. linux查看磁盘是否SSD盘
  17. 梦想世界2014年5月29日服务器维护公告,2021年4月30日游戏更新公告
  18. 电子商务商城系统开发方案:中大型交易类电商网站架构设计
  19. jsp文件的上传与下载
  20. 编写一个函数判断一个整数是不是素数c语言,编写函数判断一个整数是否为素数...

热门文章

  1. 怎样自制干果核桃仁蛋糕
  2. 点云添加高斯噪声的C++实现
  3. NRF52832----按键使用
  4. 量子计算应用于洛杉矶港口,货物装卸效率翻倍
  5. 造血干细胞培养涉及相关因子总结
  6. Android 视频旋转、缩放与回弹动效实现(二)
  7. 我的投资、理財、財富观
  8. window server 2012 R2防火墙无法启动,错误代码0x80070422
  9. 千万不要给手机root权限
  10. wd移动硬盘支持linux,玩转移动硬盘存储之WD篇