《敏捷软件开发》笔记 - 1

本笔记完成于2013/8/11;谢绝无授权转载。

这本书的中文译名是一个平淡无奇的<<敏捷软件开发>>,这个名字是如此的平庸以至于放在书架上不会有几个人注意到它真正的价值,除非你仔细的阅读了书面封底的作者介绍和英文原版所获得的荣耀 - 17届Jolt大奖获奖作品;而Cockburn大师本身又属于一个人能连续两次获得Jolt的技术作家之一;但是能够在连续两年中获得两次Jolt大奖的,估计又少之又少了。

脉络

这本书讲述的部分很多已经超越了软件开发本身,并且也并没有特别偏颇的只讲述Agile一种方法,而是从多个角度综合衡量多种方法论的优缺点和使用场景。总体而言,这又是一本务实的书,而不是简单的对agile方法进行鼓吹和传教。

全书的结构可以看作三个部分(虽然作者认为是2个部分):

理论

前边一半的篇幅用于介绍各色理论 - 沟通的基础和协作,个人的影响,交互通信的方式和特点,团队以及方法学。讨厌理论的人可能会跳过这一大部分,然后我个人的看法是,这恰恰是作者最精华的所在。理论的探讨也不是简单的罗列和论证,而是引用其它人的研究成果,并结合了作者自己做管理咨询工作的经验和分析总结。每一个章节,都分为一大一小两个部分:

  • 前者详细的分析和论证主题,并根据实践经验加以总结和分析
  • 第二部分大多冠以evolution的后缀,在前者部分基础上加以升华或者扩展。

实践和方法学

第二个部分主要侧重于实践,即各种各样的方法学和实践方式,主要侧重怎样做的问题和思考这些方法学可以给个人带来怎么样的启发。描述了集中方法论:

  • XP
  • Light and agile
  • Self adapting
  • Crystal family

这些方法和常见的Scrum/XP/Clean Room方法论有些不同;其实现有的方法分支都以这些公共的理论为基础,互相学习/发展和渗透。

附录

一般书籍的附录不会太长,仅仅添加一些和主旨无太大关系的说明或者索引。这本书则不属于这一类;初一看会发现书籍的附录占据了四分之一的篇幅,并且分成留个章节,只有最后一个章节是关于索引和书籍引用的常规内容。其它的部分,也遵从了前边两个大块的结构,对正文没有详细说的部分做了更深入的扩展,或引用大篇幅已经脱销的书籍文字,或者直接给出一些偏一轮的paper的大部分乃至全文来辅助全书的主线。个人感觉这部分其实可以作为一个独立的部分。

有趣的是,敏捷宣言的部分和敏捷联盟的成立背景也在这里做了详细的介绍 - 由此我才明白为何外界对敏捷有那么深刻的误解:这只是一个松散的联盟,参与发起的先驱们其实有着很不同的观点和方法论。这个过程的产出才是大家常见到的敏捷宣言,过程本身又呼应了作者的观点 - 这是一个关于协作的游戏。

理论

沟通和倾听的三个境界

作者认为沟通是极其苦难的事情,甚至有些时候是那一达到的,所以才有各种各样的方法论来减少协作的难度。这个过程是有不同的阶段的,作者引用了Shua-Ha-Ri的学习理论来阐述这三个阶段:

  • Shu 是基础部分,需要维持基本的原则和方法,学习成熟的方法和实践,确保这些实践不被破坏;这个是基础阶段,需要有mentor或者coach指明一条正确的道路,引导大家走下去,不要偏离到错误的路上去。
  • Ha 是脱离第一个阶段,适度偏离死板的教条,获得一定的自由去深入的反思和理解其中不合乎实际情况的部分。这个部分的前提是,一些基础的原则和实践被真正吸收和消化,否则就容易随意的否定和偏移,这是一个提高的阶段
  • Ri 是最高的升华阶段,这个水平之上要求能超越已有的所有舒服,用实践者的方法从实际情况出发,找到最适合的方式。这一阶段任何书籍和方法仅仅是参考,需要的是原创的思想和过程

理想的沟通在很多时候甚至是不可能的事情,尤其是如下的情况:

  1. 人们很容易误会口头表达的意思
  2. 有歧义的术语或者名词常常产生误解
  3. 喋喋不休的人可能给出的指令是让人不想仔细听下去或者真正听进去
  4. 领域知识的差异导致信息准确性的降低
  5. 不同的知识背景导致某些预设的关于常识的背景可能根本就不存在

具体到实际工作中来,就会有

  1. 设计文档阐述的意图很难准确和无偏差
  2. 经验丰富的开发者很可能用简洁的语言描述设计想法

有鉴于此,我们可以在沟通的过程中,尽量创造共同的经验和背景知识作为讨论的前提,并在作出具体的Action之前多确认不必要的误解。而这一切都需要更好的协作和交互。

软件和创造/沟通游戏

游戏可以按照是否有目标和是否终止分为如下三个类型:

  1. 有限结束的,没有目标导向的,如弹钢琴,跳舞等
  2. 有限的,但是有确定的目标,譬如网球比赛,软件开发
  3. 无限永远不终止的,如职业生涯管理,商业组织生存

自然这里关于有限无限的定义,是基于一个一个具体的活动而言的,譬如职业生涯的发展,相对于一次的工作更替来说是无限继续下去的,但是对于人的生命而言又是相对有限的,当然这个是不同的范围界定了。

Cockburn认为最容易和软件开发活动做对比的莫过于攀岩运动,因为他们有如下的共同之处:

  1. 注重协作和目标导向:攀岩需要登顶,还需要分工合作,软件开发也同样有清晰的商业目标(开源软件不在此列),并且强调分工协作(个人项目自然不算)
  2. 负载均衡和分工:根据不同的需要和负载来协作分配资源和重心
  3. 团队:需要用团队的方式来完成
  4. 智力水平的要求:有些人永远不能完成攀岩,有些人永远没有智力和能力做软件开发工作
  5. 技巧密集型:需要经验和技巧的积累才能更好的完成目标
  6. 培训:各种知识和技巧需要事前的培训才可
  7. 工具:需要用工具来提高效率,并且工具扮演了一个重要的角色
  8. 资源受限:没有无限制的资源供分配,必须协调和均衡
  9. 计划:必须事先指定某种粒度的计划,进行资源的分配
  10. 不确定性/挑战:总有无法预料的情况发生,天气可能突变,突然而来的技术问题等
  11. 乐趣:过程本身是有趣的,编程过程本身是有趣味的(至少很多程序员是因此从事这个职业)

尽管有很多关于软件开发和传统工程学科的比较,然而Cockburn并不认为这样的比较是恰当的,因为工程师仅仅按照设计好的计划来操作就是,后期如果除了小问题,要么推倒重来,要么小修小补;然后几十年的软件工程时间却表明,仿照这种方式来操作带来了效率的问题和维护性的噩梦。软件开发的计划很难做到和变化的环境想符,而维护的成本也高昂到甚至直接取消项目。

作为软件开发工程师,他们需要的是达到目标,理解问题然后找到一种方法解决面临的问题,并用合适的工具和语言实现该解决方案,并解决可能的变更和维护需要。从这个角度出发,软件开发活动是:

  1. 资源有限的
  2. 协作性的
  3. 注重创造和沟通的

同时,软件开发活动同时要求在沟通的过程中,将发布可用的软件作为首要的目标的同时,积累一些经验可用用到下一个软件中去。软件开发团队在没有满足第一个目标之前必须优先尽可能保证当前的软件可以发布;然后做到第一个之后,对于第二个目标,必须同时考虑到资源的限制性,做到尽可能好就够 - 奢求文档永远和代码同步就是一个没有意义的目标。足够好就是了。交互和协作才是最重要的,因为文档总为是死的,沟通则是总在变化的。

重构软件开发过程

软件开发过程是一个通过协商来达到协作的过程,该过程通过个人的技术尝试和由各个贡献者组成的团队的协作达成专业技术上的决策。从这个意义上来说,注重交互和协作的软件开发过程和传统意义上的软件工程有很大的区别。ECN(Engineering Collaboration via Negotiation)就是通过群体的协作达成的技术决策来完成软件开发的活动。这一活动强调,最好的流程是通过共同构建的过程达成,在这个过程中,每个人都动态的参与并影响最终的决策。因为人的想法和观点总是在动态的变化,因此这一过程必然要求协作和协商的过程也是动态进行和持续不断的。

同时这一过程也意味着工程上的协商决策(collaborative deal-making)和共同创新(collective innovation)。协作的结果是所有参与各方的互相竞争的偏好所达成的一整的意见。这个过程必然强调双赢的产出和新的创新,这些创新都不可能由单枪匹马的冒险所达到,而是通过协商而后的一致意见转化得来。

待续。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,825评论 25 707
  • 先说项目开发过程中团队人员的分工协作。 一 人员安排 毕业至今的大部分项目都是独立完成,虽然也有和其他同事协作的时...
    SnowflakeCloud阅读 10,756评论 3 59
  • 一早起来,温度连降9度,一夜之间从夏天蹦到了深秋。 家乡的天气总是这么任性,一言不合可以让人一天之内经历春夏秋冬。...
    琴琴没怠志阅读 268评论 0 1
  • 四点半起床,因为要给客户送货,而我所住的小区又及其难以停车,为了不妨碍车辆通行,选择在4 5点这个无车流的时间把...
    唯意soleone阅读 134评论 0 0
  • 在很多互联网企业里,开发人员作为产品的生产者,地位受到优待,工程师们作为“创客”的自豪感以及自信心也理所应当。直到...
    陈计节阅读 1,378评论 0 1