说起Windows系统,很多人都是又爱又恨。它为我们的工作学习生活带来很多便利和乐趣,提供了无数的可能,也带来了不少烦恼。凭借在微软Windows开发团队十多年的工作经验,本书作者Raymond Chen将向你揭示你不可不知的Windows系统内幕。为什么Windows的工作方式是这样的?为什么按“开始”按钮能够关机?为什么GetWindowText函数的行为很奇怪?Windows系统的很多奇怪行为是有逻辑可循的,有其历史原因。本书帮助你了解Windows这个伟大的产品的进化史,理解Windows设计人员在技术和用户体验、区域文化、政治等因素上的权衡与考量,从其中获得启发。
- 既有对技术严肃的探讨,也有令人忍俊不禁的八卦。
- 从内部开发人员的角度,讲述Windows设计中的一些决策过程,对Windows的某些内部工作机制进行深入地剖析,指出官方文档未讲透彻的技术点,帮助Windows平台开发者,尤其是C++编程人员提高工作效率。
- 讲述Windows是如何做交互设计和用户体验设计的。对于遍布于全球的几十亿用户,怎么做才能保证大多数人拥有良好的用户体验,避免产品被牵扯进文化和政治纷争,Windows做了什么样的工作,从本书中可以窥见一斑。
我记得在 2007年前后曾经阅读过“The New Old Thing”这本书,给我留下深刻印象的是,这本书介绍了 Windows开发团队中经历过的一些趣事。未必是高深的理论,却揭示了我们每天使用的 Windows是如何长成这个样子的,一些编程套路是如何形成的。
Windows操作系统可算得上是人类复杂工程的一次成功实践,一套代码服务于几亿规模的来自于不同硬件厂商的 PC机器,而且持续进化了二十多年。这其中的经验和教训何其宝贵,本书展示的正是作者亲身经历过的各种编程实践活动,涵盖了用户体验设计、API进化,以及系统层面的设计,甚至还涉及了 Windows团队的工程师文化。
多年以后再来翻阅这本书,怀旧的感觉非常强烈。最近 5年,我已经不再使用 Windows开发平台了,但仍然坚持使用 Windows作为自己的办公系统。偶尔在公共场所看到 Windows出丑的界面,比如广场大屏出现蓝屏、地铁闸口出现 Windows 2000风格的出错对话框、自行车租赁处出现 Windows启动界面,瞬时感觉无比亲切。在信息技术飞速发展的过去二十多年,Windows影响着大多数技术人员,本书中讲述的各种技术和非技术的点点滴滴,是大家曾经共同面临或感受过的。
今天,随着智能设备的快速普及,智能操作系统获得了软件开发人员的广泛关注,Windows已经风光不再。但是在 Windows平台上的开发经历却仍然是许多开发人员的共同话题,本书中绝大多数章节的内容依然是技术人员的共同语言。我不止一次见到过这样的场景,Android或者 iOS的开发人员在向他们的老板描述一个技术问题时,用 Windows平台上的对应术语或做法进行解释。在这样的场景中,管理者的 Windows背景被强化了,年轻一代更易于接受新的技术和平台;另一方面,也说明了 Windows平台虽然不再像以往一样被广泛使用,但它倡导的编程模式和技术框架依然被沿袭到各种后来的开发平台,甚至嵌入式系统或移动智能操作系统中。
这不是一本教你如何进行 Windows编程的书,也不是讲解 Windows的核心技术的书,但是,阅读本书会有意想不到的收获。你可以理解 Windows背后的一些设计来源,以及 Windows进化过程中的一些有趣故事。如果你有过 Windows平台的开发经历,那么,很多章节的内容一定可以引起你的共鸣,并且更好地理解 Windows之所以成为我们看到的 Windows。
Windows NT是一个具有强设计的操作系统,在二十多年的进化过程中,其初始的设计始终主导着它的每一个版本。但是,在一些细微或局部的方面,也会随着版本的进化而发生变化。这种变化可能是做了妥协,也可能是做了优化,甚至是一些意想不到的原因导致,但通常可让系统更加满足实际的需求。通过本书,我们可以轻松地了解到 Windows曾经经历过的各种设计选择和变化,也可以让我们在面对其他系统的时候有更深刻的理解。
潘爱民
2015年 12月于杭州城西前言
在一些技术书籍中,有不少篇幅都是侧重于介绍“如何”使用Windows 以及“如何”在Windows 上开发软件的,但很少有作者会去探究“为什么”。虽然有些事情乍看上去不可思议,但却总能找出完全合理和符合逻辑的解释,所有这些其实都折射出了微软的Windows 操作系统中所蕴含的历史背景、发展演变以及基础理论。本书的内容并不是为了告诉你如何去做(虽然这方面的内容也不少),而更多地是帮助你理解为什么Windows 发展成为现在这样。因此,在了解了Windows 的历史背景和基础理论后,你就能够成为一名更高效的Windows 程序员。
本书重点讲述的是隐藏在Windows 背后的基础理论。本书既不是一本参考手册,也不是一本指南,而是一部“真实的历史”。书中包含了一系列简短且独立的文章,阐述了Windows 的核心思想,而叙述方式采用的则是谈话式而并非说教式。
因此,你可以直接跳到自己感兴趣的(或者某个专门技术的)主题进行阅读。本书根据所阐述问题的共性对这些短文进行了分组,并且当对某个主题研究得很深入时,将进一步把这个主题分成几个连续的小节来讨论,这也是一种有效的教学方式。需要指出的是,即使在这种情况下,对该主题的讨论仍然不会超过整个章节的范围。
经常有人问作家兼评论员David Sedaris,他讲述的故事是否是真实的。他的回答是,“这些故事是‘足够真实的’”。就像David Sedaris 的故事一样,本书的内容同样也是“足够真实的”。我们要把注意力放在大的方向上,而不要拘泥于小节;要重点突出单个要点,而不是吹毛求疵。在本书中,我们将重点强调一些关键的细节,而那些不重要的东西都将被暂时搁置。而且,即使有一些内容可能比较重要,但如果与所讨论的主题没多大关系,也会被忽略掉。
本书面向的读者应该对编程技术有所了解,并且对Windows 的历史有一定的兴趣。在本书中,大约有一半的主题不需要具备编程的背景知识;而在剩下的那一半主题中,大多数也只需要读者有基本的软件设计和软件开发的知识就够了,并没有什么特别深奥的东西。对于那些与Windows 编程相关的专门主题,则要求读者熟悉Win32 用户界面编程和COM。在后面,根据普通读者、普通程序员和Win32 程序员各自不同的需求对这些章节进行了分类。当然,你也可以跳过那些不感兴趣的章节,不过或许你也能够在这些章节中找到一些感兴趣的东西。
你从本书中将得到什么?正如在前面所提到的,本书的主要目的是讲述隐藏在Windows 背后的基础理论,而这些设计或许乍看上去是不合理的。此外,你还将了解到在什么情况不能在Windows 中使用某项技术,并且这种限制往往是出于好意;而且,你将了解Windows 为了维持向后兼容性所付出的努力(以及为什么维持向后兼容性是一项很重要的工作)。当然,在阅读了本书后,你还可以在鸡尾酒会(即Windows 狂热爱好者们参加的鸡尾酒会)上讲述这些有趣的Windows 历史故事。
本书的大多数文章中都已经在作者的网站“The Old New Thing”(http://blogs.msdn.com/oldnewthing/)上以各种各样的形式出现过,但为了更好地满足本书的需求,我还是补充了许多新的内容。读者可以到介绍本书的网页上(www.awprofessional.com/title/0321440307)下载附送的两章, 分别是“ 关于应用程序兼容性的故事( Tales of Application Compatibility)”和“如何让程序无法在Windows 95 上运行(How to Ensure That Your Program Does Not Run Under Windows 95)”。你可以把这两章看作在电影的后期制作中被剪掉的两幕独特而富有见解的场景。此外,在网站上还提供了本书的示例代
码和勘误表。