《黑客与画家》笔记

短评

★★★★★ 这本书的内核思想和《禅与摩托车的维修艺术》一样,都是需要我们在做事情的时候倾注自己的专注力,发现其中蕴含的美的元素,作为一个创造者而不是执行者去完成工作。创造者和执行者之间的差距也就是“黑客与画家”和“码农与美工”的差距。在这个意义上,作者定义的黑客就是那些最优秀的程序员了。

核心观点

以下是一些我觉得这本书中比较有用或者是有趣的核心观点。

  • 和一般人的认知不同,这里的黑客并不是指那些专门入侵别人计算机,破坏计算机系统的人。书中有一个比较简短的定义:“出于兴趣而解决某个难题,不管它有没有用,这就是黑客。”。黑客的行为必须包含三个特点:好玩、高智商、探索精神。《黑客:计算机革命的英雄》这本书中总结了六条“黑客伦理”是目前对黑客价值观最好的论述。

(1)使用计算机以及所有有助于了解这个世界本质的事物都不应受到任何限制。任何事情都应该亲手尝试。( Access to computers — and anything that might teach you something about the way the world works — should be unlimited and total. Always yield to the Hands-On Imperative! )(2)信息应该全部免费。( All information should be free. )(3)不信任权威,提倡去中心化。( Mistrust Authority — Promote Decentralization. )(4)判断一名黑客的水平应该看他的技术能力,而不是看他的学历、年龄或地位等其他标准。( Hackers should be judged by their hacking, not bogus criteria such as degrees, age, race, or position. )(5)你可以用计算机创造美和艺术。( You can create art and beauty on a computer. )(6)计算机使生活更美好。( Computers can change your life for the better. )

  • 如果有两个选择,尽量选择较难的那个。坐在家里看电视还是出去跑步?出去跑步吧。人们往往出于懒惰的缘故,选择较易的那个选项。在意识深处,你其实知道不懒惰的做法会带来更好的结果,这个方法只是迫使你接受这一点。
  • 优秀作品的秘诀就是:非常严格的品味,再加上实现这种品味的能力。
  • 编程语言是技术和宗教的混合物。

笔记

为什么书呆子不受欢迎

  • 校园生活的真正问题是空虚。除非成年人意识到这一点,否则无法解决这个问题。

黑客与画家

  • 黑客与画家的共同之处,在于他们都是创作者。与作曲家、建筑师、作家一样,黑客和画家都是试图创作出优秀的作品。他们本质上都不是在做研究,虽然在创作过程中,他们可能会发现一些新技术(那样当然更好)。
  • 黑客的最高境界是创造规格。虽然看起来,做到这一点的最好方法就是先做出一个样品把规格实现了。
  • 黑客真正想做的是设计优美的软件,考核这种工作是非常困难的。你本人需要有良好的设计感,才能去考核别人的设计是否良好。但是,你觉得你有「良好的设计感」,与你实际是否具有,不存在相关关系,甚至可能存在负相关。
  • 你把整个程序想清楚的时间点,应该是在编写代码的同时,而不是在编写代码之前,这与作家、画家和建筑师的做法完全一样。
  • 眼下想必每个人都知道,过早优化( premature optimization )是一件危险的事情。我认为,我们应该对「过早设计」( premature design )也抱有同样的担忧,不要太早决定一个程序应该怎么做。
  • 如果黑客只是一个负责实现领导意志的技术工人,职责就是根据规格说明书写出代码,那么他其实与一个挖水沟的工人是一样的,从这头挖到那头,仅此而已。但是,如果黑客是一个创作者,他从事的就不是机械性的工作,他必须具备灵感。
  • 正确的合作方法是将项目分割成严格定义的模块,每一个模块由一个人明确负责。模块与模块之间的接口经过精心设计,如果可能的话,最好把文档说明写得像编程语言规范那样清晰。

不能说得话

  • 历史的常态似乎就是,任何一个年代的人们,都会对一些荒谬的东西深信不疑。他们的信念还很坚定,只要有人稍微表示一点怀疑,就会惹来大麻烦。我们这个时代是否有所不同?只要读过一点历史,你就知道答案几乎确定无疑,就是「没有不同」。即使有那么一丝微小的可能,有史以来第一次,我们这个时代的所有信念都是正确的,那也是出于惊人的巧合,而不是因为我们真找到了正确的方向。
  • 只有保持一定的距离才能观察到人们观念的变化,发现流行(也就是人们自以为正确的事情)到底是什么。
  • 如果你想要清晰地思考,就必须远离人群。但是走得越远,你的处境就会越困难,受到的阻力也会越大,因为你没有迎合社会习俗,而是一步步地与它背道而驰。小时候,每个人都会鼓励你不断成长,变成一个心智成熟、不再耍小孩子脾气的人。但是,很少有人鼓励你继续成长,变成一个怀疑和抵制社会错误潮流的人。
    如果自己就是潮水的一部分,怎么能看见潮流的方向呢?你只能永远保持质疑。问自己,什么话是我不能说的?为什么?

另一条路

  • 对于互联网软件,没人规定只能使用某些语言开发,因为所有的硬件都控制在你手里,你想要用什么语言,就能用什么语言。不同的语言适合不同的任务,你应该根据不同场合,挑选最合适的工具。尤其是在竞争者存在的情况下,「可以这样做」就变成了「必须这样做」,因为如果你不利用语言的优势,那就会听任对手超过你。
  • Viaweb 和其他许多软件公司一样,大部分代码都有明确的负责人,而且只有一个。如果你负责某件事,那就真的是你负责。除了你以外,没有人能批准(他们甚至都不知道)这部分代码的发布。如果你出错了,没有人会提醒你,唯一的代码保护机制就是你的羞耻心,你不想被同事当成傻瓜,这就足矣。
  • 用户总是对的,但是不同的用户要求不一样。低端的用户要求简化操作和清晰易懂,高端的用户要求你增加新功能。软件最大的好处就是让一切变得简单。但是,做到这一点的方法是正确设置默认值,而不是限制用户的选择。如果竞争对手的产品很糟糕,你也不要自鸣得意。比较软件的标准应该是看对手的软件将来会有什么功能,而不是现在有什么功能。无论何时,你都要使用自己的软件。

如何创造财富

  • 什么是技术?技术就是某种手段 ,就是我们做事的方式。如果你发现了一种做事的新方式,它的经济价值就取决于有多少人使用这种新方式。技术就是钓鱼的鱼竿,而不是那条鱼。

关注贫富分化

  • 技术在加大收入差距的同时,缩小了大部分的其他差距。
  • 如果得不到报酬,人们是否愿意创造财富?唯一的可能就是,工作必须能提供乐趣。会有人愿意免费写一个操作系统,但是他们不愿意免费为你安装、提供电话支持、进行客户培训等。即使是最先进的高科技公司,也有至少 90%的工作没有乐趣、令人生厌。
    在一个剥夺个人财产的社会,财富创造活动中所有那些没有乐趣的事情都会急剧地放慢,乃至停顿。

设计者的品味

  • 把品味说成个人的偏好可以有效地杜绝争论,防止人们争执哪一种品味更好。但是问题是,这种说法是不正确的。只要你自己开始动手设计东西,就能明白这一点。
  • 以永不过时作为目标是一种帮助自己找到最佳答案的方法:如果你不愿别人的答案取代你的答案,你就只好自己做出最佳答案。
  • 写实的目的不是为了给生活留下一模一样的记录,而是为你的思想提供一个咀嚼点:你的眼睛看着某样东西,你的手就代表你的思想,画出一些比较有意思的内容。
  • 在历史的任何时刻都有一些热点项目,一些团体在这些项目上做出伟大的成绩。如果你远离这些中心,几乎不可能单靠自己就取得伟大成果。某种程度上,你个人最多可以对趋势产生一定的影响,但是你不可能决定趋势,实际上是趋势决定了你。
  • 单单是无法容忍丑陋的东西还不够,只有对这个领域非常熟悉,你才可能发现哪些地方可以动手改进。你必须锻炼自己。只有在成为某个领域的专家之后,你才会听到心里有一个细微的声音说:「这样解决太糟糕了!一定有更好的选择。」不要忽视这种声音,要培育它们。优秀作品的秘诀就是:非常严格的品味,再加上实现这种品味的能力。

拒绝平庸

  • 由于 Blub 困境的存在,你无法信任其他人的意见:他们都满足于自己碰巧用熟了的那种语言,他们的编程思想都被那种语言主宰了。

书呆子的复仇

  • 强大的编程语言如何让你写出更短的程序?一个技巧就是(在语言允许的前提下)使用「自下而上」(bottom-up)的编程方法。你不是用基础语言( base language )开发应用程序,而是在基础语言之上先构建一种你自己的语言,然后再用后者开发应用程序。这样写出来的代码会比直接用基础语言开发出来的短得多。实际上,大多数压缩算法也是这样运作的。「自下而上」的编程往往也便于修改,因为许多时候你自己添加的中间层根本不需要变化,你只需要修改前端逻辑就可以了。

梦寐以求的编程语言

  • 黑客欣赏的一个特点就是简洁。黑客都是懒人,他们同数学家和现代主义建筑师一样,痛恨任何冗余的东西或事情。
  • 著名散文家 E.B.怀特说过,「最好的文字来自不停的修改」。所有优秀作家都知道这一点,它对软件开发也适用。设计一样东西,最重要的一点就是要经常「再设计」,编程尤其如此,再多的修改都不过分。
    为了写出优秀软件,你必须同时具备两种互相冲突的信念。一方面,你要像初生牛犊一样,对自己的能力信心万丈;另一方面,你又要像历经沧桑的老人一样,对自己的能力抱着怀疑态度。在你的大脑中,有一个声音说「 千难万险只等闲 」,还有一个声音却说「 早岁哪知世事艰 」。
    这里的难点在于你要意识到,实际上这两种信念并不矛盾。你的乐观主义和怀疑倾向分别针对两个不同的对象。你必须对解决难题的可能性保持乐观,同时对当前解法的合理性保持怀疑。

设计与研究

  • 开发软件的时候,我有一条规则:任何时候,代码都必须能够运行。如果你正在写的代码一个小时之后就可以看到运行结果,这好比让你看到不远处就是唾手可得的奖励,你因此会受到激励和鼓舞。
  • 跟你说实话吧,画家之间甚至流传着一句谚语:「画作永远没有完工的一天,你只是不再画下去而已。」这种情况对于第一线的程序员真是再熟悉不过了。

你可能感兴趣的:(《黑客与画家》笔记)