原文

解谜计算机科学(前言)

计算机科学直到今天仍然是一个谜。它简单而美丽的精华,被压在沉重的历史包袱和功利诱惑之下。纷繁复杂的 IT 技术充斥着各种浮夸和忽悠,变成一本本大部头“圣经”,让人不知所措,头脑发涨,让外行尤其是女性望而却步。她们说,学计算机能赚钱,可是计算机知识淘汰速度太快,需要不断学习才能跟上,计算机工作枯燥,伤眼睛,伤皮肤,老得快!去看看各位计算机界前辈的照片,你会发现她们说的好像是对的 :)

“IT 男”和“极客”的苦逼名声,来源于这个领域创造者们的自大和虚伪。他们认为自己是天才,能够理解复杂的理论,所以他们喜欢把简单的问题搞复杂,然后告诉你“只有天才才能理解这种简单”。最后这种自大蔓延到整个领域。计算机科学虽然名字叫“科学”,但它的从业人员在很大程度上是宗教化的。不同信仰的教徒们盲目轻信,跟风拍马,互相鄙视,甚至掀起圣战。进入这个领域面临的,不仅是高度近视,不修边幅的同事,而且很多还很自大,喜欢显示自己聪明,觉得自己了不起。他们所谓的“聪明”,也就是能折腾那些纷繁复杂的理论和代码。发表论文来显示自己解决了一个问题,但别人看了仍然摸不着头脑。这种不健康的心理,进入了计算机科学的基因,完全违背了科学的精神。

在这种情况下产生出来的所谓“知识”,当然是淘汰速度很快的,因为他们只给了你浮于表面的东西。IT 业的很多知识就像妈妈告诉你,我把勺子放在这个抽屉里了,你记住啊!第二天她又把勺子换了一个地方,要你重新“学习”。这叫知识吗?他们把精华的东西牢牢地锁了起来,只把衍生出来的副产品给其他人。拿到这些副产品的人一知半解,又在上面加上一些乱七八糟的东西,然后转手倒卖给更下一层的学生。这样几层转手之后,你拿到的东西就只能凑合用了,不能用于产生新的想法,甚至使用中有问题还不能解决。这就是为什么很多码工折腾来折腾去,代码也只是碰巧能工作而已。没有理解原理,就成为了“知识”的奴隶。看不准方向,在错误的道路上越走越远。

爱因斯坦说:“如果你不能把一个问题跟六岁小孩解释清楚,那你并不真的理解它。” 这句话打了计算机前辈们的耳光。计算机界至今没有出现一本像物理界的『费曼讲义』那样负责任的教材。没有人从日常生活解释清楚那些基本的理论和技术是怎么回事。一方面是因为很多人并不真懂,只会照本宣科,拿别人的代码来拼凑折腾。另外一方面,很多懂了的人为了自己的私利,想掩盖这些简单的精华,故意把事情搞复杂。

我写这本书,就是为了弥补计算机业界这一空缺,改变行业的现状。它将吸引新鲜干净的血液进入这个行业,并且赋予他们力量。它也可以刷新内行人员的头脑,让他们重新理解和审视已有的知识。这样也许我们能冲破这个行业的重重迷雾,让它变得诚实,获得科学的精神,成为像物理一样踏实的学科。

很多计算机书籍都喜欢从“数学基础”开始,一开头就是长篇累牍的数学公式,定理,证明…… 结果读者还没读完数学基础就倒下睡着了,再也不想打开这本书。所以我不从数学基础开始,而是从最简单的生活常识。在认识发展的过程中,你会自己去创造出所需要的那些数学。

这本书不要求读者理解高等数学,而只需要幼稚园或者学前班水平的数学:掰手指头算加法,手算多位数加减法。它不要求,也不会试图教会你中学几何,高等数学或者物理学,你不需要那些来理解计算机科学。它不灌输给你死知识,而是从日常生活的经验出发,引导你去“重新发明”它们。最后你不是学会了知识,而是自己创造了它们。只有这样的知识才是属于自己的,才是可靠安心的,不受别人控制,也不会忘记。我讨厌“学习”这个词,因为它基本代表着死记硬背。我不是在教你,你也不是在学习,因为你自己发明了这一切。

如果有一天,一场灾难毁灭了世界上所有的计算机和电子产品,以及它们的设计文档,我希望看过这本书的人,能够根据他们的日常经验,重新创造出这些东西。对的,这本书不仅是关于编程和软件,它还会告诉你硬件是怎么回事,并且把软件和硬件统一起来。它不只是教会你一种程序语言,而是教会你所有的程序语言,它告诉你如何发明一种语言。它不要你去“记住”计算机里面有哪些东西,而是让你自己发现“需要”它们:晶体管,寄存器,指令,堆栈…… 你会发现虚拟机(VM)到底是什么,指令系统为什么那个样子,怎么创造它们…… 所有这一切,都以掰手指头的幼稚园算术为基础。

实际上,计算机科学和逻辑学是统一的,你会不知不觉理解很多看似高深的逻辑学,你会看透白胡子逻辑学家爷爷们的把戏。这种理解会为你提供更好的理解数学的工具,所以这本书不仅会帮助你理解计算机科学,而且会帮助你更好的理解数学。理解了数学你就能更好的理解物理。理解了物理,你就能更好的理解所有的科学……

有人可能怀疑这么浩大的工程,要什么时候才能完成。不会很久的,因为计算机科学最精华的部分,真的没有很多,我掰着手指头都数的出来。剩下来的都是衍生出来的技术,外加自欺欺人和商业炒作。你会掌握精华,识破忽悠和炒作,你可以衍生出自己的技术。即使你决定不进入这个领域,你也会成为一个火眼金睛的投资人,管理者,或者消费者。你不再能被这些“内行”欺骗。为了达到这个目标,你不需要损害自己的视力或者健康,不需要长出鸡窝一样的胡子,不需要成为一个对异性具有排斥力的呆子 ;)

这本书不是固定不变的,它会不断地完善和发展。有人看我写的东西就是我最大的动力,所以为了使我自己有动力写书,我会采用“快速迭代”的方法。我是一个很懒的人,我不会等书完全写完才发布它,那样我会打瞌睡以至于不能继续,所以我会分章节发布书的内容。每一章发布之后,还会经过成百上千次的修改。每一章的内容,我会在它“基本可读”之后就进行发布,而不会等到它完美。之后我会反复的思考和修改,接受人们的反馈。

这种做法对早期的读者有益,也有一定的弊端。弊端就在于,由于这些内容随时可能变化和改进,所以早期读者有时候会遇到看不懂的地方,必须之后再次阅读,才能跟上改进的思路。不过这样做也有好处,读者不用等上一年就能读到这本书,而且能跟着我的写作思路去思考,反复琢磨。俗话说,书读百遍,其义自见。他们可以跟我讨论,给我反馈,向我提问。这些都是后期读到完善作品的人无法体验到的。在某种程度上,这些人对问题的理解会更加深刻一些,因为他们被迫去进行独立思考。另外,早早的有了读者,会让我很开心,满怀着爱去做这件事。

人的短期记忆只能记住七个东西,所以我会努力让这本书简短。每个知识点都不应该长篇大论之后才能理解,而应该是正中要害。当然这篇前言也应该简短,所以前言就到此结束了。

计算机的世界,就将被你一个人重新发明出来。它的内容没有很多,真的没有很多……