微软的秘密读后感~微软的产品开发流程

产品经理提出设计,由程序经理经过产品设计会,把项目分解成3天以内可以完成的个个小特性,这点很重要3天之内可以完成的功能必然是个不大的功能。而且必然应该是可以完成的功能,不会涉及框架和麻烦的牵扯处理。书中还注意到一部分,程序经理是万里挑一的是为了完成哪些看似不可能或根本不可能完成的任务还能一步一步推着做的人。有不能分解的任务必然是设计上有缺陷的任务程序经理要为这些功能负责。一方面这些小的特性断绝了产品间的耦合功能,使单元测试和自动测试成为可能。也通过这样的分解把压力分解掉了不会把产品设计的压力推到普通研发人员的身上。
我们看微软通过产品功能和特性的细化分解来使相对外行的产品设计人员和研发人员之间进行了有效的沟通。
1~开发人员只对小功能特性的开发负责,并针对这些开发编写自动测试程序,并对这个功能提供项目进度的时间评估。虽然说这些特性很小,当一个组集中开发几个特性的时候,要对时间做评估并给出进度表。
2~这和把整个功能丢给程序,2~3个月之后来看结果的区别很大。首先压力也都丢了出去,项目在这2~3个月内可能会反复修改,任何小的特性也会反复修改,局部的修改又往往不会考虑全局的安全。当2~3个月后程序拿出一个似是而非的东西时。压力全部在开发人员身上!技术和产品在小特性上的划分本身就会有着严重的分歧。
3~为什么产品不能做这个划分工作呢?当产品引入一个新的功能时,这个功能在产品来看非常的小,可能只是一个按钮,一个视图。但有可能在软件上会需要引入一堆的功能,这个一般的研发和程序都是很难看的非常全面。这也不是设计的问题,完全正确的把这些隐藏在背后的功能,能确实实现并划分成3天以内的小功能,交给开发人员去实现。就需要一个对未来极有信心并可以确实对状态做出正确评估的程序经理来分解这些任务。
我们看到原来产品和程序之间的压力关系是,产品提出了设计后压力和风险之后开发的时间内都丢给了程序。可能直到最后产品要交付测试了才发现其中的问题。
而微软的做法使每个小功能成为进度的基点,每天都有完成一小步,当发现在某个功能走不下去的时候,最迟3天后产品和程序经理就会发现进度有问题。这样就可以做出及时的调整和重新安排时间。但这样对产品和测试的要求比较高,首先细划的功能很可能只是一个命令行的交互或脚本的一个函数。研发交付这个功能时产品和测试要对软件有起码的了解,至少知道脚本是怎么回事。这也就是office系列为什么有VBS的原因,只是软件开发过程中的一个副产品而已。

 

这点也是中国软件公司严重缺乏的一点,从书中我们可以看出盖茨包括微软的高层都是对技术相当了解,也就是说能够把握住技术细节和框架的关键问题。产品提出的设计需求,由程序经理分解后,再有微软的高层根据分解的结果和执行对项目进度进行把控,交给普通研发和程序完成的是3天内可以完成的任务。设计由产品完成,当软件非常复杂需要设计架构问题时由多个程序经理负责。这个很工作量也是成正比的,程序架构的工作并不多,但技术含量最高需要多个程序经理共同完成,功能的划分本身也说一种程序架构,工作也不会太多,据说微软的程序经理在还有一半的时间能用来开发代码。这些架构的工作虽然不是很繁重但对经验和能力要求很高,进过划分的功能都会转化为较小的软件功能或问题,一般的研发人员也可以顺利完成。这就是为什么微软的研发人员对时间的估计通常都很乐观,因为他们对待的问题很单纯复杂度相对较低,可以专心在软件性能,代码质量上。而国内的官本位思想的作怪下,一个项目经理好像没什么可以干的。甚至有些项目经理把产品直接丢给技术让他们几个星期做一个需求或几个需求不闻不问。

 

这两天尝试用微软项目经理的思考方式去分解任务,真的很难把一个项目考虑的周全,和正常的开发方式完全相反。正常的开发方式是开发一点,想一点下一步做什么。除非对项目既有信心和极有经验才能很有把握的把没有开发过的项目分解成几个小的项目,还有考虑任务小到4个小时到3天内可以完成,基本上说是已经想好这个软件要怎么具体实现了。如果考虑把一个项目分解出1~2个月的工作量那么按每天1百行计算。6千行的代码要在脑子里反复思考跳过任何可能的阻止开发的不可逾越的问题。这种在程序上不可逾越的问题很多例如某个在特定环境得到某个窗口的句柄小任务,如何得到用什么样的api等等。

 

我觉得能够胜任这个工作的程序经理很少的,因为国内对程序经理的要求是所谓的沟通所谓管理所谓理念,那些和技术完全没有关系虚无缥缈的东西。我认为一个程序经理的工作就是把复杂的问题分解成简单的问题,并反复思考其中可能遇到的技术风险,并给产品部门合适的时间表。而不是把产品部门的需求粗糙的分配给组内的某个程序员,由普遍的程序员评估一个有技术风险的项目。如果项目小还可以,如果项目相对较大例如3天以上。产品和技术人员就会在实施过程中出现严重的矛盾,因为对公司管理层而言这个项目在实施的过程中就出现了不可控制的空白期。这就是管理层希望借助所谓日报,周报,月报,弥补这个控制上的空白期,但普通程序员对于项目的评估和分解本身就存在巨大的风险?很大的可能是在巨大压力和完全没有约束的环境下提交一个没有测试没有总体架构和质量优化的代码。而在这个过程中任何人都显得无能为力,视乎管理层,产品,程序经理对程序员都无力向帮,只有程序一个闷头闷头的写代码。因为程序写代码的时是写一点想一点,当遇到不能逾越的技术风险时,项目周期已然过半或即将结束!!

 

http://blog.csdn.net/CSDNATM/archive/2010/07/12/5730142.aspx

看了这篇CSDNATM这篇博文后我补充些。
当初探究微软开发模式是为了在程序员的角度上看待需求分解的问题。
而不是在用户角度上或者逻辑角度上,所有不涉及到
http://blog.csdn.net/qingrun/archive/2010/07/13/5730754.aspx
这篇博文的问题。

任务分解最终落实在软件工程上的目的是为了单元测试!!!也就是微软的秘密里所说的自动测试!!
为什么叫喊多年的单元测试或叫自动测试极难推广因为在需求分解到程序的过程中没有做到两个统一。
用户需求逻辑和函数输入输出的统一。
单元测试的第一个要求就是函数的输入输出的标准化。在一个函数里至少不能把需要测试的内容环境返回到到一个自动测试不可捕捉的环境。或者自动测试程序不能输入的环境。例如使用GUI就极大的增加自动测试程序得到输入和输出的难度。
用户需求逻辑无论如何划分只要能够把输出和输入变成可以捕捉即可。没有返回结果的也要返回正确或错误的逻辑结果。但用户的需求往往天南地北尤其是使用GUI界面后这种统一造成了极大的难度。
难度不在任务的分解而是分解的恰到好处最大的满足单元测试的要求,使单元测试可以最大限度覆盖整个工程这个过程极难。

 

微软的开发也不是要站在非常高的高度上去解决所有需求问题后开始编写代码,我们看为什么要对程序经理要求在极大的压力下可以继续前进呢?因为在计算机硬件满足的层面只要想得到的动画或3D效果或者其他理论上都效果可以实现的只是需求时间长短的问题。程序经理在得到一个需求后如果不能分解出所有需求可以先分解12个月或24个月的工作量。12个月24个月是微软的一个标准开发周期,当管理层决定继续做的时候下一个开发周期程序经理要继续分解,即使他知道这个工作可能极其庞大永远都不可能完成但决不能灰心丧气。常人在做一件永远不能完成的任务时就会非常消极。。。程序经理要有极大的耐心和无畏的勇气。所以微软这类管理人员是非常难得的人必须万里挑一。而微软的管理层也不多,程序经理往往直接向盖茨或鲍勃汇报。如果你耐心的看完我的帖子会发现微软的开发结构非常简单,垂直到普通的开发人员只需要3层或4层。程序经理上面会根据项目的大小设置一个类似总监的位置,例如nt的卡特勒,office项目等等。但程序经理的进度报告是会直接放到盖茨的桌子上。就是说盖茨只要垂直3层几乎是直接管理着微软的开发工作。

 

让所有人参与到软件开发中来是件很不容易的事情,尤其让对不懂技术的产品,BD,运营,管理等等非技术人员可以很好在软件开发中发挥应有的角色,是一件漂亮的现代行为艺术。微软是众多表演艺术家的杰出代表。

 

微软的秘密所透露出来的微软开发过程最后是落实在了自动测试和每日构建。这是微软所有软件开发的基础框架,而且自动测试和每日构建和软件体系结构密不可分,但在最后交付软件时却可以完全删除。有点类似加工机械对最终用户来说这套体系是看不见得。不过自动测试和单元测试是和软件工程在设计过程和实施过程中是密不可分的。自动测试和每日构建的基石是项目分解,而项目分解的基石是程序经理。微软提出的4个小时到3天的分解单位是也许另有目的,程序经理分解的任务也许牛人4个小时就搞定了而普通的程序员需要3天,这解开了一个困惑就是微软的普通开发人员的时间是自己确定的。呵呵看来也只有自己知道自己是不是牛人。自动测试和每日构建是大规模软件开发中质量控制的基石,这点才最为重要的也是我们软件工程苦苦求索的部分。所有产品级软件开发最终目的是要做出一个质量可靠的产品给用户。方法也许很简单但颠覆我原来对软件工程认识,现在写软件要想想,再想想,自己做自己的程序经理。这个帖子丢在这吧让更多的人能够看的到也许有些帮助。做为一个真正的程序经理要思考什么做什么,有什么样的思想品质微软都告诉我们了。

已标记关键词 清除标记
编辑推荐 《微软秘密》:揭秘领先全球的软件公司如何创新科技、开拓市场和管理人才。 带您探究微软巅峰的秘密! 除了天才的比尔·盖茨,还有什么让微软如此成功? 这是一本有历史的书,在风云变幻的IT界,微软屹立不倒。 这是一本经典的书,想探寻微软成功的秘密,此书不可不读。 Michael A.Cusumano和Richard W.Selby两位杰出的科学家深入微软总部,进行了为期两年的驻地考察,为我们揭露了微软内部最深层的秘密。这份内幕报告来源于40次深入的采访,是作者阅读了微软机密文档和项目数据后的结晶,包括: 对微软如何经营和参与竞争的7项补充战略的精确叙述; 描述了微软由天才的雇员和不同凡响的经理们组成的智囊团; 由货真价实的竞争战略和清晰的组织目标形成的自我完善、学习和改进; 一种灵活的、增量的产品开发方法; 对未来市场的不懈追逐。 Cusumano和Selby的专业分析能力成功地揭示了微软如何结合所有必要的因素,达到这个极为重要的产业的顶峰,并且保持这个令人瞩目的位置的独特方法。 这是一本有历史的书,在风云变幻IT界,微软屹立不倒。 这是一本经典的书,想探寻微软成功的秘密,此书不可不读。 12年前,《微软秘密》有了中文版。彼时,中国软件业刚刚起步,步履蹒跚,能读懂它的人很少,很少。微软,更像是一个遥远的神话。 12年后,《微软秘密》再现江湖。此刻,多少“软件作坊”飘摇于风雨中,渴望成为微软这样的软件开发正规军。微软,成为可以触摸的榜样。 媒体推荐 “《微软秘密》是一本介绍令人神往的公司的书,引人入胜。作者用令人惊讶的洞察力诠释了微软的文化、战略和历程的相互作用。”   ——Peter Senge, 麻省理工学院组织学习中心,《第五项修炼》作者 “这是一本跟了我12年的书,12年来,我一直在读它。有关微软的书多不胜数,但能本质地看微软,看一个软件研发帝国如何研发产品当上软件霸主,成为业界事实标准,惟有这本书。这本书从微软灵活的组织结构、专业的专家小组、既懂开发又懂商业的人才、项目管理开发测试三套马车、里程碑的开发阶段、不断推出改进建立标准、不断自我反思自我总结学习改进,讲的真是有结构有条理。我的许多开发管理思路都由此得到启发和借鉴。我的开发管理体系模型就是从这里一步步从点到线到面到层地不断完善起来的。而且,我现在的咨询思想、流程整理思想、需求研究思想,皆出于此。它是我迈进开发管理领域的导师。”   ——阿朱,北京润霖汽车科技有限公司研发总监,《走出软件作坊》作者
相关推荐
<p> <span style="color:#337FE5;"><strong>【为什么还需要学习C++?】</strong></span> </p> <p style="margin-left:0cm;"> 你是否接触很多语言,但从来没有了解过编程语言的本质? </p> <p style="margin-left:0cm;text-align:start;"> 你是否想成为一名资深开发人员,想开发别人做不了的高性能程序? </p> <p style="margin-left:0cm;text-align:start;"> 你是否经常想要窥探大型企业级开发工程的思路,但苦于没有基础只能望洋兴叹? </p> <p style="margin-left:0cm;text-align:start;">   </p> <p style="margin-left:0cm;text-align:start;"> 那么C++就是你个人能力提升,职业之路进阶的不二之选。 </p> <p style="margin-left:0cm;text-align:start;"> <br /> </p> <p style="margin-left:0cm;text-align:start;"> <br /> </p> <p style="margin-left:0cm;"> <strong><span style="color:#337FE5;">【课程特色】</span></strong> </p> <p style="margin-left:0cm;text-align:start;"> 1.课程共19大章节,239课时内容,涵盖数据结构、函数、类、指针、标准库全部知识体系。 </p> <p style="margin-left:0cm;text-align:start;"> 2.带你从知识与思想的层面从0构建C++知识框架,分析大型项目实践思路,为你打下坚实的基础。 </p> <p style="margin-left:0cm;text-align:start;"> 3.李宁老师结合4大国外顶级C++著作的精华为大家推出的《征服C++11》课程。 </p> <p style="margin-left:0cm;text-align:start;"> <br /> </p> <p class="ql-long-24357476"> <span style="color:#337FE5;"><strong>【学完后我将达到什么水平?】</strong></span> </p> <p class="ql-long-24357476"> 1.对C++的各个知识能够熟练配置、开发、部署; </p> <p class="ql-long-24357476"> 2.吊打一切关于C++的笔试面试题; </p> <p class="ql-long-24357476"> 3.面向物联网的“嵌入式”和面向大型化的“分布式”开发,掌握职业钥匙,把握行业先机。 </p> <p class="MsoNoSpacing" style="margin-left:18pt;"> <br /> </p> <div> <br /> </div> <p> <br /> </p> <p style="margin-left:0cm;text-align:start;"> <span style="color:#337FE5;"><strong>【面向人群】</strong></span> </p> <p style="margin-left:0cm;text-align:start;"> <span style="color:#222226;font-family:PingFangSC-Regular, "font-size:14px;background-color:#FFFFFF;">1.希望一站式快速入门的C++初学者;</span> </p> <p style="margin-left:0cm;text-align:start;"> <span style="color:#222226;font-family:PingFangSC-Regular, "font-size:14px;background-color:#FFFFFF;">2.希望快速学习 C++、掌握编程要义、修炼内功的开发者;</span> </p> <p style="margin-left:0cm;text-align:start;"> <span style="color:#222226;font-family:PingFangSC-Regular, "font-size:14px;background-color:#FFFFFF;">3.有志于挑战更高级的开发项目,成为资深开发的工程师。</span> </p> <p style="margin-left:0cm;text-align:start;"> <br /> </p> <p> <br /> </p> <p> <span style="color:#337FE5;"><strong>【课程设计】</strong></span> </p> <p> 本课程包含3大模块 </p> <p> <strong>基础篇</strong><br /> 本篇主要讲解c++的基础概念,包含数据类型、运算符等基本语法,数组、指针、字符串等基本词法,循环、函数、类等基本句法等。 </p> <p> <br /> <strong>进阶篇</strong><br /> 本篇主要讲解编程中常用的一些技能,包含类的高级技术、类的继承、编译链接和命名空间等。 </p> <p> <br /> <strong>提升篇:</strong><br /> 本篇可以帮助学员更加高效的进行c++开发,其中包含类型转换、文件操作、异常处理、代码重用等内容。 </p> <p> <img src="https://img-bss.csdnimg.cn/202007091130239667.png" alt="" /> </p>
百度云盘分享 简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除,从账户中取出amt,如果amt>账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始化一个EJB实例 5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口函数得到远程接口的引用,用远程接口的引用访问EJB。 EJB中JNDI的使用源码例子 1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端上直接地使用它,但是它的主要作用是供程序使用的。本规范尝试满足大型主机、微型主机、个人工作站、和TACs 的不同需求。例如,容易实现协议的设计。 Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天通信演示代码 2个目标文件,一个服务器,一个客户端。 Java Telnet客户端实例源码 一个目标文件,演示Socket的使用。 Java 组播组中发送和接受数据实例 3个目标文件。 Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密   Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。   设定字符串为“张三,你好,我是李四”   产生张三的密钥对(keyPairZhang)   张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节   通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后的公钥,将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 同上 java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥   Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从文件中得到公钥编码的字节数组、如何从字节数组解码公钥。 Java数据压缩与传输实例 1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输   Jav
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页