{Diary} "Hackers and Painters" Note 3

黑客与画家

7 关注贫富分化

P112-113

你到海外旅行时,不用看当地人的银行账户就会知道你来到的是富国还是穷国。你只要看他们的财富就行了:建筑、街道、服装、健康。

每个人的技能不同,导致收入不同,这才是贫富分化的主要原因,正如逻辑学的“奥卡姆剃刀”原则所说,简单的解释就是最好的解释。

但为什么基尼系数越大,这个社会就越危险呢,不是应该每个人都安现状吗?

如果可以做选择,到底是生活在一个整体上非常富裕但是我个人相对贫穷的社会,还是生活在一个我个人相对非常富裕但是整体非常贫穷的社会?(Vayn:想起巴西的贫民窟和绑架)我会选择第一个选项。

总的来说,你要避免的是绝对贫穷,而不是相对贫穷。

从人类历史上来看财富当然是不断增加的,但对你所生活的每个时期而言财富的数量却是有限的,你占有的越多别人自然就越少。之前作者所说的财富更像是在原始财富上产生附加值,问题在于原始财富累积是一个缓慢过程。

我觉得本章作者更像是为自己所处的阶级辩护而不是提出有建设性的建议。他一边说富人(当然是有合法收入来源)赚大钱是应该的,这与人的挣钱技能相关,所以贫富分化是应该的。但实际又不想生活在一个真正贫富分化的社会,因为这样的社会非常危险、动荡不安。

当然,作者本身提出的新观点是很有意思的。世界这么大,要是每个人的想法都一样才是最可怕的。

9 设计者的品味

P134-142

把品味说成个人的偏好可以有效杜绝争论,防止人们争执哪一种品味更好。但是问题是,这种说法是不正确的。只要你自己开始动手设计东西,就能明白这一点。

优秀设计的原则是许多学科的共同原则,一再反复地出现。

只要没有错误,每一个数学证明都是永不过时的。所以,数学家哈代才说:“丑陋的数学在世界上无法生存。”……如果解决方法是丑陋的,那就肯定还有更好的解决方法,只是还没有发现而已。

以永不过时作为目标是一种帮助自己找到最佳答案的方法:如果你不愿别人的答案取代你的答案,你就只好自己做出最佳答案。

未来的人不会在乎今天流行的风潮,这一点上几代人是相同的。所以,如果你的作品对今天的人们以及 1500 年的人都有吸引力,那么它极有可能也会吸引 2500 年的人。

英国女作家简.奥斯汀的作品几乎不带有任何描述。她不告诉读者每件东西看上去是什么样子,听风是雨把故事讲得非常行动,让读者自己把一切都想象出来。

在软件业中,这条原则意味着,你应该为用户提供一些基本模块,使得他们可以随心所欲自由组合,就像玩乐高玩具那样。

并非所有的艰苦都是值得的。世界上有有益的痛苦,也有无益的痛苦。你需要的是咬牙向前冲刺的痛苦,而不是脚被钉子扎破的痛苦。

人们常常觉得野生动物非常优美,原因就是它们的生活非常艰苦,在外形上不可能有多余的部分了。

科学和工程学的一些最重大的发现在形式上往往很简单,会使得你觉得自己想到过。可是,如果它真的那么简单,为什么发现人不是你呢?

人们有时说自己有了“状态”,我的理解是,他们这时可以控制自己的脊髓。脊髓是更本能的反应,面对难题时,它能释放你的直觉。

很少有人一次就把事情做对。专家的做法是先完成一个早期原型,然后提出修改计划,最后把早期原型扔掉。

扔掉早期原型是需要信心的,你必须有本事看出什么地方还可以改进。

犯错误是很正常的事情。你不要把犯错误看成灾难,要勇于承认,勇于改正。

开源软件因为公开承认自己会有 bug,反而使得代码的 bug 比较少。

P146-147

推动人才成批涌现的最大因素就是,让有天赋的人聚在一起,共同解决某个难题。互相激励比天赋更重要,达.芬奇之所以成为达.芬奇,主要原因不仅仅是他的天赋,更重要的是他生活在当时的佛罗伦萨,而不是米兰。

大多数做出优美成果的人好像只是为了修正他们眼中丑陋的东西。伟大成果的出现常常来源于某人看到一样东西后,心想我能做得比这更好。

单单无法容忍丑陋的东西还不够,只有对这个领域非常熟悉,你才可能发现哪些地方可以动手改进。

优秀作品的秘诀就是:非常严格的品味,再加上实现这种品味的能力。

10 编程语言解析

P148-149

编程语言的一个重要特点:一个操作所需的代码越多,就越难避免 bug,也越难发现它们。

P150-151

一些黑客只喜欢自己用的语言,反感其他所有的语言。另一些黑客则说所有的语言都一样。事实介于这两个极端之间。语言之间确实有差别,但是很难确定地说哪一种语言是最好的。

P152-153

有一些“头重脚轻”的语言,内核设计的并非很好,却有着无数强大的函数库,可以用来解决特定的问题,这些库可能比核心的语言还要重要。所以,这些奇特组合的语言还是蛮有用的,一时间变得相当流行。

车顶上绑着飞机发动机的小车也许真能开,只要你不尝试拐弯,可能不会出问题。

很多历史学家相信战争是文艺复兴的一个副产品。当时,欧洲活力旺盛可能就是因为它分成许多互相竞争的小国。它们互相毗邻,所以新思想能够从一个国家传播到另一个国家,但是它们又互相独立,使得单个的统治者无法遏制创新的发展。相比之下,中国古代的封建皇朝禁止民间建造大型的远洋船只,阻止了经济的正常发展。

所以,程序员活在这个文艺复兴时代可能是一件好事。如果我们所有人都使用同一种编程语言,反而有可能是坏事。

11 一百年后的编程语言

P158-159

我的判断是,那些内核最小、最干净的编程语言才会存在于进化的主干上。一种语言的内核设计得越小、越干净,它的生命力就越顽强。

P160-161

设计编程语言的时候,我们应该有意识地问自己,什么时候可以放弃一些性能,换来一点点便利性的提高。

效率低下的软件并不等于很烂的软件。一种让程序员做无用功的语言才真正称得上很烂。浪费程序员的时间而不是机器的时间才是真正的无效率。

P164-165

真正的问题在于,并行计算到底能达到哪个抽象层次?一百年后它就会影响到开发应用软件的程序员吗?或者,它还只是编译器作者需要考虑的事情,在应用软件的代码中根本就无处寻觅?

我预料,对于普通程序员来说,一切更像是对进程进行分叉,然后让多个进程在后台并行运行。

这是编程进行到很后期都要做的事情,属于对程序的优化,类似于你想开发一种特定的数据结构来取代现有的数据结构。程序的第一个版本通常会忽略并行计算提供的各种好处,就好像编程开始会忽略某种特定的数据结构给你带来的好处一样。

P166-167

设计新语言的方法之一就是直接写下你想写的程序,不管编译器是否存在,也不管你有没有支持它的硬件。这就是假设存在无限的资源供你支配。

新语言必须靠你自己去发现,不能依靠那些让你自然而然就沉下去的思维定势。

P168

学开车的时候,一个需要记住的原则就是要把车开直,不是通过将车身对齐画在地上的分隔线,而是通过瞄准远处的某个点。……我认为,设计编程语言时,我们也应该这样做。

EOF