ShowStopper,有搅局者、精彩表演者的意思。
微软出版过四本书,我个人感觉不错:
1、开发类:软件开发的科学与艺术
2、开发管理类:微软的秘密
3、研究开发类:观止(就是这本书),介绍NT这个微软史无前例的革命性产品如何研发
4、研究类:追随智慧-微软亚洲研究院成立
《观止》和《追随智慧》,蛮适合在商业公司做研究的人看的。很多人对在商业公司如何做研究,以及如何管理研究,都比较陌生。这两本书看完,大家都能找到恰当的尺度。
(1)史前
一、IBM
1946年,世界上第一台计算机问世,是基于电子管的。
一开始人们使用一种特殊打字机,这种打字机可以把人们敲入的计算机指令直接打孔为二进制卡片。1950年,汇编语言发明。1951年,美国海军军械储备局的赫伯发明了编译器。1956年,IBM发明了Fortran语言,这是世界上第一个被正式推广使用的高级开发语言。
1959年,IBM发明了晶体管计算机,采用了晶体管线路,磁芯存储器,印制线路这些先进技术。可以说,是IBM开创了计算机这个商业产业。
一开始的软件和硬件是绑死的,软件想跑在其他型号的计算机上就需要重新修改和编译。1964年,IBM推出System 360 计算机,至少在IBM大型主机系列中可以做到软件是可兼容的。
1969年,IBM受到美国司法部《反托拉斯法》的调查。1970年,IBM害怕被拆分,于是IBM宣布,硬件、软件、服务三者分开独立计价。1971年,三个IBM德国公司的高级雇员发现这是机会,于是创办了SAP,成为了世界上首个商用企业应用软件产品公司。
二、DEC公司
DEC公司创办于1957年。1959年推出PDP-1小型主机,价格比IBM大型主机要低很多,但性能差距却并不很大。
1971年,29岁的卡特勒加入了DEC公司。
1975年4月,DEC开始启动VAX小型机的研发。1977年10月,DEC推出VAX小型主机,里面的操作系统VMS就是卡特勒率领人开发的。
三、Unix
1969年,Unix诞生于AT&T的贝尔实验室。但是Unix1.0,却是在1971年,Ken Thompson在DEC的PDP-11小型主机上开发出来。
但是Unix真正可用,是1974年,Dennis Ritchie发明了C语言,Ken Thompson 与Dennis Ritchie用C语言把Unix重新写了一次,然后在1974年7月发表到 The Communications of the ACM,才为世人所知,结果引起了学术界的广泛兴趣并对其源码索取,所以,Unix第五版就以“仅用于教育目的”的协议,提供给各大学作为教学之用。
1977年,加州大学伯克利分校开发出BSD(Berkeley Software Distribution),成为著名的Unix免费开源版本。
四、微软
1977年,盖茨从哈佛大学退学,和艾伦创办微软,卖BASIC编译器,一开始主要跑在MITS公司的Altair计算机上,Altair计算机使用的是Intel 8080 CPU。
1980年,IBM选中微软为其新PC机编写操作系统,这就产生了MS-DOS。原本IBM没打算在个人电脑市场好好发展,但是猝不及防的订单让IBM开始正视这块市场。1984年,IBM和微软合作开发OS/2。OS/2 1.0于1987年12月上市。
但是,1980年,微软自己还基于Unix开源版本,把只适用于小型主机的Unix,可以适用于Intel 微机CPU。另外,还提供了硬件错误恢复策略,还有文件系统瘫痪、电源故障和其它错误后的自动修复功能。增加了一些新的功能,包括共享数据段,以及改善了交互进程通信等。
1982年,SCO和微软合作开发Xenix。1984年,Xenix1.0发版,它还能在DEC PDP-11和苹果 Lisa电脑上执行,Xenix具备了多用户多任务的工作能力。但是,微软于1985年发行了Windows1.0。
微软还与1984年和乔布斯合作,为Mac电脑开发办公套件。Word1.0产生于1984年,1985年又产生了Excel 1.0。
1988年,微软和Sybase公司合作开发SQLSERVER,在Sybase的基础上生产出了在OS/2 操作系统上可以使用的SQLSERVER1.0。1994年,微软和Sybase分道扬镳,微软继续独立开发,于1995年推出SQLSERVER6.0大获成功。在这里要提一句,1992年,微软还并购了Fox公司,这就是著名的个人电脑上的数据库Foxbase。
至此,微软操作系统、Office、数据库三大件终于集齐。
五、苹果
1976年,乔布斯和沃兹创办苹果公司。1977年,苹果公司推出AppleII,这是人类历史上第一台个人电脑。1980年12月12日,苹果公司上市。
1979年,乔布斯到施乐PARC实验室参观,被图形界面与鼠标、所见即所得打印、SmallTalk面向对象编程语言、电脑联网四大技术震撼,随后乔布斯撬走了PARC实验室的15名核心骨干研发人员。1983年,Lisa电脑推出,这也是人类历史上第一个商用的图形界面的电脑。但是没想到微软在1985年也推出了Windows1.0。
1985年,造出来Mac电脑的乔布斯由于内部斗争,以及Mac的销量不佳,被苹果董事会赶出苹果,创办了NeXT。不过乔布斯这次也挺鸡贼,他在操作系统方面,用了免费开源的Unix Mash微内核和BSD代码,他在开发语言方面用了业界免费开源的Object-C开发语言。这都是1985年的事了。
(2)卡特勒
一、挫败
1971年,29岁的卡特勒加入了DEC。1975年,卡特勒加入VAX小型机的研发项目中,担任VAX小型主机的操作系统VMS的研发负责人。1977年,VAX成功推出。
但是卡特勒看不惯DEC公司的官僚作风,扬言要离开DEC。DEC的CTO最看好卡特勒,于是在1981年告诉卡特勒,你可以建立一支团队,你来创建一个全新的服务器操作系统。然后卡特勒就招募了一帮好手不断在实验室倒腾。
直到1985年,DEC公司才让卡特勒立项,正式商业开发下一代小型机Prism以及它的操作系统Mica。1988年6月18日,DEC取消了这个项目。
想一想,卡特勒已经在DEC待了17年,这时候的卡特勒已经46岁。
即使他有VMS的成功研发经验,但是他为了酝酿出下一代服务器操作系统,他仍然花了4年研究实现,4年开发时间,但仍然连个屁都没有。
要知道业界,生产一代硬件和操作系统,往往时间周期是4年时间。
二、加入微软
1988年8月4日,卡特勒加入微软。
而这时候的微软,1986年已经上市,微软已经于1987年发布了Windows2.0,与IBM合作的OS/2也于1987年发布。并且1984年,微软和SCO已经成功研发了Xenix操作系统。也就是说,微软在个人电脑上研发操作系统,已经颇具能力。
没想到,这一去,Windows NT的研发周期长达5年。要知道,微软1985年推出Windows1.0,1987年推出Windows2.0,1990年推出最火爆的Windows3.0。1992年4月,Windows3.1发布。看似是就一个小版本,但是这个小版本可了不得,CD播放器、True Type字体、支持以太网网络、支持Windows工作组网络共享协作安全控制。微软的工作周期是这个样子。
我们随后会看到卡特勒是怎么控制Windows UI、网络、安全。
三、师父鲍尔默
鲍尔默是盖茨的哈佛好友,也是微软的元老,还是微软的总经理,万人之上一人之下。
他表面看起来热情冲动、强硬推进,其实他心思缜密、怀柔,对项目成本预算、风险、市场都有很好的敏感性。
他做卡特勒的入职引导Metor,真是盖茨煞费苦心。
鲍尔默做了几个入职原则:
1、分工:卡特勒负责内核态,微软其他团队负责用户态
2、功能:要可移植性,既能让OS/2应用跑起来,又能让DOS应用跑起来,还能让Windows应用跑起来
3、进度:不急,先花6-9个月时间熟悉PC机的特性,并且规划出一份可交付成果清单
这三点原则可谓老辣啊。
四、团队
看看卡特勒的核心团队:
1、硬件:索特
2、软件内核:皮亚佐利(他创建了Client-Server模式的内核态-用户态操作系统内核)
3、文件系统:米勒(他创建了NTFS文件系统)
4、Open API:拉科夫斯基
5、文字输入与显示:斯托维尔
6、安全:吉姆凯利(他创建了Active Directory)
连卡特勒一共7人,除了斯托维尔是皮亚佐利从外面招聘来的,其他都是DEC一起配合工作了快十年的老人。很明显,没有任何微软的人。
看看卡特勒的外围团队:
7、Windows UI:威特莫
8、网络:鲁宾
9、外设驱动:李史密斯
这是微软的人,但都是外围团队。
五、融合
因为卡特勒从DEC跳槽微软的时候也带来了7个高手,而且工作风格和微软现有研发团队格格不入。微软CTO麦沃尔德担心卡特勒不能很好做团队配合(事实果然如担心的一样),麦沃尔德就想试探一下卡特勒在团队融合方面是否OK。
他就派了微软最牛的程序伍德加入卡特勒团队。伍德,西雅图本地人,耶鲁大学计算机博士(人很聪明专业能力很强),湖滨高中学生(盖茨就读这所贵族高中),态度也很谦和,更重要的是他不是书呆子(实用主义者)。还还完整地成功地开发完了OS/2,有丰富的操作系统开发经验。
庆幸的是,卡特勒他们团队接纳了伍德。这让微软CTO麦沃尔德松了口气。
(3)嚎叫的熊
一、倒逼
针对鲍尔默的期望,卡特勒自己还另有私心,不仅想向上兼容各个用户态应用,而且还想向下兼容各个主流CPU芯片,如Intel,如MIPS。但盖茨从一开始目标就很明确,就是x86,但盖茨不知道卡特勒的私心。
所以,卡特勒梳理完对下一代服务器操作系统时做了三个期望:
1、可移植性:能兼容多个厂家的CPU(这不是盖茨的目标)
2、个性化:能兼容多个用户态应用,如OS/2、DOS、Windows
3、可靠性:不能因为操作系统崩溃、断电、磁盘损坏等原因造成数据丢失
我个人对可靠性印象最深刻。我过去用Windows95、Delphi跟踪代码时,老会跟踪跟踪就蓝屏,所以我养成了一个习惯,写点代码就不由自主按一下Ctrl+S进行保存。
1989年7月,距离卡特勒到微软已经快一年了,盖茨必须要看看这帮家伙到底做出了点什么。
盖茨看到的是:一堆裸露的硬件元器件,可以点亮,并且在屏幕上显示一行字:Hello World!
这代表CPU、内存、磁盘、电源、文件系统、引导程序、显示外设、字符显示,OK了。
盖茨迫不及待需要一个倒逼时间表,问NT啥时候发布。卡特勒和盖茨做了一个讨价还价:1、NT上不能跑OS/2应用也不能跑DOS应用(这其实已经破坏了鲍尔默和卡特勒一开始期望的个性化) 2、NT需要重写外设驱动程序(这意味着微软蓄积的大量硬件合作伙伴需要重写驱动程序并且重新测试,这个工作量可海了去了,这其实有点破坏了卡特勒最初提出的可移植性)。盖茨痛苦的接受了,卡特勒给出了时间截止日:1990年3月30日刻黄金主盘。也就是说:NT需要在十个月后发布。
因为盖茨有个著名言论,那就是:微软离死亡只有十八个月。所以微软的项目最长不能超过十八个月。
显然,卡特勒这次的倒逼时间是公司要求,而非现实时间。
二、项目经理来了
马瑞兹来了,来担任NT的项目经理。这又是显示了盖茨的煞费苦心。
微软的研发组织架构是:项目经理、产品经理、架构师和开发工程师、测试工程师。
马瑞兹是老手,曾经在Intel做过5年,熟悉CPU、熟悉硬件。而且他一来了微软就负责过Xenix、OS/2、Windows,也就是说,他对服务器操作系统、图形应用、跨操作系统应用都很熟悉。而且他的资源整合、项目推进能力很强。
后来,在微软Windows部门老大争夺战中,马瑞兹没有获胜,他就离开了微软,合伙创业了VMWare。VMWare虚拟机应用,恰好和他这段工作经历有关。
马瑞兹的目标是要把卡特勒的NT团队、威特莫的Windows Shell团队、鲁宾的网络团队整合在一起。
三、NTFS
很显然,NT延期了。
说好的1990年3月发布,但是1990年的夏天,米勒和木村还在头疼要不要给NT做个新的文件系统。因为他们在兼容DOS和OS/2文件系统时痛苦不堪。不做吧,太痛苦了,做吧,时间不够。
但是他们忘了目标,不管是盖茨、鲍尔默、麦沃尔德、马瑞兹,都对DOS和Windows的不稳定性很看重,希望NT这回能彻底搞定。
当然,卡特勒也在最初设计的时候列了三大目标:可靠性。
为了保证可靠性,他们设计了Client-Server内核模式,让CPU和内存控制稳定下来;为了保证可靠性,他们要求重新设计和开发外设驱动程序,让外设控制稳定下来。现在唯一稳定不下来的就是存储系统的控制。
马瑞兹是率领过Xenix操作系统团队的,他能判断事情的重要性。所以他允许NT再次延期到1991年夏天,把NTFS文件系统加入进去。这意思就是:NT要按照最初计划延期一年了。
(4)又延期了
一、又延期了:整合
事实上,到了1991年夏天,第一版集成的NT才完成,NT内核终于和Windows应用、网络整合在了一起。至于说外设兼容性、应用兼容性,都还没来得及时间。
先进入自己吃自己的狗粮时间吧。自己酿的苦果得自己先尝。先让NT的研发团队首先采用NT,让他们在上面编程序。
这不禁让我想起了Vista的研发过程。Vista开始于2001年,计划在2003年发布。但实际上,2007年才发布。
按说,已经在2001年发布的XP,已经是NT内核了,只是上层附加了.NET平台。
.NET是全新的应用开发和运行平台。有.NET虚拟机、编译器、开发语言(如C#),也有.NET组件模型(比COM更好的组件模型),也有服务间通信中间件WCF,也有UI层WPF。这是1999年由盖茨担任首席架构师亲自率领的.NET战略。
想当年,1995年美国互联网开始大热,1998年手机大热,1998年JAVA定义了J2SE(桌面)、J2ME(移动)、J2EE(服务器),SUN在企业级应用、互联网应用兴风作雨,让盖茨眼红不已。JAVA有虚拟机、编译器、JAVA开发语言,也有EJB组件模型,也有RPC进程间通信,也有桌面UI、移动UI、服务器Servlet/HTML UI。
Whistler和Blackcomb都是加拿大卑诗省的大型滑雪胜地,而Longhorn只是两座山脉之间的一个酒吧,要从Whistler到Blackcomb,你必须经过Longhorn。而XP的研发代号就是Whistler,Vista研发代号就是Longhorn。也就是说,微软本来打算就是让Vista当个从Windows NT内核往.Net更高一层应用内核升迁的过渡。没想到这个版本一下子憋了6年,和NT一样长。Vista给了Windows团队致命一击。
Vista犯的毛病和NT一样,又大又性能慢、研发时间长。而且Vista最终也没实现最初的定义设想:做一个WinFX新的文件系统,让桌面电脑本地搜索操作手法和在互联网上一样。
微软的人一开始乐观的估计Vista延期就延期呗,反正有NT珠玉在前,一旦出来,Vista将会和NT一样成功。可惜历史不能复制(但是为什么NT却侥幸地成功了呢?这可是微软第一个完全自我研发的商用服务器操作系统)。
现在来看,CORBA、COM/.NET组件、EJB组件,现在回到了Docker+Serverless。不知道盖茨是该哭呢还是该笑呢?我们看故事的同时,我们再深刻思考一下:.NET、EJB当年解决的问题,现在解决了没,是怎么解决的?.NET、EJB遗留下来的问题,现在解决了没,是怎么解决的?
二、又延期了:Active Directory
安全就根本没在所有人的目标定义中。
我们看看最初定义的三个目标:
1、兼容多个型号的CPU,卡特勒倒是最后完成了,但这不是微软的目标
2、兼容多个型号的用户态应用,这个没有完成
3、可靠性。这个倒是完成了,用Client-Server内核模式、NTFS文件系统、新外设驱动程序保证
1991年10月份,大家才提出来安全怎么办?这离NT项目组立项已经2年多了。
安全,这也是个让我个人滑铁卢的事。
我曾经率领了上百人重构一代ERP全部套件。我最初的定义也是三个目标:
1、稳定性:不要让不同子模块修改影响了其他模块(我使用了物理分离、服务化的思路)
2、性能:要从架构层面解决复杂任务处理、高并发处理、海量数据查询统计处理的性能(我使用了各系统物理隔离部署、读写分离、多层缓存、主数据管理、数据仓库的思路)
3、可兼容性:不要让前端UI层每次都适配测试各个版本的主流浏览器(我建立了专门的UI架构组重新设计了统一UI层);不要让不同版本的子模块集成开发时费死牛劲(我梳理了接口现状定义了接口标准以及接口检查工具,并且全部整改成标准接口)
但是,我万万没有想到的就是:安全。
公司决策层要求放入安全,我觉得现在的团队(100多人)、现在的改动量(全部ERP子系统)、现在的研发周期(长达一年)已经非常复杂了,大家都已经非常疲劳了,不要再加入大目标了。
但是....。
但我看到NT团队在高压研发2年后也被强制塞入安全性这个大目标时,我心有戚戚然。
不过好在,NT团队成功了,Active Directory成了NT伟大的特性,项目周期从1991年10月份又被拖到了1992年4月份。
三、尾声
1992年4月份完成了NT的安全性控制,还有三个重要工作:
1、应用兼容性
2、外设兼容性
3、性能优化、性能压测:NT团队都没有时间做代码的性能优化。NT尺寸太大了,性能太慢了。最终,卡特勒宣布,NT第一版本,放弃性能优化,但他承诺,下一个版本很快发布,目标就是性能优化。其实,卡特勒和他的NT团队再也承受不住4年的高强高压工作了,哪怕是一根稻草。卡特勒为了发布,把一个版本的事情被迫拆成了两个版本。
就光做应用兼容性、外设兼容性的测试和修改,就花费了一年的时间。
NT最终发布,在1993年3月。
发布后,大量的NT团队成员离开微软,有的朝天开枪扫射缓减压力,有的长期接受心理辅导治疗。
转载自原文链接, 如需删除请联系管理员。
原文链接:怎么做革命性创新产品,转载请注明来源!