今晚总算把《观止》看完了,看得比较快,基本上是当叙事小说一样看。这个书名看起来像文艺书,但实际上是讲述Windows NT这个操作系统的创造史。为什么Windows NT这么出色,因为在当时它的诞生改变了人们对操作系统的看法,它引入了现在我们看起来很理所当然但当时还没有的技术:抢占式的多任务处理、可安装在通用的硬件平台、支持32位内存寻址、支持大容量文件并具有容错功能的NTFS(NT File System)等等。当然这些系统功能并没有在书上描述,这本书从头到尾都是在讲述整个NT团队是如此在艰苦的进度压力和技术压力之下花了将近5年时间创造出NT。 这个NT团队的领导人就是Dave Cutler,性格独断脾气火爆,技术牛B,现在来说就是一个传奇的程序员,当他领导NT团队的时候已经是个快50岁的人了。有个小插曲或者会更令人记住他是谁,就是当他招聘小秘的时候会问一个问题“How do u think about the word ‘fuck’?”,只有那个回答了”Its my favorite word”的MM才拿到了offer。 从1988年10月开始到正式发布的1993年7月23日,历时接近5年时间,团队从开始的20多人到最后的200多人,在这5年时间里面NT团队面对的是各种功能需求的增加、遥遥无期的进度、不断冒出的bug,还有其他非技术问题,如家庭和爱人,可以说是可歌可泣,NT团队的每个成员为Windows NT奉献太多了。
主持人 冯大辉,阿里巴巴集团旗下支付宝 (中国)网络科技有限公司数据库架构师,负责支付宝数据库架构规划、解决方案等相关工作。 提问嘉宾 岳旭强,淘宝网资深架构师,在大型交易网站的设计和调优方面有丰富的经验。2004年加入淘宝,见证了淘宝网业务以及技术上完整的发展过程,参与了淘宝几乎所有核心系统改造,并主导了用来支撑淘宝网未来高速发展的核心业务中心的建设。现在负责网站整体业务架构的设计和规划。 回答嘉宾 杨卫华,新浪产品事业部技术经理,专注于开发高并发的分布式应用。对互联网后端技术、分布式、网络编程、XMPP即时通讯等领域感兴趣。曾多次组织广州及珠三角技术沙龙活动。个人Blog:http://timyang.net 岳旭强:企业内部技术产品开源有何好处?需要注意什么? 杨卫华: 目前不少心态开放的企业已将一些会给业界带来价值的产品进行开源。新浪也在这方面进行了不少尝试,近几年开源了若干产品。根据我们的体会,产品开源一方面 可以促进项目参与人员将技术做得更好,在程序结构、代码风格、代码一致性、代码效率方面会更加谨慎,让源代码及文档达到业内开发人员认可的标准。而业内很 多闭源产品通常只要求项目内部范围的可读性及强调代码执行效率,甚至有不少公司项目只关注实现 功能,对代码质量和技术文档要求甚少,因此开源在一定程度上是对高标准的自我要求。另一方面开源可以提高公司在业界技术人员中的影响力,增强公司的产品在 技术专业人群领域的认可,并有可能吸引潜在的优秀人才加入公司,更重要的是企业的开源产品可以给业界带来价值,减少在相近领域的重复劳动,降低一些同行特 别是小公司的开发成本。
“持久地存储知识的最佳格式是纯文本。” “GUI的好处是WYSIWYG-所见即所得(what you see is what you get)。缺点是WYSIAYG-所见即全部所得(what you see is all you get)。” “在shell提示下,你可以调用你的全套工具,并使用管道、以这些工具原来的开发者从未想过的方式把它们组合在一起。通过对shell进行编程,你可以构建复杂的宏命令,用来完成你经常进行的各种活动。” “用好一种编译器。只是依次输入、并使用鼠标进行剪贴是不够的。对于常见的编辑操作,与鼠标或菜单驱动的命令相比,只使用键击效率更高,因为你的手无须离开键盘。” “确保每样东西都处在源码控制之下-文档、电话号码表、给供应商的备忘录、makefile、构建与发布流程、烧制CD母盘的shell小脚本……” “把整个项目置于源码控制系统的保护之下具有一项很大的、隐蔽的好处:你可以进行自动和可重复的产品构建。” “在技术竞技场上,你应该专注于修正问题,而不是发出指责。”
“系统中的每一项知识都必须具有单一、无歧义、权威的表示” “DRY-Don’t Repeat Yourself 不要重复自己” “代码为什么需要注释:糟糕的代码才需要许多注释。DRY法则告诉我们,要把低级的知识放在代码中,它属于那里;把注释保留给其他的高级说明。否则,我们就是在重复知识,而每一次改变都意味着既要改变代码,也要改变注释。” “如果你觉得受到诱惑,想一想古老的格言:”欲速则不达”。其中许多问题是由开发者的懒惰造成的。无耐性的重复是一种容易检测和处理的重复形式,但那需要你接受训练,并愿意为避免以后的痛苦而预先花一些时间。” “在计算技术中,正交性用于表示某种不相依赖或是解耦性。如果两个或更多事物中的一个发生变化,不会影响其他事物,这些事物就是正交的。” “不要依赖你无法控制的事物属性” “让你的代码保持解耦;避免使用全局数据;避免编写相似的函数。养成不断地批判对待自己的代码的习惯。寻找任何重新进行组织、以改善其结构和正交性的机会。这个过程叫重构。” “修正bug也是评估整个系统的正交性的好时候。当你遇到问题时,评估修正的局部化程度。你是否改动了一个模块,或者改动分散在整个系统的各个地 方?当你做出改动时,它修正了所有问题,还是又神秘地出现了其他问题?当你在测试之后、把代码签回时,标记所做的bug修正。随后你可以运行月报,分析每 个bug修正所影响的源文件数目的变化趋势。” “可撤消性:不存在最终决策”
“不要留着”破窗户”(低劣的设计、错误的决策、或是糟糕的代码)不修。发现一个就修一个。如果没有足够的时间进行适当的修理,就用木板把它钉起 来。或许你可以把出问题的代码放入注释,或是显示”未实现”消息,或是用虚设的数据加以替代。采用某种行动防止进一步的损坏,并说明情势处在你的控制之 下” “一辆废弃的轿车放了一个星期,无人理睬。而一旦有一扇窗户被打破,数小时之内车上的设备就被抢夺一空,车也被翻个底朝天” 石头汤:士兵通过煮石头吸引村民共同分享食物。 “今天的了不起的软件常常比明天的完美软件更可取。如果你给用户某种东西,让他们及早使用,他们的反馈常常会把你引向更好的最终解决方案。” “定期为你的知识资产投资:” “定期投资:定期为你的知识资产投资。每年至少学习一门语言,每季度阅读一本技术书籍。” “多元化:计算机技术的面貌变化很快–今天的热闹技术明天就可能变得近乎无用。你掌握的技术越多,你就越能更好地进行调整,赶上变化。” “管理风险:不要把你所有的技术放在一个篮子里。” “低买高买:在新兴的技术流行之前学习它可能就和找到被低估的股票一样困难,但所得到的就和那样的股票带来收益一样。”