第一个原则,也是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. C语言四舍五入

    //今天遇到了四舍五入的问题,这些问题如果不看别人的真的难想出这么巧妙的方法啊.努力积累,早日成为大佬. int i = (int)(a + 0.5) ////小数部分大于0.4,加上0.5就会超过整 ...

  2. Hadoop2.7.6_08_Federation联邦机制

    前言: 本文章是在  Hadoop2.7.6_07_HA高可用  的基础上完成的,所以不清楚的可参见这篇文章. 1. Hadoop的federation机制 文件的元数据是放在namenode上的,只 ...

  3. January 29th, 2018 Week 05th Monday

    Losing all hope was freedom. 彻底绝望就是真正的自由. Losing all the hopes, and we are free to challenge everyth ...

  4. UITableView详解

    一.建立 UITableView DataTable = [[UITableView alloc] initWithFrame:CGRectMake(, , , )]; [DataTable setD ...

  5. break和continue语句(初学者)

    1.break语句可以从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句. 一般形式:break: break不能用于循环语句和switch语句之外的任何其他语句中. 注意:(1)break ...

  6. 使用sublime编写python、php代码前的一些配置

    1.使用sublime编写python代码 打开sublime软件,Tools —> Build System —> New Build System,得到后缀名为“sublime-bui ...

  7. Python--详解Python中re.sub

    给出定义: re.sub(pattern, repl, string, count=0, flags=0) Return the string obtained by replacing the le ...

  8. flare-spork: 自己维护的Pig on Spark项目

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zbf8441372/article/details/24726501 关于flare-spork 非 ...

  9. E325: ATTENTION

    vim/vi编辑器异常 E325: ATTENTION Found a swap file by the name "/usr/local/msmtp/etc/.msmtprc.swp&qu ...

  10. Spring4.2+SpringMVC+Mybatis3.4的集成(转-)

    文章转自 http://blog.csdn.net/jimolangge123/article/details/49210363 首先说明一下Web.xml中配置项的执行过程: <context ...