# 【读书记43】黑客与画家 by Paul Graham

> 我真正想要的是，能够设计奇妙的火箭、写出漂亮的文章、理解编程原理。一句话，我想要做伟大的事情。

我也想要做伟大的事情。

> 我一直不喜欢“计算机科学”（computer
> science）这个词。主要原因是根本不存在这种东西。计算机科学就像一个大杂烩，由于某些历史意外，很多不相干的领域被强行拼装在一起。

计算机科学不是计算机科学

> 但是对于黑客，"计算机科学"这个标签是一个麻烦。如果黑客的工作被称为科学，这会让他们感到自己应该做得像搞科学一样。所以，大学和实验室里的黑客，就不去做那些真正想做的事情（设计优美的软件），而是觉得自己应该写一些研究性的论文。

黑客是什么？他们是网络中最酷的人

> 创造优美事物的方式往往不是从头做起，而是在现有成果的基础上做一些小小的调整，或者将已有的观点用比较新的方式组合起来。这种类型的工作很难用研究性的论文表达。

所以，真正的黑客容忍不了写研究型论文。

> 黑客真正想做的是设计优美的软件，考核这种工作是非常困难的。你本人需要有良好的设计感，才能去考核别人的设计是否良好。但是，你觉得你有“良好的设计感”，与你实际是否具有，不存在相关关系，甚至可能存在负相关。
>
> 唯一有效的外部考核就是时间。经过岁月的洗礼，优美的东西生存发展的机会更大，丑陋的东西往往会被淘汰。不幸的是，这种考核需要的时间可能比一个人的生命还要长。

经过岁月的洗礼，优美的软件脱颖而出。

> 举例来说，我在大学受到的教育是，在上机编程之前，应该先在纸上把程序搞清楚。可我自己一直不是这样编程的，我喜欢直接坐在计算机前编程，而不是在纸上编程。更糟的是，我不是耐心地一步步写出整个程序，确保大体上是正确的，而是一股脑不管对错，先把代码堆上去，再慢慢修改。书上说，调试（debugging）是最后的步骤，用来纠正打字的错误和疏忽。可是我的工作方法看上去却像编程就是在调试。
>
> 你把整个程序想清楚的时间点，应该是在编写代码的同时，而不是在编写代码之前，这与作家、画家和建筑师的做法完全一样。

学习编程的真正方法就是直接编程，不要在纸上写好，不要想好思路。直接敲代码就可以。

> 编程语言首要的特性应该是允许动态扩展（malleable）。

静态类型是会使黑客觉得自己受到约束

> 黑客如何才能做自己喜欢的事情？
>
> 1.  找一份养家糊口的“白天工作”（day job）
> 2.  业余时间做自己的项目

看来给公司做技术可能并不是特别快乐的事情。

> 黑客可以通过观看优秀的程序学会编程，不是看它们的执行结果，而是看它们的源代码。开源运动最鲜为人知的优点之一，就是使得学习编程变得更容易了。

直接阅读源码是最好的学习开源项目的方式。

> 一幅画是逐步完成的。通常一开始是一张草图，然后再逐步填入细节。但是，它又不单纯是一个填入细节的过程。有时，原先的构想看来是错的，你就必须动手修改。无数古代油画放在
> X
> 光下检视，就能看出修改痕迹，四肢的位置被移动过，或者脸部的表情经过了调整。
>
> 绘画的这个创作过程就值得学习。我认为黑客也应该这样工作。你不能盼望先有一个完美的规格设计，然后再动手编程，这样想是不现实的。如果你预先承认规格设计是不完美的，在编程的时候，就可以根据需要当场修改规格，最终会有一个更好的结果。

先有一个大概，然后再补充细节。

> 眼下想必每个人都知道，过早优化（premature
> optimization）是一件危险的事情。我认为，我们应该对“过早设计”（premature
> design）也抱有同样的担忧，不要太早决定一个程序应该怎么做。

不要过早优化、过早设计。

> 优秀的软件也要求对美的狂热追求。如果你查看优秀软件的内部，就会发现那些预料中没有人会看见的部分也是优美的。

突然想到《史蒂夫·乔布斯传》里描写的乔布斯，他对于即将发布的 Mac
电脑的内部布线也有自己的要求，尽管别人都认为那是用户看不到的地方。

阅读更多 http://paulgraham.com/articles.html

&lt;span style="color:var(--dushuji-count-color)"&gt;2025年读完的第43本，总阅读量第43本</span>
