软件工程 敏捷的酒后问答

来源:《构建之法》

王屋村移山公司的程序员果冻最近请假参加了一系列敏捷的培训, 有好事者传言他和 “a-girl”勾搭上了, 其他年轻同事有点坐不住了, 也表示要参加此类活动。 几天后, 果冻回到公司, 给所有人发了一枚写有 “Agile” 的胸章。 他纠正大家的发音, 这个词不是发 “a-girl”, 而是“爱脚儿”! 果冻希望大家一起在公司里掀起一股爱脚儿的热潮, 把公司的软件工程质量从 CMM5 再提高一个档次。

小飞给他讲了一个笑话:

软件团队开会, 领导说: 我们要采用敏捷的开发流程. 很简单, 就是木有计划, 木有文档, 马上写代码, 随时发牢骚。

工程师问: 培训有木有?

领导说: 有, 刚才就是培训. 散会! 现在可以写代码和发牢骚了.

请看更多关于敏捷的漫画。

----

果冻说, “我不觉得可笑, 我认为敏捷是瀑布模型发明以来的另一个巨大的进步。”

大家笑完之后, 问那 爱脚儿模式到底是什么玩意儿? 能管用么? 能挣更多的钱么?

果冻说, 大家稍等几天, 多种敏捷大会的 PPT 就上线了. 到时大家就敏了!

晚上大家喝酒的时候, 碰到阿超, 于是就有这样的问答:

问: 爱脚儿 - 敏捷到底是什么东东? 好像有很多名词, 缩写和传说…

答: 敏捷 (Agile) 是一股思潮, 它包括了好几种软件开发的方法论 (methodology); 这些方法论又是建立在许多业界证明行之有效的最佳实践方法 (best practices) 上面的。 如图所示:

问: 敏捷的思想是从天上掉下来的么?

答: 不是, 是人们自己总结出来的。

问: 敏捷的方法论有哪些?

答: 比较有名的是:

  1.  
    1. 爱抚弟弟 (FDD)
    2. 史克朗姆 (SCRUM)
    3. 极限编程 (XP)

问: 那比较有名的最佳实践是什么?

答: 这就太多了, 你把任意三个字母组合一下, 说不定就是一个最佳实践, 例如 TDD (踢弟弟) 就是一个最佳实践。很多程序员老大哥都很喜欢踢弟弟。

问: 为什么人们以前没有总结出来敏捷, 而是最近这几年才醒悟呢?

答: 这个… 当原始人没有东西吃的时候, 为什么他们不知道吃方便面? 稍稍正经一点来说 - 有几个原因导致敏捷在互联网时代出现:

  1.  
    1. 最初的软件 (20 世纪60-70 年代) 的顾客都是大型研究机构, 军方, NASA 这些, 他们需要软件系统来搞科学计算, 军方项目, 和登月项目等, 这些系统相当庞大, 对准确度要求相当高。
    2. 20 世纪 80年代到90年代中, 软件进入了桌面软件的时代, 开发的周期明显缩短, 各种新的方法开始进入实用阶段. 但是软件发布的媒介还是软盘, CD, DVD, 做好一个发布需要较大的经济投入, 不能频繁更新版本。
    3. 互联网时代, 大部分的服务是通过网络服务器端实现, 在客户端有各种方便的推送 (push) 渠道. 由于网络的转播速度和广度, 知识的获取更加容易, 很多软件服务可以由一个小团队来实现。 同时技术更新的速度在加快, 那种一个大型团队用一个固定技术开发2-3 年再发布的时代已经过去了。 用户需求的变化也在加快, 开发流程必须跟上这些快速变化的节奏。

问: 什么样的牛人一夜之间想出了这么多敏捷的东东?

答: 首先, 很多方法已经在实践中运用了很多年, 不是牛人们一夜之间想出来的; 其次, 很多方法论把原来单个的实践方法结合起来, 运用到极致, 吸引了不少眼球。 不过, 一些牛人的确在几个晚上搞出了一个 “敏捷宣言”:

2001年2月,17 位软件绿林好汉聚集在美国犹他州的滑雪胜地雪鸟(Snowbird)雪场。白天除了滑雪, 没啥鸟事; 晚上除了喝酒侃大山, 鸟没啥事… 但是他们都感觉世变时移, 变法宜矣。 经过讨论,《敏捷宣言》应运而生:

敏捷思潮的价值观:

Individuals and interactions over processes and tools

个人和交互 重于 过程和工具
Working software over comprehensive documentation

可用的软件 重于 完备的文档
Customer collaboration over contract negotiation

和客户协作 重于 合同谈判
Responding to change over following a plan

响应变化 重于 遵循计划

后者并非没有价值,只是我们更加关注前者。

敏捷的原则中文版在这里。

问: 为啥很多研究都证明敏捷很有效果?

答: 大多数被测试, 被研究的新东西都很有效果, 这是 Hawthorne 效应。例如你可以测试 “给每一个程序员发毛绒玩具 - 然后测试劳动生产率“, 你会发现劳动生产率提高了!

问: 敏捷是万能的么? 我上学的时候老师教我们 “形式化的软件开发方法 (Formal Method)”, “里程碑式的开发 (Plan-driven development)”, 它们都被淘汰了?

答: 不是, 和任何武功和战术一样, 敏捷有它最适用的范围, 我借着酒劲, 画一个表:

客观因素/最适用方式敏捷 (Agile)计划驱动 (Plan-driven)形式化的开发方法 (Formal Method)
产品可靠性要求不高, 容忍经常出错必须有较高可靠性有极高的可靠性和质量要求
需求变化经常变化不经常变化固定的需求,需求可以建模
团队人员数量不多较多不多
人员经验有资深程序员带队以中层技术人员为主资深专家
公司文化鼓励变化, 行业充满变数崇尚秩序, 按时交付精益求精
实际的例子写一个微博网站; 开发下一版本的办公软件; 给商业用户开发软件开发底层正则表达式解析模块;
科学计算; 复杂系统的核心组件
用错方式的后果用敏捷的方法开发登月火箭控制程序, 前N 批宇航员都挂了。用敏捷方法, 商业用户未必受得了两周一次更新的频率。敏捷方法的大部分招数都和这类用户无关, 用户关心的是: 把可靠性提高到 99.99%, 不要让微小的错误把系统搞崩溃!

在实际情况下, 有许多号称敏捷的项目好像也敏捷不到那里去 (这两天在博客园看到的 例子1, 例子2, 例子3)。 要记住, 有许多最佳实践在各个开发方式下都在使用, 所以各个开发方式并不是井水不犯河水, 老死不相往来的那种关系.

问: 敏捷难道不是通吃一切的? 你列这个表, 好像没有给敏捷应得的名分呀?

答: 我酒后的见解就是这样。 比如有穿全套制服, 开警车出行的警察; 也有很多便衣警察; 他们各有最佳的适用范围,对吧? 如果你觉得便衣的名分没得到, 给他们统一打扮起来, 就成了下面的情况:

名分是有了, 但是他们的最佳适用范围呢?

问: 听说有大写的爱脚儿, 和小写的脚儿之分?

答: 有的, 有些激动的人士把敏捷当作一种宗教, 所以大写 Agile; 另一些人只是把敏捷当作一个形容词, 所以小写 agile.

"we follow an agile process" 一般指团队的流程比较灵活。 "we follow the Agile process" 指按照官方敏捷流程的教义开展工作。 当敏捷变成了宗教, 你说它还会敏捷么? 当实事求是的做法和教条发生了冲突, 你怎么办呢?

举个例子, 果冻晚饭吃了 “小葱拌豆腐”, 这是历史悠久的一道素菜。

果冻的朋友不会说-

哇, 这不是最近某大师推荐的么? 你成了他的粉丝?你要吃素?! 你要做和尚么? 有什么想不开的?

我们不要把一些 “有益健康的饮食”和 “投靠某大师/宗教的教义”混淆起来。 当然, 有些大师希望把天下每一道素菜都当作自己首创的, 这另当别论。 如果有人说 - 有些人不适合吃小葱拌豆腐 (例如痛风病人)。 你可以想象有狂热者反驳 - 你难道说豆腐不好? 你有没有搞错? 你们看到现在吃豆腐多么流行!这么多吃豆腐的人都错了么?!

半年前果冻还经常吃生的茄子呢, 那滋味怎么样 。。。 哦, 扯远了, 我们是在聊什么? 哦, 爱娇娥, 爱脚儿…

回到敏捷 (agile) , 它是一个形容词, 不是一个东西, 它修饰的是做事情的方式,不是这事情本身。 所以“敏捷”需要一个动作的执行者和一个动作。 光说“敏捷好”是没有用的。

问: 我怕宗教,那么如何分清原教旨主义的爱脚儿, 和把爱脚儿当作实践工具的人士?

答: 很简单, 你有礼貌地问对方: 敏捷方法有不适用的场合么? 然后冷静观察对方的回答和表情, 就可以了. 必要的时候要准备好逃跑的路线。

问: 现在俺们村里有很多发传单, 推广敏捷培训的人士, 他们是哪一种?

答: 他们是卖东西的,挣钱不容易, 我们不必挡别人的财路。无语微笑, 避免过多目光接触, 走自己的路即可。

问: 要敏捷的话, 是不是手头用惯了的工具都不能用了?

答: 那倒未必, 有很多工具支持敏捷的方法论, 例如 微软的 Visual Studio Team System 就支持 Agile 的方法论 (叫 msf-agile)。 它也有自己的一套方法论 - 以前我们不是有一个 白话MSF 的讨论么?

有理论而没有工具, 那理论也是白扯

有工具而不懂理论, 那工具不能发挥最大作用

问: 敏捷的思想是不是能指导软件开发以外的工作?

答: 当然可以, 例如把下面文章的某某思想换成 敏捷思想, 也是能讲得通, 你看那pair-programming 的两个妙龄少女身手多么敏捷!

问: 我想敏捷,但是项目的期限不能往后拖, 敏捷能帮我早日完成任务么?

答: 敏捷不是万能的。 敏捷的方法能帮助你更早地知道你是否能如期完成任务, 仅此而已。 敏捷的方法(迭代的方式)能帮你尽快让用户看到项目的 部分 价值。 当你尽早交付 部分 价值的时候, 也许用户对你目前交付的东西已经很满意了,这样你就不用再花时间来实现其它事情。 另一种可能是, 用户看到了部分系统,他们有新的需求,这样你就可以实现新的需求,而不用再浪费时间实现过时的需求了.

**************

注: 果冻, 小飞, 阿超都是 《移山之道》中的人物. 问答都在酒后进行, 也许有很多不准确的地方.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500636.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创新, FMA SMA 世界第一台VCD机的故事

FMA & SMA http://en.wikipedia.org/wiki/First-mover_advantage Second-mover advantage -------------------- 世界第一台VCD机 提到VCD机,必然要说到它的创始人姜万勐。世界上第一台VCD机产自中国,时间是1993年9月,由姜万勐研制。 姜…

java 打印命令_Java 普通命令行程序main关掉 DEBUG 打印

最近在写一个简单的java命令行程序,执行代码时,代码窗口出现了烦人的debug日志。分析了一下,出现这种问题的原因是因为,maven项目的依赖包中传递依赖了一些日志框架,导致会出现日志内容的打印。查看了一下,…

现代软件工程 作业 文本文件中英语单词的频率

这是《构建之法》现代软件工程课的个人项目作业 个人项目 Individual Project: 一个人独立完成.时间: 可以考虑在第一周就给同学们这个项目; 也可以考虑分为两部分, 个人做第一部分, 然后两人结对,选两个人中较好的程序,再继续开…

java 继承变量_用java中的变量继承

任何人都可以澄清我.这里实例方法被覆盖但变量不被覆盖.输出为:B 10class A{int i10;public void name(){System.out.println("A");}}class B extends A{int i20;public void name(){System.out.println("B");}}public class HelloWorld {publi…

现代软件工程 怎么教好课 (读书笔记)

0. 教师教学有培训和参考书么? 我从来没想到过我会在大学里教书, 而且还教了好几年, 好几个学校。 当时接到任务的时候, 我把它当作实习生培训和新员工培训的”学院版”, 还是继续强调实践, 反馈, 合作, 就这么开讲了。 在微软公司, 做大部分和人相关的事情, 都得先有一个培训…

php oci 11g.dll下载,Oracle oci.dll

Oracle oci.dll是在32位PLSQL Developer软件访问Oracle 11g 64位数据库必须的系统dll文件,用于支持连接访问数据,如果系统出现相关dll文件缺失,就需重新下载,有需要的朋友快来巴士下载网下载吧!Oracle 11g oci.dll文件…

java url authority,Java如何解析url,包括自定义schema的url

比如我要解析下面这个url:myscheme://adminblog.nihao001.com:8080/index.jsp?usernameasdf&password123456&msg%e4%bd%a0%e5%a5%bd#editor只要使用URI这个类就可以解析了。上代码:import java.net.URI;import java.net.URISyntaxException;pub…

软件工程 案例分析作业

现代软件工程 构建之法 作业https://bbs.csdn.net/forums/SoftwareEngineering?typeId1723 软件工程作业 案例分析 (建议作为个人或结对作业) 很多同学有疑惑: 软件工程课是否就是枯燥的理论课? 或者是几个牛人拼命写代码,其他人抱大腿的…

现代软件工程讲义 目录

软件工程牵涉的范围很广, 同时也是一般院校的同学反映比较乏味的课程。 但是软件工程的技术对于投身IT 产业的学生来说是非常重要的。 经过几年的探索, 我总结了在16周的时间内让同学们通过 “做中学 (Learning By Doing)” 掌握实用的软件工程技术的教学计划。 这套讲义在下面…

php的数据模型包括,数据库中模型的分类有哪些

数据库中模型的分类:1、概念数据模型,面向用户、面向现实世界的数据模型,描述一个单位的概念化结构;2、逻辑数据模型,可以通过实体和关系勾勒出企业的数据蓝图;3、物理数据模型,具有以实物或画图…

现代软件工程 团队作业 - 软件分析和用户需求调查 (2013 - 2014)

【现代软件工程 的讲义】 医学院的学生, 要练习解剖人体; MBA 的学生, 要剖析某公司的成败; 法律系的学生,要阅读和分析大量案例...... 软件行业的从业人员, 不管是项目经理, 开发或测试人员, 都要学会解剖分析软件, 我们就来试试看。 要求:…

php 去年年初和年底时间,PHP 日期与时间

获取时间1.使用 date 函数格式化一个本地时间。//输出当前时间echo date(‘Y-m-d H:i:s‘);2.使用 getdate 函数获取时间戳的日期时间信息。//打印出详细的信息var_dump(getdate(time()));时间戳1.使用 time 函数获取当前时间戳//输出当前的时间戳echo time()2.使用 mktime 函数…

Arrays.sort() and 吾欲仁则斯仁至矣

有不少人在争论 Java 对学生有益还是有害(不少网站上的评论有断章取义的嫌疑,不值得多看,建议看这个中文链接)(英文链接)。事实上,这个问题事实上不是最近才提出来,大约6~7 年前&…

一目了然

这是啥? a) 某星系的结构图 b) 博客堂的社会关系网络 c) 某传销网络 d) 某合法视频直播网络,可以看到CCTV-1 全部节目,包括春晚,有时还有体育节目。 最近在帮助一个项目的测试工作,这个项目需要通过一些数据及日志重现…

php 万分之一几率,那万分之一的概率啊……

【今日】不要心存侥幸心理,那万分之一的概率啊……也许就是发生在自己身上。【正文】1老公抱着暖暖,大踏步的向前走去,兴奋的说:“我刚在群里问了一下,还没人回复,你说不会两家店全部装修吧?这万分之一的概…

JS常用事件大全

事件 事件通常与函数配合使用,这样就可以通过发生的事件来驱动函数执行。 注意:事件名称大小写敏感。若是事件监听方式,则在事件名的前面取消on。 1. 鼠标事件 给btn按钮添加点击事件,点击弹出 你好! 2. 键盘事件…

重要但不紧急的事

事儿真多。 有重要的事,有紧急的事,有紧急但不重要的事,也有重要但不紧急的事。(详细的论述参见 “超级高效人士的超级61个习惯”或者其他时间管理的书籍) 对于IT 行业的人来说,读书,是一件重要…

php 动态添加表格行,jQuery给html表格动态添加行方法总结

这次给大家带来jQuery给html表格动态添加行方法总结,jQuery给html表格动态添加行的注意事项有哪些,下面就是实战案例,一起来看一下。本文实例讲述了jQuery实现html表格动态添加新行的方法。分享给大家供大家参考。具体实现方法如下&#xff1…

奖品兑现 – 我家没有好茶饭,只有《编程之美》送亲人

[由于blog.joycode.com 在改版ing, 我的这篇帖子上不了首页。我会在 www.yishan.cc 放同样的文章。] 我在庆祝 中国微软地图 的博客上提出了有奖找bug 的活动。现在《编程之美》 终于出版了,也到了兑现奖品的时候。 几天不来,发现这里的界面变得比较有挑…

php3绕过,PHPB2B注入#3(绕过过滤)

PHPB2B某处注入绕过过滤。官方最新版本. https://github.com/ulinke/phpb2b/archive/master.zip详细说明:1.注册企业会员。2.注册企业会员且通过审核。发布产品。漏洞文件。virtual-office/product.phpContent-Disposition: form-data; name"data[product][sor…