关于写书

写书计划已经进入策划阶段。这篇文章是因为之前那篇的最后部分的一些想法越改越长,开始具有独立的价值,所以截取下来放在这里。其中加入的一些想法,也许可以帮助某些人跳出他们心里的“坎”。我觉得这是很有意义的,这些内容也许会成为我的另外一本书的一部分,这本书也许可以起名叫『怎样解放你自己』。


动机

说了挺久要写书,一直没有动力。一方面是由于我觉得国内出版社都不大靠谱,出的很多书水平太低,处于培训班级别,教流水线工人死知识那种,或者就是把别人软件的使用说明书翻译了拿来出版,要不就是翻译国外教材。这有损我的品牌形象。从大学二年级开始,我就不看中文教科书和技术类书籍,也不看翻译过来的国外教材,就是因为质量低劣。有些国外教材本来还行,翻译过来就走样了。

另外很大一部分原因,是因为我写东西都是一针见血,容易懂,而且不会留一手。我很怕一不小心说太明白,就让关键的知识点落到道德水平低的人手里,拿出去装模作样吹牛逼,不告诉别人那想法是哪里来的,还反过来说我是吹牛逼。我也许顾虑太多了。其实我只需要传授我愿意提供的知识,而保留我不愿意的就行。

这些入门知识被广大群众了解,显然对善良的人有好处,而对吹牛逼的人们不是什么好事。这些知识将会帮助他们识破骗局,成为他们对抗这些虚假权威的武器(或者扫帚)。所以,我真的决定要写书了。

有些人虽然表示支持,可是他们误解了我写书的目的。他们觉得我写书是要“证明自己”,或者“实现自己的价值”。他们同时还会提到那些“说我闲话的人”,好像我需要拿出点什么来让这些人信服,我觉得这些都是非常有失尊重的说法。他们那样想的原因,是因为觉悟没到位,所以不理解我的境界和地位。只有地位低的,虚假的人才需要向别人证明自己,才需要拿“硅谷”,“Google”一类的招牌来撑起自己,才需要写一些“硅谷回忆录”或者民科一样的书,来让别人瞧得起自己。有真才实学的人,是不屑于向人证明的。向人显示什么,或者证明什么,是低等人的做法。由于我的高度,世界上没有任何人有资格来接受我的“证明”,所以我不需要向任何人证明自己。当然我更不需要向那些说闲话的人,被邪教洗脑的蠢人证明自己。

我以前就发现有些人这样说:“王垠,你那么厉害,你把 Python 的 GIL 问题解决了给我们看看呀!” “你那么厉害,可是你为什么没有做出 Go 语言那么厉害的东西呢?” “Yin 语言呢?拿出来给我们看看呀!” “你那么厉害,为什么没有在大公司做到高管呢?” “你那么厉害,我的代码里有一堆 bug,你有本事给我修好呀!一个小时能完成吗?” …… 显然这些人说出这些话来,是极度不尊重的,这显示出他们的无知和自大。越是无知的人越是容易自大。这些人自大的认为,自己觉得重要的问题,就是真正重要的,你没做这件事,那你就是能力不行。这些人不明白,一个专家的价值,不在于他能否解决你的问题。很多人的眼界太小太低了,所以他们所谓的“重要难题”,他们衡量一个人是否厉害的标准,在专家的眼睛里往往就是一坨屎。真正的专家不是给人清理垃圾擦屁股的。说这些话的人,他们的心理是扭曲的,他们的级别是非常低的。如果你转达这样的人的话,那你的级别可能也差不多。

发现问题了吗?你其实可以用这样的技巧对付世界上任何一个人:达芬奇,牛顿,爱因斯坦,比尔盖茨,乔布斯,马云,Linus Torvalds…… 所有的人。这个技巧的窍门在于,悄悄把自己的“标准”强加在其他人身上,这样他们就左右不是人。另外,这种技巧还可以用于操纵人的潜意识,使得他们被控制。你可以把自己想要达到的目的,悄悄放进这些标准里面。你对他说,你那么厉害,你怎么不能 xx 呢?其中 xx 就是你自己的目的,或者朝着你的目的发展…… 自尊心强的人,好胜的人看不透这种把戏,就被无形中控制了。这些人有聪明,但却没有智慧。为了证明自己聪明,结果被人利用了。

这种人的一生是这样发展的:从中学开始就有人对你说,你如果真那么优秀那么厉害,那你高考考个状元来给我们看看啊!等你考了状元,他们又会说状元不算什么,你要是能在 ACM 竞赛拿金牌,才是真的厉害!等你拼得头破血流达到了那些目标,他们又说,你要有影响力的开源代码,在 GitHub 上万颗 star,那才叫厉害。等你有了开源项目,他们拿你的代码去赚了钱,反而对你各种吹毛求疵,贬低价值,好像那代码是他们也能写出来的一样。现在他们改口说,你在开源社区写点代码算什么啊,你要能进 Google,那才是真的厉害!等你进了 Google,上司对你说,你要是能修好我们这堆 JS 代码里的 bug,那才叫真的厉害呢!等你成天加班以为熬出头了,出了 Google,那些人又说,那么多人都是 Google 出来的,你算什么啊?你要创业,弄出个 IPO 的独角兽公司,改变世界,那才是真的厉害……

于是你就走上了不归路,你只活在别人的眼睛里,你的每一次行动都是为了让别人觉得你有价值。你不得不打着“硅谷牛人”的牌子,显示着你的 Google 来历,你的 ACM 奖牌,甚至你的高中学科竞赛奖…… 可是你仍然没有发现,那些要求你给他们“证明”的人,他们真的有资格评价你吗?如果你真的到了一定的高度,就会发现他们只是一堆虫子而已!他们通过你的虚荣心掌控了你,他们按照他们自己的利益需要,为你定义了什么是“成功”。你不加批判,接受了他们的定义,并且朝“成功”的方向努力,你就被控制了。你心目中的成功,只是为别人的野心服务的,而这些人并不需要为此付出努力,他们只需要 judge 你,给你打分!世界上最舒服的生意就是给人打分了。因为你在乎他们怎么说,怎么看你,你成了那些人的奴隶,虫子的奴隶。你觉得自己“厉害”了,可是你只是别人的奴隶,因为你是否厉害,是别人说了算的,你的级别是别人定的!你失去了对自己的主权,这就叫做奴隶。

我需要向小莫奈肚子里的寄生虫证明自己很厉害吗?不需要。我研究一下寄生虫的生命周期,生理规律,给他吃点药打掉就可以了。那些嘲笑我,说我闲话的人,吹牛皮的人,觉得我应该向他们证明或者显示什么的人,拿我跟其他人比较的人,不就跟寄生虫一样吗?寄生虫嘲笑我,说我闲话,对我来说有伤害吗?寄生虫如何看待我,对我来说有意义吗?我有必要让寄生虫认可我吗?我有必要跟寄生虫对骂吗?那些在乎寄生虫的看法,并且向我转告的人,我还需要理睬他们吗?所以呢,请不要再告诉我寄生虫怎么想,怎么看待我,它们有什么样的“成功标准”,因为这就像把一只寄生虫拿来摆在我面前,这是一种严重的冒犯。请看看我的文章和书,那就是给你们的打虫药。打掉之后冲马桶里就行了,不要给我看。

当然我也不需要实现自己的“价值”,我本来就非常有价值。我每天都感受到自己的价值,欣赏着自己的价值,我知道我不会贬值,而且会不断地升值。所以我写书的目的很简单:把我的巨大价值分一点出去,让社会变得更好。另外,我觉得写东西是一种娱乐。我看电影,我打游戏,我寻找美食,我给小莫奈铲屎,是为了证明自己吗?是为了实现自己的价值吗?哎,这些人都在想些什么啊。

有些自以为厉害的程序员可能会笑我,王垠你不写高级的技术资料,在这里忽悠初学者算什么?那他们就是大大的误解了,他们恐怕连我的博文都没看过就在说这些话。我并不缺高级的技术资料,我也不缺代码。去看看我的博文吧,几乎每一篇里面都有全世界最深入的见解。当全世界人都误解一个问题的时候,全世界的学术会议和期刊都在发烧胡扯的时候,当人们仰慕的大牛们犯错误认为自己是对的时候,王垠的博文仍然是保持清醒,一针见血的。很显然,我不稀罕争夺所谓“高档”的地位。实际上我不想跟人争什么,写这本书是出于一种社会责任感,我觉得大部分人应该得到基本的知识,这样对社会有好处。

专注于高端知识还有一个严重的问题,就是高处不胜寒。高端的文章初级读者看不懂,而德行不好的高级读者看了之后学到了精髓,又会拿去转手忽悠新手。我发现国内的很多小白们眼里的牛人,其实在从我的博客里偷东西。把我早就有的想法拿过去转手一下,不暴露来源,小白们还以为是他自己想出来的。甚至连我的写作风格都模仿过去,写成自己的书出版。然后那群小白们在论坛里骂我吹牛逼,说那个人才是真牛逼。直到他们到了一定的高度,才会发现这些人的真面目。适当写一些入门级的读物,帮助小白们快速成长,他们就会更早的识别出这些虚伪了。

我写“入门书”而不是“进阶书”的另外一个原因,就像爱因斯坦说的:如果你不能向一个六岁小孩解释清楚一个问题,那么你其实并不真的懂。我在大学里见过太多讲不清楚问题的教授,中国的美国的都有,后来我发现那是因为他们自己都没弄明白。没有非常深入的见解,你是不可能把深奥的东西解释清楚的。反过来,试图把一个问题向完全不懂的人讲清楚,也会大大加深你自己的理解。看了我的『怎样写一个解释器』而学会解释器的人都会明白,我的理解程度在全世界处于什么地位。没有成千上万次写各种各样解释器的试验,失败和领悟,你是不可能理解到那种程度的。

深入理解任何一门学问的关键,不是试图去回答越来越“高级”,越来越复杂的问题,而是试图去回答最基础的问题,反复地问自己最基础的问题…… 爱因斯坦之所以能发现相对论,不是因为他去思索看起来高级的难题,而是因为他去思索一个最基本的问题:时间是什么?其他人觉得这问题很傻,时间不就是一秒一秒过去的那个东西吗?现在是半夜两点,那就是时间!然后这些人就永远没机会发现相对论了。同样的,深入理解计算机科学的关键,不是去学习云计算,大数据或者区块链,而是去思索最最基本的问题:“计算是什么?” “程序是什么?” “函数是什么?” “变量是什么?” “抽象是什么?” …… 你觉得自己知道这些问题的答案吗?那请你再想一想!

实际上直到 20 世纪初,全世界没有一个数学家真正的理解“函数是什么?” 这个如此基础的问题。这些人却天天都在用“函数”这个词,以至于他们的定理和证明里面出现各种奇怪的错误。直到 1904 年 Frege 写了这篇论文“What Is A Function?” 这种情况才得到了改善。数学发展了几千年,居然没有人真的理解如此基础的,天天都在用的概念。他们以为自己明白了,所以根本没有仔细思考过它是什么。就像我们从来没思考过什么是时间,却天天都在谈论“需要多少时间”一样。

为了感受一下这个问题,我请大家来读一读这篇文章的第一句话:

回答最基础,看上去谁都知道的问题,也将会是我这本书的开端。Frege 是一个不幸的人,他的作品在他有生之年都不被人重视。我比他幸运一点,我的博客还有一些读者 🙂

所以这本书虽然被我叫做“普及”或者“入门”读物,但它并不只是针对初学者的:它针对所有人。对我来说,很多“资深”的程序员其实根本就不算入了门。当我进入研究生阶段的时候,偶然发现了 SICP,看了这本所谓“入门书”,我惊讶地发现自己以前其实不会编程。在美国工作的时候,我发现很多高级别的程序员也是一样的情况。他们以为自己懂了,资历很深了,而其实还差很远。由于一些初级问题一开头就没理解清楚,到了关键的时候就会犯错误。这就是我所谓“入门”的含义。所以这本书也可以作为资深程序员们的进修读物。当然我会降低门槛,努力让初学者都能看懂。


与经典书籍的区别

因为我好像很推崇 Lisp/Scheme 语言。有些人看我想写这种入门读物,可能以为我会写一本“王垠的 Little Schemer”或者“王垠的 SICP”。这是一种比较常见的误解。如果我只是模仿 The Little Schemer (TLS) 或者 SICP,那是完全没有意义的。你去读那些书的中文版就行了。

很多年前我就是从 SICP 入门的,但是经过多年的研究,直接跟这些书的作者们学习交流,我发现这些书虽然贡献卓著,是不可磨灭的经典,我尊敬它们的作者,可是它们也有很多不足的地方甚至误导(这句话不要传到某些人耳朵里哈)。这就是为什么有好几个出版社请我翻译 TLS,我最后都拒绝了,因为我想写很不一样的东西。

很多人曾经问我:“我该看这本书还是那本书?” 我都不想回答,也是类似的原因。因为我的脑子里有一本更好的书,我觉得回答这样的问题有点降低自己的身份。我不再是此类书籍的消费者,而是创造者的级别。出于尊重的原因,你不可以问一个创造者这样的“消费级问题”。这就像你不可以问法拉利的设计者:“我是买奥迪好还是奔驰好?” 出于礼貌他也许会给你一个回答,但他的内心会很受伤 :p 同理的,请我翻译别人的此类书籍,也让我感觉很悲哀。

我在之前的好几篇文章已经指出了 Scheme 语言的一些设计上的弱点,完全以 Scheme 的方式写书,显然会把很多这样的弱点当成优点,对新手造成误导。从 SICP 或者 TLS 入门的学生,很多片面地认为 Lisp (或者 Haskell,Scala)是世界上最好的语言,以为 Lisp 的 list 是世界上最好的数据结构,以至于写 Java 代码还要在里面自己造出 Lisp 的 list 结构,搞得又复杂效率还很低。我不希望给我的读者们造成这样的效果,因为很显然我知道 list 的缺点。

我希望我的书是一本有机融合多种思维方式的精华,它应该本着科学的态度,而不是宗教的。它不会包含函数式语言的宗教,也不会包含面向对象方法的宗教,但它却会包含它们的精髓,把它们无缝的融合和统一在一起。这本书要教会读者的,不是某一种语言或者某一种思维方式,而是所有的语言和所有的思维方式的精华结合在一起,并且提醒你小心它们的缺点。

另外,我发现 SICP 这样的书籍还有很多写作上的弱点,很多地方有没必要的细节和冗长,很多例子需要比较困难的数学才能理解,导致初学者读起来头痛。书中代码的实现有些时候并不简洁清晰,过度抽象,到了第四章就很难看懂了。实际上 SICP 根本不适合初学者,他们需要先从其它地方学会编程,然后再来看这本书。虽然 SICP 曾经是 MIT 本科生的入门读物,但大部分 MIT 学生进学校之前就已经会一些编程了。所以 SICP 只适合作为进阶读物。

TLS 的“孔夫子式”写作方式很精悍,比起 SICP 之类的教材有很多优点,但它还是可以很伤脑子看不懂。显然 TLS 不是一本入门教材,它一开头就直接冒出各种术语(atom,list,s-expression……),好像假设你已经知道了一样。除非你已经学过 Scheme,否则将寸步难行。过度的强调递归,会导致学生倾向于在工作中过度使用递归代码,而忽视了循环语句的重要性。另外 TLS 缺少跟实际工作接轨的内容,这会让读者看了书却不知道怎么改善工作要用的代码,以至于失去动力,迷茫,半途而废。

我曾经很推崇费曼的物理学讲义,可是实话说吧我真想再学点物理,所以看了一些费曼的讲义。感觉开头好玩,到后来还是很累很痛苦想睡觉…… 所以我需要探索更好的方式来表达这些内容。这本书不会再号称“计算机科学的费曼讲义”,它应该更好!如果它不是更好,我就继续改进它 🙂

为了知识的民主和社会的文明,提高普通大众的技术教育水平迫在眉睫。这些事情我不放心其它人来做,更害怕发言权落到吹牛扯淡的野心家手里。仔细看过我的技术文章的人,都应该知道它们的见识深度是很难超越的。所以很希望大家能够支持我开张写书。祝愿大家走出迷茫,获得真知!


启动经费和投票支持

我希望在书的第一章发布之前,也就是现在,收集一些“启动经费”,来开始写作的过程。这些经费用于建立工作环境,也用于“估算”有多少人会想买我的书。

如果你喜欢这篇文章,而且有意要买我将要写的书,可以点击这个付费页面,对本文进行少量的付费(30元),留言就写“期待CS入门书”。之前已经付过类似费用的就不用了。我会根据付费的人数来估计图书将来的销量,所以你如果感兴趣的话,请一定向我发出你的支持。但是请注意,这个付费不代表你付了买书的钱。我的书显然不会这么便宜的。由于这篇文章本身的价值,你是在给这篇文章付费 🙂


关注微信公众号

码中人 微信公众号