过去一直有一个声音,让我们去读经典,读《红楼梦》, 读巴尔扎克,读莎士比亚,读《荷马史诗》,读《论语》…

为什么要读经典? 因为真正的美,从古至今都没有改变,改变的只是它表达美的形式和表现方式。就如,即便几千年过去了,我们仍然会觉得万里长城很美,秦兵马俑很美, 比萨斜塔很美,蒙娜丽莎很美,梵高的向日葵很美…美的事物,人们很容易得到共识。

我把这样的想法也放在了编程领域,我们该去读计算机科学的经典。读计算机科学在早先创建的时候,那些先驱者的思想,以及后来不断出现的经典。

为什么要做这件事情?因为一方面计算机的技术越来越纷繁和学科细化;另一方面,越来越多的人痴迷于科学技术产生的工具,甚至有些人痴迷于一种编程语言。正如Bjarne Stroustrup在访谈中提到:

”Nobody should call themselves a professional if they only knew one language.(没有人应该把自己视为一个专家,如果他们只知道一门编程语言)“

由此,新一代的人们开始忽略了计算机科学的本质,忘掉了那些简单而朴素的真理。只有去读经典,才能从这越来复杂和庞大的学科中,把握它最美、最精华的思想

我打算花两年的时间,把这些经典的论文和书籍看一遍,我要回到那个简单朴素的思想起点。


一些论文

CSCI E-192 课程提供了很好的参考,他们列出的Paper主要在这里:master list.

我觉得其中每一篇的都值得一读,所以就不一一列举了。实在不喜欢的可以略读,但是也该能把握它的思想。

一些书单

来自Reddit,更多的讨论在链接这里: Is there a list of the canonical introductory textbooks covering the major branches of computer science?
我只关心我对其中感兴趣的书,人的一生时间有限,我不可以什么书都去读。不管它写的再好,如果我对其不感兴趣也是徒劳。

  • SICP (Structure and Interpretation of Computer Programs (Abelson & Sussman))
  • Formal Language: A Practical Introduction by Webber
  • Abstract and Concrete Categories: The Joy of Cats by Adamek et al
  • Fundamentals of Computer Graphics by Shirley and Marschner
  • Distributed Systems: Concepts and Design by Dollimore et al
  • **Introduction to Functional Programming using Haskell **by Bird and Wadler
  • ML for the Working Programmer by Paulson
  • How to Design Programs(Felleisen等人)
  • **Concepts, Techniques, and Models of Computer Programming **(Van Roy & Haridi

关于编译器

Reddit上有关于讨论编译器书单的一个话题,Recommendations for books on compilers。其中sanxiyn评论到: GCC wiki recommends a list of compiler books.

打开之后,我只选了一本: Appel. Modern Compiler implementation in ML

关于编译器书籍的评论,我想 Vladimir N. Makarov的话语为我指明了学习和阅读的方向:

If you don’t want to be compiler savvy but want to understand the compiler, I’d recommend Appel’s, Cooper’s, Morgan’s book in the same priority.

我现在还不清楚自己想不想精通编译器,所以先读这些基础的书,如果兴趣越多就读更多。

关于我的兴趣

到现在我还不知道我的兴趣聚焦于哪个点,所以我尽可能了解更多,学习更多。不过我知道我喜欢编程语言中有意思的概念,有意思的想法。我想我的好奇心会帮助我找到最终的答案,让我的工作有一个核心的关注点。

我对于计算机中一些个人口味的不喜欢是显而易见的,比如:计算机图形学,密码学,我对这些基本上没有兴趣。我在从前工作了解过关于RSA密钥的算法,只是为了满足老板的商业需要进行学习的。比如我对LSM的数据结构有兴趣,所以我觉得自己关注的方向还是编程语言方向,关心数据结构和算法。我对Knuth的CWEB编程语言很感兴趣,它将是我这段时间忙完之后第一件事情。

关于编程语言工程实践的书

我不太喜欢看这类书,比如一些人推荐《代码大全》,重构这类的书。因为正如我前面所说的观念:美是一种共识。

只要追求美,最终就会够殊途同归。如果年轻时代码写的不够美,只是因为对美的理解不够深刻,只要保持这种追求,最终就会自己独立的找到。如果你觉得能找到一种和一些方法就能够写出美的代码,我觉得这是误解和想当然。只要有了自己对美的理解,自然就能做出美的东西,而不需要任何专注所谓的”技巧“。有个词语叫”洗心革面“,只要”洗了心“,人的面貌自然就新了,而不需要”革面“。不能做表面工作侧重形式,而是专注于内在。