第一个原则,也是MSF中最基础的一个原则,推动信息共享与沟通。这个原则的一个特点是,对于团队成员的所有工作,都会被记录下来,包括走了弯路的、出现bug但已调试解决的部分。对于新加入团队的成员或者以前没有参与过MSF开发的成员来讲,第一步便是要学会“不遮掩自己的错误”,因为每个人都是想要展现自己完美一面的,但是为了给团队成员提供经验,也为了真正实现信息的共享,已经提交的工作便不可删除。这让我想起第一次结对编程时因为不熟悉TFS的使用,误把自己的代码签入了服务器,当时还联系助教修改,但是助教说不行,现在我懂为什么不行了。

第二个原则是要求团队成员有共同的远景。作者对这个远景提出了三个要求:明确、通过努力实现和具有指导作用。这样的要求可以说是不仅仅适用于MSF的,几乎所有的远景,都应满足这三个要求。一个模棱两可的远景,或者把一个团队已经达到的成就当成远景,或者一个太空泛让人不知道该做什么的远景,都不利于项目的实现。然而对于项目的远景由谁提出,作者说应该由一个“有远见的人”提出,再交由大家讨论,这里的问题在于作者似乎没有过多讲述远景的提出基于一些什么样的考虑,用户需求?技术难度或者开发人员的水平?另外一个问题是在于,远景这样一个说起来很宏大的词,是怎么对软件开发过程起到如此重要作用的?

第三个原则讲的是团队人员之间的授权和信任。最吸引我注意的是对于团队事件安排的一个建议:由下而上地制定时间,由负责开发的成员自己拿捏时间表,这样做的好处在于提高了大家的主动性,由于是自己做的计划,应该就已经考虑清楚了开发中会遇到的问题,也考虑了自己的技术水平,那么自然比别人为自己定deadline的情形更有动力,这样的授权充分地考虑了个人因素在开发中的作用,确实是一个非常好的方法。那么作为项目的管理者,既然计划都是开发人员自己制定了,那么他做什么呢?作者看来,开发者要实时地跟进项目的进度,及时地位开发者提供技术上的帮助,比如通过组织学习解决一些新的技术问题等等,为了避免不能按时提交工作的情况,管理人员当然不能坐等验收,而是参与整个过程。最后一点,关于充分发挥团队成员的特长,也就是每个成员都能在自己擅长的领域担任领导者,带领团队其他成员在相关的工作中做得更好,这当然是充分授权和信任的表现。

第四个同第三个原则相互制衡。在第三个原则的最后,作者提出了一个问题:如何避免“授权与信任”之后,每个人都有很多想法,反而达不成一致意见了。第四个原则讲各司其职。核心就是每个人要对自己负责的项目负责,主要体现为哪个环节出现了问题,这个环节的负责人就要做出解释甚至承担相应的惩罚,我们在完成某个模块任务时,当然会询问他人的意见,他人也都会乐于给与我们帮助,但是他人提出的建议可能过于理想化,因为他不对这个任务的完成与否负责任,自然不能设身处地地思考,所以,只有将责任捆绑到开发者身上,才能督促上认真思考旁人的建议,认真决策,不会出现被旁人的建议牵着走而耽搁了进度的情况。而且,从另一个方面讲,我们在为他人提建议时,也应该注意一下建议的可行性,不要以一种旁观者的态度提出一些无意义甚至帮倒忙的建议。

第五个原则是我疑问比价大的一个原则。这个原则本身很简单,因为毕竟软件开发是一个商业过程,我们的大多数软件项目都是希望能盈利的,这无可厚非。然而是不是存在一些软件项目本身就不以盈利为目的呢?我的答案是肯定的,令人高兴的是,作者也提到了开源和闭源的问题,遗憾的是我并没有这么多知识储备,也找不到一个好的“闭源转开源”的项目来分析,不过在我看来,有的开源项目本身是出于更深层的一些终极价值发起的,具体是哪些终极价值在本文中也不便说明,我想表达的问题其实更像是通读本书的过程中贯穿始终的一个问题:本书是一本实战型的书,导致它的行文风格显得过于职场化,用我很讨厌的企业家、很欣赏的言说者罗永浩的话来讲,这也太没有情怀了。对于这个原则,开了一些玩笑,总结一下,我是想借此机会向一些伟大的开源项目致敬,向一些致力于为所有人提供公平的互联网服务的项目致敬,比如说基于Google Appengine的goagent项目组。

下一个原则是关于敏捷开发。这算是一个同我们软工的实践比较贴近的原则了,正巧我们最近就刚刚因为需求的变化对后面的计划做了相应的调整,把本来要做的一个比较有意思的功能给放弃了,因为下一个组用不上这个数据。作者说到了一个偏执追求质量导致软件跟不上客户需求变化的例子,这当然是对软件开发团队必须要平衡质量和需求的警示,目前我的体会还不深刻,但是这也是第一次比较学术地接触到软件开发的指导思想的问题,需要认真地学习。

后面的一个原则仍然和质量有关,准确地讲是和如何对待质量有关。质量当然是软件开发过程中最重要的一个交付条件了,你总不能给用户一个bug漫天飞的软件吧?那是不是开发者就必须要交付给用户一个没有bug的软件呢?答案尽管很直接,但确实是这样:不可能,在质量上耗费过多功夫就意味着在满足客户需求、提升用户体验等方面花费了少的功夫,而一个软件最重要的是解决用户的问题,如果能够解决用户当前的问题,就应该越早地交付,非要等到软件完美以后,可能就会出现上一个原则中的悲剧例子。所以作者把这个原则叫做投资质量,投资意味着质量不是最终追求,而是通过追求质量达到更大的目的:解决用户的问题。

最后一个原则是关于学习经验,我们也做了alpha阶段的事后诸葛亮会议了,而且这一个原则也贯穿我们的整个学习生涯,我也不再赘述了。

对MSF八个原则的思考的更多相关文章

  1. 如何开会——高效会议八项原则

    引子 今天看到一段有趣的话,忍不住记录下来吧! 1. 任何事情只要能开会解决的,一定要开会解决,这多威风,多热闹啊. 2. 会前千万不要准备什么议程,这样开会就会惊喜多多,会议一定低效. 3. 会前千 ...

  2. [转]比较 Rational Unified Process (RUP) 和 Microsoft Solutions Framework (MSF)

      文档选项 将此页作为电子邮件发送 级别: 初级 Sandra Sergi Santos, 软件工程专家, IBM 2007 年 6 月 15 日 本文来自于 Rational Edge:Micro ...

  3. API设计原则

    译序 Qt的设计水准在业界很有口碑,一致.易于掌握和强大的API是Qt最著名的优点之一.此文既是Qt官网上的API设计指导准则,也是Qt在API设计上的实践总结.虽然Qt用的是C++,但其中设计原则和 ...

  4. OOAD之面向对象设计原则

    学习这个设计模式 真的觉得很抽象,只有自己多多的领会! 在很多时候,很多的知识都会觉得讲起来是很矛盾的. 本章目标 1 掌握内聚度和耦合度的概念 2 掌握面向对象设计原则  (一)如何衡量软件设计的质 ...

  5. 20145233《网络对抗》Exp5 MSF基础应用

    20145233<网络对抗>Exp5 MSF基础应用 实验问题思考 什么是exploit,payload,encode exploit是发现了的可以利用的安全漏洞或者配置弱点,这类模块存储 ...

  6. 标准化建筑的 FRESH 原则

    前记 大家好,我是小镭. 我在钢结构领域从业十余年,虽然工作内容是关于建筑的,但如果问我什么是建筑,我却一时答不出来. 记得小时候我读过一篇文章,说建筑是凝固的音乐. 后来我看了些书,觉得建筑是空间. ...

  7. Java设计模式(2:单一职责原则和依赖倒置原则详解)

    一.单一职责原则 不要存在多于一个导致类变更的原因.简单来说,就是一个Class/Interface/Method只负责一项职责. 这句话最为重要的就是这一段:一个Class/Interface/Me ...

  8. Scrum总结

    Scrum总结一个轻量级的软件开发方法 Scrum是一个敏捷开发框架,是一个增量迭代的开发过程..在这个框架整个开发周期由若干个小的跌代周期,每个小的的跌代周期称为一个Sprint,每个Sprint的 ...

  9. 深入.net平台和c#编程 学习笔记

    深入.net平台和c#编程 一:理解.nteFramwork与c# 1.1,:Microsoft.net框架概述 1.2:.net框架结构 1.3.:c#语言概述 1.4:体验框架类库的强大功能 二: ...

随机推荐

  1. Linux之删除带有空格的文件(而不是目录)

    大家平时工作中对不带空格的文件接触较多.这样一来删除操作也是比较简单的.但是有时我们会接触带有空格的文件.对于这种文件我们应该如何删除呢? 首先我们演示一下find命令结合xargs命令删除不带空格的 ...

  2. January 07th, 2018 Week 01st Sunday

    To remember is to disengage from the present. 铭记过去就是放弃当下. To remember the past doesn't mean we would ...

  3. numpy的random模块

    随机抽样 (numpy.random) 简单的随机数据 rand(d0, d1, ..., dn) 随机值 >>> np.random.rand(3,2) array([[ 0.14 ...

  4. Android——Intent和Intent过滤器

    http://www.cnblogs.com/XP-Lee/p/3613830.html Intent就是一个激活组件的消息对象,用于组件之间的通信.需要注意的是,能被Intent激活通信的组件只有三 ...

  5. rowid快速分页解析

    版权声明:个人随笔,实用你就COPY,看不懂不解释 https://blog.csdn.net/HelloCqk1/article/details/36628787 --分页第一步 获取数据物理地址 ...

  6. js中return,return true,return false三者的用法及区别

    return其实就是return undefined; 1.语法及返回方式 ①返回控制与函数结果 语法为:return 表达式; 语句结果函数的执行,返回调用函数,而且把表达式的值作为函数结果返回出去 ...

  7. 【数据库】事务,ACID,CAP和一致性

    什么是事务 事务是指由一系列数据库操作组成的一个完整的逻辑过程,这个过程中的所有操作要么都成功,要么都不成功.比如:常见的例子就是银行转账的例子,一次转账操作会包含多个数据库操作,而这些数据库操作需要 ...

  8. JQuery获取touchstart,touchmove,touchend坐标

    $('#id').on('touchstart',function(e) { ].pageX; }); JQuery如上. document.getElementById("id" ...

  9. (java项目)坦克大战 2.0

    这个版本,只能算是一个雏形,把最基本的东西给完成了,不过,后面可添加的也不多.有一点,还是想去实现,那就是敌方坦克自己寻找对手!也就是游戏AI. emmm, 什么时候可以了解一下这个AI.顺便学学py ...

  10. OpenSCAD(1)基础教程

    https://blog.csdn.net/freewebsys/article/details/49993049 官网 https://en.wikibooks.org/wiki/OpenSCAD_ ...