“Hackers & Painters 读书笔记 (中文)”

Hackers & Painters: Big Ideas from the Computer Age is a collection of essays from Paul Graham discussing hacking, programming languages, start-up companies, and many other technological issues. “Hackers & Painters” is also the title of one of those essays. Paul Graham: He is an English born computer scientist, entrepreneur, venture capitalist, author, and essayist. He is best known for his work on Lisp, his former startup Viaweb (later renamed “Yahoo! Store”), co-founding the influential startup accelerator and seed capital firm Y Combinator, his blog, and Hacker News. He is the author of several programming books, such as: On Lisp, ANSI Common Lisp, and Hackers & Painters. Technology journalist Steven Levy has described Graham as a “hacker philosopher”.

Reference 1 Reference 2

Technology, Programming and Startup Companies


优美的软件并不总是论文的合适题材。

确保自己正在开垦新领地的方法,就是去找那些没有人要的土地。

你可以写那些为了完成工作、你不得不克服的障碍。没有什么比一个错误的前提更容易产生大量待解决的问题了。人工智能(AI)领域的大部分情况,都符合这条“如何凭空创造出问题”的规律。如果你假定,使用一系列的谓词逻辑(predicate logic)表达式,再加上代表抽象概念的参数,就能表达人类的知识,那么,你就可以写出许许多多的论文,解释如何完成这项工作。

唯一有效的外部考核就是时间。经过岁月的洗礼,优美的东西生存发展的机会更大,丑陋的东西往往会被淘汰。

你把整个程序想清楚的时间点,应该是在编写代码的同时,而不是在编写代码之前。(动态类型语言)

编程语言首要的特性应该是允许动态扩展(malleable)。编程语言是用来帮助思考程序的,而不是用来表达你已经想好的程序。它应该是一支铅笔,而不是一支钢笔。

静态类型是某些计算机语言的一个特性,指编译时对变量类型进行严格检査,典型代表是C、C++和Java。在这一类语言中,声明变量的时候,必须指定类型,而且以后不能再改变。

一页写满了数学公式的纸真是令人印象深刻啊。(小窍门:用希腊字母表示变量名会令人印象更深刻。)因此,你就受到巨大的诱惑,去解决那些能够用数学公式处理的问题,而不是去解决真正重要的问题。

大公司为了避免设计上的灾难,选择了减少设计结果的标准差。但是当你排斥差异的时候,你不仅将失败的可能性排除在外,也将获得高利润的可能性排除在外。这对大公司来说不是问题,因为生产特别优秀的产品不是它们的获胜手段。大公司只要做到不太烂,就能赢。

真正竞争软件设计的战场是新兴领域的市场,这里还没有人建立过防御工事。只要你能做出大胆的设计,由一个人或一批人同时负责设计和实现产品,你就能在这里战胜大公司。

画家学习绘画的方法主要是动手去画,黑客学习编程的方法也理应如此。

应该定期地从头开始,而不要长年累月地在一个项目上不断工作,并且试图把所有的最新想法都以修订版的形式包括进去。

黑客的出发点是原创,最终得到一个优美的结果;而科学家的出发点是别人优美的结果,最终得到原创性。

创作者另一个学习的途径是通过范例。

黑客可以通过观看优秀的程序学会编程,不是看它们的执行结果,而是看它们的源代码。

如果你预先承认规格设计是不完美的,在编程的时候,就可以根据需要当场修改规格,最终会有一个更好的结果。

过早优化(premature optimization)是一件危险的事情。我认为,我们应该对“过早设计”(premature design)坚持一丝不苟,就能取得优秀的成果。因为那些看不见的细节累加起来,就变得可见了。

暂时放手有时也能防止热情熄火。

正确的合作方法是将项目分割成严格定义的模块,每一个模块由一个人明确负责。模块与模块之间的接口经过精心设计,如果可能的话,最好把文档说明写得像编程语言规范那样清晰。

软件的部分功能就是解释自身。为了写出优秀软件,你必须假定用户对你的软件基本上一无所知。

Imgur

Critical Views


Leon Battista Alberti:“任何一种艺术,不管是否重要,如果你想要在该领域出类拔萃,就必须全身心投入。“

没有什么比一个共同的敌人更能使得人们团结起来了。

青少年的疯狂源于到处都是一片可怕的无聊。

学校是一个很奇怪的、人为设计出来的体系,一半像是无菌室,一半像是野蛮洪荒之地。它就像人生一样,里面无所不包,但又不是事物的真实样子。它只是一个暂时的过程,只要你向前看,你就能超越它,哪怕现在你还是身处其中。

“换位思考”并不就意味着你要做自我牺牲。

了解别人对于事情的看法,并不代表你为他的利益服务。某些情况下,比如打仗的时候,了解对手正是为了打击对手。

判断一个人是否具备“换位思考”的能力有一个好方法,那就是看他怎样向没有技术背景的人解释技术问题。

历史的常态似乎就是,任何一个年代的人们,都会对一些荒谬的东西深信不疑。他们的信念还很坚定,只要有人稍微表示一点怀疑,就会惹来大麻烦。

如果别人告诉你应该相信什么,你就真的相信了,那么你就会和别人一样犯下同样的错误。

触怒他人的言论是那些可能会有人相信的言论;最令人暴跳如雷的言论,就是被认为说出了真相的言论。

找出“不能说的话”的第一种方法:判断言论的真伪;关注“异端邪说”,是找出“不能说的话”的第二种方法。

我们可以去找那些过去被认为理所当然,如今却被认为不可思议的事情,这是用来找出我们自己正在犯下的错误的第三种方法。

第四种寻找“不能说的话”的方法:寻找那些一本正经的卫道者,看看他们到底在捍卫着什么。

第五种方法,可以找出“不能说的话”,那就是去观察禁忌是如何产生的。某种道德观念到底是怎么出现的,又是怎么被其他人接受的?

最先从你头脑中跳出来的想法,往往就是最困扰你、很可能为真的想法——你已经注意到它们,但还没有认真思考过。

很多看似叛逆的“异端邪说”,早就“潜伏”在我们的思维深处。如果我们暂时关闭自我审查意识,它们就会第一个浮现出来。

方法:将当代观念与不同时期的古代观念diff^一下。

diff是计算机术语,最早是一个程序,用来比较同一个软件不同版本源码之间的差异。它会告诉你,哪些是新增的代码,哪些是被删的代码。

如果某个观点在大部分时空都是不受禁止的,只有我们这个社会才把它当作禁忌,那么很可能是我们出错了。

如果一个团体太弱小,就会无力推行禁忌。

大多数的斗争,不管它们实际上争的是什么,都会以思想斗争的形式表现出来。

带动流行的两种力量之中,恐惧心比抱负心有力得多。

如果你要寻找“不能说的话”,可以 - 观察流行的产生方式,试着预测它会禁止哪些话。 - 哪一个团体势力强大,却又精神高度紧张?这种团体喜欢压制什么样的思想观点? - 近来有没有什么社会斗争,失败的一方是哪一方,受到他们牵连的是什么样的思想观点? - 如果一个先锋人物想要挣脱当前的流行(比如上一代人的观点)脱颖而出,他会支持什么样的思想观点? - 随大流的人对什么样的思想观点抱有恐惧心?

优秀作品往往来自于其他人忽视的想法,而最被忽视的想法就是那些被禁止的思想观点。

做一个异端是有回报的,不仅是在科学领域,在任何有竞争的地方,只要你能看到别人看不到或不敢看的东西,你就有很大的优势。

训练自己去想那些不能想的事情,你获得的好处会超过所得到的想法本身。

自由思考比畅所欲言更重要。

你的思想是一个地下组织,绝不要把那里发生的事情一股脑说给外人听。

守口如瓶,笑脸相迎,也就是说,你要对每一个人微笑,但是不要说出自己的真实想法。这样不仅可以获得新观点,还可以用来选择朋友。能够一起谈论“异端邪说”并且不会因此气急败坏的人,就是你最应该认识的朋友。

你的策略,简单说,就是不赞同这个时代的任何一种歇斯底里,但是又不明确告诉别人到底不赞同哪一种歇斯底里。

人们喜欢讨论的许多问题实际上都是很复杂的,马上说出你的想法对你并没有什么好处。更好的回答是“我还没想好”。

逐步把辩论提升到一个抽象的层次——你不要直接攻击某个标签,而要攻击它的“元标签”(meta-label)。所谓“元标签”,就是对某个标签的抽象描述。如果人们开始讨论元标签,那么原来的标签反而不会受到注意了。

反击的方法就是使用隐喻(metaphor)——最好的一种可能就是幽默。狂热分子都有一个共同点:缺乏幽默感。

人们脑子里有一根界线,早就认准了什么是对的,什么是错的。换言之,在他们看来,所有观点都是可以讨论的,除了那些错的观点。

所谓“流行”(传统观念也是一种流行),本质上就是自己看不见自己的样子。

只有保持一定的距离才能观察到人们观念的变化,发现流行(也就是人们自以为正确的事情)到底是什么。

时间就是一种产生距离的简单方法。实际上,新的流行让旧的流行更容易被观察到,因为对比之下,旧的流行会显得很荒唐。

没有了时间所产生的距离,你不得不自已创造距离。你不要让自己成为人群的一分子,而要尽可能地远离人群,观察正在发生的事情,特别注意那些被压制的思想观点。

只要不是错的观点,就不应该被压制讨论。所以每当你看到有些话被攻击为出自XX分子或XX主义,这就是一个明确的信号,表明背后有问题。

你不仅要远距离观察人群,更要远距离观察你自己。

如果自己就是潮水的一部分,怎么能看见潮流的方向呢?你只能永远保持质疑。问自己,什么话是我不能说的?为什么?

思想自由(intellectual freedom),指的是自由思考以及表达这种思考的权利。

很自负的人必须培养出敏锐的感觉,及时发现周围情势的变化,知道怎样才能脱身。