2004年08月24日

一步一步思考,一步一步创建

怎样才能创建革命性的软件?有一个好主意重要还是把这
个主意转变成一种产品更重要?我们是否应当进行前期研究,还是应该对已有的产品进行不断改进直至满足要求?我们是否应该成为巨人,还是站在巨人的肩膀上?答案常常是两者兼而有之:大多数的软件都融合了发明、灵感和不断地改进。

不管融合了什么,仅有好的想法不能成功。你还必须建立一个能够把这些想法转变成为使用方便、具有极大价值和广泛实用性的产品和服务的环境。你还必须能够面对未来做出冒险的决定,能够对某种技术和某个战略几年没有回报具有承受能力。人们很容易在当前的市场和竞争对手方面花费时间,但却对未来将要遇到的事情没有准备。这就是我为什么一年之中安排几个“考虑周”的原因,在这段时间中我解读、分析未来的发展趋势。

对未来做出猜想并非易事。在1975年,人们认为个人计算机业应当与当时的整个计算机业一样,从生产计算机的商家那里购买软件。几乎没有人发现这是一个完全不同的“软件业”。保罗和我不这样看。我们相信计算能力将更加廉价,来自不同制造商的计算机将充斥每个角落,软件应当能够从这个趋势中受益。因此我们决定为个人计算机编写并提供软件,但却不涉及硬件的制造和销售。

我们的第一种产品是Microsoft BASIC。当时BASIC语言业已应用于大型计算机,但是我们知道它同样也是个人电脑的理想选择。因为它非常简单并且容易学习,而且能够创造复杂的程序使计算机完成有用的工作。一旦我们创建了一个能够适用于早期计算机内存有限的BASIC版本,我们就开始对它进行扩充 - 增添新的命令以发挥功能更加强大的机器的优势。今天,Visual Basic是世界上使用最广泛的编程语言。利用它编写的软件令人叫绝。在过去的这些年中,BASIC对于我们许多的成功都是至关重要的。

我们对未来PC机发展的见解还使我们采取了不同的授权方法。我们不是把自己软件的特许权以一个很高的价格出售给某一个硬件开发商,而是以一个极低的价格向计算机用户提供。我们赌的是数量。当时,绝大多数的其他公司都采取高价位,因为它们认为只能销售出很少的拷贝。此外,当我们开发MS-DOS PC机操作系统时,我们与所有的PC机用户进行了密切的合作以保证他们需要的各种功能能够尽可能快地进入到我们的系统中。我们不想漏掉任何一个消费者。

开发商对MS-DOS的支持是使PC机成为主流的关键。开始,年轻的个人电脑公司,如康柏公司,知道需要使PC机相互兼容并且使用户具有相似和相同的使用经验。由于MS-DOS帮助弥补了计算机之间的差异,很快成为了个人电脑上最流行的操作系统。那些开发运行在MS-DOS之上的应用程序的软件开发商明白它们的产品将在上百万台计算机上运行。于是开始出现了良性循环:用于个人电脑的应用程序越来越多,越来越多的用户购买PC机,随后越来越多开发商希望为PC机编写应用程序。这使PC机取得了巨大的成功。

随着PC机的能力提高到可以进行图形处理,我们又找到了计算技术继续发展的机会:图形用户界面(GUI)。GUI在70年代中期开始出现,一些公司开始建立基于GUI的计算机,我们认为我们在建立平台和发展标准方面的经验对于推广GUI将有很大的裨益。所以,我们把公司的赌注压在了Windows上。最初,人们认为我们疯了。当其他人都使用MS-DOS时,为什么你要转向Windows?

通过我们在改进提高Windows方面几年的艰苦工作,我们很高兴地见到MS-DOS曾经发生的一切在Windows上重现。Windows使PC机使用更加方便,使更多的人们使用它。加上用于Windows软件编写可、简化的Visual BASIC,鼓励开发商开发许多基于Windows的应用程序。随后的几年就象我们对BASIC所做的工作,我们不断推出性能越来越好的新Windows。我们大幅度提高了它的性能和多任务支持,我们还将不断为GUI添加新组件。改进工作要一直进行下去。

我们通过Microsoft Office改变了人们的商业计算方式。我们是人们将提高工作效率作为整体来考虑,并开发出把一些我们日常需要的不同任务捆绑到一起的开发工具。尽管大多数软件公司仍然主要提供单独的应用程序,我们意识到多数人都希望在应用程序之间共享文本、数据和图形。他们还希望这些应用程序之间可以无缝地协同工作,并且在外观和操作上有一定的相似之处。Office正好满足了这种需求。

我们还在许多新概念上下了很大的赌注。显然,我们最大的赌注之一是在互联网上。但在其他方面也有不少。对于Windows NT,我们进行了一个巨大的长期赌博:期待PC机的功能强大到可以支持企业运算。我们的ClearTyper字体技术在赌某一天大多数的人都阅读电子书籍。Microsoft Bob则是在赌一种用于“人性化”计算机的特殊界面。它似乎有些超前,现在的PC机功能尚不够强大,无法完成我们希望Bob完成的工作,所以这种产品在商业上是失败的产品。但是我们从中学到了许多东西,Bob中曾经试验的一些技术和理论已经被用到其他产品中去。

我们非常幸运,生活在一个计算机技术将无限地改变我们的生活的时代。PC机、Internet、无线和宽带技术的混合将对我们工作、学习和娱乐产生革命性的影响。我们在期待Microsoft .NET带来的革命。这种革命对下一代计算的影响不亚于MS-DOS和Windows对计算机的影响,也就是通过廉价、随手可得、操作简单的软件来改变人们的生活。

尽管在有些具有较大风险的问题上,我表现出一定的机敏和灵性,但我无法采用其他方法。我总是希望建立新东西并且利用创造性的方法去解决问题,因此我期待创建将在今后25年中提高计算能力的软件。我相信我们将会成功。我们有人力和技术条件来实现这个目标。我们还象1975年一样对技术充满着热情。

微软二十五年

比尔·盖茨

前 言

我总是惊异于我们竟然能够走这么远。

微软的故事开始于1975年。当时我的朋友保罗?艾伦和我在《大众电子》(Popular Electronics)上看到了一篇描写MITS Altair 8800的“个人计算机”的文章。Altair与我们那时使用的大型机很不同。这是一种为电脑爱好者准备的自己动手组装的东西 - 它在邮寄来的时候并未完全组装好,只是一些散件和一张复印的说明。经过几天(或几个星期)的焊接、组装才能最终完成这个大小类似面包盒、带有几排开关和闪烁的指示灯的计算机。

它很大程度上是观赏性的,几乎不可能利用它完成任何实质性的工作,当然,现在我们知道Altair掀起了一场改变整个世界的革命。Altair的核心是一块非常便宜的英特尔8080微处理器,这使得已往大小与人相仿的大型机小到可以摆放在普通的桌子上。而在当时,计算机通常放置在配备空调的玻璃房间中,周围环坐着的都是受过良好培训的技术人员。因此,这个东西在当时也算是个令人惊奇的发明。

如果想把发明转化成为一个突破,Altair需要可以使它完成计算工作的软件。这使得保罗和我开始着手建立自己的软件公司。

我们知道微处理器的性能还会提高、价格还会降低,所以计算机的价格也将下降。我们设想有朝一日计算机将走进千家万户,从企业家到学生到家庭用户。这将最终导致软件需求的直线上升。我们成立了一家名为微软的公司,加入到了这种变革之中。

通过几年的发展,个人电脑已经从爱好者手中的玩具成长为一个不断改变世界的不可或缺的工具。它对我们处理信息的方式、通信的方式、工作、学习和娱乐的方式产生了革命性的影响。当初保罗和我在我的大学宿舍中成立的小公司现在已经是全球最大的软件公司,在50多个国家拥有着四万名员工。从编程语言和操作系统起步,我们发明了所有人们可以想象得到的软件,从企业级服务器到游戏。

我们起步时就抱有这样的观点:让微软的产品进入每个家庭、每张桌子上的计算机。本书介绍我们如何把这个观点(很多人认为不值一提的观点)变成现实的故事。我们采访了数以百计现在和过去的微软员工,让他们谈谈过去25年的成功和失败、个人和专业方面面临的挑战,以及他们对未来的憧憬。

这些可以写满10本书的内容以时间为线索记录了我们从一个微不足道的创业公司发展成为业界领导者所经历的坎坷,讲述了我们曾经承担的风险、承受的激烈竞争,以及我们迸发的新思维。它们诠释了一个好想法最终成为好产品的复杂过程,揭示了我们对新技术如何提高科学并改变世界的认识。它是有关我们成立这家公司的初衷和价值观的深入研究。

我们很少回顾走过的道路,现在也许是一个好机会。我们并不想以怀旧为乐,而是为了时时激励自己“世上无难事,只要肯登攀”。25年,我们完成了许多人们曾经认为不可能的事,我们打破了有关个人电脑不能完成某些任务的神话。在我们当初的雄心壮志中,我们还没有想到过成为一家如此庞大、具有如此影响力的公司,也没有想过我们可以领导这样一个可以在全球经济中发挥举足轻重作用的行业。

回顾我们25年来所取得的成就,我确信当我们50年时将会有更多值得回忆的东西。每天我们都将找到丰富、提高人们生活的技术。我们还刚刚起步。

微软是如何取得成功的?

令我们非常吃惊的是,微软公司从一开始就相当成功。这
大部分是因为除了几个小时睡眠和吃饭外,我们与软件同呼吸共命运。我们对成功充满了信心。当然,我们也做出一些成功的商业决定, 如将精力集中在intel8080芯片和将MS-DOS授权给IBM使用,虽然在那个时候,这些看上去肯定象赌博。

有时,我们确实很冒险,与任何一家公司对客户所能做出的切实可行的许诺相比,我们的许诺要多得多。为此,我们要比别人付出更大的努力,我们要工作得更晚,工作得更艰苦,要与任何不可能挑战。有时我们做得非常好,如Intel第一次让我们编写软件时,我们说我们可以在5到6天内编好,他们不相信,他们认为需要几个月时间,结果是我们花了大约10天的时间完成了这项工作,其中装配他们的计算机花了我们5天的时间。

象那样让我们的客户惊讶总是令我们高兴。我们善于做出一些人们认为是不可能的事情。纵观我们的历史,我们创造了个人计算机的一个又一个神话。开始的时候,很少有人认为PC机会成为主流成功产品,但我们却促使他成为了可能。人们认为你不可能为PC机提供高质量的软件,缺少真正的技术支持,也不可能以低廉的价格向数百万人提供。但是,我们做到了。今天,一些人认为PC技术不够强不足以运行高端服务器或者处理复杂的商务运作。我们要证明他们错了。

刚开始时,我们仅仅是个小公司,有着一群聪明的程序员。那时, 我们的办公室不象个公司却象个学院的校园。我们都非常随意,没有毫无意义的层次之分,任何人只要有问题,或者设想一个新产品,或者考虑到我们的竞争对手正在做的,他们都会走进我的办公室。我们不在意我们的程序员如何穿着,或者他们如何组织一个会议。我们只关心他们做出的伟大软件。我们感到我们的杰出体现在我们的产品中,其他的一切都是次要的。

我们认识到随着我们公司的成长,我们需要保持更多的自由,象我们还是个小公司时那样。有着40000名员工时,就不可能象有10名员工那样的随意,事实上,我也不可能在公司里与所有的人会见。但我们都有相同的精神,我认为这是我们成功的关键。

在无数个方面,我们还象个小公司。我们依靠我们所能依靠的做任何事情,科学地使用我们的资源,避免浪费不必要的支出如头等舱机票和昂贵的旅馆。我们仍然坚持开放的政策,人们可以坦率地和他们的经理谈论发生在他们小组里,或者是公司里,或者是工业中的事情。

但我们没改变的最重要的事情是我们雇用聪明的人。这没有任何替代品,也不象所说的那么容易。一些人应聘时表现很好,但工作以后,越来越不引人注意。另一些人则在应聘时完全是失败者,但你会发现他将成为伟大的贡献者。常常,这全凭你的内在感觉。

我们会全身心地去发现合适的人。我们要求我们的雇员全年都要参与面试,不仅是本小组的空缺,而是公司的任何职位。我并不认为这有什么不寻常的,直到我们从IBM雇用Mike Maples时。当时,我们要求一些将要为他工作的高级人员一起对他面试,这对他似乎很惊奇,但对我们却很正常。新雇员是非常重要的,我们要确信他具有我们期望的素质,也要使他能与我们的环境相容。

一旦你选定了最好的,我认为最重要的是信任他们。从一开始,我就是依靠别人的思想和经验来支持我自己的,很多时候,他们填补了我知识中的空白。我们把员工分成小组,赋予他们权力去塑造我们的产品形象,提供他们所需的技术和资源,帮助他们完成工作。我们给他们成功的机会也允许他们失败,只要我们从他们的错误中学到了东西。当然,我们也给他们机会去分享他们帮助创造的成功。

但是如果世界上所有的聪明人工作在一个官僚的,不能展示个性的,墨守成规的公司里,将会一事无成。公司会因很多原因而失败,有时败于不善的管理,有时仅仅是因为他们没有生产出客户需要的产品。但是我认为导致公司失败最大的原因,特别是对处在高速发展的工业中的公司,是墨守成规,不愿变化。变化是不可避免的,技术总是在发展,市场总是在变化,人们也总是想从产品中得到更多。

纵观商业历史,我们可以看到很多公司,他们的行事方式僵化死板,满足与自己的成功,而没有意识到世界不论有无他们都将变化。所以,对微软来说最宝贵的东西是我们适应变化的能力,我们能迅速抓住新的工业方向,随着技术的进化,不断重塑了自己,从而始终保持了成功。今天的工业仍然使我想起微软早期创业的时候。在80年代早期,个人计算机成了公众的热点,技术正在以令人难以置信的速度进步。同时,似乎大量的新公司每天都在出现。大量的伟大产品,一些极品,都出现在了那个时候。但是很多那个时代创建的公司,包括几个工业领导公司,现在都已经不存在了。

今天,互连网正在唤起同样的热情。竞争比以往更加激烈。因为我们和过去相比已是一个更大的公司,我们的影响更大。如果我们做出正确的决定,对世界的积极影响,不用我们自己说,将是不可估量的。但是如果我们做出了错误决定,我们在过去25年建立的一切将成为历史。

我相信我们将是成功者。我们总是翘首观察新的趋势或者欲将我们挤出市场的竞争者,我们总是乐于解决棘手的问题克服巨大的挑战。所以我不仅有信心我们将在未来成功,我也为我们为此所具有的聪明思想和卓越的努力而感到高兴。

从灵感到市场

在微软成立之初,我几乎事必亲躬,掌管工资单、计算税
利、草拟合同、指示如何销售我们的产品。我们这个小公司中的每个人都是开发人员,我也做了不少开发工作。事实上,我们都编写了大量的代码。我们的生活是这样的:起床、编程、也许赶上个电影、吃点儿比萨饼、再编程、在我们的椅子上睡觉。

我们疯狂地编写程序、销售软件,我们几乎没有时间做其他的事。值得庆幸的是,我们的客户都是狂热的计算机爱好者,不会被功能的弱小、手册的简单和先进的用户界面所影响。这就是计算机软件当时的状况。一些公司把它们的软件装在一个塑料袋中销售,带有一张复印的使用说明和一个电话号码(你可以拨打这个电话寻求“技术支持”)。对微软公司来说,当有用户打电话要求定购一些软件时,谁接到电话谁就是“送货部”。他们要跑到办公室的后面拷贝一张磁盘,把它放在邮件中,随后回到自己的座位上继续编写代码。

随着我们的客户逐渐成熟,我们更加注重提供高质量的软件,不仅仅是高质量的代码。创造软件开始成为一个极其复杂的过程。我经常把一个好的软件比喻成一件艺术品。但是在很大程度上,创造我们的产品从始至终需要科学。为了使现在的软件做到完美,你需要具有各种特殊技能的人才。当然,你需要好的程序员,但你还需要许多人测试和支持程序员开发的软件。你需要产品规划人员和构筑人员、文档编写人员、实用性专家,以及使他们协同工作的聪明的经理。你需要能够回答客户问题的技术人员以及能够帮助客户更快上手的咨询专家。所有这些只有大公司才能提供。每个软件公司都必须解决这些人员问题。

随着公司的发展,我们必须学习这些问题。开始,我预约了一些不编写程序的临时工。我们是一家由优秀的程序员组成的软件公司,我们应当集中精力。我想我们没必要采取传统的办法来管理我们的程序员,因为他们工作的质量是源代码。你要通过浏览代码管理他们。但我随即意识到我们需要不懂得技术的智囊人物,就象史蒂夫×巴尔默,与我们的开发人员共同工作使我们的软件成为成功的产品。事实上,把巴尔默引入微软是我作出的最重要抉择之一。

这些日子中,我雇佣了许多精明人士,他们中的大多数都不编写程序。他们与客户交谈,了解市场当前的需求以及明天的趋势,并且把这些内容通报给开发人员。他们把软件本地化成各种语言。他们设计用户界面,客户可以更高效地使用我们的软件。他们与企业接触确定我们的软件可以满足它们的需要。他们帮助企业IT经理部署庞大的计算机网络,并且帮助爷爷向孙子发送第一封电子邮件。他们也研究出先进的技术以保证我们的企业在今后继续处于领先地位。

当微软开始腾飞时,我们还是认为我们仍然是一个相对较小的公司。尽管我们梦想“让每一个家庭、每一张桌子上都拥有计算机”,我们无法完全预知人们到底需要多少软件。当我驱车进入我们的园区或者参加公司会议时,有时情不自禁地为公司所取得的发展感到骄傲。

尽管我们从一间装满程序员的房子发展成为了拥有38000多名员工的公司,微软精神与1975年没有太大的差别。我们仍旧努力工作、订比萨饼、喝可乐、彼此之间开玩笑。不论是否编写代码,每个人都对技术充满热情并且集中精力为我们的客户开发优秀的产品和服务。

公司中洋溢的精神和积极性促使我每天努力地工作。

我们的未来是什么?

自从约翰·阿塔那索夫和克里福特·贝利两人建造了第一
台数字计算机以来,时间已过去了半个多世纪。我们看到了计算机的演变过程——从庞大的、带空调设备且需配备专人管理的巨兽,到面包箱大小的桌面机,再到运算功能超过十年前速度最快的电脑的手提式计算机。而现在,我们对它们所拥有的潜力也只是一知半解而已。
早在1975年,保罗和我就曾梦想让计算机变得无所不在,无所不能。我们设想手提式计算机将能够作记录,处理一切日常事务,而巨大的计算机网络将使我们能够随时掌握世界上的全部知识,我们与计算机之间的交流就像我们相互间聊天那样便捷。

当时,这些仅仅只是梦想,但现在其中不少已变成现实,而且我们即将取得更加重大的突破性成果。计算机每年都在变得更小、更快、更便宜、具有更多的功能。计算机可以识别手写稿和语音指令,将自己组成网络,在瞬间向全世界发送信息。现在,已可将电脑的功能嵌入冰箱、煤气表及信用卡等各种各样的器件里。

嵌入了电脑智能的智能家庭可保护我们家人的安全,免除日常生活中的许多杂活。有了全球性的连接和电子书籍之后,孩子们可以在瞬间找到各种知识,而在过去我却需要翻遍成堆的百科全书才能得到。功能强大的移动设备将把我们从桌面上解放出来,使我们随时随地都可进行运算。随着微处理器的体积日益缩小而功能日益增强,我们的周围将到处都存在运算功能——或许甚至可以织入我们的衣服里。而支持所有这些技术的力量,就是帮助人们获得更大的创造力、彼此保持联系、让生活变得更加充实的伟大的软件。

就个人而言,我喜欢记事本那样大小的电脑,可以高速无线接入因特网,其大小和重量既足以显示许多有用的信息,又便于随身携带。对我来说,这确实为我排除许多障碍,可让我随时与各种数字化的备忘录、文件、图象、音乐和电影打交道。

我之所以被计算机所吸引,是因为你可对它进行丰富的编程,而且可按你的愿望对机器进行大量的控制。不过,绝大多数人只是希望计算机能够为他们工作而已。今天,我们已接近于同时取得这两方面成功的最佳状态。我期待着软件的智能化程度足以能够管理我的信息,简化我的生活,同时它所具备的灵活性又可让我在使用过程中真正发挥创造性。当我在网上搜索有关某个课题——例如生物技术——的信息时,我的软件应该智能到可为我剔除我已经掌握的资料。当我需要安排一次就诊时,我的软件应该只向我显示在我计划进城的日子有哪些可利用的时间。

无线技术领域的突破也将创造不可思议的机会。在微软,我们已进入一个无线网络,它可让我携带着我的电脑或其他智能设备离开办公室走进会议室或其他办公楼而不会丧失连接。它为家庭所带来的可能性也是难以想象的。我可以在外面为我的孩子们拍摄录象,同时将数字流存贮在我的电脑上,并发送给我的父亲。

我们正进入一个将给我们带来前所未有的神奇经历的计算新时代。我们预计,在家里接入高速因特网会变得像今天用电那样普遍,接踵而来的将是无所不在的无线接入功能。我们认为,微处理器将进一步变小,更便宜,功能更强大。我们认为个人电脑将得到一大批具有PC智能的设备和家用电器的补充,包括袖珍PC机和记事本式PC机、智能汽车、电冰箱,甚至整套家庭智能设备。

我们把这一切的赌注全都压在微软的 .NET战略上——这是一个新的平台、一种新的用户经历、一系列可让所有这些设备一起工作并实现无缝连接的先进软件和服务。这样,你无论身处何方,手头有何种设备,都可获得你工作所需的信息。

为了使这一切成为现实,我在2000年初出任了微软首席软件设计师的新职务。现在我把大多数时间都用于我认为是最恰当的事情上——思考技术发展的趋向、筹划如何通过我们的软件和服务使那些令人兴奋的新成果转化成为人人可以得到的有用的不可或缺的工具。这就要做很多工作,例如如何让软件帮助你的设备相互间进行交流、实现最佳配置和自我管理?如何帮助它们看到、倾听并理解你的需求?如何帮助它们以适当方式向你精确地提供你所需的信息?如何保护好对你有价值的数据不被偷窃或窃听?

我们用以构建Microsoft .NET的技术来源于我们研究人员长期的工作,他们一直在预测未来对软件的需求。我们在创建微软之初,我曾梦想建立我们自己的实验室,用以探索新的运算领域、新的用户界面、先进的编程技术、甚至研究可推进计算科学的基础科学。我一直羡慕那些著名研究室的工作,例如世界上最早的大型工业研究实验室——通用电气公司的“魔术宫”、贝尔实验室和施乐的帕罗·阿尔托研究中心(PARC),促使我们生活发生变化的许多技术都发源于这些研究机构。

我们于1991年启动了微软研究院,从此以后它已创造了无数新技术,使我们的产品功能更强更便于使用。微软研究院推出的代码最佳化程序和测试工具,帮助我们创制出更加可靠的高品质软件。他们所提供的自然语言处理工具为Word系统增添了丰富的语法检查功能。他们所开发的Clear Type程序使今天LCD显示器的清晰度提高了两倍,从而大幅度改善了在屏幕上进行阅读的经历,并推动了对廉价而又便于阅读的电子书籍的开发。目前他们正在研究自然界面技术,可协助计算机理解你的语音,你的姿态甚至你面部的表情。今天,他们正在协助我们开发和配置许多为实现微软 .NET战略所需的技术。

微软研究院的一项全日性工作就是瞻望未来。不过,推动我们前进的各种创意却来自公司的所有部门。其中一些创意将成为明天的软件,而另一些则可能成为我们孙子一代将使用的软件。当我回顾保罗和我的孩提时代,我真为我们所取得的成就惊喜不已。然而当我展望我自己的孩子的未来世界时,我意识到未来的变化甚至还要更精彩。

我们都在同一个游泳池里游泳

预测一项新技术如何快速戏剧性地改变世界总是困难的。
Johannes Gutenberg在15世纪发明了一种经济的方法生产可动带子,但当他的发明对信息传输的方法真正产生影响时,距离他的发明已过去了几百年。而印刷的发明到印刷真正改变世界时也相距了数百年之久。然而,在怀特兄弟于1903年载人动力飞行后不到50年,我们已经看到航空旅行改变了我们对时间和距离的看法。

过去的一个世纪,充满了一系列发明,他们给我们的生活,学习和工作带来了革命性的变化,从真空管到阴极射线管到PC。每一项新技术对经济,政治和社会影响比以往更快。事实上,现在的变化是如此的快和深远,我常常想一个19世纪中叶的人会对今日世界如何评价。

当我们创建微软时,人们关于通讯,做生意和利用计算机网络获取丰富知识的想法尚未形成。然而计算机和互联网已做了一切甚至更多。他们在有记录的时间里改变了我们的生活,但还没有结束。在未来几年里,奇妙的软件,快速的处理器和无线技术的结合将把PC应用于任何你能想象到的装置上和一些你根本想象不到的装置上。不论你在哪里,大量的信息,丰富的通讯和强大的软件都会很容易的使用。先进的新的用户接口将会容许你用更自然的方法使用这些技术,如通过语音甚至手势。

这些发展将会在无数方面改变和改善我们的生活。他们可使信息同等分享并使与世界任何人即刻通讯成为可能。他们将为大大小小的公司提供无限的市场和商机。他们将超出国界,可能创造出无摩擦的全球经济。他们也会使工人工作更有效和多产,工作更有意义,完成得也会更好。他们也会使发展中国家实现工业时代跳跃,进入信息时代。他们将帮助人口众多并且居住分散的大国的人民和商业之间保持密切联系,帮助小国平等地参与全球经济。

我们已经看到个人计算机是如何通过教育对人的生活产生了积极的影响。当我在高中时,计算机并不是每一个人学习的工具,除了我和我的朋友外,因为我们对他着了谜。但你所能做的就是编程序。今天,强大的硬件和软件为知识世界打开了门,使人们可以创造性地使用计算机。几年以前,我访问了美国的一些学校,在那里,我们正在建立技术项目,我非常吃惊地发现一些儿童正在使用装有计算机的实验室,我认识到如果每一个儿童有一台计算机,不论是在家里,还是在学校,自己进行探索,我们就会看到计算机在教育上的潜力。

Satirist Ambrose Bierce 把未来描绘成我们事业繁荣,朋友真心,生活充满欢乐。我希望这些会变成真的。但我更用现实的眼光来看未来,因为任何根本性的变化都会带来一定的问题。。随着越来越多的人在互联网上存储信息,如何保证这些信息的安全性呢?因为我们的经济变得越来越依靠比特而不是原子。我们如何保护这些资源不被破坏或者黑客的侵犯?由于信息已无障碍,如何避免儿童受不良影响?由于互联网无国界,我们如何能够帮助各种文化与全球一体化文化共存?

我想让我的孩子在一个有强大技术工具的世界里成长。我想让技术丰富我的孩子的知识,改善他们生活的质量。为此,我个人和微软都将全力以赴。在很多方面,这比最复杂的软件问题更具有挑战。仅靠技术或者甚至是金钱不能解决这些问题,你必须做艰苦的思考,如何才能取得更大更有益的影响,然后以长远的眼光去实现根本的真正的变化。

应付每日工作挑战是容易的,但偶尔后退一步反思一下如何将我们的技术在世界范围内更大、更好的利用是非常重要的。当我听说我们的项目在世界各地产生了良好的影响,我常常感到非常鼓舞。我认为作为一个工业,一个公司,一个个人,我们坚持我们的方针,开发对人们的生活产生了积极的软件是一件非常伟大的事情。

2004年08月19日

由C#风潮想起的-给初学编程者的忠告 
作者: 刘巍 
http://www.dearbook.com.cn/Guide/viewguide.aspx?guideID=119

我始终认为,对一个初学者来说,IT界的技术风潮是不可以追赶的,而且也没有能力去追赶。我时常看见自己的DDMM们把课本扔了,去卖些价格不菲的诸如C#, VB.Net 这样的大部头,这让我感到非常痛心。而许多搞不清指针是咋回事的BBS站友眉飞色舞的讨论C#里面可以不用指针等等则让我觉得好笑。C#就象当年的ASP一样,“忽如一夜春风来,千树万树梨花开”,结果许多学校的信息学院成了“Web 学院”。96,97级的不少大学生都去做Web 了。当然我没有任何歧视某一行业的意识。我只是觉得如果他们把追赶这些时髦技术的时间多花一点在基础的课程上应该是可以走得更远的。 

【几个误区】 

初学者对C#风潮的追赶其实也只是学习过程中经常遇到的几个误区之一。我将用一些实际的例子来说明这些现象,你可以按部就班的看看自己是不是属于其中的一种或者几种: 

〖认为计算机技术等于编程技术: 〗 

有些人即使没有这个想法,在潜意识中也有这样的冲动。让我奇怪的是,许多信息学院的学生也有这样的念头。认为计算机专业就是编程专业,与编程无关的,或者不太相关的课程他统统都不管,极端的学生只要书上没带“编程”两个字他就不看。 

其实编程只是计算机技术应用过程中一种复杂性最低的劳动,这就是为什么IT业最底层的人是程序员(CODER)。计算机技术包括了多媒体,计算机网络,人工智能,模式识别,管理信息系统等等这些方面。编程工作只是在这些具体技术在理论研究或者工程实践的过程中表达算法的过程。编程的人不一定对计算机技术的了解就一定很高。而一个有趣的现象是,不少大师级的计算机技术研究者是不懂编程的。网上的炒作和现实中良好的工作待遇把编程这种劳动神秘化了。其实每一个程序员心里都明白,自己这些东西,学的时候并不比其它专业难,所以自然也不会高档到哪里去。 

〖咬文嚼字的孔已己作风: 〗 

我见过一本女生的《 计算机网络原理 》教材,这个女生象小学生一样在书上划满了横杠杠,笔记做得满满的,打印出来一定比教材还厚。我不明白的是,象计算机网络原理这样的课程有必要做笔记?我们的应试教育的确害了不少学生,在上《原理》这一类课程的时候许多学生象学《马列原理》一样逐字背诵记忆。这乃是我见过的最愚蠢的行为。所谓《原理》,即是需要掌握它为什么这样做,学习why,而不是how(怎样做)。极端认真的学生背下以太网的网线最大长度,数据帧的长度,每个字段的意义,IP报头的格式等等,但是忘了路由的原则,忘了TCP/IP协议设计的宗旨。总之许多人花了大量的时间把书背得滚瓜烂熟却等于什么也没学。 

在学习编程的时候这些学生也是这样,他们确切的记得C++语法的各个细节。看完了C++教程后看《 C++ 编程思想 第1卷: 标准C++导引 》(确实是好书),《 深度探索C++对象模型 》,《 C++参考大全(第四版) 》,this C++, that C++……,然后是网上各种各样的关于C++语法的奇闻逸事,然后发现自己又忘了C++的一些语法,最后回头继续恶补…。有个师弟就跟我说:“C++ 太难了,学了这里忘了那里,学了继承忘了模板。”我的回答道:“你不去学就容易了”。我并没有教坏他,只是告诉他,死抠C++的语法就和孔已己炫耀茴香豆的茴字有几种写法一样毫无意义。你根本不需要对的C++语法太关心,动手编程就是了,有不记得的地方一查MSDN就立马搞定。我有个结论就是,实际的开发过程中对程序语法的了解是最微不足道的知识。这是为什么我在为同学用Basic(我以前从没有学过它)写一个小程序的时候,只花了半个小时看了看语法,然后再用半个小时完成了程序,而一个小时后我又完全忘记了Basic 的所有关键字。 

〖不顾基础,盲目追赶时髦技术:〗 

终于点到题目上来了。大多数的人都希望自己的东西能够马上跑起来,变成钱。这种想法对一个已经进入职业领域的程序员或者项目经理来说是合理的,而且IT技术进步是如此的快,不跟进就是失业。但是对于初学者来说(尤其是时间充裕的大中专在校生),这种想法是另人费解的。一个并未进入到行业竞争中来的初学者最大的资本便是他有足够的时间沉下心来学习基础性的东西,学习why 而不是how。时髦的技术往往容易掌握,而且越来越容易掌握,这是商业利益的驱使,为了最大化的降低软件开发的成本。但在IT领域内的现实就是这样,越容易掌握的东西,学习的人越多,而且淘汰得越快。每一次新的技术出来,都有许多初学者跟进,这些初学者由于缺乏必要的基础而使得自己在跟进的过程中花费大量的时间,而等他学会了,这种技术也快淘汰了。基础的课程,比方数据结构,操作系统原理等等虽然不能让你立马就实现一个linux(这是许多人嘲笑理论课程无用的原因),但它们能够显著的减少你在学习新技术时学习曲线的坡度。而且对于许多关键的技术(比方Win32 SDK 程序的设计,DDK的编程)来说甚至是不可或缺的。 

一个活生生的例子是我和我的一个同学,在大一时我还找不到开机按纽,他已经会写些简单的汇编程序了。我把大二的所有时间花在了汇编,计算机体系结构,数据结构,操作系统原理等等这些课程的学习上,而他则开始学习HTML和VB,并追赶ASP的潮流。大三的时候我开始学习Windows 操作系统原理,学习SDK编程,时间是漫长的,这时我才能够用VC开发出象模象样的应用程序。我曾一度因为同学的程序已经能够运行而自己还在学习如何创建对话框而懊恼不已,但临到毕业才发现自己的选择是何等的正确。和我谈判的公司开出的薪水是他的两倍还多。下面有一个不很恰当的比方:假设学习VB编程需要4个月,学习基础课程和VC的程序设计需要1年。那么如果你先学VB,再来学习后者,时间不会减少,还是1年,而反过来,如果先学习后者,再来学VB,也许你只需要1个星期就能学得非常熟练。 

如果你是学生,或者如果你有充足的时间。我建议你仔细的掌握下面的知识。我的建议是针对那些希望在IT技术上有所成就的初学者。同时我还列出了一些书目,这些书应该都还可以在书店买到。说实在的,我在读其他人的文章时最大的心愿就是希望作者列出一个书单。 

[大学英语]-不要觉得好笑。我极力推荐这门课程是因为没有专业文档的阅读能力是不可想象的。中文的翻译往往在猴年马月才会出来,而现在的许多出版社干脆就直接把E文印刷上去。学习的方法是强迫自己看原版的教材,开始会看不懂,用多了自然熟练。吃得苦下得狠心绝对是任何行业都需要的品质。 

[计算机体系结构和汇编语言]-关于体系结构的书遍地都是,而且也大同小异,倒是汇编有一本非常好的书。《 80X86汇编语言程序设计教程 》(清华大学出版社,黑色封面,杨季文著)。你需要着重学习386后保护模式的程序设计。否则你在学习现代操作系统底层的一些东西的时候会觉得是在看天书。 

[计算机操作系统原理]-我们的开发总是在特定的操作系统上进行,如果不是,只有一种可能:你在自己实现一个操作系统。无论如何,操作系统原理是必读的。这就象我们为一个芯片制作外围设备时,芯片基本的工作时序是必需了解的。这一类书也很多,我没有发现哪一本书非常出众。只是觉得在看完了这些书后如果有空就应该看看《 Windows 2000内部揭密 》(微软出版社,我看的是E文版的,中文的书名想必是Windows 2000 技术内幕之类吧)。关于学习它的必要性,ZDNET上的另一篇文章已经有过论述。 

[数据结构和算法]-这门课程能够决定一个人程序设计水平的高低,是一门核心课程。我首选的是清华版的(朱战立,刘天时)。很多人喜欢买C++版的,但我觉得没有必要。C++的语法让算法实现过程变得复杂多了,而且许多老师喜欢用模块这一东西让算法变得更复杂。倒是在学完了C版的书以后再来浏览一下C++的版的书是最好的。 

[软件工程]-这门课程是越到后来就越发现它的重要,虽然刚开始看时就象看马哲一样不知所云。我的建议是看《 实用软件工程(第二版) 》(黄色,清华)。不要花太多的时间去记条条框框,看不懂就跳过去。在每次自己完成了一个软件设计任务(不管是练习还是工作)以后再来回顾回顾,每次都会有收获。 

[ Windows 程序设计(第5版)(上、下册) ]-《北京大学出版社,Petzold著》我建议任何企图设计Windows 程序的人在学习VC以前仔细的学完它。而且前面的那本《 Windows 2000内部揭密 》也最好放到这本书的后面读。在这本书中,没有C++,没有GUI,没有控件。有的就是如何用原始的C语言来完成Windows 程序设计。在学完了它以后,你才会发现VC其实是很容易学的。千万不要在没有看完这本书以前提前学习VC,你最好碰都不要碰。我知道的许多名校甚至都已经用它作为教材进行授课。可见其重要。 

上面的几门课程我认为是必学的重要课程(如果你想做Windows 程序员)。 

对于其它的课程有这样简单的选择方法:如果你是计算机系的,请学好你所有的专业基础课。如果不是,请参照计算机系的课程表。如果你发现自己看一本书时无法看下去了,请翻到书的最后,看看它的参考文献,找到它们并学习它们,再回头看这本书。如果一本书的书名中带有“原理”两个字,你一定不要去记忆它其中的细节,你应该以一天至少50页的速度掌握其要领。尽可能多的在计算机上实践一种理论或者算法。 

你还可以在CSDN上阅读到许多书评。这些书评能够帮助你决定读什么样的书。 

〖日三省乎己〗 
每天读的书太多,容易让人迷失方向。一定要在每天晚上想想自己学了些什么,还有些什么相关的东西需要掌握,自己对什么最感兴趣,在一本书上花的时间太长还是不够等等。同时也应该多想想未来最有可能出现的应用,这样能够让你不是追赶技术潮流而是引领技术潮流。同时,努力使用现在已经掌握的技术和理论去制作具有一定新意的东西。坚持这样做能够让你真正成为一个软件“研发者”而不仅仅是一个CODER。 

〖把最多的时间花在学习上〗 
这是对初学者最后的忠告。把每个星期玩SC或者CS的时间压缩到最少,不玩它们是最好的。同时,如果你的ASP技术已经能够来钱,甚至有公司请你兼职的话,这就证明你的天份能够保证你在努力的学习之后取得更好的收益,你应该去做更复杂的东西。眼光放长远一些,这无论是对谁都是适用的。 

相信你已经能够决定是否学习C#或者什么时候去学它了。

第一阶段
此阶段主要是能熟练地使用某种语言。这就相当于练武中的套路和架式这些表面的东西。

第二阶段
此阶段能精通基于某种平台的接口(例如我们现在常用的Win 32的API函数)以及所对应语言的自身的库函数。到达这个阶段后,也就相当于可以进行真实散打对练了,可以真正地在实践中做些应用。

第三阶段
此阶段能深入地了解某个平台系统的底层,已经具有了初级的内功的能力,也就是“手中有剑,心中无剑”。

第四阶级
此阶段能直接在平台上进行比较深层次的开发。基本上,能达到这个层次就可以说是进入了高层次。这时进入了高级内功的修炼。比如能进行VxD或操作系统的内核的修改。

这时已经不再有语言的束缚,语言只是一种工具,即使要用自己不会的语言进行开发,也只是简单地熟悉一下,就手到擒来,完全不像是第一阶段的时候学习语言的那种情况。一般来说,从第三阶段过渡到第四阶段是比较困难的。为什么会难呢?这就是因为很多人的思想变不过来。

第五阶级
此阶段就已经不再局限于简单的技术上的问题了,而是能从全局上把握和设计一个比较大的系统体系结构,从内核到外层界面。可以说是“手中无剑,心中有剑”。到了这个阶段以后,能对市面上的任何软件进行剖析,并能按自己的要求进行设计,就算是MS Word这样的大型软件,只要有充足的时间,也一定会设计出来。

第六阶级
此阶段也是最高的境界,达到“无招胜有招”。这时候,任何问题就纯粹变成了一个思路的问题,不是用什么代码就能表示的。也就是“手中无剑,心中也无剑”。

此时,对于练功的人来说,他已不用再去学什么少林拳,只是在旁看一下少林拳的对战,就能把此拳拿来就用。这就是真正的大师级的人物。这时,Win 32或Linux在你眼里是没有什么差别的。

每一个阶段再向上发展时都要按一定的方法。第一、第二个阶段通过自学就可以完成,只要多用心去研究,耐心地去学习。

要想从第二个阶段过渡到第三个阶段,就要有一个好的学习环境。例如有一个高手带领或公司里有一个好的练手环境。经过二、三年的积累就能达到第三个阶段。但是,有些人到达第三个阶段后,常常就很难有境界上的突破了。他们这时会产生一种观念,认为软件无非如此,认为自己已无所不能。其实,这时如果遇到大的或难些的软件,他们往往还是无从下手。

现在我们国家大部分程序员都是在第二、三级之间。他们大多都是通过自学成才的,不过这样的程序员一般在软件公司也能独当一面,完成一些软件的模块。

但是,也还有一大堆处在第一阶段的程序员,他们一般就能玩玩VB,做程序时,去找一堆控件集成一个软件。

 

      第一句话是:优秀是一种习惯。 

  这句话是古希腊哲学家亚里士多德说的。如果说优秀是一种习惯,那么懒惰也是一种习惯。人出生的时候,除了脾气会因为天性而有所不同,其他的东西基本都是后天形成的,是家庭影响和教育的结果。所以,我们的一言一行都是日积月累养成的习惯。我们有的人形成了很好的习惯,有的人形成了很坏的习惯。所以我们从现在起就要把优秀变成一种习惯,使我们的优秀行为习以为常,变成我们的第二天性。让我们习惯性地去创造性思考,习惯性地去认真做事情,习惯性地对别人友好,习惯性地欣赏大自然。 

注解:要会“装”,要持续的、不间断的“装”,装久了就成了真的了,就成了习惯了,比如准时到会,每次都按时到会,你装装看,你装30年看看,装的时间长了就形成了习惯。:) 

  第二句话是:生命是一种过程。 

  事情的结果尽管重要,但是做事情的过程更加重要,因为结果好了我们会更加快乐,但过程使我们的生命充实。 
  人的生命最后的结果一定是死亡,我们不能因此说我们的生命没有意义。世界上很少有永恒。大学生谈恋爱,每天都在信誓旦旦地说我会爱你一辈子,这实际上是不真实的。统计数据表明,大学生谈恋爱的100对里有90对最后会分手,最后结婚了的还有一半会离婚。你说爱情能永恒吗?所以最真实的说法是:“我今天,此时此刻正在真心地爱着你。”明天也许你会失恋,失恋后我们会体验到失恋的痛苦。这种体验也是丰富你生命的一个过程。
 

注解:生命本身其实是没有任何意义的,只是你自己赋予你的生命一种你希望实现的意义,因此享受生命的过程就是一种意义所在。 

  第三句话是:两点之间最短的距离并不一定是直线。 

  在人与人的关系以及做事情的过程中,我们很难直截了当就把事情做好。我们有时需要等待,有时需要合作,有时需要技巧。我们做事情会碰到很多困难和障碍,有时候我们并不一定要硬挺、硬冲,我们可以选择有困难绕过去,有障碍绕过去,也许这样做事情更加顺利。大家想一想,我们和别人说话还得想想哪句话更好听呢。尤其在中国这个比较复杂的社会中,大家要学会想办法谅解别人,要让人觉得你这个人很成熟,很不错,你才能把事情做成。 

注解:如果你在考数学试题,一定要答两点之间直线段最短,如果你在走路,从A到B,明明可以直接过去,但所以人都不走,你最好别走,因为有陷阱。在中国办事情,直线性思维在很多地方要碰壁,这是中国特色的中国处事智慧。 

  第四句话是:只有知道如何停止的人才知道如何加快速度。 

  我在滑雪的时候,最大的体会就是停不下来。我刚开始学滑雪时没有请教练,看着别人滑雪,觉得很容易,不就是从山顶滑到山下吗?于是我穿上滑雪板,哧溜一下就滑下去了,结果我从山顶滑到山下,实际上是滚到山下,摔了很多个跟斗。我发现根本就不知道怎么停止、怎么保持平衡。最后我反复练习怎么在雪地上、斜坡上停下来。练了一个星期,我终于学会了在任何坡上停止、滑行、再停止。这个时候我就发现自己会滑雪了,就敢从山顶高速地往山坡下冲。因为我知道只要我想停,一转身就能停下来。只要你能停下来,你就不会撞上树、撞上石头、撞上人,你就不会被撞死。因此,只有知道如何停止的人,才知道如何高速前进。 

注解:用汽车来比喻,宝马可以上200公里,奇瑞却只能上120公里,为什么?发动机估计不相上下,差距在刹车系统,上了200公里刹不了车,呵呵,我的天! 

  第五句话是:放弃是一种智慧,缺陷是一种恩惠。 

  当你拥有六个苹果的时候,千万不要把它们都吃掉,因为你把六个苹果全都吃掉,你也只吃到了六个苹果,只吃到了一种味道,那就是苹果的味道。如果你把六个苹果中的五个拿出来给别人吃,尽管表面上你丢了五个苹果,但实际上你却得到了其他五个人的友情和好感。以后你还能得到更多,当别人有了别的水果的时候,也一定会和你分享,你会从这个人手里得到一个橘子,那个人手里得到一个梨,最后你可能就得到了六种不同的水果,六种不同的味道,六种不同的颜色,六个人的友谊。人一定要学会用你拥有的东西去换取对你来说更加重要和丰富的东西。所以说,放弃是一种智慧。 

注解:我的个人原则是:每一次放弃都必须是一次升华,否则就不要放弃;每一次选择都必须是一次升华,否则不要选择。 

  做人最大的乐趣在于通过奋斗去获得我们想要的东西,所以有缺点意味着我们可以进一步完美,有匮乏之处意味着我们可以进一步努力。美国有一部电视片,讲的是一位富翁给后代留下了用不尽的遗产,结果他的后代全都变成了吸毒的、自杀的、进监狱的,或者精神病患者。为什么会这样呢?因为这位富翁给自己后代留下的钱太多了,以致他们不需要劳动就可以继承一大笔财产。继承一大笔财富,就几乎什么都能买到。所以,当一个人什么都不缺的时候,他的生存空间就被剥夺掉了。如果我们每天早上醒过来,感到自己今天缺点儿什么,感到自己还需要更加完美,感到自己还有追求,那是一件多么值得高兴的事情啊!

1、扎实的基础

  数据结构、离散数学、编译原理,这些是所有计算机科学的基础,如果不掌握它们,很难写出高水平的程序。程序人人都会写,但当你发现写到一定程度很难再提高的时候,就应该想想是不是要回过头来学学这些最基本的理论。不要一开始就去学OOP,即使你再精通OOP,遇到一些基本算法的时候可能也会束手无策。因此多读一些计算机基础理论方面的书籍是非常有必要的。

2、丰富的想像力

  不要拘泥于固定的思维方式,遇到问题的时候要多想几种解决问题的方案,试试别人从没想过的方法。丰富的想像力是建立在丰富的知识的基础上,除计算机以外,多涉猎其他的学科,比如天文、物理、数学等等。开阔的思维对程序员来说很重要。

3、最简单的是最好的

  这也许是所有科学都遵循的一条准则,复杂的质能转换原理在爱因斯坦眼里不过是一个简单得不能再简单的公式:E=mc2。简单的方法更容易被人理解,更容易实现,也更容易维护。遇到问题时要优先考虑最简单的方案,只有简单方案不能满足要求时再考虑复杂的方案。

4、不钻牛角尖

  当你遇到障碍的时候,不妨暂时远离电脑,看看窗外的风景,听听轻音乐,和朋友聊聊天。当我遇到难题的时候会去玩游戏,当负责游戏的那部分大脑细胞极度亢奋的时候,负责编程的那部分大脑细胞就得到了充分的休息。当重新开始工作的时候,我会发现那些难题现在竟然可以迎刃而解。
 

5、对答案的渴求

  人类自然科学的发展史就是一个渴求得到答案的过程,即使只能知道答案的一小部分也值得我们去付出。只要你坚定信念,一定要找到问题的答案,你才会付出精力去探索,即使最后没有得到答案,在过程中你也会学到很多东西。

6、多与别人交流

  三人行必有我师,也许在一次和别人不经意的谈话中,就可以迸出灵感的火花。多上上网,看看别人对同一问题的看法,会给你很大的启发。

7、良好的编程风格

  注意养成良好的习惯,代码的缩进编排,变量的命名规则要始终保持一致。大家都知道如何排除代码中错误,却往往忽视了对注释的排错。注释是程序的一个重要组成部分,它可以使你的代码更容易理解,而如果代码已经清楚地表达了你的思想,就不必再加注释了,如果注释和代码不一致,那就更加糟糕。

8、韧性和毅力

  这也许是“高手”和一般程序员最大的区别。高手们并不是天才,他们是在无数个日日夜夜中磨炼出来的。成功能给我们带来无比的喜悦,但过程却是无比的枯燥乏味。你不妨做个测试,找个10000以内的素数表,把它们全都抄下来,然后再检查三遍,如果能够不间断地完成这一工作,你就可以满足这一条。