﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-备忘录-文章分类-思维思想</title><link>http://www.blogjava.net/103335460/category/33629.html</link><description>记录学习过、研究过、使用过和总结过的内容，以备不时之需</description><language>zh-cn</language><lastBuildDate>Sat, 09 Feb 2013 06:59:51 GMT</lastBuildDate><pubDate>Sat, 09 Feb 2013 06:59:51 GMT</pubDate><ttl>60</ttl><item><title>一个游戏程序员的学习资料(转)</title><link>http://www.blogjava.net/103335460/articles/395169.html</link><dc:creator>雪山飞狐</dc:creator><author>雪山飞狐</author><pubDate>Wed, 06 Feb 2013 02:41:00 GMT</pubDate><guid>http://www.blogjava.net/103335460/articles/395169.html</guid><description><![CDATA[<header>&nbsp; 
<h1 id="page-title">一个游戏程序员的学习资料</h1></header>
<div id="content" sizset="0" sizcache="13855">
<div class="region region-content" sizset="0" sizcache="13855">
<div id="block-system-main" class="block block-system" sizset="0" sizcache="13855">
<div class="block-inner clearfix" sizset="0" sizcache="13855">
<div class="block-content content" sizset="0" sizcache="13855"><article id="article-170710" class="article article-type-blog clearfix" role="article" sizset="0" sizcache="13855" typeof="sioc:Item foaf:Document" about="/zh-cn/blogs/2012/03/20/400010004"><footer class="submitted" sizset="0" sizcache="13855">
<p class="author-datetime" sizset="0" sizcache="13855"><span sizset="0" sizcache="13855" content="2012-03-20T13:29:48-07:00" rel="sioc:has_creator" datatype="xsd:dateTime" property="dc:date dc:created"><a class="username" title="查看用户资料" href="http://software.intel.com/zh-cn/user/540663" typeof="sioc:UserAccount" about="/zh-cn/user/540663" property="foaf:name" xml:lang="">weiqubo</a> <time datetime="2012-03-20T13:29:48Z" pubdate="pubdate">星期二, 20/03/2012 - 13:29</time> 发布</span></p></footer>
<div class="article-content"><!--
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
	<rdf:Description rdf:about="http://software.intel.com/zh-cn/blogs/2012/03/20/400010004" dc:identifier="http://software.intel.com/zh-cn/blogs/2012/03/20/400010004" dc:title="一个游戏程序员的学习资料" trackback:ping="http://software.intel.com/zh-cn/blogs/2012/03/20/400010004/trackback"  />
</rdf:RDF>
-->

<div class="field field-name-body field-type-text-with-summary field-label-hidden">
<div class="field-items">
<div class="field-item even" property="content:encoded">&nbsp;<br /><br />想起写这篇文章是在看侯杰先生的《深入浅出MFC》时, 突然觉得自己在大学这几年关于游戏编程方面还算是有些心得，因此写出这篇小文,介绍我眼中的游戏程序 员的书单与源代码参考。一则是作为自己今后两年学习目标的备忘录,二来没准对别人也有点参考价值。我的原则是只写自己研究过或准备研究的资料，所以内容无 疑会带上强烈的个人喜好色彩, 比如对网络,数据库等重要方面完全没有涉及。因为自己主要对三维图形引擎, 人工智能算法, 脚本系统, 反外挂 (反反外挂? ^－^)等方面感兴趣。这学期电脑都没联网了,在岳麓山闭关修炼中(^－^),连这篇文章都得在学校图书馆电子阅览室（电影放映室？）上传,内容很多凭记忆写出, 如有误差敬请订正。程序员应该在理论学习与实践编程中反复迭代，所以学习资料是一回事，须知尽信书不如无书。<br /><br />一、书籍：<br /><br />算法与数据结构：<br /><br />《数据结构（C语言版）》--严蔚敏、吴伟民 清华出版社<br /><br />我觉得其配套习题集甚至比原书更有价值，每个较难的题都值得做一下。<br /><br />《Introduction to Algorithms》第二版 中文名《算法导论》<br /><br />关 于算法的标准学习教材与工程参考手册，在去年CSDN网站上其翻译版竟然评为年度二十大技术畅销书，同时《程序员》杂志上开设了&#8220;算法擂台&#8221;栏目，这些溯 源固本的举动，不由得使人对中国现今浮躁不堪的所谓&#8220;IT&#8221;业又产生了一线希望。这本厚厚的书，幸亏打折我才买得起。虽然厚达千页，但其英文通俗晓畅，内 容深入浅出，可见经典之作往往比一般水准的书还耐读。还能找到MIT的视频教程，第一节课那个老教授嘻皮笑脸的，后面就是一长发助教上课了。<br /><br />《C语言名题精选百则 技巧篇》--冼镜光 机械工业出版社<br /><br />作 者花费一年时间搜集了各种常见C程序段的极具技巧性的编程法，其内容都是大有来头的，而且给出了详细的参考资料。如一个普通的Fibonacci数就给出 了非递归解、快速算法、扩充算法等，步步深入，直至几无油水可榨。对于视速度如生命，连一个普通的浮点数转化为整数都另辟蹊径以减少CPU cycle的游戏程序员，怎可不看？<br /><br />《计算机算法基础（第二版）》-- 佘祥宣等 华中科大出版社<br /><br />我看到几个学校的研究生拿它作教材（研究生才开算法，太开玩笑了吧）。这本书薄是薄了点，用作者的话来说，倒也&#8220;精辟&#8221;。其实此书是《Fundamentals of Computer Algorithms》的缩写版，不过原书出版太久了，反正我是没找到。<br /><br />《The Art of Computer Programming》Volume 1-3<br /><br />作 者Donald E. Knuth是我心目中与冯.诺依曼、Dijkstra、Shannon并列的四位大师。这本书作者从读大学本科时开始写，一直写到博士时，十年磨一剑，足 见其下足了功夫。可作为计算机技术的核心--算法与数据结构的终极参考手册。创新处也颇多，譬如常见的Shell排序他在书中提出可用(3i-1)/2的 间隔，这使其稍快于O(n1. 5)。当然这套书描述高度数学化，为此恐怕一般的人（我？）最好还得先看一本数学预备书《Concrete Mathematics》（直译为混凝土数学？^－^）再说。可惜的是这套书才出到第三卷，并没有覆盖全部常见的算法内容。不过好在对于游戏程序员来说， 越常见的算法用得越多，这也不算是什么要命的损失。<br /><br />《STL源码剖析》-- 侯捷 华中科大出版社<br /><br />侯 捷不用介绍了，华人技术作家中的旗舰，说其有世界级水准也不为过。这本书我以为是C++与数据结构的葵花宝典（欲练此功，必先自宫）。也就是说，不下几层 地狱很难看懂，因为它要求的预备知识太多了，如STL、数据结构、泛型编程、内存管理都要很扎实（为此是不是还要看看有内存管理设计模式之称的 《Small Memory Software》这本书呢？），但是一旦看懂，真会是所向披靡。<br /><br />《Data Structures for Game Programmers》<br /><br />每个数据结构的例程都是一个小游戏，还用SDL库实现了一个算法演示系统。虽然内容失之于浅，但起码让人了解了数据结构在游戏中的作用。<br /><br />其 实游戏程序并不比其它程序特殊，甚至要求基本功更加扎实，所以花时间做一些看似与实际应用不甚相干的习题，对今后的工作是大有裨益的。而且有些应用很广的 算法，如常被人津津乐道的A*算法及其变种，牵涉到图的检索周游与分枝-限界法，恐怕还得读一些艰深的论文才能充分明白运用，如Donald E. Knuth的《An analysis of alpha-beta cutoffs》。其实还有不少此类的好书，如《Data Structures and Algorithms in C++》、《Programming Pearls》、《More Programming Pearls》（算法珠玑）等，我却以为要先看严谨一点的著作，再看内容随笔一点的书。<br /><br />汇编：<br /><br />《IBM-PC 汇编语言程序设计》第二版<br /><br />国内经典教材。<br /><br />《The Art of Assembly Language》<br /><br />这本书足有1600页，噢！<br /><br />C语言：<br /><br />《The C Programming Language》第二版<br /><br />虽然篇幅短小，但每个例程都很经典。（我们老师开始拿它作教材，后面换为谭小强的C语言书，理由为：例子尽是些文本处理。我就纳了闷了，难道现代的计算机程序不是将大量时间消耗在字符串与文本的处理上吗？）<br /><br />C++：<br /><br />学过C语言，再学C++，先看这本《C++ Primer》的缩写版：<br /><br />《Essential C++》<br /><br />对C++有个入门了解，再看<br /><br />《C++ Common Knowledge: Essential Intermediate Programming》<br /><br />就不会有什么重要的知识点完全不知所措了，接下来是<br /><br />《The C++ Standard Library : A Tutorial and Reference》<br /><br />标准库，当然主要是标准模板库的标准学习参考手册，然后最好平时边写程序边参悟。<br /><br />《Effective C++》等<br /><br />我是说书名以形容词 + C++的那些书，计有七八本，慢慢看吧，罗马不是一日建成的。<br /><br />(《Essential C++》、《Effective C++》、《More Effective C++》、《Accelerated C++》、《Effective STL》、《Exceptional C++》、《More Exceptional C++》、《Imperfect C++》，虽然书名格式相似，但每一本都绝非马虎之作。)<br /><br />谁说C++程序比C程序要慢？那就请看下面：<br /><br />《The Design and Evolution of C++》<br /><br />知其过去才能知其未来，才能应用。<br /><br />《Inside the C++ Object Model》<br /><br />揭露C++的编译器模型。<br /><br />《Efficient C++ Performance Programming Techniques》<br /><br />当算法优化已到极致，在运用汇编之前，最后还可看看此书，有时高级和低阶都能做成相同的事情。<br /><br />还有两本特别的书：<br /><br />《Modern C++ Design : Generic Programming and Design Patterns Applied》<br /><br />作者想把设计模式和泛型编程结合起来，并写了个尝试提供一切的Loki库来实作,不过其观点并未得到C++社区的普遍响应。尽管如此，本书仍称得上思想前沿性与技术实用性结合的典范。<br /><br />《C++ Template Metaprogramming》<br /><br />把 编译器当作计算器？本书介绍了Boost库的MPL模板元编程库。当然提到Boost库，对于游戏程序员不能不提到其中的Graph库，有《The Boost Graph Library》一书可看。还有其中Python库，号称国内首款商业三维图形引擎的起点引擎就用了Boost－Python库。说实话我觉得起点引擎还 是蛮不错的，那个自制的三维编辑器虽然界面简陋，但功能还算蛮完善，给游戏学院用作教学内容也不错。另有一个号称中国首款自主研发的全套网游解决方案。我 看到它那个三维编辑器，心想这不就是国外一个叫freeworld3D的编辑器吗？虽然有点偏门，但我以前还较劲尝试破解过呢。还把英文界面汉化了，大概 用exescope这样的资源修改软件就能搞定吧。我又心想为什么要找freeworld3D这个功能并不太强大的编辑器呢？仅仅是因为它便宜到几十美 金？它唯一特别一点的地方就是支持导出OGRE图形引擎的场景格式，这样一想不由得使人对它图形引擎的&#8220;自主&#8221;性也产生怀疑了。这样的&#8220;自主&#8221;研发真让人 汗颜，只要中国还没封sourceforge这个网站（据说以前和freeBSD网站一起被封过？），国人就能&#8220;自主&#8221;研发。<br /><br />有人还会推荐《C++ Primer》《Thinking in C++》《The C++ Programming Language》等书吧，诚然这些书也很好，但我总觉得它们太大部头了。还不如多花点时间看看国外好的源代码。<br /><br />Windows编程<br /><br />《Operating System Concepts》第五版<br /><br />国内有些操作系统的教程其实就是它的缩写版。<br /><br />《Windows 95 System Programming Secrets》<br /><br />深入剖析了Windows操作系统的种种种种，有人爱看《Linux内核完全注释》，有人爱看《自己动手写操作系统》这样煽情的书，但我想作为商业的操作系统，把Windows内核剖析到这地步也高山仰止了。<br /><br />《Programming Applications for Microsoft Windows》第四版<br /><br />先进程线程，再虚存管理，再动态链接库，最多讲到消息机制。作者在序言中说：&#8220;我不讲什么ActiveX, COM等等，因为当你了解了这些基础后，那些东西很快就会明白！&#8221;可以作为《Programming Windows》的先修课。<br /><br />计算机体系：<br /><br />《Computer Systems : A Programmer&#8217;s Perspective》<br /><br />和《The Art of Computer Programming》在我心中是计算机史上两本称得上伟大的书，计算机组成原理，操作系统，汇编，编译原理，计算机网络等等课程汇成这本千页的大书，因为计算机在作者眼中就是一个整体。<br /><br />开源阅读：<br /><br />《Code Reading : The Open Source Perspective》<br /><br />张大千临摹了几百张明代石涛的山水，画出的画以假乱真，后来他去敦煌潜心临摹几年，回来画风大变，终成大家。程序员其实有4 0%的时间是在读别人的源代码，侯捷先生说：&#8220;源码面前，了无秘密&#8221;，又说&#8220;天下大事，必作于细&#8221;，可以与他的《上穷碧落下黄泉，源码追踪经验谈》参看。<br /><br />MFC:<br /><br />《深入浅出MFC》<br /><br />我 实在以为没有看过侯捷先生的《深入浅出MFC》的人多半不会懂得MFC编程。其实我是打算用一年多的时间写一个给游戏美工用的三维编辑器，顺便作为毕业设 计。图形库就用MFC吧，反正也没得选择。如果要用wxWidgets无非是猎奇而已，还不是MFC的翻版，当然它跨平台了。就象阻击手对自己枪械的零件 了如指掌一样，要想用MFC写出非玩具程序的人一定要了解其内部构造。还有一本书叫《MFC深入浅出》，并不是同一本。<br /><br />IDE:<br /><br />《Microsoft Visual Studio 2005 Unleashed》<br /><br />工欲善其事，必先利其器。当然我认为与其用形如Source Insight、Slick Edit、Code Visualizer之类的代码阅读器、图形化工具，还不如用自己的大脑。但如果你嫌打源代码慢的话，可以用Visual AssistX。如果嫌老是写重复相似的代码的话，可以用Code Smith。单元测试可以用CppUnit，Boost库中的测试框架也不错。有心情可以吧Visual Studio外接Intel的Compiler，内嵌STLport，但不是大工程，性能分析没必要动不动就用下VTune吧。<br /><br />程序员之路：<br /><br />《游戏之旅--我的编程感悟》(#add不怎么样)<br /><br />云 风大哥。在我心目中游戏程序员国外首推卡马克，国内首推云风。也许过两年我会到网易当云风大哥的助理程序员吧。It&#8217;s my dream.（^-^）他写这本书的时候本着只有透彻理解的东西才写出来，因此内容不会很酷新，但是相信我，每读一遍都有新的收获，主要还不是知识上的， 因为知识是学无止境的，授人以鱼不如授人以渔，精神上的启迪才是长久的。诚如经典游戏《 仙剑 奇侠传》的主力程序员兼美术指导姚壮宪（人称姚仙）在序言中所说的&#8220;云风得到的只是一些稿费，而整个中国民族游戏产业得到的将是一次知识的推动&#8221;，此言不虚矣。<br /><br />《编程高手箴言》(#add差)<br /><br />梁 肇新是豪杰超级解霸的作者，本来每个合格的程序员（Programmer , 而非Coder）都应该掌握的东西，现在变成了编程高手的独家箴言。不知是作者的幸运还是中国IT业的悲哀。知识点还是讲得蛮多的，不过对MFC的地位颇 有微词。我实在认为MFC的名声就是那些不懂得用它的人搞臭的。不过作者的牢骚也情有可原，每个具有创造力的程序员都应该不太喜欢framework。<br /><br />《Masters of DOOM: How Two Guys Created an Empire and Transformed Pop Culture》中文名《DOOM启世录》<br /><br />卡 马克，罗洛斯，这些游戏史上如雷贯耳的名字。（现在卡马克已专注于火箭制造上，罗洛斯则携妻回乡隐居）要不是没上过大学的卡马克和图形学大师亚伯拉罕的功 勋，可能到现在游戏中还不知三维为何物。勿庸置疑，在计算机界历史是英雄们所推动的。这本书真实的记录了这些尘世英雄的所为所思。<br /><br />作为程序员的我对这几本策划与美工的书也产生了浓厚兴趣，以前搞过一两年的3DS MAX插件编程，觉得用maxscript还是好过MaxSDK，毕竟游戏开发中所多的是模型场景数据的导入导出，大可不必大动干戈。<br /><br />策划：<br /><br />《Creating Emotion in Games : The Craft and Art of Emotioneering》<br /><br />在壮丽煊目的宏伟三维世界背后，在残酷的杀戮，动人心魄的情节背后，我们还需要什么来抓住玩家的心？答对了，就是emotion.真正打动人心的，才是深入骨髓的。<br /><br />《Ultimate Game Design : Building Game Worlds》<br /><br />从名字可以看出，写给关卡设计师的，特别是讲室外自然场景的构建颇有可取之处。<br /><br />《Developing Online Games : An Insider&#8217;s Guide》<br /><br />就象名为反模式的书讲软件团队运营一样，这本书讲商业运作多过技术。一个历经艰难，现在盛大的游戏程序员，翻译了这本书。<br />美工：<br /><br />《Digital Cinematography &amp; Directing》<br /><br />数字摄影导演术，每当你在3DS MAX或者Maya等三维创作软件中摆放摄影机，设计其运动轨迹时，你可曾想过你也站在导演的位置上了？<br /><br />《The Animator&#8217;s Survival Kit》<br /><br />看 着这本讲卡通角色运动规律的书，一边产生温习《猫和老鼠》的念头，一边继续对前不久新闻联播中关于中国产生了某计算机自动卡通动画生成软件报道的蔑视，这 条报道称此举可大大加快中国卡通动画的产量。我且不从技术上探讨其是否是在放卫星（其实我知道得很清楚，前文已表，本人搞过一两年的卡通动画辅助软件编 程），但计算机机械生成的动画怎可代替人类充满灵性的创作？<br /><br />《The Dark Side of Game Texturing》<br /><br />用Photoshop制作材质贴图，还真有些学问。<br /><br />三维图形学：<br /><br />搞三维图形学首先还是要扎扎实实的先看解析几何、线性代数、计算几何的教材，后面的习题一个都不能少。国内数学书还是蛮好的。苏步青大师的《计算几何》称得上具有世界级水准，可惜中国CAD的宏图被盗版给击垮了。现在是我们接过接力棒的时候了。It&#8217;s time!<br /><br />《Computer Graphics Geometrical Tools》<br /><br />《计算机图形学几何工具算法详解》算法很多，纰漏处也不少。<br /><br />《3D Math Primer for Graphics and Game Development》<br /><br />浅易，可作为三维数学的&#8220;速食&#8220;。<br /><br />《Mathematics for 3D Game Programming &amp; Computer Graphics》第二版<br /><br />比上面那本深入一些，证明推理的数学气也浓一些，可作为专业的数学书与编程实践一个过渡的桥梁吧。内容涉猎也广，射线追踪，光照计算，可视裁剪，碰撞检测，多边形技术，阴影算法，刚体物理，流体水波，数值方法，曲线曲面，还真够丰富。<br /><br />《Vector Game Math Processors》<br /><br />想学MMX,SSE吗，那就看它吧，不过从基础讲起的，要耐心哦。<br /><br />DirectX:<br /><br />《Introduction to 3D Game Programming with DirectX 9.0》<br /><br />DirectX入门的龙书，作者自己写的简单示例框架，后面我干脆用State模式，把所有例子绑到一块儿去了。<br /><br />《Beginning Direct3D Game Programming》<br /><br />作 者取得律师学位后变成了游戏程序员，真是怪也哉。本书虽定位为入门级书，内容颇有独特可取之处。它用到的示例框架是DXSDK Sample Framework，而不是现在通行的DXUT。要想编译有两种办法吧，一是自己改写成用DXUT的。二是找旧的Sample Framework。我又懒得为了一个示例框架下载整个早期版本的DirectX，后面在Nvidia SDK 9.5中发现了。<br /><br />《Advanced Animation with DirectX》<br /><br />DirectX 高级动画技术。骨骼系统，渐变关键帧动画，偶人技术，表情变形，粒子系统，布料柔体，动态材质，不一而足。我常常在想，从三维创作软件导出的种种效果，变 成一堆text或binary，先加密压缩打包再解包解压解密，再用游戏程序重建一个Lite动画系统，游戏程序员也真是辛苦。<br /><br />OpenGL:<br /><br />《NeHe OpenGL Tutorials》<br /><br />虽是网络教程，不比正式的书逊，本来学OpenGL就不过是看百来条C函数文档的工夫吧,如果图形学基础知识扎实的话。<br /><br />《OpenGL Shading Language》<br /><br />OpenGL支持最新显卡技术要靠修修补补的插件扩展，所以还要配合<br /><br />《Nvidia OpenGL Extension Specifications》<br /><br />来看为上。<br /><br />《Focus on 3D Models》<br /><br />《Focus on 3D Terrain Programming》<br /><br />《Focus on Curves and Surfaces》<br /><br />顾名思义，三本专论，虽然都很不深，但要对未知三维模型格式作反向工程前，研读Geomipmapping地形算法论文前，CAD前，还是要看看它们为上，如果没从别处得过到基础的话。<br /><br />脚本：<br /><br />先看<br /><br />《Game Scripting Mastery》<br /><br />等自己了解了虚拟机的构造，可以设计出简单的脚本解释执行系统了。<br /><br />再去查Python , Lua ，Ruby的手册吧，会事半半功倍倍的。<br /><br />《Programming Role Playing Games with DirectX 8.0》<br /><br />一边教学一边用DirectX写出了一个GameCore库，初具引擎稚形。<br /><br />《Isometric Game Programming with DirectX 7.0》<br /><br />三维也是建立在二维的基础上，这就是这本书现在还值得看的原因。<br /><br />《Visual C++网络游戏建模与实现》<br /><br />联众的程序员写的，功力很扎实，讲棋牌类游戏编程，特别讲了UML建模和Rotional Rose。<br /><br />《Object-Oriented Game Development》<br /><br />套用某人的话：&#8220;I like this book.&#8221;<br /><br />Shader:<br /><br />要入门可先看<br /><br />《Shaders for Game Programmers and Artists》<br /><br />讲在RenderMonkey中用HLSL高级着色语言写Shader.<br /><br />再看<br /><br />《Direct3D ShaderX : Vertex and Pixel Shander Tips and Tricks》<br /><br />用汇编着色语言，纯银赤金。<br /><br />三大宝库：<br /><br />《Game Programming Gems》<br /><br />我只见到1-6本，据说第7、8本也出来了？附带的源代码常有bug，不过瑕不掩瑜，这套世界顶级游戏程序员每年一度的技术文集，涉及游戏开发的各个方面，我觉得富有开发经验的人更能在其中找到共鸣。<br /><br />《Graphics Gems》全五本<br /><br />图形学编程Bible，看了这套书你会明白计算机领域的科学家和工程师区别之所在。科学家总是说，这个东西在理论上可行。工程师会说，要使问题在logN的时限内解决我只能忍痛割爱，舍繁趋简。<br /><br />《GPU Gems》出了二本<br /><br />Nvidia公司召集图形学Gurus写的，等到看懂的那一天，我也有心情跑去Siggraph国际图形学大会上投文章碰运气。<br /><br />游戏引擎编程：<br /><br />《3D Game Engine Programming》<br /><br />是ZFXEngine引擎的设计思路阐释，很平实，冇太多惊喜。<br /><br />《3D Game Engine Design》<br /><br />数学物理的理论知识讲解较多，本来这样就够了，还能期待更多吗？<br /><br />人工智能：<br /><br />《AI Techniques for Game Programming》<br /><br />讲遗传算法，人工神经网络，主要用到位数组，图算法。书的原型是根据作者发表到GameDev.net论坛上的内容整理出来的，还比较切中实际。<br /><br />《AI Game Programming Wisdom》<br /><br />相当于AI编程的Gems。<br /><br />《PC游戏编程(人机博弈)》<br /><br />以 象棋程序为蓝本，介绍了很多种搜索算法，除了常见的极大极小值算法及其改进--负极大值算法，还有深度优先搜索以外。更提供了多种改进算法， 如：Alpha-Beta,Fail-soft alpha-beta,Aspiration Search, Minimal Window Search,Zobrist Hash,Iterative Deepening,History Heuristic,Killer Heuristic,SSS*,DUAL*,MFD and more.琳琅满目，实属难得。<br /><br />反外挂：<br /><br />《加密与解密(第二版)》 看雪论坛站长 段钢<br /><br />破解序列号与反外挂有关系么？不过，世上哪两件事情之间又没有关系呢？<br /><br />《UML Distilled》 Martin Fowler<br /><br />很多人直到看了这本书才真正学懂UML。<br /><br />Martin Fowler是真正的大师,从早期的分析模式,到这本UML精粹,革命性的重构都是他提出的,后来又写了企业模式一书。现在领导一个软件开发咨询公司，去年JavaOne中国大会他作为专家来华了吧。个人网站：MartinFowler.com<br /><br />设计模式三剑客：<br /><br />《Design Patterns Elements of Reusable Object-Oriented Software》<br /><br />《Design Patterns Explained》<br /><br />《Head First Design Patterns》<br /><br />重构三板斧：<br /><br />《Refactoring : Improving the Design of Existing Code》<br /><br />《Refactoring to Patterns》<br /><br />《Refactoring Workbook》<br /><br />软件工程:<br /><br />《Extreme Programming Explained : Embrace Change》第二版<br /><br />其中Simplicity的Value真是振聋发聩，这就是我什么都喜欢轻量级的原因。<br /><br />《Agile Software Development Principles,Patterns,and Practices》<br /><br />敏捷真是炒得够火的，连企业都有敏捷一说，不过大师是不会这么advertising的。<br /><br />《Code Complete》第二版<br /><br />名著。<br /><br />数学：<br /><br />《数学，确定性的丧失》M.克莱因<br /><br />原来数学也只不过是人类的发明与臆造，用不着供入神殿，想起历史上那么多不食人间烟火的科学家（多半是数学家），自以为发现了宇宙运作的奥秘，是时候走下神坛了。<br /><br />物理：<br /><br />《普通物理学》第一册 += 《Physics for Game Developers》<br /><br />物理我想就到此为此吧，再复杂我可要用Newton Engine,ODE了，等待物理卡PPU普及的那天，就可充分发挥PhysX的功效了，看过最新的《细胞分裂》游戏Demo演示，成千上万个Box疯狂Collide，骨灰级玩家该一边摸钱包一边流口水了。<br /><br />二、开源代码：<br /><br />Irrlicht<br /><br />著 名的鬼火引擎，从两年前第一眼看到它，这个轻量级的三维图形引擎，就喜欢上了它。源代码优雅，高效，且不故弄玄虚。值得每个C++程序员一读，并不限于图 形编程者。它的周边中也有不少轻量级的东西。如Lightfeather扩展引擎，ICE、IrrlichtRPG、IrrWizard.还有 IrrEdit、IrrKlang、IrrXML可用。（可能是为了效率原因，很多开源作者往往喜欢自己写XML解析库，如以上的IrrXML库,即使有现成的tinyXML库可用。这真会让tomcat里面塞Axis，Axis里面塞JUDDI，弄得像俄罗斯套娃玩具的Java Web Service Coder们汗颜。）<br /><br />OGRE<br /><br />排 名第一的开源图形引擎，当然规模是很大的，周边也很多。除了以C#写就的OgreStudio ，ofusion嵌入3DS MAX作为WYSWYG式的三维编辑器也是棒棒的，特别是其几个场景、地形插件值得研究。以至于《Pro OGRE 3D Programming》一书专论其用法。搜狐的《天龙八部》游戏就是以其作为图形引擎，当然还另外开发了引擎插块啦。我早知道OGRE开发组中有一个中 国人谢程序员，他以前做了很多年的传统软件编程。有一次天龙八部游戏的图形模块的出错信息中包含了一串某程序员的工作目录，有一个文件夹名即是谢程序员的 英文名，我据此推断谢程序员即是搜狐北京的主程。看来中国对开源事业还是有所贡献的嘛，王开源哥哥的努力看来不会白费！（^-^）不过我侦测的手法也有些 像网站数据库爆库了，非君子之所为作。<br /><br />RakNet<br /><br />基于UDI的网络库，竟还支持声音传输，以后和OpenVision结合起来做个视聊程序试试。<br /><br />Blender<br /><br />声誉最盛的开源三维动画软件，竟还带一个游戏引擎。虽然操作以快捷键驱动，也就是说要背上百来个快捷键才能熟练使用。但是作为从商业代码变为开源之作，威胁三维商业巨头的轻骑兵，历经十年锤炼，代码达百万行，此代码只应天上有，人间哪得几回看，怎可不作为长期的源码参考？<br /><br />风魂<br /><br />二维图形库。云风大哥的成名之作。虽然不代表其最高水平（最高水平作为商业代码保存在广州网易互动的SVN里呢），但是也可以一仰风采了。<br /><br />圣剑英雄传<br /><br />二 维RPG。几个作者已成为成都锦天的主力程序员。锦天的老总从一百万发家，三年时间身价过亿，也是一代枭雄了。这份代码作为几年前的学生作品也算可以了， 因为一个工程讲究的是四平八稳，并不一定要哪个模块多么出彩。反正我是没有时间写这么一个东东，连个美工都找不到，只能整天想着破解别人的资源（^- ^）。<br /><br />Boost<br /><br />C++准标准库，我想更多的时候可以参考学习其源代码。<br /><br />Yake<br /><br />我 遇到的最好的轻量级游戏框架了。在以前把一个工程中的图形引擎从Irrlicht换成OGRE的尝试中，遇到了它。OGRE的周边工程在我看来都很庸肿， 没有完善文档的情况下看起来和Linux内核差不多。不过这个Yake引擎倒是很喜欢。它以一个FSM有限状态机作为实时程序的调度核心，然后每个模块： 物理、图形、网络、脚本、GUI、输入等等都提供一个接口，接口之下再提供到每种具体开源引擎的接口，然后再接具体引擎。通过这样层层抽象，此时你是接 Newton Engine,ODE还是PysX都可以；是接OGRE,Crystal Space还是Irrlicht都可以；是接RakNet还是LibCurl都可以；是接Python，Lua还是Ruby都可以，是接CEGUI还是 others，是接OIS还是others（呵呵,记不起来others）都可以。所以Yake本质上不是OGRE的周边。虽然用Neoengine的人 都倒向了它，但是现在版本还很早。特别是我认为，学习研究时一定要有这种抽象之抽象，接口之接口的东西把思维从具体的绑定打开，而开发时抽象要有限度的， 就像蔡学镛在《Java夜未眠》中讲的，面向对象用得过滥也会得OOOO症(面向对象过敏强迫症)。<br /><br />Quake Doom系列<br /><br />据说很经典，卡马克这种开源的黑客精神就值得赞许。把商业源代码放出来，走自己的创新之路，让别人追去吧。不过Quake与Unreal引擎的三维编辑器是现在所有编辑器的鼻祖，看来要好好看看了。<br /><br />Nvidia SDK 9.X<br /><br />三 维图形编程的大宝库，这些Diret3D与OpenGL的示例程序都是用来展示其最新的显卡技术的。硬件厂商往往对软件产品不甚在意，源代码给你看,东西 给你用去吧，学完了还得买我的硬件。Intel的编译器，PhysX物理引擎大概也都是这样。Havok会把它的Havok物理引擎免费给别人用吗？别说 试用版，连个Demo都看不到。所以这套SDK的内容可比MS DirectX SDK里面那些入门级的示例酷多了，反正我是如获至宝，三月不知愁滋味。不过显卡要so-so哦。我的GeForce 6600有两三个跑不过去,差强人意。<br /><br />三、网站：<br /><br />www.CSDN.net<br /><br />程序员大本营吧，软文与&#8220;新技术秀&#8221;讨厌了点，blog和社区是精华之所在。<br /><br />www.GameRes.com<br /><br />游戏程序员基地，文档库中还有点东西。投稿的接收者Seabug与圣剑英雄传的主程Seabug会是同一个人吗？一个在成都锦天担当技术重担的高手还有时间维护网站吗？我不得而知。<br /><br />&#8220;何苦做游戏&#8221;网站<br /><br />名字很个性，站长也是历尽几年前产业发展初期的艰难才出此名字。<br /><br />www.66rpg.com<br /><br />二维游戏图片资源很多，站长柳柳主推的RPGMaker 软件也可以玩一玩吧，但对于专业开发者来说不可当真。<br /><br />www.GameDev.net<br /><br />论坛中有不少热心的国外高手在活动。<br /><br />www.SourceForge.net<br /><br />不用说了，世界最大的开源代码库，入金山怎可空手而返？看到国外那些学生项目动不动就像模像样的。（DirectX的稚形就是英国的学生项目，在学校还被判为不合格。）<br /><br />www.koders.com<br /><br />源 代码搜索引擎,支持正则表达式,google Lab中也有。当你某种功能写不出来时,可以看一下开源代码怎么写的,当然不过是仅供参考,开源代码未必都有产品级的强度。说到google,可看 《Google Power Tools Bible》一书，你会发现，google的众多产品原来也有这么多使用门道。<br /><br />这篇小文足足写了一天半的时间，不由得使我对侯捷一样的技术作家长期伏案辛勤劳作深深敬佩了。看来对于书籍或者软件，都应该尊重作者或者programmer的才智劳动。</div></div></div></div></div></div></div></div></div> <img src ="http://www.blogjava.net/103335460/aggbug/395169.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/103335460/" target="_blank">雪山飞狐</a> 2013-02-06 10:41 <a href="http://www.blogjava.net/103335460/articles/395169.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程序员的十层楼</title><link>http://www.blogjava.net/103335460/articles/284084.html</link><dc:creator>雪山飞狐</dc:creator><author>雪山飞狐</author><pubDate>Thu, 25 Jun 2009 03:32:00 GMT</pubDate><guid>http://www.blogjava.net/103335460/articles/284084.html</guid><description><![CDATA[<h1>程序员的十层楼</h1>
<p>自西方文艺复兴以来，中国在自然科学方面落后西方很多，软件领域也不例外。当然现在中国的许多程序员们对此可能有许多不同的意见，有些人认为中国的程序员水平远落后于西方，有些则认为中国的程序员个人能力并不比西方的程序员差，只是整个软件产业落后而已。</p>
<p>那么，到底中国的程序员水平比西方程序员水平差，还是中国有许多优秀的程序员达到或超过了西方程序员同等水平呢？要解决这个问题，必须先知道程序员有多少种技术层级，每个层级需要什么样的技术水平，然后再比较中国和西方在各个技术层级的人数，就可以知道到底有没有差距，差距有多大。</p>
<p>当然，对于如何划分程序员的技术层级，不同公司或不同人会有不同的划分标准，下面的划分仅代表个人的观点，如有不当之处，还请砸板砖予以纠正。</p>
<h3>第1层&nbsp; 菜鸟</h3>
<p>第1层楼属于地板层，迈进这层楼的门槛是很低的。基本上懂计算机的基本操作，了解计算机专业的一些基础知识，掌握一门基本的编程语言如C/C++，或者Java，或者JavaScript，...，均可入门迈进这层。</p>
<p>在这层上，中国有着绝对的优势，除了从计算机专业毕业的众多人数外，还有大量的通信、自动化、数学等相关专业的人士进入这一行，此外还有众多的其他专业转行的人士，人数绝对比西方多出甚多。并且还有一个优势就是我们这层人员的平均智商比西方肯定高。</p>
<p>没有多少人愿意一辈子做菜鸟，因为做"菜鸟"的滋味实在是不咋的，整天被老大们吆喝着去装装机器，搭建一下测试环境，或者对照着别人写好的测试用例做一些黑盒测试，好一点的可以被安排去写一点测试代码。当然如果运气"好"的话，碰到了国内的一些作坊式的公司，也有机会去写一些正式的代码。</p>
<p>所以，菜鸟们总是在努力学习，希望爬更高的一层楼去。</p>
<h3>第2层 大虾</h3>
<p>从第1层爬到第2层相对容易一些，以C/C++程序员为例，只要熟练掌握C/C++编程语言，掌握C标准库和常用的各种数据结构算法，掌握STL的基本实现和使用方法，掌握多线程编程基础知识，掌握一种开发环境，再对各种操作系统的API都去使用一下，搞网络编程的当然对socket编程要好好掌握一下，然后再学习一些面向对象的设计知识和设计模式等，学习一些测试、软件工程和质量控制的基本知识，大部分人经过2～3年的努力，都可以爬到第2层，晋升为"大虾"。</p>
<p>中国的"大虾"数量和"菜鸟"数量估计不会少多少，所以这层上仍然远领先于西方。</p>
<p>大虾们通常还是有些自知之明，知道自己只能实现一些简单的功能，做不了大的东西，有时候还会遇到一些疑难问题给卡住，所以他们对那些大牛级的人物通常是非常崇拜的，国外的如Robert C. Martin、Linus Torvalds，国内的如求伯君、王志东等通常是他们崇拜的对象。其中的有些人希望有一天也能达到这些大牛级人物的水平，所以他们继续往楼上爬去。</p>
<h3>第3层 牛人</h3>
<p>由于"大虾"们经常被一些疑难问题给卡住，所以有了"大虾"们只好继续学习，他们需要将原来所学的知识进一步熟练掌握，比如以熟练掌握C++编程语言为例，除了学一些基础性的C++书籍如《C++ Primer》，《Effective C++》，《Think in C++》，《Exception C++》等之外，更重要的是需要了解C++编译器的原理和实现机制，了解操作系统中的内部机制如内存管理、进程和线程的管理机制，了解处理器的基础知识和代码优化的方法，此外还需要更深入地学习更多的数据结构与算法，掌握更深入的测试和调试知识以及质量管理和控制方法，对各种设计方法有更好的理解等。</p>
<p>学习上面说的这些知识不是一挥而就的，不看个三五十本书并掌握它是做不到的。以数据结构算法来说，至少要看个5～10本这方面的著作；以软件设计来说，光懂结构化设计、面向对象设计和一些设计模式是不够的，还要了解软件架构设计、交互设计、面向方面的设计、面向使用的设计、面向数据结构算法的设计、情感化设计等，否则是很难进到这个楼层的。</p>
<p>当然除了上面说的知识外，大虾们还需要去学习各种经验和技巧。当然这点难不倒他们，现在出版的书籍众多，网络上的技术文章更是不胜数，然后再去各种专业论坛里泡一泡，把这些书籍和文章中的各种经验、技能、技巧掌握下来，再去学习一些知名的开源项目如Apache或Linux操作系统的源代码实现等。此时对付一般的疑难问题通常都不在话下，菜鸟和大虾们会觉得你很"牛"，你也就爬到了第3层，晋升为"牛人"了。</p>
<p>看了上面所讲的要求，可能有些大虾要晕过去了，成为牛人要学这么多东西啊！要求是不是太高了？其实要求一点也不高，这么点东西都掌握不了的话，怎么能让别人觉得你"牛"呢？</p>
<p>需要提一下的是，进入多核时代后，从第2层爬到第3层增加了一道多核编程的门槛。当然要迈过这道门槛并不难，已经有很多前辈高人迈进了这道门槛，只要循着他们的足迹前进就可以了。想迈进这道门槛者不妨去学习一下TBB开源项目的源代码(链接：http://www.threadingbuildingblocks.org/)，然后上Intel的博客（<a href="http://software.intel.com/zh-cn/blogs/category/multicore/">http://software.intel.com/zh-cn/blogs/</a>）和多核论坛（<a href="http://forum.csdn.net/Intel/IntelMulti-core/">http://forum.csdn.net/Intel/IntelMulti-core/</a>）去看看相关文章，再买上几本相关的书籍学习一下。</p>
<p>在国内， 一旦成为"牛人"，通常可以到许多知名的公司里去，运气好者可以挂上一个架构师的头衔，甚至挂上一个"首席架构师"或者"首席xx学家"的头衔也不足为奇。有不少爬到这层的人就以为到了楼顶了，可以眼睛往天上看了，开始目空一切起来，以为自己什么都可以做了，什么都懂了，经常在网络上乱砸板砖是这个群体的最好写照。由此也看出，国内的牛人数量仍然众多，远多于西方的牛人数量，在这层上仍然是领先的。</p>
<p>也有不少谦虚的"牛人"，知道自己现在还不到半桶水阶段。他们深知爬楼的游戏就像猴子上树一样，往下看是笑脸，往上看是屁股。为了多看笑脸，少看屁股，他们并没有在此停步不前，而是继续寻找到更上一层的楼梯，以便继续往上爬。<br />
<br />
</p>
<h3>第4层 大牛</h3>
<p>从第3层爬到第4层可不像上面说过的那几层一样容易，要成为大牛的话，你必须要能做牛人们做不了的事情，解决牛人们解决不了问题。比如牛人们通常都不懂写操作系统，不会写编译器，不懂得TCP/IP协议的底层实现，如果你有能力将其中的任何一个实现得象模象样的话，那么你就从牛人升级为"大牛"了。</p>
<p>当然，由于各个专业领域的差别，这里举操作系统、编译器、TCP/IP协议只是作为例子，并不代表成为"大牛"一定需要掌握这些知识，以时下热门的多核编程来说，如果你能比牛人们更深入地掌握其中的各种思想原理，能更加自如的运用，并有能力去实现一个象开源项目TBB库一样的东西，也可以成为"大牛"，又或者你能写出一个类似Apache一样的服务器，或者写出一个数据库，都可以成为"大牛"。</p>
<p>要成为"大牛"并不是一件简单的事情，需要付出比牛人们多得多的努力，一般来说，至少要看过200~400本左右的专业书籍并好好掌握它，除此之外，还得经常关注网络和期刊杂志上的各种最新信息。</p>
<p>当"牛人"晋升为"大牛"，让"牛人们"发现有比他们更牛的人时，对"牛人"们的心灵的震撼是可想而知的。由于牛人们的数量庞大，并且牛人对大虾和菜鸟阶层有言传身教的影响，所以大牛们通常能获得非常高的社会知名度，几乎可以用"引无数菜鸟、大虾、牛人竞折腰"来形容，看看前面提过的Linus Torvalds等大牛，应该知道此言不虚。</p>
<p>虽然成为"大牛"的条件看起来似乎很高似的，但是这层楼并不是很难爬的一层，只要通过一定的努力，素质不是很差，还是有许多"牛人"可以爬到这一层的。由此可知，"大牛"这个楼层的人数其实并不像想像的那么少，例如比尔&#183;盖茨之类的人好像也是属于这一层的。</p>
<p>由于"大牛"这层的人数不少，所以也很难统计除到底是中国的"大牛"数量多还是西方的大牛数量多？我估计应该是个旗鼓相当的数量，或者中国的"大牛"们会更多一些。</p>
<p>看到这里，可能会有很多人会以为我在这里说瞎话，Linus Torvalds写出了著名的Linux操作系统，我国并没有人写出过类似的东西啊，我国的"大牛"怎么能和西方的比呢? 不知大家注意到没有，Linus Torvalds只是写出了一个"象模象样"的操作系统雏形，Linux后来真正发展成闻名全球的开源操作系统期间，完全是因为许多支持开源的商业公司如IBM等，派出了许多比Linus Torvalds更高楼层的幕后英雄在里面把它开发出来的。</p>
<p>可能有些菜鸟认为Linus Torvalds是程序员中的上帝，不妨说个小故事：</p>
<p>Linus，Richard Stallman和Don Knuth（高德纳）一同参加一个会议。</p>
<p>Linus 说："上帝说我创造了世界上最优秀的操作系统。"</p>
<p>Richard Stallman自然不甘示弱地说："上帝说我创造了世界上最好用的编译器。"</p>
<p>Don Knuth一脸疑惑的说："等等，等等，我什么时候说过这些话？"</p>
<p>由此可以看出，Linus Torvalds的技术水平并不像想像中那么高，只是"牛人"和"大虾"觉得"大牛"比他们更牛吧了。在我国，有一些当时还处于"大虾"层的人物，也能写出介绍如何写操作系统的书，并且书写得非常出色，而且写出了一个有那么一点点象模象样的操作系统来。我想中国的"大牛"们是不会比西方差的，之所以没有人写出类似的商业产品来，完全是社会环境的原因，并不是技术能力达不到的原因。</p>
<p>"大牛"们之所以成为大牛，主要的原因是因为把"牛人"给盖了下去，并不是他们自己觉得如何牛。也许有很多菜鸟、大虾甚至牛人觉得"大牛"这层已经到顶了，但大多数"大牛"估计应该是有自知之明的，他们知道自己现在还没有爬到半山腰，也就勉强能算个半桶水的水平，其中有些爬到这层没有累趴下，仍然能量充沛，并且又有志者，还是会继续往更上一层楼爬的。</p>
<p>看到这里，也许有些菜鸟、大虾、牛人想不明白了，还有比"大牛"们更高的楼层，那会是什么样的楼层？下面就来看看第5层楼的奥妙。</p>
<h3>第5层 专家</h3>
<p>当大牛们真正动手做一个操作系统或者类似的其他软件时，他们就会发现自己的基本功仍然有很多的不足。以内存管理为例，如果直接抄袭Linux或者其他开源操作系统的内存管理算法，会被人看不起的，如果自动动手实现一个内存管理算法，他会发现现在有关内存管理方法的算法数量众多，自己并没有全部学过和实践过，不知道到底该用那种内存管理算法。</p>
<p>看到这里，可能有些人已经明白第5层楼的奥妙了，那就是需要做基础研究，当然在计算机里，最重要的就是"计算"二字，程序员要做基础研究，主要的内容就是研究非数值"计算"。</p>
<p>非数值计算可是一个非常庞大的领域，不仅时下热门的"多核计算"与"云计算"属于非数值计算范畴，就是软件需求、设计、测试、调试、评估、质量控制、软件工程等本质上也属于非数值计算的范畴，甚至芯片硬件设计也同样牵涉到非数值计算。如果你还没有真正领悟"计算"二字的含义，那么你就没有机会进到这层楼来。</p>
<p>可能有人仍然没有明白为什么比尔&#183;盖茨被划在了大牛层，没有进到这层来。虽然比尔&#183;盖茨大学未毕业，学历不够，但是家有藏书2万余册，进入软件这个行业比绝大部分人都早，撇开他的商业才能不谈，即使只看他的技术水平，也可以算得上是学富五车，顶上几个普通的计算机软件博士之和是没有问题的，比起Linus Torvalds之类的"大牛"们应该技高一筹才对，怎么还进不了这层楼呢？</p>
<p>非常遗憾的是，从Windows操作系统的实现来看，其对计算的理解是很肤浅的，如果把Google对计算方面的理解比做大学生，比尔&#183;盖茨只能算做一个初中生，所以比尔&#183;盖茨永远只能做个大牛人，成不了"专家"。</p>
<p>看到这里，也许国内的大牛们要高兴起来了，原来比尔&#183;盖茨也只和我等在同一个层次，只要再升一层就可以超越比尔&#183;盖茨了。不过爬到这层可没有从"牛人"升为"大牛"那么简单，人家比尔&#183;盖茨都家有2万多册书，让你看个500~1000本以上的专业书籍并掌握好它应该要求不高吧。当然，这并不是主要的条件，更重要的是，需要到专业的学术站点去学习了，到ACM，IEEE，Elsevier，SpringerLink，SIAM等地方去下载论文应该成为你的定期功课，使用Google搜索引擎中的学术搜索更是应该成为你的日常必修课。此外，你还得经常关注是否有与你研究相关的开源项目冒出来，例如当听到有TBB这样针对多核的开源项目时，你应该第一时间到Google里输入"TBB"搜索一下，将其源代码下载下来好好研究一番，这样也许你的一只脚已经快迈进了这层楼的门槛。</p>
<p>当你象我上面说的那样去做了以后，随着时间的推移，总会有某天，你发现，在很多小的领域里，你已经学不到什么新东西了，所有最新出来的研究成果你几乎都知道。此时你会发现你比在做"牛人"和"大牛"时的水平不知高出了多少，但是你一点也"牛"不起来，因为你学的知识和思想都是别人提出来的，你自己并没有多少自己的知识和思想分享给别人，所以你还得继续往楼上爬才行。</p>
<p>我不知道国内的"专家"到底有多少，不过有一点可以肯定的是，如果把那些专门蒙大家的"砖家"也算上的话，我们的砖家比西方的要多得多</p>
<p><strong>第</strong><strong>6</strong><strong>层</strong><strong> </strong><strong>学者</strong><strong></strong></p>
<p>当"专家"们想继续往上一层楼爬时，他们几乎一眼就可以看到楼梯的入口，不过令他们吃惊的是，楼梯入口处竖了一道高高的门槛，上面写着"创新"二字。不幸的是，大多数人在爬到第5层楼时已经体能消耗过度，无力翻过这道门槛。</p>
<p>有少数体能充足者，可以轻易翻越这道门槛，但是并不意味着体力消耗过度者就无法翻越，因为你只是暂时还没有掌握恢复体能的方法而已，当掌握了恢复体能的方法，将体能恢复后，你就可以轻易地翻越这道门槛了。</p>
<p>怎么才能将体能恢复呢？我们的老祖宗"孔子"早就教导过我们"温故而知新"，在英文里，研究的单词是"research"，其前缀"re"和"search"分别是什么意思不用我解释吧。或许有些人觉得"温故而知新"和"research"有些抽象，不好理解，我再给打个简单的比方，比如你在爬一座高山，爬了半天，中途体力不支，怎么恢复体力呢？自然是休息一下，重新进食一些食物，体力很快就可以得到恢复。</p>
<p>由此可知，对体能消耗过度者，休息＋重新进食通常是恢复体能的最佳选择。可惜的是，国内的老板们并不懂得这点，他们的公司里不仅连正常国家规定的休息时间都不给足，有些公司甚至有员工"过劳死"出现。所以国内能翻越"创新"这道门槛的人是"少之又少"，和西方比起来估计是数量级的差别。</p>
<p>再说说重新进食的问题，这个重新进食是有讲究的，需要进食一些基础性易消化的简单食物，不能进食山珍海味级的复杂食物，否则很难快速吸收。以查找为例，并不是去天天盯着那些复杂的查找结构和算法进行研究，你需要做的是将二分查找、哈希查找、普通二叉树查找等基础性的知识好好地复习几遍。</p>
<p>以哈希查找为例，首先你需要去将各种冲突解决方法如链式结构、二次哈希等编写一遍，再试试不同种类的哈希函数，然后还需要试试在硬盘中如何实现哈希查找，并考虑数据从硬盘读到内存后，如何组织硬盘中的数据才能快速地在内存中构建出哈希表来，...，这样你可能需要将一个哈希表写上十几个不同的版本，并比较各个版本的性能、功能方面的区别和适用范围。</p>
<p>总之，对任何一种简单的东西，你需要考虑各种各样的需求，以需求来驱动研究。最后你将各种最基础性的查找结构和算法都了然于胸后，或许某天你再看其他更复杂的查找算法，或者你在散步时，脑袋里灵光一现，突然间就发现了更好的方法，也就从专家晋升为"学者"了。</p>
<p>学者所做的事情，通常都是在前人的基础上，进行一些小的优化和改进，例如别人发明了链式基数排序的方法，你第1个发现使用一定的方法，可以用数组替代链表进行基数排序，性能还能得到进一步提高。</p>
<p>由于学者需要的只是一些小的优化改进，因此中国还是有一定数量的学者。不过和国外的数量比起来，估计少了一个数量级而已。</p>
<p>也许有人会觉得现在中国许多公司申请专利的数量达到甚至超过西方发达国家了，我们的学者数量应该不会比他们少多少。因此，有必要把专利和这里说的创新的区别解释一下。</p>
<p>所谓专利者，只要是以前没有的，新的东西，都可以申请专利；甚至是以前有的东西，你把他用到了一个新的领域的产品里去，也可以申请专利。比如你在房子里造一个水泥柱子，只要以前没有人就这件事申请专利，那么你就可以申请专利，并且下次你把水泥柱子挪一个位置，又可以申请一个新的专利；或者你在一个柜子上打上几个孔，下次又把孔的位置改一改，...，均可申请专利。</p>
<p>这层楼里所说的创新，是指学术层面的创新，是基础研究方面的创新，和专利的概念是完全不同的，难度也是完全不同的。你即使申请了一万个象那种打孔一类的专利，加起来也够不到这层楼里的一个创新。</p>
<p>当你爬到第6层楼时，你也许会有一种突破极限的快感，因为你终于把那道高高的写着"创新"二字的门槛给翻过去了，实现了"0"的突破。这时，你也许有一种"独上高楼，欲望尽天涯路"的感觉，但是很快你会发现看到的都是比较近的路，远处的路根本看不清楚。如果你还有足够的体力的话，你会想爬到更高一层的楼层去。</p>
<p><strong>第</strong><strong>7</strong><strong>层</strong><strong> </strong><strong>大师</strong><strong></strong></p>
<p>从第6层楼爬到第7层楼，并没有多少捷径可走，主要看你有没有足够的能量。你如果能象Hoare一样设计出一个快速排序的算法；或者象Eugene W. Myers一样设计出了一个用编辑图的最短路径模型来解决diff问题的算法；或者象M.J.D. Powell一样提出了一个能够处理非线性规划问题的SQP方法；或者你发现基于比较的排序算法，它的复杂度下界为O(NLogN)；或者你发现用栈可以将递归的算法变成非递归的；或者你设计出一个红黑树或者AVL树之类的查找结构；或者你设计出一个象C++或Java一样的语言；或者你发明了UML；...，你就爬到了第7层，晋升为"大师"了。</p>
<p>上面举的这些例子中，其中有些人站的楼层比这层高，这里只是为了形象说明而举例他们的某个成就。从上面列出的一些大师的贡献可以看出，成为大师必须要有较大的贡献。首先解决问题必须是比较重要的，其次你要比前辈们在某方面有一个较大的提高，或者你解决的是一个全新的以前没有解决过的问题；最重要的是，主要的思路和方法必须是你自己提供的，不再是在别人的思路基础上进行的优化和改进。</p>
<p>看了上面这些要求，如果能量不够的话，你也许会觉得有些困难，所以不是每个人都能成为"大师"的。中国软件业里能称得上是"大师"的人，用屈指可数来形容，估计是绰绰有余。值得一提得是，国外的"大师"就象我们的"大牛"一样满天飞的多。</p>
<p>我把我猜测本国有可能进到这层楼的大师列一下，以起个抛砖引玉的作用。汉王的"手写识别"技术由于是完全保密的，不知道它里面用了什么思想，原创思想占的比重有多少，因此不知道该把它划到这层楼还是更高一层楼去。原山东大学王小云教授破解DES和MD5算法时，用到的方法不知道是不是完全原创的，如果是的话也可进到这层楼来。</p>
<p>陈景润虽然没有彻底解决哥德巴赫猜想，但他在解决问题时所用的方法是创新的，因此也可以进到这层楼来。当然，如果能彻底解决哥德巴赫猜想，那么可以算到更高的楼层去。</p>
<p>求伯君和王志东等大牛们，他们在做WPS和表格处理之类的软件时，不知是否有较大的原创算法在里面，如果有的话就算我错把他们划到了大牛层。由于所学有限，不知道国内还有那些人能够得上"大师"的级别，或许有少量做研究的教授、院士们，可以达到这个级别，有知道的不妨回个帖子晾一晾。</p>
<p>鉴于"大师"这个称号的光环效应，相信有不少人梦想着成为"大师"。或许你看了前面举的一些大师的例子，你会觉得要成为大师非常困难。不妨说一下，现在有一条通往"大师"之路的捷径打开了，那就是多核计算领域，有大量的处女地等待大家去挖掘。</p>
<p>以前在单核时代开发的各种算法，现在都需要改写成并行的。数据结构与算法、图像处理、数值计算、操作系统、编译器、测试调试等各个领域，都存在大量的机会，可以让你进到这层楼来，甚至有可能让你进到更高一层楼去。<br />
</p>
<p class="MsoNormal"><span><strong><span>第</span></strong><strong><span lang="EN-US">8</span></strong><strong><span>层</span></strong><strong><span> </span></strong><strong><span>科学家</span></strong><strong></strong></span></p>
<p class="MsoNormal"><span><span>科学家向来都是一个神圣的称号，因此我把他放在了&#8220;大师&#8221;之上。要成为科学家，你的贡献必须超越大师，不妨随便举一些例子。</span></span></p>
<p class="MsoNormal"><span><span>如果你象</span><span lang="EN-US">Dijkstra</span><span>一样设计了</span><span lang="EN-US">ALGOL</span><span>语言，提出了程序设计的三种基本结构：顺序、选择、循环，那么你可以爬到第</span><span lang="EN-US">8</span><span>层楼来。顺便说一下，即使抛开这个成果，</span><span lang="EN-US">Dijkstra</span><span>凭他的</span><span lang="EN-US">PV</span><span>操作和信号量概念的提出，同样可以进到这层楼。</span></span></p>
<p class="MsoNormal"><span><span>如果你象</span><span lang="EN-US">Don Knuth</span><span>一样，是数据结构与算法这门学科的重要奠基者，你也可以进到这层楼来。当然，数据结构和算法这门学科不是某个人开创的，是许多大师和科学家集体开创的。</span></span></p>
<p class="MsoNormal"><span><span>如果你象巴科斯一样发明了</span><span lang="EN-US">Fortran</span><span>语言，并提出了巴科斯范式，对高级程序语言的发展起了重要作用，你也可以进到这层楼来。</span></span></p>
<p class="MsoNormal"><span><span>或者你象</span><span lang="EN-US">Ken Thompson</span><span>、</span><span lang="EN-US">Dennis Ritchie</span><span>一样发明了</span><span lang="EN-US">Unix</span><span>操作系统和功能强大、高效、灵活、表达力强的</span><span lang="EN-US">C</span><span>语言，对操作系统理论和高级编程语言均作出重大贡献，那么你也可以进到这层楼来。</span></span></p>
<p class="MsoNormal"><span><span>或者你有</span><span lang="EN-US">Frederick P. Brooks</span><span>一样机会，可以去</span><span>领导开发</span><span lang="EN-US">IBM</span><span>的大型计算机</span><span lang="EN-US">System/360</span><span>和</span><span lang="EN-US">OS/360</span><span>操作系统，并在<span>失败后反思总结，写出《人月神话》，对软件工程作出里程碑式的贡献，你也可以进到这层来。</span></span></span></p>
<p class="MsoNormal"><span><span>或者你提出了面向对象设计的基本思想，或者你设计了互联网的</span><span lang="EN-US">TCP/IP</span><span>协议，或者你象</span><span lang="EN-US">Steven A.Cook</span><span>一样奠定</span><span lang="EN-US">NP</span><span>完全性的理论基础，</span><span>或者你象</span><span lang="EN-US">Frances Allen</span><span>一样专注于并行计算来实现编译技术，在编译优化理论和技术取得基础性的成就，</span><span lang="EN-US">&#8230;</span><span>，均可进入这层。</span></span></p>
<p class="MsoNormal"><span><span>当然，如果你发明了</span><span lang="EN-US">C++</span><span>语言或者</span><span lang="EN-US">Java</span><span>语言，你进不到这层来，因为你用到的主要思想都是这层楼中的科学家提出的，你自己并没有没有多少原创思想在里面。</span></span></p>
<p class="MsoNormal"><span><span>看了上面列出的科学家的成就，你会发现，要成为&#8220;科学家&#8221;，通常要开创一门分支学科，或者是这个分支学科的奠基者，或者在某个分支学科里作出里程碑式的重大贡献。如果做不到这些的话，那么你能象</span><span lang="EN-US">Andrew C. Yao</span><span>（姚期智）一样在</span><span>对计算理论的多个方向如伪随机数生成，密码学与通信复杂度等各个方向上作出重要贡献，成为集大成者，也可以进入这层楼。</span></span></p>
<p class="MsoNormal"><span><span>成为&#8220;科学家&#8221;后，如果你有幸象</span><span lang="EN-US">Dijkstra</span><span>一样，出现在一个非常重视科学的国度。当你去世时，你家乡满城的人都会自动地去为你送葬。不过如果不幸生错地方的话，能不挨&#8220;板砖&#8221;估计就算万幸了。</span></span></p>
<p class="MsoNormal"><span><span>从上面随便举的一些例子中，你可能能猜到，西方科学家的数量是非常多的，于是你会想中国应该也有少量的科学家吧？我可以很负责任地告诉你一个不幸的结果，中国本土产生的科学家的数量为</span><span lang="EN-US">0</span><span>。目前在国内，软件领域的唯一的科学家就是上面提过的姚期智，还是国外请回来的，并不是本土产生的。</span></span></p>
<p class="MsoNormal"><span><span>可能你不同意我说的本土科学家数量为</span><span lang="EN-US">0</span><span>的结论，因为你经常看到有许多公司里都有所谓&#8220;首席</span><span lang="EN-US">XX</span><span>科学家&#8221;的头衔。我想说的是，这些所谓的&#8220;首席</span><span lang="EN-US">XX</span><span>科学家&#8221;都是远远够不到这层楼的级别的，有些人的水平估计也就是一个&#8220;牛人&#8221;或&#8220;大牛&#8221;的级别，好一点的最多也就一个&#8220;学者&#8221;的级别。尤其是那些被称作&#8220;首席经</span><span lang="EN-US">X</span><span>学家&#8221;的，基本上可以把称号改为&#8220;首席坑大家&#8221;。</span></span></p>
<p class="MsoNormal"><span><span>虽然我国没有人能爬到这层楼上来，但是西方国家仍然有许多人爬到了比这层更高的楼上。如果要问我们比西方落后多少？那么可以简单地回答为：&#8220;落后了三层楼&#8221;。下面就来看看我们做梦都没有到过的更高一层楼的秘密。</span></span></p>
<p class="MsoNormal"><span><strong><span>第</span></strong><strong><span lang="EN-US">9</span></strong><strong><span>层</span></strong><strong><span> </span></strong><strong><span>大科学家</span></strong><strong></strong></span></p>
<p class="MsoNormal"><span><span>进入这层楼的门槛通常需要一些运气，比如某天有个苹果砸到你头上时，你碰巧发现了万有引力，那么你可以进到这层楼来。当然，万有引力几百年前就被人发现了，如果你现在到处嚷嚷着说你发现了万有引力，恐怕马上会有人打</span><span lang="EN-US">110</span><span>，然后警察会把你送到不正常人类的聚集地去。因此，这里举万有引力的例子，只是说你要有类似的成就才能进到这层楼来。</span></span></p>
<p class="MsoNormal"><span><span>牛顿发现万有引力定律开创了经典物理运动力学这门学科，如果你也能开创一门大的学科，那么你就从科学家晋升为&#8220;大科学家&#8221;。比如爱因斯坦创建了相对论，从一个小职员变成了大科学家。当然大科学家可远不止这两人，数学界里比物理学界更是多得多，如欧几里得创建了平面几何，笛卡尔开创解析几何，还有欧拉、高斯、莱布尼茨等数不清的人物，跟计算相关的大科学家则有图灵等人。</span></span></p>
<p class="MsoNormal"><span><span>从上面列出的一些大科学家可以发现，他们的成就不仅是开创了一个大的学科，更重要的是他们的成就上升到了&#8220;公理&#8221;的层面。发现公理通常是需要一点运气的，如果你的运气不够好的话，另外还有一个笨办法也可以进到这层楼来，那就是成为集大成者。例如冯&#183;诺伊曼，对数学的所有分支都非常了解，许多领域都有较大的贡献，即使撇开他对计算机的开创贡献，成为大科学家照样绰绰有余。</span></span></p>
<p class="MsoNormal"><span><span>当然，程序员们最关心的是自己有没有机会变成大科学家。既然计算机这门大学科的开创性成果早就被冯&#183;诺伊曼、图灵等人摘走了，那么程序员们是不是没有机会变成大科学家了呢？我们的古人说得好：&#8220;江山代有才人出，各领风骚数百年&#8221;，现在在计算机这门学科下面诞生了许多非常重要的大的分支，所以你还是有足够的机会进到这层楼的。</span></span></p>
<p class="MsoNormal"><span><span>如果你能够彻底解决自然语言理解（机器翻译）这门学科中的核心问题，</span> <span>或者你在人工智能或者机器视觉（图像识别）方面有突破性的发现，那么你同样可以轻易地晋升为&#8220;大科学家&#8221;。这样当某天你老了去世时，或许那天国人已经觉醒，你也能享受到如</span><span lang="EN-US">Dijkstra</span><span>一样的待遇，有满城甚至全国的人去为你送葬。</span></span></p>
<p class="MsoNormal"><span><span>现在还剩下另外一个大家感兴趣的问题没有讨论，那就是这层中已经出现了牛顿、爱因斯坦、高斯等我们平常人都认为是顶级的科学家，是不是这层已经是楼顶了呢？相信还记得本文标题的人应该知道现在仅仅是第</span><span lang="EN-US">9</span><span>层，还有第</span><span lang="EN-US">10</span><span>层没有到达呢。可能不少人现在要感到困惑了，难道还有人站在比牛顿、爱因斯坦、高斯等人更高的楼层上？</span></span></p>
<p><span><span>这个世界上确实存在可以用一只手的手指数得清的那么几个人，他们爬到了第</span><span lang="EN-US">10</span><span>层楼上。因此，第</span><span lang="EN-US">10</span><span>层楼不是虚构的，而是确实存在的。如果对此有疑惑或者认为我在胡诌一番的话，那么不妨继续往下看下去，窥一下第</span><span lang="EN-US">10</span><span>层楼的秘密。</span></span></p>
<h3><span><span>第</span><span lang="EN-US">10</span><span>层</span> <span>大哲</span></span></h3>
<p class="MsoNormal"><span><span>看了这层楼的名字&#8220;大哲&#8221;，可能不少人已经猜到了这层楼的秘密，那就是你的成果必须要上升到哲学的高度，你才有机会能进到这层来。</span></span></p>
<p class="MsoNormal"><span><span>当然，上升到哲学高度只是一个必要条件，牛顿的万有引力似乎也上升到了哲学的高度，因为不知道引力到底是怎么来的，但是牛顿没有被划到这一层，因为进到这层还有另外的条件，那就是你的成果必须引起了哲学上的深度思考，并能让人们的世界观向前跨进一大步。窃以为牛顿、爱因斯坦等人的成就还达不到让人们世界观向前跨进一大步的程度。</span></span></p>
<p class="MsoNormal"><span><span>所以，这层楼中的人的成就对我们普通人认识世界非常重要，你可以不学相对论，但是你不可以不对这层楼的人所作出的成就不了解，否则你的世界观就是极其不完整的，会犯许多认识上的错误。不幸的是，中国的科普知识普及还不够到位，知道这层楼成就的人好像并不多，程序员中恐怕更少。下面就来看看这些用一只手的手指数得清的大哲们，到底有什么成就，能比万有引力定律和相对论还重要。</span></span></p>
<p class="MsoNormal"><span><strong><span lang="EN-US">1</span></strong><strong><span>、希尔伯特</span></strong><strong><span lang="EN-US"> (1862</span></strong><strong><span>～</span></strong><strong><span lang="EN-US">1943)</span></strong></span></p>
<p class="MsoNormal"><span><span>第</span><span lang="EN-US">1</span><span>位进到此楼层是一位名叫&#8220;希尔伯特&#8221;的大数学家，如果你学过《泛函分析》，那么你在学习希尔伯特空间时可能已经对这位大数学家有所了解；如果你不是学数学出身的，又对数学史不感兴趣的话，恐怕你从来没有听说过这个名字。不过如果我问一下，知不知道二次世界大战前世界数学中心在那里，你肯定会有兴趣想知道。</span></span></p>
<p class="MsoNormal"><span><span>不妨说一下，二战前整个世界的数学中心就在德国的</span><span class="large1"><span>哥廷根</span></span><span>，而我们这位大数学家希尔伯特便是它的统帅和灵魂人物。</span><span class="large1"><span>即使在二战期间，希特勒和丘吉尔也有协定，德国不轰炸牛津和剑桥，作为回报，英国不轰炸海德堡和哥廷根。</span></span></span></p>
<p class="MsoNormal"><span><span>整个二十世纪上半期的超一流数学家，几乎都出自其门下。这里不妨举几个我们熟悉的人物，例如冯&#183;诺伊曼就曾受到他和他的学生</span><span>施密特和外尔的思想影响</span><span>，</span><span>还到哥廷根大学任过希尔伯特的助手，</span><span>钱学森的老师冯&#183;卡门是在哥廷根取得博士学位的。顺便提一下，这位大数学家发现当时物理学上出了很多大的成果如相对论和量子力学，但是这些物理学家的数学功力明显不足，因此有一段时间带领他的学生们研究过物理学，并独立发现了广义相对论，只是不好意思和物理学家争功劳，将广义相对论的功劳全部让给了爱因斯坦。</span></span></p>
<p class="MsoNormal"><span><span>广义相对论相对于这位大数学家在数学上的贡献，其实是算不了什么的，只是由此可看出这位大数学家品格的高尚之处。如果再去看看牛顿之流的人物的品行，整天和莱布尼茨、虎克等人争功劳，利用自己的优势地位打压他人，甚至闹得上法庭，和这位希尔伯特先生比起来，简直就是个小丑。</span></span></p>
<p class="MsoNormal"><span><span>说到这里，你可能对这位大数学家&#8220;希尔伯特&#8221;有了一些初步映象，感觉到了他的重要性，不过他在数学上的主要成就可不是几句话说得清楚的。首先，他是一位集大成者，精通当时数学所有分支领域，在数学的各个领域都有较大的贡献，当然这些成就只能让他成为一个大科学家，不能带他进入这层楼。事实上这位&#8220;希尔伯特&#8221;解决的任何一个数学问题都够不到这层楼的高度，那么他怎么混到这层楼来了呢？</span></span></p>
<p class="MsoNormal"><span><span>话得从</span><span lang="EN-US">1900</span><span>年说起，当时还很年轻的希尔伯特在当时的世界数学大会上做了一个报告，高屋建瓯地提出了著名的</span><span lang="EN-US">23</span><span>个未解决的数学问题，然后整个二十世纪上半期，全世界的数学家们都在这</span><span lang="EN-US">23</span><span>个问题的指导下展开研究，直到现在仍然有许多数学家受这</span><span lang="EN-US">23</span><span>个问题的指导在进行研究。例如我们熟知的哥德巴赫猜想，就属于其中第</span><span lang="EN-US">8</span><span>个问题素数分布的一个子问题。</span></span></p>
<p class="MsoNormal"><span><span>如果用&#8220;高瞻远瞩&#8221;来形容这位大数学家的话，那么这个世界上恐怕没有第二个人再配得上&#8220;高瞻远瞩&#8221;这四个字，不论是欧拉、高斯、牛顿、爱因斯坦还是被誉为最有才华的数学家伽罗华，概不例外。</span></span></p>
<p class="MsoNormal"><span><span>虽然那</span><span lang="EN-US">23</span><span>个问题是归纳总结出来的，并不全是原创，但是其中有不少问题是可以上升到哲学的高度，引起深度思考的。可能大多数人都会觉得希尔伯特是进不到这层楼的，我们知道提出问题的人和解决问题的人是一样伟大的，何况他提出的问题是如此之多，基于这点，个人觉得应该让希尔伯特跨进这层楼的门槛里。</span></span></p>
<p class="MsoNormal"><span><span>看完这位希尔伯特的成就，你可能会觉得对你的世界观并没有产生任何影响。确实如此，他提出的问题不是用来影响你的，而是用来影响其他大科学家和大哲的，下面再来说说另一位对他提出的</span><span lang="EN-US">23</span><span>个问题中的第</span><span lang="EN-US">2</span><span>个问题有杰出贡献的大哲，你就会感觉到大哲们的成果的威力了。</span></span></p>
<p class="MsoNormal"><span><strong><span lang="EN-US">2</span></strong><strong><span>、哥德尔</span></strong><strong><span lang="EN-US"> (1906~1978)</span></strong></span></p>
<p class="MsoNormal"><span><span>这位大哲的名字叫&#8220;哥德尔</span><span lang="EN-US"> (G&#246;del) </span><span>&#8221;，你可能从来也没有听说过这个名字，即使你读了一个数学系的博士学位，如果你的研究方向不和这位大哲对口的话，你也不一定了解这位大哲的成就，更不知道他的成果对我们这个世界有何意义。</span></span></p>
<p class="MsoNormal"><span><span>简单地说，这位大哲</span><span lang="EN-US">20</span><span>多岁时就证明了两个定理，一个叫做&#8220;哥德尔完全性定理&#8221;，另一个更重要的叫做&#8220;哥德尔不完全性定理&#8221;。你也许会觉得奇怪，第</span><span lang="EN-US">9</span><span>层楼的成就就已经上升到了公理的高度，这种证明定理的事情不是学者和大师们做的事情吗？怎么能比第</span><span lang="EN-US">9</span><span>层楼的成就还高呢？下面就来简单说一下这两个定理的含义，你就会明白这属于系统级的定理，绝不是普通的定理和公理所能比拟的。</span></span></p>
<p class="MsoNormal"><span><span>&#8220;哥德尔完全性定理&#8221;证明了逻辑学的几条公理是完备的，即任何一个由这些公理所产生出的问题，在这个公理系统内可以判定它是真的还是假的，这个结论表明了我们人类所拥有的逻辑思维能力是完备的。这条定理并不能将其带入这层楼来，带其进入这层楼的是另一条定理。</span></span></p>
<p class="MsoNormal"><span><span>&#8220;哥德尔不完全性定理&#8221;是在</span><span lang="EN-US">1930</span><span>年证明的，它证明了现有数学的几条公理（</span><span lang="EN-US">ZF</span><span>公理系统）是不完备的，即由这些公理产生出的问题，无法由这几条公理判断它是真的还是假的。例如希尔伯特</span><span lang="EN-US">23</span><span>个问题中的第</span><span lang="EN-US">1</span><span>个问题，也就是著名的康托尔连续统假设，哥德尔在</span><span lang="EN-US">1938</span><span>年证明了现有公理系统中不能证明它是&#8220;假&#8221;的，科恩（</span><span lang="EN-US">Cohen</span><span>，或许也可以称得上是&#8220;半&#8221;个大哲）在</span><span lang="EN-US">1963</span><span>年证明了现有公理系统不能证明它是&#8220;真&#8221;的。最有趣的是，即使你将某个不可判定的问题，作为一条新的公理加入进去，所组成的新的公理系统仍然是不完备的，即你无法构造一个有限条公理的系统，让这个公理系统是完备的。</span></span></p>
<p class="MsoNormal"><span><span>也许你仍然无法理解上面这段话的含义，不妨先说一下它对我们现实世界的影响。你可能知道</span><span lang="EN-US">1936</span><span>年出现的图灵机是现代计算机的理论模型，如果没有哥德尔不完全性定理的思想，图灵机什么时候能出来是很难说的，所以这位哥德尔可以算作计算机理论的奠基者的奠基者。计算机对我们这个世界产生的影响比原子弹大了多少，我想不用我说大家也都清楚。当然，对现实世界的影响只能把哥德尔同图灵等人一样划到大科学家那一层去，能进入这层乃是另有原因。</span></span></p>
<p class="MsoNormal"><span><span>可能你看过《未来战士》、《黑客帝国》、《</span><span lang="EN-US">I</span><span>，</span><span lang="EN-US">Robot</span><span>》之类的科幻电影，于是你产生制造一个和人一样或者比人更高一级的智能机器人的想法，这就引入了一个达到哲学高度的问题，&#8220;人到底能不能制造出具有和人一样的思维能力的机器来？&#8221;。</span></span></p>
<p class="MsoNormal"><span><span>我只能告诉你，&#8220;你的愿望是良好的，但现实是残酷的&#8221;。如果你仔细思考一下不完全性定理的含义，并结合现代计算机所具有的能力分析一下，你会发现这个问题的答案暂时是否定的。如果你想造出和人一样思维能力的机器，那么你需要去好好学习这位大哲及其后续研究者的成果，并在他们的基础上有新的突破才行。</span></span></p>
<p class="MsoNormal"><span><span>为了说明这位大哲所研究领域的重要性，这里顺便再讨论一个我们日常争议不休的问题，那就是孔夫子的&#8220;人之初、性本善&#8221;以及西方认为&#8220;人之初、性本恶&#8221;的观点孰优孰劣的问题。可能有许多人发现西方社会现在领先我们，于是就认为&#8220;性本恶&#8221;是对的，&#8220;性本善&#8221;是错的，中国应该抛弃以前的旧思想，改用西方的思想。当然也有一些老学究们，认为中国的人文思想是领先于西方的，自然而然地认为&#8220;性本善&#8221;是对的，&#8220;性本恶&#8221;是错的。</span></span></p>
<p class="MsoNormal"><span><span>如果你学过大哲用过的公理化的分析方法，你就知道一套系统的多条公理间只要不会推导出矛盾的地方，即可以自圆其说，那么它可以看作是对的。这样你可以很轻易地给这个问题下一个结论，即&#8220;性本善&#8221;和&#8220;性本恶&#8221;是对等的，不存在孰优孰劣的问题，更不存在谁对谁错的问题。只要你不同时将&#8220;性本善&#8221;和&#8220;性本恶&#8221;放入一个系统内，那么是不会有问题的，甚至你也可以认为&#8220;人之初、既无善、亦无恶&#8221;，或者认为&#8220;人之初、部分善、部分恶&#8221;，都是可以自圆其说的，所以我们的老祖宗提出的思想并没有问题，之所以落后乃是其他原因造成的。这个问题其实在高斯所处的时代就有了结论，那时有人提出了非欧几何，即平行线公理问题，有人认为过一点可以作多条平行线，还有人认为平行线在无穷远点是相交的，和欧氏几何关于过一点只能作一条平行线的公理都是矛盾的，但是他们各自的系统内推导出的结论都是正确的。</span></span></p>
<p class="MsoNormal"><span><span>上面说的只是对哥德尔不完全性定理的一些粗浅解析，实际上如果深入思考一下它的含义的话，你会发现它对物理学等许多学科有重大影响，包含的道理实在是深刻，远非一般的思想所能比拟，有兴趣者不妨&#8220;</span><span lang="EN-US">google</span><span>&#8221;或&#8220;百度&#8221;一下&#8220;哥德尔&#8221;。或许只有我们的老祖宗&#8220;老子&#8221;提出的哲学思想，深度可以有得一比。</span></span></p>
<p class="MsoNormal"><span><span>哥德尔不完全性定理也给那些认为科学是严谨的人当头一棒，原来连数学这样的纯理论学科都是不严谨的，其他学科就更不用说了。</span></span></p>
<p class="MsoNormal"><span><span>至此，已经说完数学上的大哲，下面不妨再看看物理学上的大哲，物理学上好像只出过一位叫&#8220;海森堡&#8221;的大哲（注：由于本人对物理学不甚了解，不知道&#8220;霍金&#8221;够不够得上大哲的称号）。</span></span></p>
<p class="MsoNormal"><span><strong><span lang="EN-US">3</span></strong><strong><span>、海森堡</span></strong><strong><span lang="EN-US"> (1901~1976)</span></strong></span></p>
<p class="MsoNormal"><span><span>海森堡这个名字相信没有几个人不知道的，大部分人在学习物理时都学过他的&#8220;测不准关系&#8221;，也就是因为这个&#8220;测不准关系&#8221;，海森堡爬到了第十层楼。</span></span></p>
<p class="MsoNormal"><span><span>如果你看过《时间简史》和《霍金讲演录－黑洞、婴儿宇宙及其他》，你也许已经了解测不准关系的威力，所以这里不想做过多的讨论，只谈一些和本土产生的哲学思想相关的东西。</span></span></p>
<p class="MsoNormal"><span><span>首先看看争论了几千年，并且现在仍然有人在争论不休的&#8220;宿命论&#8221;问题。霍金认为，只要这个宇宙有一个初始状态，粒子的运动是按照一定物理定律进行的（比如相对论、量子力学属于这些物理定律的一部分），那么所有的粒子运动轨迹将是确定的，然后只要你承认唯物论，即精神是由物质决定的，那么宿命论就是&#8220;对&#8221;的。当然由于测不准关系的存在，对人而言，又是无法准确预测的，因此也可以将其看作是&#8220;不对&#8221;的。简单的说，可以认为宿命论是&#8220;对&#8221;的是绝对的，宿命论是&#8220;不对&#8221;的是相对的。</span></span></p>
<p class="MsoNormal"><span><span>可能上面这段话你现在仍然难以理解，或许你又觉得你的命运并不是上天注定的，而是可以通过自己的努力可以改变的。我要告诉你的是，你在想什么也是事先已注定的，包括你在预测本身也是事先注定的，因为大脑思考问题最终是基本粒子运动的结果，而这些粒子的运动必然要遵循物理定律进行，所以你会不会努力，想不想努力，包括你在想你该不该努力这件事本身也是事先注定的。顺便说一下，你现在正在看这篇文章，可能正在想这个宿命论问题值得怀疑，或者觉得写得不够好，准备砸个板砖上来；或者你在想这篇问题写得有点意思，准备看完后转给朋友看一看；又或者你看到这里，觉得很累了，准备休息一下；</span><span lang="EN-US">&#8230;</span><span>；这些都是上天事先就注定的。从你自身的相对角度看，因为你事先不知道后来会发生什么，也可以认为不是事先注定的，可能这句话有些不好理解，不妨好好理解前面说过的公理化思想。</span></span></p>
<p class="MsoNormal"><span><span>如果你没看过《霍金讲演录－黑洞、婴儿宇宙及其他》，你可能会觉得很惊讶，宿命论历来不都被认为是唯心论吗，怎么由唯物论推导出了宿命论呢？现实就是这样和你开了一个大的玩笑，不过这个玩笑也是事先注定的。如果你再仔细用公理化的方法思考一下唯物论和唯心论的矛盾性，就像前面分析性善论和性恶论一样，你会发现唯物论、唯心论不一定就是冲突的，矛盾的双方是可以统一的，只要你不要同时将唯物和唯心放进同一个系统中就行。</span></span></p>
<p class="MsoNormal"><span><span>当然也有聪明者仍然会怀疑宿命论问题的正确性，因为这里有一个前提条件，即宇宙要有一个初始状态。宇宙有没有初始状态，我们并不知道啊，虽然有大爆炸学说，但那也只是假说而已，并没有得到确证，有些人就认为宇宙是一直都存在的。这样看来似乎你又有合理的理由在怀疑宿命论了，不过我仍然要告诉你，你现在在怀疑宿命论仍然是事先注定的，不相信的话就来看看下面的分析。</span></span></p>
<p class="MsoNormal"><span><span>虽然宇宙的初始状态值得怀疑，但是这个宇宙至少已经存在了一段时间，这点我想是毋庸置疑的。我们可以在我们已知的宇宙存在的这段时间内，任意取一个时间点</span><span lang="EN-US">t0</span><span>，那么在这个时间点</span><span lang="EN-US">t0</span><span>上，所有的粒子都有一个运动状态。在时间点</span><span lang="EN-US">t0</span><span>之后的时间里，由于粒子运动是按照物理定律进行的，因此粒子运动轨迹由时间点</span><span lang="EN-US">t0</span><span>的状态决定。说白一点，如果取</span><span lang="EN-US">100</span><span>年前的一个时间点作为</span><span lang="EN-US">t0</span><span>，那么现在的所有粒子运动状态</span><span lang="EN-US">100</span><span>年前就已经确定了，如果取</span><span lang="EN-US">10000</span><span>年前一个时间点作为</span><span lang="EN-US">t0</span><span>，那么最近</span><span lang="EN-US">10000</span><span>年内所有粒子运动的轨迹在</span><span lang="EN-US">10000</span><span>年前就确定了，当然，你可以取更早的时间，比如</span><span lang="EN-US">100</span><span>亿年前的时间点。</span></span></p>
<p class="MsoNormal"><span><span>总之，现在你会发现宇宙有没有初始状态并不会影响宿命论的正确性，所以这个世界的一切都是注定的。只不过由于粒子间相互影响过于复杂，我们无法知道这些粒子的运动轨迹而已。当然，如果将测不准关系用上的话，那么就是这个运动轨迹对人来说是无法准确预测的，所以不妨开个玩笑：&#8220;算命先生经常算得不准大概是测不准关系的缘故吧&#8221;。</span></span></p>
<p class="MsoNormal"><span><span>如果你再深入思考一下测不准关系，你会发现这是一个测量系统的问题。由于宿命论的存在，这个世界本身实际上是确定的，是&#8220;准&#8220;的，之所以测不准乃是我们人类所具有的测量能力依赖于基本粒子造成的。所以我在前面说宿命论是&#8220;不对&#8221;的是相对的，它是相对于我们人类的测量能力而言的。根岑（</span><span lang="EN-US">Gentzen</span><span>，曾任希尔伯特的助手</span><span>）</span><span>在一个更强的系统内证明了</span><span lang="EN-US">ZF</span><span>系统内的问题都是可判定的，从一个侧面说明这个世界本身是确定的。（注：它和哥德尔不完全性定理并不矛盾，由于数学上的复杂性，这里就不详细解释了）</span></span></p>
<p class="MsoNormal"><span><span>不妨再想想我们老祖宗提出的&#8220;是庄周梦见了蝴蝶？还是蝴蝶梦见了庄周？&#8221;，&#8220;风动？幡动？还是心动？&#8221;之类的问题，当然以前你都认为这是纯粹的唯心主义，甚至认为是封建糟粕，但是如果结合测不准关系的内涵，再结合前面所说的公理化分析方法进行分析，估计你现在不敢轻易地下结论。</span></span></p>
<p class="MsoNormal"><span><span>也许到现在你仍然无法理解为什么把大哲们划在了大科学家的上一层，你可能仍然觉得万有引力、相对论等成果是最伟大的。下面就来谈谈为什么大哲比大科学家高一层。</span></span></p>
<p class="MsoNormal"><span><span>如果把人类在现有能力情况下，将来所能够拥有的知识总集看成是一个集合</span><span lang="EN-US">A</span><span>，人类现在已有的知识总集看成是集合</span><span lang="EN-US">B</span><span>，显然，集合</span><span lang="EN-US">B</span><span>只是集合</span><span lang="EN-US">A</span><span>的一个子集，并且是很小的一个子集。牛顿力学、相对论这些理论只能算作集合</span><span lang="EN-US">B</span><span>里的一个子集，相对于集合</span><span lang="EN-US">A</span><span>，只能算作是沧海一粟。</span> <span>换句话说，在人类现有能力可做的事情集合中，牛顿力学和相对论等理论给出了详细的办法让你可以做其中的一些事情，当然剩下的更多的事情是牛顿力学和相对论所无法解决的。</span></span></p>
<p class="MsoNormal"><span><span>哥德尔不完全性定理和测不准关系的意义在于，它指出集合</span><span lang="EN-US">A</span><span>的范围，即将人类现有能力发挥到极限的情况下，那些事情是你能做到的，那些是你不能做到的。当然，它并没有给出具体的方法让你去做你能做到的事情，它只是告诉我们我们人类现在发现的能力所能达到的极限。或许将来发现人类有其他新的未发现的能力，那么这个极限就被打破了。比如将来能发现不依赖于基本粒子的其他测量方法，并且测量过程中不会改变其他粒子的状态，那么测不准关系就被打破了。</span></span></p>
<p class="MsoNormal"><span><span>看到这里，估计你已经发现了一些秘密，科学兜了一大圈，最终还是回到了哲学，也就是我们所认为的玄学上。同时你也会发现，我们老祖宗提出的所谓玄学，原来和现代科学是相通的，并非象某些人想像的那样全是糟粕。如果有人认为西方现代暂时领先我们，进而就认为西方古代就已经超越我们，我们老祖宗就已经落后西方，他们的思想都是糟粕的话，那么我认为他可能犯了崇洋媚外的毛病。我不得不化用一句周杰伦在春晚上的歌词送给他：&#8220;你不妨抓一副我们祖传的中医良方，治一治你那崇洋媚外的内伤&#8221;。顺便告诉他一下，中医用的阴阳五行理论，它的前提假设就是宿命论。</span></span></p>
<p class="MsoNormal"><span><span>上面说的这几位大哲的成果，可能对你的世界观会有很大的影响，于是你可能会羡慕起这些大哲们的成果来。如果你有大志的话，你会希望有朝一日你也能变成大哲，但是你发现上面的大哲是研究数学和物理学的，而你是学计算机的程序员，那么是不是没有机会变成大哲呢？</span></span></p>
<p class="MsoNormal"><span><span>如果你能将</span><span lang="EN-US">NP</span><span>难题给彻底解决掉，意味着计算机内的计算的奥秘基本被揭开，或许你可以进到这层楼来；或者你能发现另外一套计算机可以理解的数学公理系统，并且这个公理系统是完备的，那么计算机取代人类进行思维的一个必要条件就满足了，计算机将具有真正意义上的&#8220;逻辑思维和推理能力&#8221;，你可以轻松地进到这层楼来。如果你发现了新的方法可以打破测不准关系，同样你也可以轻松地进到这层楼来。</span></span></p>
<p class="MsoNormal"><span><span>如果你能彻底揭开人类抽象思维的奥妙，并让计算机懂得了如何创建抽象，具备抽象思维能力，那么也就具备了&#8220;设计能力&#8221;，可以取代人类进行各种设计了，你也可以轻松地进到这层楼来。顺便说一下，如果你对软件设计有真正深刻理解的话，就会明白这不是在写科幻小说。对此感兴趣者，不妨好好地研究一下程序切片方面的技术，会让你对软件设计和测试等方面的理解有质的提高，或许有一天你能打开这扇大门。</span></span></p>
<p class="MsoNormal"><span><span>当然，计算机要完全取代人还有其他必要条件，后面还会提及。</span></span></p>
<p class="MsoNormal"><span><span>值得一提的是，虽然第</span><span lang="EN-US">10</span><span>层楼是本文中所写的最高层，但是大哲们并没有觉得他们到了顶层，他们通常都还会努力寻找通往更高一层的楼梯。如果你也有成为天下第一的想法，那么你或许会想要做什么事情才能超越大哲们的成就，当然，这都得依赖于找到更高一层楼的楼梯。</span></span></p>
<p class="MsoNormal"><span><span>个人认为，再往上一层楼的楼梯是通往天堂的道路，也就是说第</span><span lang="EN-US">11</span><span>层楼的名字叫&#8220;天堂&#8221;，是&#8220;上帝&#8221;住的地方，而不是人住的地方。如果将来某天有人能爬到天堂的话，那么他已经不是人了，而是由人变成了&#8220;上帝&#8221;。</span></span></p>
<p class="MsoNormal"><span><span>你也许会怀疑这个世界到底有没有&#8220;天堂&#8221;，&#8220;上帝&#8221;是否根本就不存在，我也很有同感。因此有必要再写上一段文字，讨论一下&#8220;上帝&#8221;的问题。如果你想了解天堂的奥妙，有没有办法让你变成&#8220;上帝&#8221;，不妨看看继续往下看看第</span><span lang="EN-US">11</span><span>层楼的玄妙。注意我这里用的是&#8220;玄妙&#8221;二字，因为上帝在大部分人眼里估计都是&#8220;玄之又玄&#8221;的东西。</span></span></p>
<h3><span><span>第</span><span lang="EN-US">11</span><span>层</span> <span>上帝</span></span></h3>
<p class="MsoNormal"><span><span>看了上面的小标题，你可能会觉得奇怪，这篇文章不是讲&#8220;程序员的十层楼&#8221;吗？怎么冒出了第</span><span lang="EN-US">11</span><span>层来了？</span></span></p>
<p class="MsoNormal"><span><span>其实这并不矛盾，程序员确实只有十层楼，因为爬到第</span><span lang="EN-US">11</span><span>层时，已经变成上帝，不再是程序员了；所以超出</span><span lang="EN-US">10</span><span>层楼本身并不重要，关键的问题是看你有没有能力变成上帝。</span></span></p>
<p class="MsoNormal"><span><strong><span lang="EN-US">1</span></strong><strong><span>、谁是上帝？</span></strong><strong></strong></span></p>
<p class="MsoNormal"><span><span>菜鸟们认为</span><span lang="EN-US">Linus Torvalds</span><span>是程序员中的上帝，看完了前面各层楼的介绍，此时再看到这句话，相信你要忍不住在心里笑起来。当然，你会不会笑起来是事先注定的。</span><span lang="EN-US">Don Knuth</span><span>也不是上帝，他离上帝还有三层楼的距离。即使是大哲们，他们离天堂也还差一层楼，因此这个世界上有史以来还没有任何一个人变成过上帝。</span></span></p>
<p class="MsoNormal"><span><span>我们感兴趣的是，将来会不会有人爬到比大哲们更高的楼层上，变成了上帝。</span></span></p>
<p class="MsoNormal"><span><span>要变成上帝，你得有上帝一样的能力，上帝会造人，你会吗？</span></span></p>
<p class="MsoNormal"><span><span>你也许会怯生生地问：&#8220;我可以和爱人生小孩，算不算造人？&#8221;，你可能还会理直气壮地说：&#8220;现在生物学上都可以克隆人了，早就有人掌握了造人的方法&#8221;。</span></span></p>
<p class="MsoNormal"><span><span>事实上克隆人需要有人的体细胞，必须要先有人才会有体细胞。上帝造人时，这个世界上并没有人，是从无生命的物质&#8220;尘土&#8221;中创造出的人。因此，用最原始的方法生人和克隆人都是从有生命信息的物质中生人，不能算作造人。</span></span></p>
<p class="MsoNormal"><span><span>这样看来，你根本不会造人，不过我可以告诉你一个&#8220;玄方&#8221;，让你有机会学会如何造人。</span></span></p>
<p class="MsoNormal"><span><span>如果你揭开了人类情感的奥秘，让计算机也可以拥有和人类一样的情感，那么计算机将可以理解人类的需求，具有了&#8220;情商&#8221;，将具有完整的和人一样的能力。此时，人类进化到了机器人，科幻小说将变成现实，也就是说你已经掌握了真正的造人能力，晋升为&#8220;上帝&#8221;了。</span></span></p>
<p class="MsoNormal"><span><span>未来到底有没有人能变成&#8220;上帝&#8221;，人能不能进化到机器人，这是宿命论中事先注定了的。说到这里，不妨再告诉你一个打破宿命论的方法，这个方法就是你要爬到比上帝还要高的楼层。</span></span></p>
<p class="MsoNormal"><span><span>&#8220;还有比上帝还高的楼层？&#8221;，你可能会第</span><span lang="EN-US">1</span><span>时间内冒出这个问题，其实我也有同样的怀疑。因此在写第</span><span lang="EN-US">12</span><span>层楼前，有必要弄清楚它到底存不存在，即你可不可以骑到上帝的头上的问题。</span></span></p>
<p class="MsoNormal"><span><strong><span lang="EN-US">2. </span></strong><strong><span>骑到上帝的头上？</span></strong><strong></strong></span></p>
<p class="MsoNormal"><span><span>为了解决是否可以骑到上帝的头上这个问题，不妨先假设存在比上帝高的楼层，也就是存在打破宿命论的方法。</span></span></p>
<p class="MsoNormal"><span><span>宿命论的本质原因是因为时间是单向运行，不可逆转造成的。如果你找到一种可以使时间逆转的方法，那么你就打破了宿命论，爬到了比上帝还高的楼层。</span></span></p>
<p class="MsoNormal"><span><span>看到这里，你也许会摆脱刚才陷于宿命论的困惑情绪，变得充满希望般高兴起来。不过，如果你的逻辑思维能力足够好，仔细思考一下，会发现存在一个逻辑上的悖论。</span></span></p>
<p class="MsoNormal"><span><span>在你找到时间逆转的方法之前，显然这个世界仍然是需要服从宿命论的，也就是说你能不能找到打破宿命论的方法是事先注定的。假设你在某个时间点</span><span lang="EN-US">t0</span><span>处找到了打破宿命论的方法，你在打破宿命论后，想利用时间逆转的方法回到某个时间点</span><span lang="EN-US">t2</span><span>。下面来看看你到底能不能回到时间点</span><span lang="EN-US">t2</span><span>。</span></span></p>
<p class="MsoNormal"><span><span>取位于</span><span lang="EN-US">t0</span><span>和</span><span lang="EN-US">t2</span><span>之间的任意一个时间点</span><span lang="EN-US">t1</span><span>，你在回到时间点</span><span lang="EN-US">t2</span><span>之前，必须先经过时间点</span><span lang="EN-US">t1</span><span>，考虑你到达</span><span lang="EN-US">t1</span><span>的那一时刻，由于</span><span lang="EN-US">t1</span><span>比</span><span lang="EN-US">t0</span><span>要早，这个时间点上你还没有找到时间逆转的方法，所以到了时间</span><span lang="EN-US">t1</span><span>点后，你无法再使用时间逆转的能力回到时间点</span><span lang="EN-US">t2</span><span>去，所以你永远也回不到时间点</span><span lang="EN-US">t2</span><span>，由于时间点</span><span lang="EN-US">t2</span><span>是任意取的，因此，你永远也无法使时间逆转，或者说你根本就没打破过宿命论，这与你在时间点</span><span lang="EN-US">t0</span><span>打破了宿命论产生了矛盾。</span></span></p>
<p class="MsoNormal"><span><span>上面这段话看起来似乎有点像&#8220;人永远迈不出一步&#8221;的诡辩一样，你可能会想返回到时间点</span><span lang="EN-US">t1</span><span>时，仍然可以拥有时间逆转能力啊。不过你又会发现一个新的问题，时间点</span><span lang="EN-US">t1</span><span>本来是没有时间逆转能力的，现在又认为时间点</span><span lang="EN-US">t1</span><span>又有时间逆转能力，那时间点</span><span lang="EN-US">t1</span><span>到底是有还是没有时间逆转能力呢？或者说在时间点</span><span lang="EN-US">t0</span><span>前，宿命论注定了时间点</span><span lang="EN-US">t1</span><span>是没有时间逆转能力的，现在你又认为时间点</span><span lang="EN-US">t1</span><span>具有时间逆转能力，那么这两个时间点</span><span lang="EN-US">t1</span><span>究竟是不是同一个时间点？如果不是同一个时间点，说明你没有回到过去；如果是同一个时间点的话，岂不是自相矛盾吗？</span></span></p>
<p class="MsoNormal"><span><span>为了说得更形象一些，不妨假设你坐一艘超光速飞船，准备从时间点</span><span lang="EN-US">t0</span><span>回到时间点</span><span lang="EN-US">t2</span><span>去，假设你回到</span><span lang="EN-US">t2</span><span>后，随着时间的流逝，又达到了时间点</span><span lang="EN-US">t0</span><span>，如果这时你又再次坐超光速飞船返回时间点</span><span lang="EN-US">t2</span><span>，那么一个值得思考的问题就出现了，&#8220;你在时间点</span><span lang="EN-US">t2</span><span>能不能看到上次返回时间点</span><span lang="EN-US">t2</span><span>的飞船？&#8221;</span></span></p>
<p class="MsoNormal"><span><span>如果回答不能看到飞船，那么上次返回的飞船那里去了呢？显然很难解释通。如果回答能看到飞船，那么你可以到达时间点</span><span lang="EN-US">t2</span><span>后，下次时间到达</span><span lang="EN-US">t0</span><span>时，你又坐飞船返回</span><span lang="EN-US">t2</span><span>，这次你将可以看到上两次的两艘飞船。如果这样一直循环下去，最后你会发现你可以在时间点</span><span lang="EN-US">t2</span><span>看到无穷多的飞船。用程序员的术语说，叫做&#8220;程序陷入了死循环&#8221;，最后系统必然会出现&#8220;</span><span lang="EN-US">Out of Memory</span><span>&#8221;现象而崩溃。</span></span></p>
<p class="MsoNormal"><span><span>当然，你也可以认为有其他的方法，不需要飞船，可以一次性从时间点</span><span lang="EN-US">t0</span><span>直接跳跃到时间点</span><span lang="EN-US">t2</span><span>，并不需要经过时间点</span><span lang="EN-US">t1</span><span>。下面不妨来分析一下这个方法是否可行。</span></span></p>
<p class="MsoNormal"><span><span>既然是直接跳跃到时间点</span><span lang="EN-US">t2</span><span>，那么你必然是在一个无穷小的时间里出现在时间点</span><span lang="EN-US">t2</span><span>的某个空间里，例如你要在时间点</span><span lang="EN-US">t2</span><span>回到某个广场上。首先说明一下为什么是无穷小的时间里出现的，因为如果不是无穷小的时间里出现的话，那么必然可以取到一个时间点</span><span lang="EN-US">t1</span><span>，会导致前面所说的时间点</span><span lang="EN-US">t1</span><span>上出现悖论。</span></span></p>
<p class="MsoNormal"><span><span>你在广场上出现的时，广场上的空气必然要为你让开空间，而这是在无穷小的时间里完成的，那么很容易推导出你周围的空气获得的加速度和速度都是无穷大，因而它具有的动能也是无穷大，无穷大的能量和无穷大的速度意味着什么？一只鸟都可以将飞机撞下来，如果宇宙是有限大的话，它可以让这个宇宙炸毁无穷次；即使宇宙是无限大，它也足以让宇宙炸毁一次。宇宙都毁灭了，又何来的时间？还能说你回到了时间点</span><span lang="EN-US">t2</span><span>吗？</span></span></p>
<p class="MsoNormal"><span><span>也许上面说的这些你仍然难以相信，不妨再说得更现实一些，假设你要回到</span><span lang="EN-US">100</span><span>年前的一个时间点，这</span><span lang="EN-US">100</span><span>年中，天上有多少流星湮灭了？有多少新星生成了？宇宙膨胀了多少？你有能力让湮灭的流星复原、生成的新星重新返回未生成前的状态，膨胀的宇宙收缩回去吗？如果这些东西的状态没有回复到</span><span lang="EN-US">100</span><span>年前，又怎么能说明你回到的是</span><span lang="EN-US">100</span><span>年前的时间点呢</span><span lang="EN-US">?</span></span></p>
<p class="MsoNormal"><span><span>根据上面的推导和分析，个人认为使时间逆转的方法是不存在的，所以第</span><span lang="EN-US">12</span><span>层楼是不存在的，自然没有人可以骑到&#8220;上帝&#8221;的头上。</span></span></p>
<p><span><span>宿命论将在有时间的时间里永远统治这个世界。<br />
<br />
<a href="http://software.intel.com/zh-cn/blogs/">转自：http://software.intel.com/zh-cn/blogs/</a></span></span></p>
<img src ="http://www.blogjava.net/103335460/aggbug/284084.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/103335460/" target="_blank">雪山飞狐</a> 2009-06-25 11:32 <a href="http://www.blogjava.net/103335460/articles/284084.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据流图 DFD（转）</title><link>http://www.blogjava.net/103335460/articles/227854.html</link><dc:creator>雪山飞狐</dc:creator><author>雪山飞狐</author><pubDate>Tue, 09 Sep 2008 01:27:00 GMT</pubDate><guid>http://www.blogjava.net/103335460/articles/227854.html</guid><wfw:comment>http://www.blogjava.net/103335460/comments/227854.html</wfw:comment><comments>http://www.blogjava.net/103335460/articles/227854.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/103335460/comments/commentRss/227854.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/103335460/services/trackbacks/227854.html</trackback:ping><description><![CDATA[数据流图：采用图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程，是结构化系 统分析方法的主要表达工具
<p class="0"><span style="font-size: 10.5pt">功能： DFD<font face="宋体">用于功能建模</font></span></p>
<p class="0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据流图描述数据流和加工<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据流图用图形符号表示数据流、加工、数据源及外部实体<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据流图具有层次结构，支持问题分解、逐步求精的分析方法</p>
<p class="0"><span style="font-size: 10.5pt"><font face="宋体"><br />
</font></span></p>
<p class="0"></p>
<p class="0"></p>
<p class="0"><span style="font-size: 10.5pt"><font face="宋体">作图:</font></span></p>
<p class="0"><span style="font-size: 10.5pt"><font face="宋体">&nbsp;&nbsp; 1. 基本图形</font></span></p>
<p class="0"><span style="font-size: 10.5pt"><font face="宋体">&nbsp;&nbsp;&nbsp; </p>
<div align="center" forimg="1"><img class="blogimg" src="http://hiphotos.baidu.com/sdausea/pic/item/dd4056faafeb1a0ba8d3118f.jpg" border="0" small="0"  alt="" /></div>
&nbsp;&nbsp;&nbsp; </font></span>数据流图有四种基本图形符号：<br />
&nbsp;&nbsp; <img style="cursor: pointer" height="6" src="http://student.zjzk.cn/course_ware/software/image/jt.gif" width="18" border="0"  alt="" /> ：箭头，表示数据流；<br />
&nbsp;&nbsp;&nbsp; 〇：圆或椭圆，表示加工；<br />
&nbsp;&nbsp;&nbsp; = ：双杠，表示数据存储；<br />
&nbsp;&nbsp;&nbsp; □：方框，表示数据的源点或终点。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (1) 数据流。数据流是数据在系统内传播的路径，因此由一组成分固定的数据组成。如订票单由旅客姓名、年龄、单位、身份证号、日期、目的地等数据项组成。由于数 据流是流动中的数据，所以必须有流向，除了与数据存储之间的数据流不用命名外，数据流应该用名词或名词短语命名。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2)加工(又称为数据处理)。对数据流进行某些操作或变换。每个加工也要有名字，通常是动词短语，简明地描述完成什么加工。在分层的数据流图中，加工还应编号。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (3)数据存储(又称为文件)，指暂时保存的数据，它可以是数据库文件或任何形式的数据组织。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (4)数据源点或终点，是本软件系统外部环境中的实体(包括人员、组织或其他软件系统)，统称外部实体。一般只出现在数据流图的顶层图。
<p>&nbsp;</p>
<p class="0"><span style="font-size: 10.5pt"><font face="宋体">&nbsp;&nbsp; 2.</font></span> 基本符号的意思</p>
<p class="0"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 矩形表示数据的外部实体<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 圆角的矩形表示变换数据的处理逻辑 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 少右面的边矩形表示数据的存储 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 箭头表示数据流</p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
<br />
<br />
<br />
<br />
<span class="TEXTFONT"><strong>分层数据流图<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
转载一:<br />
<div align="center" forimg="1"><img class="blogimg" src="http://hiphotos.baidu.com/sdausea/pic/item/af889903adbb119dd53f7ced.jpg" border="0" small="0"  alt="" /></div>
<br />
<br />
<br />
</strong></span><br />
<br />
一个实例：<br />
<br />
&nbsp;&nbsp;
<div align="center" forimg="1"><img class="blogimg" src="http://hiphotos.baidu.com/sdausea/pic/item/fe2db40990322097d0581b13.jpg" border="0" small="0"  alt="" /></div>
<img src ="http://www.blogjava.net/103335460/aggbug/227854.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/103335460/" target="_blank">雪山飞狐</a> 2008-09-09 09:27 <a href="http://www.blogjava.net/103335460/articles/227854.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>悟透JavaScript (转)</title><link>http://www.blogjava.net/103335460/articles/227785.html</link><dc:creator>雪山飞狐</dc:creator><author>雪山飞狐</author><pubDate>Mon, 08 Sep 2008 09:46:00 GMT</pubDate><guid>http://www.blogjava.net/103335460/articles/227785.html</guid><wfw:comment>http://www.blogjava.net/103335460/comments/227785.html</wfw:comment><comments>http://www.blogjava.net/103335460/articles/227785.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/103335460/comments/commentRss/227785.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/103335460/services/trackbacks/227785.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 引子&nbsp;&nbsp;&nbsp; 编程世界里只存在两种基本元素，一个是数据，一个是代码。编程世界就是在数据和代码千丝万缕的纠缠中呈现出无限的生机和活力。&nbsp;&nbsp;&nbsp;&nbsp;数据天生就是文静的，总想保持自己固有的本色；而代码却天生活泼，总想改变这个世界。&nbsp;&nbsp;&nbsp; 你看，数据代码间的关系与物质能量间的关系有着惊人的...&nbsp;&nbsp;<a href='http://www.blogjava.net/103335460/articles/227785.html'>阅读全文</a><img src ="http://www.blogjava.net/103335460/aggbug/227785.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/103335460/" target="_blank">雪山飞狐</a> 2008-09-08 17:46 <a href="http://www.blogjava.net/103335460/articles/227785.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>