读《黑客与画家》

读书 May 02, 2020

「黑客精神」

黑客行为必须包含三个特点:好玩、高智商、探索精神。只有其行为同时满足这三个标准,才能被称为「黑客」。

对于黑客来说,关着的门就是一种挑衅,而锁着的门则是一种侮辱。……黑客相信,只要有助于改进现状、探索未知,人们就应该被允许自由地使用各种工具和信息。当一个黑客需要一样东西来帮助自己创造、探索或者改正某种设备时,他不会自找麻烦,不会接受那些财产专有权的荒谬概念。

「工作」

人类喜欢工作,在世界上大多数地方,你的工作就是你的身份证明。但是,我们那时做的所有事情根本就是无意义的,至少那时看来是这样。   最好的情况下,那些事情也不过是遥远的将来我们可能从事的实际工作的练习。它所面向的目标是如此遥远,以至于当时我们都不知道自己练习这些到底是为了干什么。更常见的情况是,那些事情不过是一系列随意设置的绳圈,你被要求一个个跳过去。你在学习中遇到的文字都是专为考试而设计的,目的就是为了出题,而不是为了讲清楚问题。(南北战争的三个主要原因是……等到考试的时候,就会有一道题:请列出南北战争的三个主要原因。) 而且,**没有办法回避那些事情。**成年人已经达成共识,认定通往大学的途径就是这样的。逃离这种空虚生活的唯一方法,就是向它屈服。

与此同时,社会发生了什么变化?我们被迫面对一个更严峻的问题。它与当前的其他许多难题有着共同的起因,那就是**「专业化」(specialization)**。当工作的专业程度越来越高时,我们就必须接受更长时间的训练。工业化时代来临之前,儿童最晚大约在 14 岁就要参加工作,如果是在农庄(那个时代大多数人生活在农村),参加工作的时间就更早。如今,只要一个青少年读大学,他就要等到 21 岁或 22 岁才开始全职工作。如果再读更髙的学位,比如医学博士或哲学博士,可能要拖到 30 岁才能完成学业。

黑客如何才能做自己喜欢的事情?我认为这个问题的解决方法是一个几乎所有创作者都知道的方法:找一份养家糊口的「白天工作」(day job). 这个词是从音乐家身上来的,他们晚上表演音乐,所以白天可以找一份其他工作。更一般地说,「白天工作」的意思是,你有一份为了赚钱的工作,还有一份为了爱好的工作。

专业化是现代社会的必需,但过度专业化可能会剥夺个人探索世界的能力。在科技发展迅猛的时代,在一种知识里钻研越深,当新的技术栈出现的时候,将更不易迁移。我想,应该保持「适度专业化」,留下来的时间和精力学一些自己喜好的知识,这样既满足了社会对专业能力的需求,又保持了持续发展的潜力,对于个人而言,是一个较好的平衡。

「创造方法论」

创造优美事物的方式往往不是从头做起,而是在现有成果的基础上做一些小小的调整,或者将已有的观点用比较新的方式组合起来。

你把整个程序想清楚的时间点,应该是在编写代码的同时,而不是在编写代码之前。

我喜欢直接坐在计算机前编程,而不是在纸上编程。更糟的是,我不是耐心地一步步写出整个程序,确保大体上是正确的,而是一股脑不管对错,先把代码堆上去,再慢慢修改。

编程不是在纸上写,一落笔便成文,而应该随时可修改的。如果说项目的成品是一栋大厦,在构建的时候一定不是每建一层就装修一层。在开发项目的时候,细节之处的灵感可以先记下来,但要避免「过早优化」,就像你刚建到三楼,便匆匆忙忙给二楼的窗户安玻璃,后来发现大厦的主结构不符合要求。

我认为,这也是多人共同开发一个软件的正确模式。需要合作,但是不要「合」得过头。如果一个代码块由三四个人共同开发,就没有人真正「拥有」这块代码。最终,它就会变得像一个公用杂物间,没人管理,又脏又乱,到处堆满了冗余代码。正确的合作方法是将项目分割成严格定义的模块,每一个模块由一个人明确负责。模块与模块之间的接口经过精心设计,如果可能的话,最好把文档说明写得像编程语言规范那样清晰。

对于团队项目,分工时应该按模块切分任务,让每个人对自己负责的部分有掌管的权利。

程序写出来是给人看的,附带能在机器上运行。

只有在那些不太成熟、容易出现问题的地方,你才应该加上注释,提醒读者注意那里,就好像公路上只有在急转弯处才会出现警示标志一样。

此处联想「Python之禅」:

Simple is better than complex.

又要提到「奥卡姆剃刀」原则了:

如无必要,勿增实体。 ( Entities should not be multiplied unnecessarily. )

作者在文中是这样阐述的:

当你被迫把东西做得很简单时,你就被迫直接面对真正的问题。当你不能用表面的装饰交差时,你就不得不做好真正的本质部分。

关于如何去构建好的设计,文中提出了这几个观点:简洁、符合历史精华的审美、模仿大自然

好设计是简单的设计。从数学领域到绘画领域,你都可以听到这种说法。在数学中,它表示简短的证明往往是更好的证明。特别是对于数学公理来说,少即是多。在编程中,这种说法也基本适用。对于建筑师和设计者,它意味着美依赖于一些精心选择的结构性元素,而不依赖于表面装饰品的堆砌。(装饰品本身并不是坏事,只有当它被用来掩盖结构的苍白时,才变成了一件坏事。)绘画也是类似的,认真观察的、非常有代表性的静物作品往往要比表面极尽华美、但是实质上只是无意义重复的「巨作」(比如再现非常复杂的花边的绘画作品)更有价值。在写作上,这种说法意味着只说必须要说的话,并且说得简短。

说来奇怪,如果你希望自己的作品对未来的人们有吸引力,方法之一就是**让你的作品对上几代人有吸引力。**我们很难猜想未来是什么样子,但是可以肯定,未来的人们不会在乎今天流行的风潮,这一点与上几代人是相同的。所以,如果你的作品对今天的人们以及 1500 年的人都有吸引力,那么它极有可能也会吸引 2500 年的人。

好设计是模仿大自然的设计。我不是说模仿大自然这种行为本身有多么好,而是说大自然在长期的演化中已经解决了很多设计问题。所以,如果你的设计与大自然很接近,那么它基本上不会很差。

最后一点能很好地解释「人为什么不会进化出轮子」这个问题。

在历史的任何时刻都有一些热点项目,一些团体在这些项目上做出伟大的成绩。如果你远离这些中心,几乎不可能单靠自己就取得伟大成果。某种程度上,你个人最多可以对趋势产生一定的影响,但是你不可能决定趋势,实际上是趋势决定了你。

个人对历史的影响大多是微乎极微的。如果时代没有特定的趋势,只能逆流而上。摸清时代的发展趋势,是创造出更大的成就的必要条件。

帕金森定律(Parkinson's Law)的一种原始表达形式是「工作总是到最后一刻才会完成」,后来引申到计算机领域就变成了「数据总是会填满所有空间」,更一般性的总结则是「对一种资源的需求总是会消耗光这种资源的所有供应」。

做出优秀成果的人,在做的过程中常常觉得自己做得不够好。其他人看到他们的成果觉得棒极了,而创造者本人看到的都是自己作品的缺陷。这种视角的差异并非偶然,因为只有对现状不满,才会造就杰出的成果。

「自由思想」

塞缪尔·约翰逊说过,人们对一个作家的评价,需要 100 年才能达成一致。你必须先等他的那些有影响力的朋友都死了,然后再等他的追随者都死了,才能对他有一个公正的评价。

但真正令人惊恐的是,流行一时的不仅有衣服,还有道德观念。明明是专横武断、毫无依据的错误观点,但是大多数人却深信不疑,受到影响而不自知。这是非常危险的。流行的衣服,其实是很难看的衣服;流行的道德观念,其实不是善而是恶。但是,如果别人都穿流行的衣服,而你不穿,你就会遭到嘲讽;如果别人都遵守流行的道德观念,而你不遵守,结果则要严重得多,你会被解雇、流放、监禁,甚至被杀。

要是能坐上时间机器回到过去,不管哪一个年代,有一件事都是不会改变的,那就是「祸从口出」。你一定要小心自己说的话。自以为无害的言论会给你惹来大麻烦。今天,说地球围绕太阳运转真是再平常不过了,如果换在17世纪的欧洲,这么说就大难临头了。伽利略说了这样的话,结果遭到了宗教法庭的审判。

有时候,别人会对你说:「要根据社会需要,改造自己的思想(well-adjusted)。」这种说法隐含的意思似乎是,如果你不认同社会,那么肯定是你自己的问题。你同意这种说法吗?事实上,它不仅不对,而且会让历史倒退。如果你真的相信了它,凡是不认同社会之处,你连想都不敢想,马上就放弃自己的观点,那才会真正出问题。

一旦发现了「不能说的话」,下一步怎么办?我的建议就是别说,至少也要挑选合适的场合再说,只打那些值得打的仗。与笨蛋辩论,你也会变成笨蛋。 这时你要明白,自由思考比畅所欲言更重要。如果你感到一定要跟那些人辩个明自,绝不咽下这口气,一定要把话说清楚,结果很可能是从此你再也无法自由理性地思考了。我认为这样傲不可取,更好的方法是在思想和言论之间划一条明确的界线。在心里无所不想,但是不一定要说出来。我就鼓励自己在心里默默思考那些最无法无天的想法。你的思想是一个地下组织,绝不要把那里发生的事情一股脑说给外人听。

1638年,英国诗人弥尔顿(John Milton)准备第一次访问意大利。曾经担任英国驻威尼斯大使的沃顿爵士(Hemy Wootton)告诉弥尔顿要记住一句座右铭「i pensieri stretti & il viso sciolto」。字面意思是「守口如瓶,笑脸相迎」,也就是说,你要对每一个人微笑,但是不要说出自己的真实想法。这所有反击方法之中,最好的一种可能就是幽默。狂热分子都有一个共同点:缺乏幽默感。他们无法平静地对待笑话。在幽默王国中,他们闷闷不乐,就像满身笨重盔甲的骑士走进了溜冰场,无所适从。一个现实的例子就是,维多利亚女王时代的英国人讲究宫廷礼仪,迂腐守旧,人们把这当作笑话看待,结果它好像就真的被笑话击垮了。它在当代的化身「政治正确」也将得到同样的命运。「我很高兴自己写了《萨勒姆的女巫》,」阿瑟·米勒写道,「但是回想起来,我常常希望自己有那种气质,写一出反映当时情况的荒诞喜剧。」

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

幽默感是强壮的一种表现,始终拥有幽默感就代表你对厄运一笑了之,而丧失幽默感则表示你被厄运深深伤到。所以,强壮的标志(或者至少是特点)就是轻松面对自己的人生。

作者与王小波想到一块儿去了。对于这些内容,不做任何评价,意会即可。

「市场」

真正竞争软件设计的战场是新兴领域的市场,这里还没有人建立过防御工事。只要你能做出大胆的设计,由一个人或一批人同时负责设计和实现产品,你就能在这里战胜大公司。微软公司自己一开始就是这样走向成功的,苹果公司和惠普公司也是如此。我觉得几乎所有的创业公司都是这样取得成功的。

没有盗版是一种「优势」,但也是一个问题。一定数量的盗版对软件公司是有好处的。不管你的软件定价多少,有些用户永远都不会购买。如果这样的用户使用盗版,你并没有任何损失。事实上,你反而赚到了,因为你的软件现在多了一个用户,市场影响力就更大了一些,而这个用户可能毕业以后就会出钱购买你的软件。

麦当劳是快餐连锁集团,它的发展依靠的就是设计出了一个快餐服务体系,可以复制到全世界每一个角落。每一家麦当劳连锁店都必须严格遵守操作规定,这使得它就像软件一样运作。所以,麦当劳其实也符合「一次开发,普遍适用」的模式。

这不仅是创业公司运作的好方法,更是创业公司的本质。风险投资商(VC)知道这个道理,为它起了一个名字——进入壁垒(bairiers to entry)。如果你有一个新点子去找VC,问他是否投资,他首先就会问你几个问题,其中之一就是其他人复制你的模式是否很困难。也就是说,你为竞争对手设置的壁垒有多高^。你最好做出令人信服的解释,阐明你的技术难以复制的原因。否则一旦大公司看到了,它们就会做出自己的版本,再加上它们的品牌、资本、经销能力,一夜之间就把你的市场全部抢走。那时你就像来到开阔地带的游击队,会被正规军一举歼灭。

「工具」

大多数时候,你不需要一台全功能的电脑(即本身可以运行软件的电脑)。你所需要的设备只要有键盘、屏幕、浏览器就够了,可能还有无线网卡。

我从很久以前,也这样想过:对于代码、文字工作者,有些时候选择「轻工作」。对于我而言,便携就要做到极致,但追求极致便携意味着要牺牲性能。作者在写这本书时(2001 年)就提出了这样的概念(应该算比较超前)。我也想象着能有一天,我的全部数据都储存在云端,计算和处理也通通丢给云端服务器,剩下用户终端只保留屏幕、网卡和交互设备。并且,一云服务器对应多终端这种方式,不仅可以节省成本,也可以做到无缝切换,适应更多场景。例如,在家可以用大屏幕处理多线程工作,在外则可以用平板处理轻任务。

为什么到现在还实现不了呢?主要问题在于连接稳定性和硬件厂商的利益。

期待 5G 的低延迟特性能从技术上提供可行性,也能改变大家的观念。

结语

我一般会把书摘放至专门的页面。但这本书单独拉出来评点,因为它有大量技术观点。

参考与致谢

知识共享许可协议
本站文章除特别声明外,均采用 知识共享署名 - 非商业性使用 - 相同方式共享 4.0 国际许可协议 进行许可。
您的支持将鼓励我们继续创作!

Power Lin

一个不会讲故事的硬件工程师,不是一个合格的产品经理。

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.