《黑客与画家》5星+

推荐序 “黑客精神”过时了吗?答案是永远不会
📌 1998年,我认识了保罗。当时他的公司被雅虎并购,因此我们成了同事,他就坐在我附近。2005年,保罗创立Y Combinator(简称“YC”)的时候,为了鼓励创业者,我代表雅虎表示支持,并去哈佛大学做了讲座,同时结识了YC的首届创业者——亚历克西斯·奥哈尼安(Alexis Ohanian,论坛网站Reddit的联合创始人)和山姆·阿尔特曼[Sam Altman,Loopt联合创始人,后来担任了YC的掌门人,并与埃隆·马斯克(Elon Musk)联合创立了OpenAI,这也是YC全球研究院孵化的第一个研究驱动型企业]。我跟YC从此结下了不解之缘。
- ⏱ 2025-08-04 13:11:05
📌 这本书主要是保罗写给程序员的,但值得所有人一读。它足够通俗易懂,深入浅出,行文也非常生动活泼。保罗是一个身怀大智慧的人,他一直想成为一位散文作家,所以书中运用的语言朴实简单。
- ⏱ 2025-08-04 13:11:53
📌 保罗认为,从数学和第一性原理来讲,Lisp是最接近长期真理的,将来创造者的进化会依靠编程这个工具,而最优的进化路径能让我们展望更遥远的未来。
- ⏱ 2025-08-04 13:13:46
保罗·格雷厄姆其人其事
📌 青少年时代,格雷厄姆就开始编程。但是,他还喜欢许多与计算机无关的东西,这在编程高手之中是很少见的。中学时,他喜欢写小说;进入康奈尔大学以后,他主修哲学。后来发现哲学很难理解,于是研究生阶段他就去了哈佛大学计算机系,主攻人工智能。
- ⏱ 2025-08-04 13:15:29
📌 1998年,收购终于成功。雅虎以4 900万美元的价格兼并了Viaweb,将其改名为Yahoo Store,这是雅虎最早的收购行动之一。完成收购的那一天,格雷厄姆把莫里斯拉到哈佛广场的美容店里,因为后者曾经在创业初期说过,如果能从Viaweb中赚到100万美元,他就愿意打个耳洞。
- ⏱ 2025-08-04 13:17:47
📌 被收购之后,格雷厄姆就成了雅虎的员工,继续从事编程。他在那里工作了一年半,总是感觉很不自在,不适应雅虎的企业文化,用他自己的话说,就是不习惯大公司的官僚环境,他说:“运营创业公司,每天都像在战斗;而为大公司工作,就像在窒息中挣扎。”于是,他选择了辞职。
- ⏱ 2025-08-04 13:17:58
📌 保罗·格雷厄姆有一套完整的创业哲学,他的创业公式是:
(1)搭建原型;
(2)上线运营(别管bug);
(3)收集反馈;
(4)调整产品;
(5)成长壮大。- ⏱ 2025-08-04 13:18:32
📌 格雷厄姆认为,我们正在进入一个创业时代。未来的社会,创业可能成为一种常态,而替别人打工反而成了少见的事情。一方面,创业是最有效的创造财富的方法,对创始人、投资者和社会都是如此
- ⏱ 2025-08-04 18:49:28
精装版译者序 向着未来而生
- 📌 德国哲学家马丁·海德格尔(Martin Heidegger)说过一句著名的话:人应该“向死而生”(Being-toward-death)。意思是人面对死亡,才会停止那些无谓琐碎的关注和困扰,体会到什么是重要的事情,从而达到真正的存在
- ⏱ 2025-08-04 18:50:08
平装版译者序
- 📌 从这个意思出发,hack还有一个引申义,指对某个程序或设备进行修改,使其完成原来不可用的功能(或者禁止外部使用者接触到的功能)。在这种意义上,hacking可以与盗窃信息、信用卡欺诈或其他计算机犯罪联系在一起,这也是后来“黑客”被当作计算机入侵者的称呼的原因。
- ⏱ 2025-08-04 18:50:31
前言
- 📌 黑客?那不是侵入他人计算机的人吗?在外行人看来,这个词的意思就是这样。但是在计算机世界中,黑客指的是专家级程序员
- ⏱ 2025-08-04 18:51:31
1 为什么书呆子不受欢迎
- 📌 不了。
我后来认识很多人,读书的时候都被称为“书呆子”。从他们身上我发现,“书呆子”与“高智商”有强烈的正相关关系。而这些人在中学里都不怎么受欢迎,好像你越喜欢读书,就越不受别人的欢迎,因此“书呆子”和“受欢迎”之间,有一种更强烈的负相关关系。- ⏱ 2025-08-04 18:52:06
2 黑客与画家
📌 读完计算机系的研究生课程,我就去了艺术学校,学习绘画。许多人很吃惊:一个喜欢计算机的人,居然还喜欢画画!他们似乎觉得,摆弄计算机和画画是两件截然不同的事情——计算机是冰冷的、精确的、井然有序的,而画画是某种原始欲望热烈狂放的表达方式。
- ⏱ 2025-08-04 18:53:39
📌 黑客与画家的共同之处,在于他们都是创作者。与作曲家、建筑师和作家一样,黑客和画家都试图创作出优秀的作品。他们本质上都不是在做研究,虽然在创作过程中,他们可能会发现一些新技术(那样当然更好)。
- ⏱ 2025-08-04 18:53:43
📌 建筑学和工程学之间的界限并不是很分明,但就是存在区别。这表现在“做什么”和“怎么做”:建筑师决定做什么,工程师想出怎么做。
- ⏱ 2025-08-04 18:53:56
📌 创造优美事物的方式往往不是从头做起,而是在现有成果的基础上做一些小小的调整,或者将已有的观点用比较新的方式组合起来。这种类型的工作很难用研究性的论文表达。
- ⏱ 2025-08-04 18:54:25
📌 塞缪尔·约翰逊说过,人们对一个作家的评价,需要100年才能达成一致。你必须先等他的那些有影响力的朋友都死了,然后再等他的追随者都死了,才能对他有一个公正的评价。
- ⏱ 2025-08-04 18:56:01
📌 现在,我意识到自己错了。黑客搞懂“计算理论”(theory of computation)的必要性,与画家搞懂颜料化学成分的必要性差不多大。一般来说,在理论上,你需要知道如何计算“时间复杂度”和“空间复杂度”(time and space complexity);如果你要写一个解析器,可能还需要知道状态机(state machine)的概念;除此以外,并不需要知道特别多的理论。这些可比画家必须记住的颜料成分少很多。
- ⏱ 2025-08-04 18:56:35
📌 更糟的是,我不是耐心地一步步写出整个程序,确保大体上是正确的,而是一股脑地不管对错,先把代码堆上去,再慢慢修改。书上说,调试是最后的步骤,用来纠正打字错误和疏忽。可是我的工作方法看上去却像编程就是在调试。
很长一段时间内我都为此事沮丧,就像小学里老师教我怎么拿铅笔,我却总是学不会的那种感觉。- ⏱ 2025-08-04 18:59:50
📌 你把整个程序想清楚的时间点,应该是在编写代码时,而不是在编写代码之前,这与作家、画家和建筑师的做法完全一样。
- ⏱ 2025-08-04 19:00:19
📌 编程语言是用来帮助思考程序的,而不是用来表达你已经想好的程序。它应该是一支铅笔,而不是一支钢笔。如果大家都像学校教的那样编程,那么静态类型是一个不错的概念。但是,我认识的黑客,没有一个人喜欢用静态类型语言编程。我们需要的是一种可以随意涂抹、擦擦改改的语言,我们不想正襟危坐,把一个盛满各种变量类型的茶杯,小心翼翼放在自己的膝盖上,为了与一丝不苟的编译器大婶交谈,努力地挑选词语,确保变量类型匹配,好让自己显得礼貌又周到。
- ⏱ 2025-08-04 19:02:31
📌 科学界的每一个人,暗地里都相信数学家比自己聪明。我觉得,数学家自己也相信这一点。最后的结果就是科学家往往会把自己的工作尽可能弄得看上去像数学。对于物理学这样的领域,这可能不会有太大不良影响。但是,你越往自然科学的方向发展,它就越成为一个严重的问题。
一页写满了数学公式的纸真是令人印象深刻啊。(小窍门:用希腊字母表示变量名会令人印象更深刻。)因此,你就受到巨大的诱惑,去解决那些能够用数学公式处理的问题,而不是去解决真正重要的问题。- ⏱ 2025-08-04 19:03:16
📌 如果黑客认识到自己与其他创作者——比如作家和画家——是一类人,这种诱惑对他就不起作用。作家和画家没有“对数学家的妒忌”,他们认为自己在从事与数学完全不相关的事情。我认为,黑客也是如此
- ⏱ 2025-08-04 19:04:20
📌 大学和实验室强迫黑客成为科学家,企业强迫黑客成为工程师。
- ⏱ 2025-08-04 19:04:36
📌 发现在他们看来,“黑客”的工作就是用软件实现某个功能,而不是设计软件。在那里,程序员被当作技工,职责就是将产品经理的“构想”(如果这个词是这么用的话)翻译成代码。
这似乎是大公司的普遍情况。大公司这样安排的原因是降低结果的标准差。因为实际上只有很少一部分黑客懂得如何正确设计软件,公司的管理层很难正确识别到底应该把设计软件的任务交给谁,所以,大部分公司不把设计软件的职责交给一个优秀的黑客,而是交给一个委员会,黑客的作用仅仅是实现那个委员会的设计。- ⏱ 2025-08-04 19:05:14
📌 大公司为了避免设计上的灾难,选择了降低设计结果的标准差。但是当你排斥差异的时候,你不仅将失败的可能性排除在外,也将获得高利润的可能性排除在外。这对大公司来说不是问题,因为生产特别优秀的产品不是它们的获胜手段。大公司只要做得不太烂,就能赢。
- ⏱ 2025-08-04 19:05:51
📌 。比如,就算写一个比微软的Word更好的文字处理软件不是难事,但是微软公司有自己的城堡,它的操作系统是垄断的,你根本无法对它构成威胁,它甚至都不会注意到你的存在
- ⏱ 2025-08-04 19:06:09
📌 黑客如何才能做自己喜欢的事情?我认为这个问题的解决方法是一个几乎所有创作者都知道的方法:找一份养家糊口的“白天工作”(day job)。这个词是从音乐家身上来的,他们晚上表演音乐,所以白天可以找一份其他工作。更一般地说,“白天工作”的意思是,你有一份为了赚钱的工作,还有一份为了爱好的工作。
- ⏱ 2025-08-04 19:07:16
📌 我们在面试程序员时,主要关注的事情就是业余时间他们写了什么软件,因为如果你不爱一件事,你不可能把它做得真正优秀,要是你很热爱编程,你就不可避免地会开发你自己的项目。
- ⏱ 2025-08-04 19:08:41
📌 因为黑客更像创作者,而不是科学家,所以要了解黑客,不应该在科学家身上寻找启示,而是应该观察其他类型的创作者。那么,从画家身上,我们还能借鉴到什么对黑客的启示呢
- ⏱ 2025-08-04 19:09:27
📌 有一件事情是可以借鉴的(至少可以确认),那就是应该如何学习编程。画家学习绘画的方法主要是动手去画,黑客学习编程的方法也理应如此。大多数黑客不是通过大学课程学会编程的,而是从实践中学习,有的13岁时就自己动手写程序了。即使上了大学,黑客学习编程依然主要通过自己写程序。
- ⏱ 2025-08-04 19:09:38
📌 画家的作品都会保留下来,你观察这些作品,就能看出他们是怎么一步步通过实践学习绘画的。如果你把一个画家的作品按照时间顺序排列,就会发现每幅画所用的技巧,都是建立在上一幅作品学到的东西之上。某幅作品如果有特别出色之处,你往往能够在更早的作品中发现一个小规模的初期版本。
- ⏱ 2025-08-04 19:14:36
📌 。你不能盼望先有一个完美的规格设计,然后再动手编程,这样想是不现实的。如果你预先承认规格设计是不完美的,在编程的时候,就可以根据需要当场修改规格,最终会有一个更好的结果。(大公司的内部结构,使得它们很难这样做。这是创业公司的又一个优势。)
眼下想必每个人都知道,过早优化是一件危险的事情。我认为,我们应该对“过早设计”也抱有同样的担忧,不要太早决定一个程序应该怎么做。- ⏱ 2025-08-04 19:15:42
📌 但是达·芬奇不这样想。他对作品每一部分的认真程度完全不取决于预料中会不会有人仔细看这个部分。他就像篮球巨星迈克尔·乔丹,每一球都一丝不苟,绝不降低对自己的要求。
- ⏱ 2025-08-05 23:53:02
📌 坚持一丝不苟,就能取得优秀的成果,因为那些看不见的细节累加起来,就变得可见了。当人们从达·芬奇的女性肖像画《吉内薇拉·班琪》前面走过的时候,他们的注意力往往立刻就被它吸引住了,那时他们甚至还没有看到说明的标签牌,没有意识到这是达·芬奇的作品。所有那些看不见的细节合并在一起,就使得这样东西产生了惊人的效果,仿佛上千个细微的声音都以同一个音调在歌唱。
- ⏱ 2025-08-05 23:53:17
📌 黑客就像画家,工作起来是有心理周期的。有时候,你有了一个令人兴奋的新项目,你会愿意为它一天工作16个小时。等过了这一阵,你又会觉得百无聊赖,对所有事情都提不起兴趣。
- ⏱ 2025-08-05 23:56:13
📌 消灭bug的过程就像解一道数学题,已知许许多多的约束条件,你只要根据条件对方程求解就可以了。你的程序应该能产生x结果,却产生了y结果。哪里出错了?你知道自己最后肯定能解决这个问题,所以做起来就很轻松,就好像刷墙一样,接近于休闲了。
- ⏱ 2025-08-05 23:56:37
📌 我认为,这也是多人共同开发一个软件的正确模式。需要合作,但是不要“合”得过头。如果一个代码块由三四个人共同开发,就没有人真正“拥有”这块代码。最终,它就会变得像一个公用杂物间,没人管理,又脏又乱,到处堆满了冗余代码。正确的合作方法是将项目分割成严格定义的模块,每一个模块由一个人明确负责。模块与模块之间的接口经过精心设计,如果可能的话,最好把文档说明写得像编程语言规范那样清晰。
- ⏱ 2025-08-05 23:57:27
📌 普通黑客与优秀黑客的所有区别之中,会不会“换位思考”可能是最重要的单个因素。有些黑客很聪明,但是完全以自我为中心,根本不会设身处地为用户考虑。这样的人很难设计出优秀软件,因为他们不从用户的角度看待问题。[插图]判断一个人是否具备“换位思考”的能力有一个好方法,那就是
- ⏱ 2025-08-05 23:58:01
📌 看他怎样向没有技术背景的人解释技术问题。我们大概都认识这样一些人,他们在其他方面非常聪明,但是把问题解释清楚的能力却低下得惊人。如果聚会上外行人问他们“什么是编程语言”,他们会这样回答:“哦,高级语言就是编译器的输入代码,用来产生目标码。”高级语言?编译器?目标码?……如果对方不知道什么是编程语言,那么他显然也不会知道这些概念。
- ⏱ 2025-08-05 23:58:18
📌 程序必须写得能够供人们阅读,偶尔供计算机执行。
- ⏱ 2025-08-05 23:58:48
3 不能说的话
📌 翻开老照片,看到以前的样子,你会不会感到难为情?我当时真的是穿成这样吗?是的,你没看错,你就是穿成这样。我们在穿衣服的时候,根本不知道自己看上去有多傻,还以为很时尚。所谓“时尚”,本质上就是自己看不见自己的样子。好比我们在地球上,却感觉不到地球在动
- ⏱ 2025-08-06 00:00:08
📌 但真正令人惊恐的是,流行一时的不仅有衣服,还有道德观念。明明是专横武断、毫无依据的错误观点,大多数人却深信不疑,受到影响而不自知。这是非常危险的。流行的衣服,其实是很难看的衣服;流行的道德观念,其实不是善而是恶。但是,如果别人都穿流行的衣服,而你不穿,你就会遭到嘲讽;如果别人都遵守流行的道德观念,而你不遵守,结果则要严重得多,你会被解雇、流放、监禁,甚至被杀。
- ⏱ 2025-08-06 00:00:25
📌 书呆子就是这样惹上麻烦的。他们穿着不流行的衣服,讲着不合适的话。他们觉得自己说出了正确的观点,实际上却惹来了麻烦。习俗的力量不足以束缚他们。
- ⏱ 2025-08-06 00:00:44
📌 我不仅要展示一些当前的“异端邪说”,让每个人都大吃一惊,还要找出适用于所有年代的通用法则,判断哪些话是不能说的。
- ⏱ 2025-08-06 00:01:32
你是一个随大流的人吗
📌 让我先问你一个问题:大庭广众之下,你有没有什么观点不愿说出口?如果回答“没有”,那么你也许应该停下来想一想了。你的每一个观点都能毫不犹豫地说出口,你自己深深赞同这些观点,并且你也确信肯定会获得别人的赞同,这是否太过于巧合了?一种可能是,也许事情并没有这么巧合,你的观点就是从别人那里听来的,别人告诉你什么,你就相信了什么,你把别人灌输的观点当作了自己的观点。
- ⏱ 2025-08-06 00:01:47
📌 如果别人告诉你应该相信什么,你就真的相信了,那么你就会和别人犯下同样的错误。如果你是南北战争前的南方庄园主,你会与北方开战;如果你是20世纪30年代的德国人,你会相信希特勒。有时候,别人会对你说:“要根据社会需要,改造自己的思想。”这种说法隐含的意思似乎是,如果你不认同社会,那么肯定是你自己的问题。你同意这种说法吗?事实上,它不仅不对,而且会让历史倒退。如果你真的相信了它,凡是不认同社会之处,你连想都不敢想,马上就放弃自己的观点,那才会真正出问题。
- ⏱ 2025-08-06 00:03:04
真话
📌 并不是所有不能说出口的话都是我们要找的答案。实际上,只有同时满足两个条件才行:第一个条件是,这些话不能说出口;第二个条件是,它们是正确的,或者看起来很可能正确,值得进一步讨论。如果不满足第二个条件,大部分情况下你不会有麻烦。你说2+2等于5,或者匹兹堡的市民身高3米,都不会有事的。这些明显错误的言论也许会被当成笑话,或者更糟一点,被当成你发疯的证据,但是肯定不会惹恼任何人。触怒他人的言论是那些可能会有人相信的言论。我猜想,最令人暴跳如雷的言论,就是被认为说出了真相的言论。
- ⏱ 2025-08-06 00:03:34
📌 如果伽利略说帕多瓦城的人身高3米,他只会被当作一个古怪的疯狂科学家。但是,他说地球围绕太阳运转,性质就完全不一样了。教廷知道,这种话会让人们开始思考。
回顾历史,我们会发现很多这样的例子。人们因为说真话而给自己惹来麻烦。许多的言论,今天的人们看来再平常不过,但是放在过去却是不能说的。以此推断,未来的人们很可能会发现,他们觉得很平常的话,在我们今天这个时代都是不能说的。现在有没有伽利略这样的人和事?很可能是有的- ⏱ 2025-08-06 11:02:22
异端邪说
📌 历史上的标签在今天已经不可避免地失去了杀伤力,最多只能用于讽刺。但是在以前,它们真的有巨大的威力。
举例来说,“失败主义者”这个词,今天看来并没有特别的政治含义,只是指某个人比较悲观,不相信自己会成功。但是在1917年的德国,这个词却是一件锐利的武器,鲁登道夫将军将所有政治对手都称为“失败主义者”,指责他们奉行投降主义,赞成签订第一次世界大战停战协议,从而用这个借口把他们清除出政府。- ⏱ 2025-08-14 10:27:35
📌 当一个政治家说自己的对手是错的,这是直截了当的批评。但是,如果他不谈论对错,却使用“对种族问题不敏感”这样的标签攻击对手,那么我们就应该多加注意了。
- ⏱ 2025-08-06 00:44:35
时空差异
📌 如果我们可以通晓未来,那么找出当代的那些表面上正确、实际上可笑的想法是一件很容易的事。但是,不可能做到这一点。幸运的是,我们可以找到一种几乎有同样效果的替代方法:回顾过去。我们可以去找那些过去被认为理所当然、如今却被认为不可思议的事情,这是用来找出我们自己正在犯下的错误的第三种方法。
- ⏱ 2025-08-14 10:28:05
📌 所以,我们就有了找出“不能说的话”的第三种方法:将当代观念与不同时期的古代观念diff一下。diff得到的结果,有一些用当代标准衡量是很令人震惊的。古人认为可以说的话,我们认为是不可以说的。但是,你有把握断言你比古人更正确吗?
甚至也不用参照历史,当代世界是多种文化并存的世界。东方文化与西方文化存在巨大的差异,各种文化的价值观念和禁忌之处都不一样。所以,你也可以将我们的观念与其他文化的观念diff一下。(做到这一点的最好方法,就是亲自去看一看。)- ⏱ 2025-08-14 10:28:47
道貌岸然
- 📌 正因如此,大多数成年人故意让孩子对世界有一个错误的认识。最鲜明的例子之一就是圣诞老人。我们觉得,小孩子相信圣诞老人,真是太可爱了。我本人其实也是这样想。但是,扪心自问,我们向孩子灌输圣诞老人的神话,到底是为了孩子,还是为了我们自己?
- ⏱ 2025-08-06 00:46:17
机制
📌 流行的时尚产生于某个有影响力的人物,他突发奇想,接着其他人纷纷模仿。15世纪晚期,欧洲流行一种宽头鞋,原因是当时的法国皇帝查理八世长了六根脚趾。20世纪20年代,著名电影明星弗兰克·库珀(Frank Cooper)决定改名,他把Frank改成一个印第安纳州工业小镇的名字Gary,以便突出自己粗犷硬朗的铁汉形象,结果导致这个名字风靡一时,很多父母都为儿子取名Gary。但是,流行的道德观念不是这样,它们往往不是偶然产生的,而是被刻意创造出来的。如果有些观点我们不能说出口,原因很可能是某些团体不允许我们说。
- ⏱ 2025-08-14 10:30:03
📌 比如希特勒就很推崇写实派艺术(representational art),但是希特勒是失败者,所以写实派一直得不到认同,直到近年才开始复兴。
- ⏱ 2025-08-14 10:31:11
📌 虽然流行的思想观点与流行服饰的产生方式不尽相同,但是它们的传播途径却很相似。第一批接受者总是带有很强的抱负心,他们有自觉的精英意识,想把自己与普通人区分开来。当流行趋势确立以后,第二批接受者就加入进来了,人数比上一批庞大得多,恐惧心在背后驱使着他们。他们接受流行,不是因为想要与众不同,而是因为害怕与众不同。
- ⏱ 2025-08-14 10:31:23
为什么这样做
📌 首先,我这样做与小孩子翻石头是出于同样的原因:纯粹的好奇心。我对任何被禁止的东西都有特别强烈的好奇心。我要亲眼看一下,然后自己做决定。
- ⏱ 2025-08-14 10:31:43
📌 智力越高的人,越愿意去思考那些惊世骇俗的思想观点。这不仅仅因为聪明人本身很积极地寻找传统观念的漏洞,还因为传统观念对他们的束缚力很小,很容易摆脱。从他们的衣着上你就可以看出这一点:不受传统观念束缚的人,往往也不会穿流行的衣服
- ⏱ 2025-08-14 10:32:35
守口如瓶
📌 守口如瓶
一旦发现了“不能说的话”,下一步怎么办?我的建议就是别说,至少也要挑选合适的场合再说,只打那些值得打的仗。- ⏱ 2025-08-14 10:33:29
📌 假设未来的某一天,世界上爆发了一场运动,黄颜色被禁止使用了。任何东西都不得涂成黄色,违者就是“黄色分子”,以破坏社会稳定罪论处。橙色可以容忍,但也很可疑。有一天,你终于觉醒了,意识到错的不是黄颜色,而是这个社会。如果公开这样说,就会被打成“黄色分子”,无数“正义人士”义愤填膺,对你口诛笔伐。如果你以此作为人生目的,一定要为黄颜色平反昭雪,现在的局面可能正中你下怀。但是,如果你的兴趣主要是别的事情,变成他人眼里的“黄色分子”对你则是极大的干扰。与笨蛋辩论,你也会变成笨蛋。
- ⏱ 2025-08-14 10:34:09
📌 这时你要明白,自由思考比畅所欲言更重要。如果你感到一定要跟那些人辩个明白,绝不咽下这口气,一定要把话说清楚,结果很可能是从此你再也无法自由理性地思考了。我认为这样做不可取,更好的方法是在思想和言论之间划一条明确的界线。在心里无所不想,但是不一定要说出来。我就鼓励自己在心里默默思考那些最无法无天的想法。你的思想是一个“地下组织”,绝不要把那里发生的事情一股脑说给外人听。“格斗俱乐部”的第一条规则,就是不要提到格斗俱乐部。
- ⏱ 2025-08-14 10:34:38
📌 “守口如瓶,笑脸相迎”,也就是说,你要对每一个人微笑,但是不要说出自己的真实想法
- ⏱ 2025-08-14 10:34:46
📌 我承认,“守口如瓶”看上去是一种“怯懦”的行为。可是问题在于,“不能说的话”太多了,如果口无遮拦,你就没时间做正事了
- ⏱ 2025-08-14 10:34:54
📌 守口如瓶”的真正缺点在于,你从此无法享受讨论带来的好处了。讨论一个观点会产生更多的观点,不讨论就什么观点也没有。所以,如果可能的话,你最好找一些信得过的知己,只与他们畅所欲言、无所不谈。这样不仅可以获得新观点,还可以用来选择朋友。能够一起谈论“异端邪说”并且不会因此气急败坏的人,就是你最应该认识的朋友。
- ⏱ 2025-08-14 10:36:43
笑脸相迎?
📌 具体来说,一种方法就是逐步把辩论提升到一个抽象的层次。假定总的来说,你反对言论审查制度。在公开质疑时,你一定要小心,不要提到具体的被审查的电影或者图书,否则对手就会一把抓住那部电影或那本书,声称你支持的其实不是言论自由,而是那些被审查的内容。你不要直接攻击某个标签,而要攻击它的“元标签”。所谓“元标签”,就是对某个标签的抽象描述。如果人们开始讨论元标签,那么原来的标签反而不会受到注意了。
- ⏱ 2025-08-14 10:37:40
📌 所有反击方法之中最好的一种可能就是幽默。狂热分子都有一个共同点:缺乏幽默感。他们无法平静地对待笑话。在
- ⏱ 2025-08-14 10:38:42
永远质疑
📌 如果你的数学不好,那么你自己会知道,因为考试的时候你得不出正确答案。但是,如果你的思想很保守,你自己则不会知道,而且你很可能还会持有相反的看法。请记住,所谓“流行”(传统观念也是一种流行),本质上就是自己看不见自己的样子,否则就不会有流行了。对于那些被流行抓住的人,流行就不再是流行,而是应该要做的正确事情。只有保持一定的距离,才能观察到人们观念的变化,发现流行(也就是人们自以为正确的事情)到底是什么。
- ⏱ 2025-08-14 10:39:31
📌 如果你想要清晰地思考,就必须远离人群。但是走得越远,你的处境就会越困难,受到的阻力也会越大,因为你没有迎合社会习俗,而是一步步地与它背道而驰。小时候,每个人都会鼓励你不断成长,变成一个心智成熟、不再耍小孩子脾气的人。但是,很少有人鼓励你继续成长,变成一个怀疑和抵制社会错误潮流的人。
如果自己就是潮水的一部分,怎么能看见潮流的方向呢?你只能永远保持质疑:什么话是我不能说的?为什么?- ⏱ 2025-08-14 10:41:56
4 良好的坏习惯
📌 在大众眼里,“黑客”(hacker)就是入侵计算机的人。可是,在程序员眼里,“黑客”指的是优秀程序员。
- ⏱ 2025-08-14 10:42:42
📌 我看来,一个人们拥有言论自由和行动自由的社会,往往最有可能采纳最优方案,而不是采纳最有权势的人提出的方案。专制国家会变成腐败国家,腐败国家会变成贫穷国家,贫穷国家会变成弱小国家。经济学里有一条拉弗曲线,认为随着税率的上升,税收收入会先增加后减少。我认为政府的力量也是如此,随着对公民自由的限制不断加强,政府的力量会先增大后减小。至少现在看来,我们的政府很可能蠢到会真的把这个试验付诸实施,亲自验证一下这个观点。但是,税率提高了还能再降下来,而一旦这个试验铸成大错,就悔之晚矣,因为极权主义制度只要形成了,就很难废除。
- ⏱ 2025-08-14 10:49:09
📌 如果读美国开国元勋的自述,你会发现他们听起来很像黑客。“反抗政府的精神,”杰斐逊写道,“在某些场合是如此珍贵,我希望它永远保持活跃。”
你能想象今天的美国总统也这么说吗?这些开国元勋就像直率的老祖母,用自己的言辞让他们的那些不自信的继承者感到惭愧。他们提醒我们不要忘记自己从何而来,提醒我们正是那些不服从管教的人,才是美国财富与力量的源泉。
那些占据高位、本能地想要约束黑客、强迫黑客服从的人,请谨慎施为,因为你们真有可能成为千古罪人- ⏱ 2025-08-14 10:49:59
用户的胜利
- 📌 “你的计算机”这个概念正慢慢成为过去时,取而代之的是“你的数据”。你应该可以从任何计算机上获取你的数据,或者更准确地说,在任何终端设备上获取你的数据,终端设备不一定是计算机。
- ⏱ 2025-08-14 10:53:18
代码之城
- 📌 对于互联网软件,没人规定只能使用某些语言开发,因为所有的硬件都控制在你手里,你想要用什么语言,就能用什么语言。不同的语言适合不同的任务,你应该根据不同场合,挑选最合适的工具。尤其是在存在竞争者的情况下,“可以这样做”就变成了“必须这样做”(详见后文),因为如果你不利用语言的优势,那就会听任对手超过你。
- ⏱ 2025-08-14 10:55:35
软件的发布
📌 桌面软件导致了bug的宿命论。你很清楚,发布出去的软件肯定有bug,你甚至早就准备好了应对机制(比如发布补丁)。既然如此,bug再多一点又何妨?没过多久,你要发布下一个版本了,你明知其中某个操作完全不能使用,但还是照样发布。苹果公司前几年就干过这种事。他们必须发布新版操作系统了,压力越来越大,发布日期已经推迟了4次,无法再推了,可是有些部分(比如CD和DVD操作的部分)还一点儿没写。怎么办?他们就把没写完的操作系统发布出去了,用户必须日后自己动手安装缺失的部分。
- ⏱ 2025-08-14 10:57:27
📌 互联网软件的发布规则是:它运行不了,你就无法发布;一旦它能运行了,你就可以立刻发布。
这个行业的老手可能会想:你说得好听!软件运行不了,就不发布,但是如果你已经对外承诺了明确的发布日期,到时却没有准备好,怎么办?这个问题听起来有道理,但是事实上,你不会对互联网软件做出这样的承诺,因为它根本没有“版本”这个概念。你的软件是连续性渐变的,某些更新也许比较重大,但是“版本”这个概念不适用于互联网软件。- ⏱ 2025-08-14 10:58:01
📌 什么时候需要媒体宣传了,就开出一张单子,上面总结了自从上次“发布”以来,我们新增的所有功能,然后在上面填一个新的版本号,发出一个新闻稿,宣布新版本已经准备就绪了。真是神奇啊,从来没有人看穿我们的把戏。
- ⏱ 2025-08-14 10:58:43
软件bug
- 📌 当然,在发布之前,你应该对修改之处进行测试,避免出现重大的bug。难免会有一些bug成为漏网之鱼,不过它们也只在罕见情况下才会发生,在真正接到用户投诉之前,几乎不会影响到什么人。只要你能立刻解决bug,对于普通用户来说,他们就会觉得你的软件几乎是毫无问题的。我觉得,普通的Viaweb用户可能一个bug都没遇到过。
- ⏱ 2025-08-15 10:30:46
逆向的《人月神话》
📌 Viaweb的开发者只有3个人。我一直在不停地招聘,压力很大,因为我们要把公司卖掉。我们很清楚地知道,买家不愿花大价钱买下一个只有3个程序员的公司。
- ⏱ 2025-08-15 10:37:06
📌 人月神话》一书中所指出的,向一个项目增加人手,往往会拖慢项目进程。随着参与人数的增加,人与人之间需要的沟通成本呈现指数级增长。人数越来越多,开会讨论各个部分如何协同工作所需的时间越来越长,无法预见的互相影响越来越大,产生的bug也越来越多。幸运的是,这个过程的逆向也成立:人数越来越少,软件开发的效率将呈指数式上升。
- ⏱ 2025-08-15 10:37:34
📌 如果要说有什么缺点,就是由于开发人员比较少,每个程序员都必须承担一点儿系统管理的责任。当你在服务器上发布软件时,必须有人监控服务器,但是由于人员太少,监控员只能由开发人员兼任
- ⏱ 2025-08-15 10:37:46
目标客户
- 📌 有一段时间,我们构思了一种新类型的服务,名叫“Viaweb黄金版”。它比我们普通类型的服务贵十倍,但是功能一模一样,唯一的区别就是有专人穿着西装面对面把它卖给你。我们从未把这个构思付诸实践,但是我很肯定,要是真推出的话,一定会有商家购买。
- ⏱ 2025-08-15 10:38:54
桌面电脑
- 📌 。如果你现在开发桌面软件,就不得不接受微软公司的授权条款,调用它的API,为它那个bug百出的操作系统伤透脑筋。历尽了千辛万苦,你最终写出了一个大受欢迎的软件,这时你可能会发现,你所做的一切其实只是在为微软公司做市场调查。
- ⏱ 2025-08-15 10:39:22
创业公司
- 📌 纵观创业公司的历史,你会发现它们变得越来越小,越来越快,越来越不像正规的企业。1960年,所谓“开发软件”就是IBM公司的那种形式,满满一屋子的人,他们都戴着牛角材质的眼镜架,系着细细黑黑的领带,勤勉地埋头写代码,每人每天可以完成10行。
- ⏱ 2025-08-15 10:40:05
为什么不尝试一下
- 📌 我无意贬低雅虎。它拥有一些很好的黑客和顶尖的管理人才。作为一家大公司,它可谓出类拔萃。但是,它的生产效率仅仅相当于小型创业公司的十分之一。没有任何一家大公司能做得更好。微软公司的恐怖之处在于,它大到可以开发任何软件,就像一座能够行走的大山。
- ⏱ 2025-08-15 10:41:08
6 如何创造财富
- 📌 如果你想致富,应该怎么做?我认为最好的办法就是自己创业,或者加入创业公司。几百年来,这一直是致富的可靠途径。“创业公司”这个词诞生于20世纪60年代,但是它与中世纪集资进行的航海冒险活动其实也相差无几。
- ⏱ 2025-08-15 10:42:00
运气的成分
📌 毫无疑问,比尔·盖茨肯定竭尽全力才诱导IBM犯下这个大错,他也淋漓尽致地利用了对手的错误,但是只要IBM方面有一个人稍微有一点脑子,微软公司的历史就将完全不同。
- ⏱ 2025-08-15 10:42:41
📌 通过创造有价值的东西而致富,这种方法的优势不仅仅在于它是合法的(许多其他方法如今都是不合法的),还在于它更简单,你只需要做出别人需要的东西就可以了。
- ⏱ 2025-08-15 10:42:57
金钱不等于财富
📌 金钱不等于财富
创造有价值的东西就是创造财富。你最好先搞清楚什么是财富。财富与金钱并不是同义词。财富存在的时间与人类历史一样长久,甚至更长久,事实上蚂蚁也拥有财富。金钱是一种历史相对较短的发明- ⏱ 2025-08-25 23:57:04
📌 财富才是你的目标,金钱不是。但是,如果财富真的这么重要,为什么大家都把挣钱挂在嘴边呢?部分原因是,金钱是财富的一种简便的表达方式:金钱有点像流动的财富,两者往往可以互相转化。但是,它们确实不是同样的东西,除非你打算伪造货币,否则使用“挣钱”这个词会不利于理解如何才能挣钱。
- ⏱ 2025-08-25 23:57:37
大饼谬论
- 📌 小时候我就对这一点深信不疑:如果富人拿走了所有的钱,那么其他人就变得更穷了。许多成年人至今还是类似看法的信徒。每当有人提到x%的人口占有了y%的财富,他的言下之意往往就包含了这种错误的观点。如果你打算创业,那么不管你是否意识到了,你都是在着手推翻这种大饼谬论。
这里令人混淆的地方就是金钱有其抽象含义的一面。金钱不是财富,而只是我们用来转移财富所有权的东西。所以,虽然在某些特定的情况下(比如某个家庭当月的收入),你能用来与他人交换的金钱数量是固定不变的,但是大多数情况下,世界上可供交换的财富不是一个恒定不变的量。人类历史上的财富一直在不停地增长和毁灭(总体上看是净增长)。- ⏱ 2025-08-25 23:58:42
手工艺人
- 📌 一个优秀程序员连续工作几个星期可能可以创造价值100万美元的财富。同样的时间内,一个平庸的程序员不仅无法创造财富,甚至还可能减少财富(比如引入了bug)。
这就是为什么如此之多的最优秀程序员都是自由主义者。我们这个世界,你向下沉沦或者向上奋进都取决于你自己,不能把原因推给外界。许许多多不创造任何财富的人——比如本科生、记者和政客——一听到最富有的5%的人口占有全社会一半以上的财富,往往会认定这是不公平的。一个有经验的程序员很可能也认为这是不公平的,因为最顶尖的5%的程序员写出了全世界99%的优秀软件。- ⏱ 2025-08-27 10:15:18
工作是什么
- 📌 当张三从学校毕业后,他应该要找工作。找工作其实就是加入另一个组织。表面上,这个组织与大学很相像。你先挑选想去的公司,然后向它递交申请。如果它觉得你不错,你就能加入了。你早上起床,来到一个新的地点,也是几幢建筑物,开始做你正常情况下没兴趣做的事情。仅有的区别就是,上班的日子不如上学的日子有趣,但是有人付钱给你,而不是你付钱给学校
- ⏱ 2025-08-27 10:15:46
更努力地工作
- 📌 成立公司的目的不是奖励那些将全部精力投入工作的员工。你不能对老板说“我打算十倍努力地工作,请你把我的薪水也增加十倍吧”,因为公司已经假定你在全力工作了。但是,真正的问题实际上在于公司无法测量你的贡献。
- ⏱ 2025-08-27 10:16:33
可测量性和可放大性
📌 你的表现可以被测量,并且据此得到回报,但是你没有决策的权力。你能做的唯一决策就是以多快的速度完成工作。即使你做到最快,回报可能也只增加一两倍。
- ⏱ 2025-08-27 10:19:06
📌 CEO也是一种同时具备可测量性和可放大性的工作。公司的表现就是CEO的表现,所以它具备可测量性;CEO的决策决定了整个公司的方向,所以它具备可放大性。
- ⏱ 2025-08-27 10:20:13
小团队=可测量性
📌 就算你无法测量每个员工的贡献,但是你可以得到近似值,那就是测量小团队的贡献。
- ⏱ 2025-08-27 10:20:27
📌 两个区别:第一个区别是你的要求并非向老板提出,而是直接向顾客提出(毕竟老板只是顾客的代理人);第二个区别是你并非一个人完成这个任务,而是在一个小团体中与其他几个有同样抱负的人一起合作完成。
- ⏱ 2025-08-27 10:20:37
📌 大公司就像巨型的古罗马战舰,1 000个划船手共同划桨,推动它前进。但是,两个因素使得它快不起来:一个因素是,每个划船手看不到自己更努力划桨有何不同;另一个因素是,1 000人的团队使得任何个人的努力都被大大地平均化了。
- ⏱ 2025-08-27 22:37:49
📌 乔布斯曾经说过,创业的成败取决于最早加入公司的那10个人。我基本同意这个观点,虽然我觉得真正决定成败的其实只是前5人。小团队的优势不在于它本身的小,而在于你可以选择成员。我们不需要小村庄的那种“小”,而需要全明星第一阵容的那种“小”。
- ⏱ 2025-08-27 22:38:21
📌 团队越大,每个人的贡献就越接近于整体的平均值。所以,在不考虑其他因素的情况下,对一个非常能干的人来说,待在大公司里可能是一件很糟的事情,因为他的表现被其他不能干的人拖累了。当然,许多因素会产生影响,比如这个人可能不太在乎回报,或者他更喜欢大公司的稳定。但是,一个非常能干而且在乎回报的人,通常在同类人组成的小团队中会有更出色的表现,自己也会感到更满意。
- ⏱ 2025-08-27 22:38:47
高科技=可放大性
- 📌 比如,麦当劳是快餐连锁集团,它的发展依靠的就是设计出了一个快餐服务体系,可以复制到全世界每一个角落。每一家麦当劳连锁店都必须严格遵守操作规定,这使得它就像软件一样运作。所以,麦当劳其实也符合“一次开发,普遍适用”的模式。沃尔玛也是如此,它的创始人山姆·沃顿(Sam Walton)并不是因为经营零售业而致富,而是因为设计出了一种新型商店。
- ⏱ 2025-08-27 22:40:19
潜规则
- 📌 创业公司不像能经受打击的黑熊,也不像有盔甲保护的螃蟹,而是像蚊子一样,不带有任何防御,就是为了达到一个目的而活着。蚊子唯一的防御就是,作为一个物种,它们的数量极多,但是作为个体,却极难生存。
- ⏱ 2025-08-27 22:43:29
用户数量
- 📌 大多数时候,促成买方掏钱的最好办法不是让买家看到有获利的可能,而是让他们感到失去机会的恐惧。
- ⏱ 2025-08-27 22:46:24
财富和权力
📌 还记得从经济学观点看什么是创业公司吗?简单地说,就是可以让人更快速工作的地方。你不再是慢慢地积累50年的普通工资,而是要尽快地将这笔钱赚到手。所以,政府禁止个人积累财富实际上就是命令人民减慢工作的速度。他们同意让你在50年里赚到300万美元,但是不同意让你在2年里赚到这些钱,即使前提是你拼命努力工作
- ⏱ 2025-08-27 22:49:01
📌 理解这些有助于回答一个重要的问题:为什么欧洲在历史上变得如此强大?是因为欧洲优越的地理位置,还是因为欧洲人天生就比较优秀,抑或是宗教原因?答案(或者至少是近因)可能就是欧洲人接受了一个威力巨大的新观点:允许赚到大钱的人保住自己的财富。
- ⏱ 2025-08-27 22:49:45
7 关注贫富分化
- 📌 为什么?赚钱看上去与其他技能没有本质不同,为什么人们的反应如此强烈?
我认为有三个原因使得我们对赚钱另眼相看:第一,我们从小对财富的看法是被误导的;第二,历史上积累财富的方式大多名声不好;第三,担心收入差距拉大将对社会产生不利影响。就我所知,第一点是错的,第二点已经过时了,第三点通不过现实的检验。有没有可能,在现代社会中,收入差距拉大实际上是一种健康的信号?- ⏱ 2025-08-27 22:51:03
财富的老爹模式
📌 由于孩子们接触钱的方式就是这样的,他们往往会误解财富,把财富与钱混为一谈。他们认为财富的总量是不变的,某个权威负责分配财富(所以理应平均分配),没有意识到财富是创造出来的(而且创造得不太均等)。
- ⏱ 2025-08-27 22:51:28
📌 我们大多数人在为其他人创造财富,然后用创造出来的财富交换金钱,再用金钱交换我们需要的另一种财富。
- ⏱ 2025-08-27 22:51:50
📌 第一眼看上去,你可能会觉得难以接受,人与人之间创造财富的能力真的有这么巨大的差别吗?理解这一点的关键就在于重新思考我们上面提过的那个问题:他一个人的价值真的等于我们100个人的价值吗?你想一想,一个篮球队会同意用一个运动员交换100个普通人吗?如果苹果公司不是由乔布斯掌管,而是由一个100人组成的委员会掌管,那么这家公司的下一代产品会是什么样?人与人之间的差别并不是那么稳定的线性关系。也许CEO和运动员的技能与决心只比普通人高出10倍(倍数不重要),但是人与人之间就是存在着重大差别。
- ⏱ 2025-08-27 22:53:45
📌 如果你觉得由于人们的需求不正确,导致某些工作的报酬过低而且不公平,那么这个世界一定会让你感到非常遗憾:人们就是喜欢看电视真人秀,而不是莎士比亚的作品;人们就是喜欢吃玉米热狗,而不是水煮蔬菜。这是不是很不公平呀?要是你觉得不公平的话,那你就同把蓝色说成最漂亮的颜色、把方的说成圆的那样蛮不讲理。
“不公平”这三个字就是“老爹模式”的标志。- ⏱ 2025-09-02 11:06:56
📌 当我们讨论“收入分配不公平”时,我们还要问问收入从何而来,收入背后的财富到底是谁生产出来的。如果收入完全根据个人创造的财富数量而分配,那么结果可能是不平均的,但是很难说是不公平的。
- ⏱ 2025-08-27 22:54:29
偷窃
📌 在控制程度更高的社会,统治者和官僚阶层用税收代替直接充公。但是,根本的一点并没有变,那就是致富的方法不是创造财富,而是以统治者的强权进行搜刮掠夺。
- ⏱ 2025-08-27 22:55:23
📌 与农奴不同的是,中产阶级有强烈动机大量创造财富。农奴创造的所有财富都属于他的主人,所以大量创造财富对农奴来说意义不大。城镇的出现使得那里的人们可以独立生活,保住自己创造出来的财富。
- ⏱ 2025-08-29 10:19:27
📌 一旦通过创造财富而使致富成为可能,社会从整体上就会快速地变得更富有。中世纪人们所需要的一切东西几乎是由中产阶级生产出来的。工业革命后,其他两个阶级实际上消失了,他们的名称被用来指中产阶级的两端。(根据原始定义,比尔·盖茨不是富豪阶层,而是中产阶级。)
- ⏱ 2025-08-29 10:19:36
📌 17世纪的英国很像今天的第三世界,当官是公认的发财职业。那个年代要赚大钱仍然主要通过贪污,而不是经商。
- ⏱ 2025-08-29 10:20:01
📌 中产阶级的出现使得财富总量不再是一个固定不变的值,财富的分配也不再是一种零和游戏。苹果公司的两个创始人乔布斯和沃兹尼亚克没有使得他人变得更贫穷就赚到了钱。事实上,他们创造出来的东西使得人类的物质生活变得更富有。他们只能这样做,否则不会有人付钱给他们的。
即使情况已经发生变化,但是由于人类历史上主要的致富方式长期以来都是偷窃,所以我们依然对有钱人抱有一种怀疑态度- ⏱ 2025-08-29 10:20:20
技术的杠杆效应
📌 由于技术的发展,富人的生活与普通人的差距缩小了。
汽车就是一个很好的例子。如果富人不购买普通汽车,而是购买全手工制作、售价高达几十万美元一辆的豪华车,对他反而不利。因为对于汽车公司来说,生产那些销量很大的普通汽车要比生产那些销量很小的豪华车更有利可图,所以汽车公司会在普通车辆上投入更多的精力和资金,进行设计和制造。如果你购买专为你一个人定制的汽车,质量反而不可靠,某个部件肯定会出问题。这样做的唯一意义就是告诉别人你有能力这样做。- ⏱ 2025-08-29 10:21:14
📌 50年前,花巨资购买一块名表真的是很有面子的事情。那时的手表都是机械表,价格越贵,走时越准。现在不是这样了,石英表被发明出来了,一块普通的石英表反而比几十万美元的名牌机械表走时更准。说实话,就像汽车的例子一样,如果你一定要把钱花在手表上,结果只能给你带来更多麻烦:除了时间精度下降以外,机械表还必须上发条
- ⏱ 2025-08-29 10:21:32
📌 1900年,只要你有一辆马车,你就是富人,根本没人问你马车的牌子。没有马车的人就是穷人,只能挤公共交通或者步行。今天,即使最穷的美国人也有自己的汽车,那么厂商只好通过广告训练我们识别品牌,以便我们能够识别哪些汽车特别昂贵。
- ⏱ 2025-08-29 10:21:54
📌 如今,确实有很多人非常有钱,完全不必再去工作,他们之所以还在工作,不是因为感到社会压力,而是因为无所事事使人感到孤独和消沉。
- ⏱ 2025-08-29 10:22:08
📌 如果参观雅虎、英特尔或思科公司,你会看到每个人都穿着差不多的衣服,有着同样的办公室(或者小隔间)、同样的家具,彼此直呼对方的名字,不加任何头衔或敬语。表面看大家没什么差距,但如果看到每个人银行户头上的余额差别之大,你一定会感到震惊不已。
- ⏱ 2025-09-05 10:18:40
公理的不同意见
📌 你经常可以听到有人批评某种政策会加剧贫富分化。隐含的意思就是,贫富分化加剧一定是坏事,这好像已经成了公理。收入差距的扩大可能确实不好,可是我不觉得这可以被看成公理。
实际情况是,在工业化的民主国家,这种观点更可能是错误的。在农奴和贵族组成的社会,收入差距的加大肯定是社会问题加剧的信号,收入更多地从农奴流向了贵族。但是,抢夺他人的财富已经不再是收入的唯一来源了。波音747飞机驾驶员的收入大概是商场收银员的40倍,但是前者不是贵族,后者也不是奴隶,这种收入差距只是因为前者的技能比后者的要值钱得多。
我想提出一种相反的观点:现代社会的收入差距扩大是一种健康的信号。技术使得生产率的差异加速扩大,如果这种扩大没有反映在收入上面,只有三种可能的解释:(a)技术革新停顿了;(b)那些创造大部分财富的人停止工作了;(c)创造财富的人没有获得报酬。
我觉得可以很有把握地说,(a)和(b)都不是好事。如果你有不同意见,那不妨试试去过公元9世纪法兰克王国的贵族生活,一年后再来告诉我们你的感受。(我很仁慈地没有建议你去过石器时代的那种生活。)
如果你想让社会保持繁荣,同时收入差距不扩大,那么就只剩下(c)这一种可能了,即创造大量财富的人不获取报酬。举例来说,苹果公司的两位创始人将欢欣鼓舞地每天工作20个小时,为社会提供苹果计算机,然后只领取一份相当于大公司里朝九晚五的上班族领取的税后工资。
如果得不到报酬,人们是否愿意创造财富?唯一的可能就是,工作必须能提供乐趣。会有人愿意免费写一个操作系统,但是他们不愿意免费为你安装、提供电话支持、进行客户培训等。即使是最先进的高科技公司,也有至少90%的工作没有乐趣、令人生厌- ⏱ 2025-09-05 10:20:27
📌 只要你压制收入差距的扩大,不管是用偷窃私人财产的做法(封建社会),还是用高额税收的做法(某些现代政府),最终结果看来都是一样的,那就是社会作为一个整体变得更贫穷了。
如果我可以做选择,到底是生活在一个整体上非常富裕但是我个人相对贫穷的社会,还是生活在一个我个人相对非常富裕但是整体上非常贫穷的社会呢?我会选择第一个选项。如果我有小孩的话,可能哪一个选项更好还值得争论。但是,总的来说,你要避免的是绝对贫穷,而不是相对贫穷。如果必须在这两种社会之间做选择,根据目前的证据,我选择个人相对贫穷但是整体上更富裕的社会。- ⏱ 2025-09-05 10:22:32
8 防止垃圾邮件的一种方法
📌 我发现只要对单个词语进行贝叶斯推断,就能很好地过滤大部分垃圾邮件。设置好贝叶斯过滤器(详见后文),1 000封垃圾邮件能够被过滤掉995封,并且没有一个误判。
- ⏱ 2025-09-05 10:24:23
📌 所谓误判,指的是正常的邮件被错误认定为垃圾邮件。对于大多数用户来说,错过一封正常邮件的后果要比收到垃圾邮件严重得多。所以,如果过滤器有误判,就好像治疗粉刺的药物却有致人死亡的危险一样。
- ⏱ 2025-09-05 10:25:56
📌 当我尝试统计学方法以后,我立刻发现这是更聪明的选择。它不仅能发现普通的垃圾邮件标志(比如,木马和广告性词语),还能发现像per、FL、ff0000这种不太明显的标志。事实上,ff0000(HTML语言中表示鲜红色的代码)被证明效果显著,能很有效地识别垃圾邮件,就像色情词汇一样容易辨别。
- ⏱ 2025-09-05 10:26:32
📌 统计学方法的一大优点就是,你不需要一封封地去看垃圾邮件。在使用它之前的6个月,我大概看了足足几千封垃圾邮件,这真是很苦恼的一件事。数学家诺伯特·维纳(Norbert Wiener)说,如果你与奴隶比赛,你也会变成一个奴隶。与垃圾邮件搏斗就有这种令人退化的效果。为了识别垃圾邮件的每一个特征,你不得不钻进发件人的脑袋,搞清楚他们怎么想。说实话,我一刻都不想待在那里。
- ⏱ 2025-09-05 10:28:18
📌 是,贝叶斯方法的真正优点在于你知道你正在计算的是什么东西。识别垃圾邮件特征的过滤器(比如SpamAssassin)为每封邮件计算一个“得分”,而贝叶斯方法为每封邮件算出一个概率。“得分”方法的缺点在于没人知道这个分数到底是什么意思,用户不知道,更糟的是,就连过滤器的开发者也不知道。如果邮件中有sex(性)这个词,请问得分是多少?计算概率当然也会出错,但是至少意义上很清楚,一点也不模糊,而且用来计算它的那些依据也很清楚。根据我的邮件库,一封邮件中含有sex这个词,那么它有0.97的概率是一封垃圾邮件;要是含有sexy这个词,垃圾邮件的概率更是上升到0.99。贝叶斯规则同样毫不含糊地表明,如果一封邮件同时含有这两个词,即使没有其他证据(事实上,这是不可能的),是垃圾邮件的概率也将达到0.999 7。
- ⏱ 2025-09-05 10:32:47
📌 因为贝叶斯方法计算的是概率,所以它必须考虑邮件中所有的线索,不管是肯定性线索还是否定性线索。有些词(比如though、tonight、apparently)极少出现在垃圾邮件中,所以它们会大大降低这封邮件属于垃圾邮件的概率;同样,还有一些词(比如unsubscribe、opt-in)几乎是垃圾邮件专用,它们会大大增加被判为垃圾邮件的概率。因此,如果一封邮件的其他方面都合格,只是碰巧包含了sex这个词,这封邮件是不会被归入垃圾邮件的。
- ⏱ 2025-09-05 10:33:20
9 设计者的品味
📌 好设计是简单的设计。从数学领域到绘画领域,你都可以听到这种说法。在数学中,它意味着简短的证明往往是更好的证明。特别是对于数学公理来说,少即是多。在编程中,这种说法也基本适用。对于建筑师和设计者,它意味着美依赖于一些精心选择的结构性元素,而不依赖于表面装饰品的堆砌。
- ⏱ 2025-09-05 18:36:58
📌 好设计是对称的设计。对称也许只是简洁性的一种表现,但是它十分重要,值得单独列为一点。自然界的对称大量存在,这就说明了对称的重要性。
对称有两种:重复性对称和递归性对称。递归性对称就是指子元素的重复,比如树叶上叶脉的纹路。- ⏱ 2025-09-05 18:38:19
📌 犯错误是很正常的事情。你不要把犯错看成灾难,要勇于承认、勇于改正。达·芬奇实际上重新发明了素描这种艺术形式,把它当作一种探索更多可能的方式。开源软件因为公开承认自己会有bug,反而使得代码的bug比较少。
- ⏱ 2025-09-05 18:39:07
📌 好设计是能够复制的设计。我们对待复制的态度经常是一个否定之否定的过程。刚入门的新手不知不觉地模仿他人,逐渐熟练之后才开始创作原创性作品。最后他会意识到,把事情做对比原创更重要。
- ⏱ 2025-09-05 18:42:47
语言的战争
- 📌 一些黑客只喜欢自己用的语言,反感其他所有的语言。另一些黑客则说所有的语言都一样。事实介于这两个极端之间。语言之间确实有差别,但是很难确定地说哪一种语言是最好的。这个领域依然还在快速发展。
- ⏱ 2025-09-05 18:44:42
安全带还是手铐
- 📌 静态类型语言的拥护者认为这样可以防止bug,并且帮助编译器生成更快的代码(这两点理由都成立)。动态类型语言的拥护者认为静态类型对程序构成了限制(这点理由也成立)。我本人更喜欢动态类型语言,痛恨那些限制我的自由的语言。但是,确实有一些很聪明的人看来喜欢用静态类型语言。所以,这个问题依然值得讨论,并没有固定答案。
- ⏱ 2025-09-05 18:45:51
面向对象编程
- 📌 关于面向对象编程优劣的争论并不像静态类型语言与动态类型语言之争那样壁垒分明,因为编程的时候你只能在静态类型语言和动态类型语言之中选一种。但是,面向对象编程只是程度不同的问题。事实上有两种程度的面向对象编程:某些语言允许你以这种风格编程,另一些语言则强迫你一定要这样编程。
我觉得后一类语言不可取。允许你做某事的语言肯定不差于强迫你做某事的语言,所以至少在这方面我们可以得到明确的结论:你应该使用允许你面向对象编程的语言。至于你最后到底用不用则是另外一个问题了。- ⏱ 2025-09-05 18:46:42
11 一百年后的编程语言
📌 我预言Java也会如此。有人写信说:“你怎么能说Java不会成功呢?它已经成功了。”我觉得这要看你的成功标准是什么。如果标准是相关图书的出版量,或者是相信学会Java就能找到工作的大学生数量,那么Java确实已经成功了。当我说Java不会成功时,我的意思是它和Cobol一样,进化之路已经走到了尽头。
- ⏱ 2025-09-05 18:51:58
📌 我的判断是,那些内核最小、最干净的编程语言才会存在于进化的主干上。一种语言的内核设计得越小、越干净,它的生命力就越顽强。
- ⏱ 2025-09-05 18:48:36
📌 编程语言进化缓慢的原因在于它们并不是真正的技术。语言只是一种书写法,而程序则是一种严格符合规则的描述,以书面形式记录计算机应该如何解决你的问题。所以,编程语言的进化速度更像数学符号的进化速度,而不像真正的技术(比如交通或通信技术)的进化速度。数学符号的进化是缓慢的渐变式变化,而不是像真正的技术那样跳跃式发展。
- ⏱ 2025-09-05 18:49:02
📌 随着技术的发展,每一代人都在做上一代人觉得很浪费的事情。30年前的人要是看到我们今天如此随意地使用长途电话,一定会感到震惊。100年前的人要是看到一个普通的包裹竟然也能享受一天内从波士顿发件、途经孟菲斯、抵达纽约的待遇,恐怕就要更震惊了。
我已经预测了一旦未来硬件性能大幅提高将会发生什么事:新增加的运算能力都会被糟蹋掉。- ⏱ 2025-09-05 18:49:38
📌 浪费可以分成好的浪费和坏的浪费。我感兴趣的是好的浪费,即用更多的钱得到更简单的设计
- ⏱ 2025-09-05 18:50:08
📌 我觉得,放弃字符串类型已经是大家可以接受的想法了。Arc语言已经这样做了,看上去效果不错。以前用正则表达式很难描述的一些操作,现在用回归函数可以表达得很简单。
这种数据结构的扁平化趋势会怎么发展?我极其努力地设想各种可能,得到的结果甚至令我自己都吓了一跳。比如,数组会不会消失?毕竟数组只是散列表的一个子集,其特点就是数组的键全部都是整数向量。进一步说,散列表本身会不会被列表取代呢?- ⏱ 2025-09-05 18:51:01
📌 比尔·伍兹曾经对我说,根据经验判断,每增加一个解释层,软件的运行速度就会慢一个数量级。但是,多余的软件层可以让编程灵活起来。
- ⏱ 2025-09-05 18:51:42
📌 顺便说一句,我不认为面向对象编程将来会消亡。我觉得,除了某些特定的领域,这种编程方法其实没有为优秀程序员带来很多好处,但是它对大公司有不可抗拒的吸引力。面向对象编程使得你有办法对面条式代码进行可持续性开发。通过不断地打补丁,它让你将软件一步步做大。大公司总是倾向于采用这样的方式开发软件。我预计一百年后也是如此。
- ⏱ 2025-09-16 10:16:34
📌 在学习开车的时候,一个需要记住的原则就是要把车开直,不是通过将车身对齐画在地上的分隔线,而是通过瞄准远处的某个点。即使你的目标只在几米开外,这样做也是正确的。我认为,设计编程语言时,我们也应该这样做
- ⏱ 2025-09-05 18:53:28
秘密武器
📌 他看来,如果你想当一个黑客,应该学习哪些语言。他建议从Python和Java入手,因为它们比较容易学。想当高级一点的黑客,还应该学习C和Perl。前者用来对付Unix系统,后者用于系统管理和开发CGI脚本。最后,真正非常严肃地把黑客作为人生目标的人,应该考虑学习Lisp:
Lisp很值得学习。你掌握它以后,会感到它给你带来的极大启发。这会大大提高你的编程水平,使你成为一个更好的程序员。尽管在实际工作中极少会用到Lisp- ⏱ 2025-09-05 18:54:14
📌 我们的秘密武器很类似上面的情景。我们使用一种奇特的人工智能语言开发软件,它的语法非常古怪,大量使用括号。多年来,要是听到别人这样描述Lisp语言,我会勃然大怒,但是现在,这却成了我们的优势。在竞争中,你的对手无法理解你的技术优势,这可是再宝贵不过了。商场如战场,对手摸不透你,你的胜算就增加了。
- ⏱ 2025-09-05 18:55:39
Blub困境
📌 Lisp语言的好处不在于它有一些狂热爱好者才明白的优点,而只在于它是目前最强大的编程语言。它没有得到广泛使用就是因为编程语言不仅仅是技术,也是一种习惯性思维,非常难于改变。当然,上面两句话都需要进一步解释。
- ⏱ 2025-09-05 18:56:06
📌 至少不会有人反对高级语言比机器语言更强大这一观点。今天的大多数程序员通常情况下不会想用机器语言编程,而是使用一种高级语言,然后再让编译器帮你把它翻译成机器语言。这种观念甚至已经移植到了硬件,从20世纪80年代开始,硬件的指令集都是针对编译器而不是针对程序员设计的。
大家都知道,徒手用机器语言写出整个程序是一件很蠢的事。但是,把这个观点推广到一种更普遍的情况,知道的人就不多了。如果你有好几种语言可以选择,在不考虑其他因素的情况下,你不选择最强大的那种语言就是一件很蠢的事。- ⏱ 2025-09-05 18:56:34
📌 大家都公认机器语言属于非常低层次的语言,但是至少在社会上很多人眼里,高级语言其实也差不多。但事实并非如此,高级语言与机器语言的差别很大。从技术上看,“高级语言”并不是一个定义很清晰的名词。在高级语言与机器语言之间并不存在一条明确的分界线。语言的抽象性是一条连续曲线,从最强大的语言一直到最底层的机器语言,每一种语言的能力都有差异
- ⏱ 2025-09-05 18:57:07
📌 Perl 4如何?与Perl 5相比,它不支持闭包,所以大多数Perl的黑客都认为Perl 5比Perl 4更强大。如果你同意这一点,就意味着你也认可一种高级语言可以比另一种高级语言更强大。因此,必然能够接着推导出,除了某些特殊情况,你就是应该使用目前最强大的语言。
不过在现实中这个结论很少能落实。到了一定年龄之后,程序员极少主动更换自己的编程语言。不管习惯使用的是哪一种语言,他们往往认为这种语言已经足够好了。- ⏱ 2025-09-05 18:57:35
📌 程序员非常忠于他们心爱的语言,我不想伤害任何人的感情,所以为了解释我的观点,我假设有一种Blub语言。它的抽象程度正好落在编程能力曲线的中点。它不是最强大的语言,但是要比Cobol或机器语言更高级。
我们假设Blub程序员既不使用机器语言也不使用Cobol语言。他认为前者是编译器的工作,后者他不知道有什么用(Cobol语言甚至连X功能也没有,Blub语言就具备这个功能)。
只要这位程序员向曲线下方望去,他就肯定知道自己正在看的是一些比较低层次的语言。因为那些语言明显不如Blub语言强大,缺少他习惯使用的某些功能。但是,当他向曲线上方望去,他不会意识到自己正在看更高层次的语言,而是仅仅觉得自己正在看某些奇怪的语言。他可能认为那些语言也许与Blub一样强大,但是加入了不少怪东西。他觉得Blub语言已经够用了,不用再考虑那些语言了。这时,他的思维就是已经被Blub同化了。
但是,当我们转换视角,把自己想象成使用曲线更上方某一种语言的程序员并往下看的时候,我们就会发现,自己也同样轻视Blub语言。你怎么用Blub语言完成工作呢?它甚至连Y功能都没有!
通过归纳法我们就会知道,唯一洞悉所有语言优劣的人必然是懂得最强大的那种语言的人。(这大概就是雷蒙德所说的Lisp语言使你成为一个更好的程序员的意思。)由于Blub困境的存在,你无法信任其他人的意见:他们都满足于自己碰巧用熟了的那种语言,他们的编程思想都被那种语言主宰了。- ⏱ 2025-09-05 18:58:55
创业公司的合气道
📌 尽管Lisp语言非常强大,但是我并不期望有谁(超过25岁的人)读完这篇文章就立刻开始学习它。我写这篇文章的目的不是想改变任何人的观点,而是想让那些有兴趣学习Lisp语言的人放心,他们知道Lisp是一种强大的语言,但是担心使用者太少,学会了也没什么用。我想让他们明白,在商业竞争中使用Lisp语言就会带来优势。你的竞争对手不懂Lisp,这将使得它的强大更充分地表现出来。
- ⏱ 2025-09-05 19:00:33
📌 技术的变化速度通常是很快的,但是编程语言不一样,与其说它是技术,还不如说是程序员的思考模式。编程语言是技术和宗教的混合物。所以,一种很普通的编程语言就是很普通的程序员使用的语言,它的变化就像冰山那样缓慢。
- ⏱ 2025-09-05 19:01:05
📌 很显然,那些很普通的编程语言正在主导一切。我不建议你挑战这种强大的习惯势力,相反,我建议你向日本合气道选手学习,利用这种势力削弱你的竞争对手,让他们自食其果。
- ⏱ 2025-09-05 19:01:28
📌 去找他们的招聘职位。这样过了几年,我就知道哪些公司值得关注,哪些公司不用在意。有些公司的职位描述使用了大量的IT词汇,这样的内容越多,这家公司就越不构成威胁。最不用担心的竞争对手就是那些要求应聘者具有Oracle数据库经验的公司,你永远不必担心他们。如果是招聘C++或Java程序员的公司,对你也不会构成威胁。如果他们招聘Perl或Python程序员,就稍微有点威胁了。至少这听起来像一家技术公司,并且由黑客控制。如果我有幸见到一家招聘Lisp黑客的公司,就会真的感到如临大敌。
- ⏱ 2025-09-05 19:02:10
13 书呆子的复仇
📌 假设你需要写一个软件。你的经理根本不懂这个软件的运作机制,也不知道各种编程语言有什么区别,但是他竟然明确要求你一定要使用某一种语言进行开发。没错,他就是要求你一定要用Java语言。
为什么他会提出这种要求?让我们看看他究竟是怎么想的。他的想法无非就是,Java是业界的标准。我知道肯定如此,因为媒体对此有铺天盖地的报道。既然它是标准,那么使用它就不会错。另外,这也意味着人才市场上肯定有无数Java程序员,即使现在为我打工的这批人都辞职了(真奇怪,这种事情总是不断发生),我也能够轻易地找到替代者。- ⏱ 2025-09-15 10:21:34
📌 一般来说,如果你动手创造一种新语言,那是因为你觉得它在某些方面会优于现有的语言。Java语言之父詹姆斯·高斯林在第一份《Java白皮书》中说得很清楚,之所以要设计Java,就是想解决C++的一些弱点。所以结论就是,各种编程语言的编程能力是不相同的。如果你接受你的经理的假设,然后一路追溯到Java语言的源头,就会得到与他的假设完全不同的结果。
- ⏱ 2025-09-15 10:21:58
📌 大家都觉得Java一定有过人之处,因为它是一种很酷的新兴编程语言。但是真的如此吗?如果你站在远处观察编程语言的世界,似乎Java就是最新的东西。(如果你站得足够远,那么你看到的所有东西就是Sun公司出钱制作的大型霓虹广告牌。)但是,如果你靠近观察这个世界,就会发现不同的人对“酷”的理解是不一样的。在黑客圈子里,Perl被公认比Java酷得多。黑客社区网站Slashdot就是用Perl开发的。我估计你不可能看到黑客愿意使用Java的JSP技术开发网站。可是,还有一种更新的语言叫作Python,它的使用者往往看不起Perl。另一些人则认为Ruby语言是取代Python的最佳选择。
- ⏱ 2025-09-15 10:22:36
📌 当你按照Java、Perl、Python和Ruby这样的顺序观察这些语言,你会发现一个有趣的结果。如果你是一个Lisp黑客,你就看得出来,排在越后面的语言越像Lisp。Python语言模仿Lisp,甚至把许多Lisp黑客认为属于设计错误的功能也一起模仿了。至于Ruby语言,如果回到1975年,你声称它是一种有着自己句法的Lisp方言,没有人会提出反对意见。编程语言现在的发展不过刚刚赶上1958年时Lisp语言的水平。
- ⏱ 2025-09-15 10:22:57
朝着数学的方法发展
📌 由此也就得出了20世纪50年代的编程语言到现在还没有过时的原因。简单说,因为这种语言本质上不是一种技术,而是数学。数学是不会过时的。你不应该把Lisp语言与50年代的硬件联系在一起,而是应该把它与快速排序算法进行类比。这种算法是1960年提出的,至今仍然是最快的通用排序方法。
- ⏱ 2025-09-15 10:23:49
📌 Lisp语言刚设计出来的时候就很强大,接下来的20年它提高了运行速度。而那些所谓的主流语言把更快的运行速度作为设计的出发点,然后再用40多年的时间一步步变得更强大。直到今天,最高级的主流语言也只是刚刚接近Lisp的水平。虽然已经很接近了,但还是没有Lisp那样强大。
- ⏱ 2025-09-15 10:24:25
为什么Lisp语言很特别
📌 (1) 条件结构(即if-then-else结构)。现在大家都觉得这是理所当然的,但是Fortran I就没有这个结构,它只有基于底层机器指令的goto结构。
- ⏱ 2025-09-15 10:24:43
📌 (2) 函数也是一种数据类型。在Lisp语言中,函数与整数或字符串一样,也属于数据类型的一种。它有自己的字面表示形式,能够存储在变量中,也能当作参数传递。一种数据类型应该有的功能,它都有。
- ⏱ 2025-09-15 10:24:56
📌 (3) 递归。Lisp是第一种支持递归函数的高级语言。
- ⏱ 2025-09-15 10:25:02
📌 (4) 变量的动态类型。在Lisp语言中,所有变量实际上都是指针,所指向的值有类型之分,而变量本身没有。复制变量就相当于复制指针,而不是复制它们指向的数据。
- ⏱ 2025-09-15 10:25:09
📌 (5) 垃圾回收机制。
- ⏱ 2025-09-15 10:25:17
📌 (6) 程序由表达式组成。Lisp程序是一些表达式树的集合,每个表达式都返回一个值。这与Fortran和大多数后来的语言截然不同,它们的程序由表达式和语句组成。
- ⏱ 2025-09-15 10:25:23
📌 (8) 代码使用符号和常量组成的树形表示法。
- ⏱ 2025-09-15 10:26:40
📌 (9) 无论什么时候,整个语言都是可用的。Lisp并不真正区分读取期、编译期和运行期。你可以在读取期编译或运行代码,也可以在编译期读取或运行代码,还可以在运行期读取或者编译代码。
- ⏱ 2025-09-15 10:25:55
语言优势真正体现的地方
- 📌 一般来说,条件越苛刻的项目,强大的编程语言就越能发挥作用。但是,无数的项目根本没有苛刻条件的限制。大多数编程任务可能只要写一些很小的“胶水程序”,然后再把这些小程序连起来就行了。你可以用自己熟悉的编程语言或者用对于特定项目来说有着最强大函数库的语言来写这些“胶水程序”。如果你只是需要在Windows应用程序之间传递数据,使用Visual Basic照样能达到目的。
- ⏱ 2025-09-15 10:27:39
向心力
📌 使用一种不常见的语言会出现的问题我想到了三个:你的程序可能无法很好地与使用其他语言写的程序协同工作;你可能找不到很多函数库;你可能不容易雇到程序员。
- ⏱ 2025-09-15 10:28:07
📌 到目前为止,大家公认少于10个人的团队最适合开发软件。雇用这样规模的开发团队,只要使用的不是无人知道的语言,应该都不会遇到很大麻烦。如果你无法找到10个Lisp程序员,那么你可能选错了创立软件公司的城市。
- ⏱ 2025-09-15 10:28:33
📌 如果你创业的话,千万不要为了取悦风险投资商或潜在并购方而设计你的产品,让用户感到满意才是你的设计方向。只要赢得用户,其他事情就会接踵而来。如果没有用户,谁会关心你选择的“正统”技术是多么令人放心。
- ⏱ 2025-09-15 19:39:34
随大流的代价
- 📌 衡量语言的编程能力的最简单方法可能就是看代码数量。所谓高级语言,就是能够提供更强大的抽象能力的语言,从某种意义上,就像能够提供更大的砖头,所以砌墙的时候用到的砖头数量就变少了。因此,语言的编程能力越强大,写出来的程序就越短(当然不是指字符数量,而是指独立的语法单位)。
- ⏱ 2025-09-15 19:39:49
14 梦寐以求的编程语言
📌 一心让臣民行善的暴君可能是最专制的暴君。
——C.S.路易斯(1898—1963,英国小说家- ⏱ 2025-09-15 19:41:32
📌 编程语言本来就是为了满足黑客的需要而产生的,当且仅当黑客喜欢一种语言时,这种语言才能成为合格的编程语言,而不是被当作指称语义(denotational semantics)或者编译器设计。
- ⏱ 2025-09-16 09:58:10
流行的秘诀
📌 黑客的看法其实比语言设计者的更重要。编程语言不是数学定理,而是一种工具,为了便于使用,它们才被设计出来。所以,在设计编程语言的时候必须考虑到人类的长处和短处,就像在设计鞋子的时候必须符合人类的脚型。如果鞋子穿上去不舒服,无论它的外形多么优美,多么像一件艺术品,你也只能把它当作一双坏鞋。
- ⏱ 2025-09-16 09:58:30
📌 大多数程序员也许无法分辨语言的好坏,但是这不代表优秀的编程语言会被埋没,专家级黑客一眼就能认出它们,并且会拿来使用。虽然他们人数很少,但就是这样一小群人写出了人类所有优秀软件。他们有着巨大的影响力,他们使用什么语言,其他程序员往往就会跟着使用。老实说,很多时候这种影响力更像是一种命令,对于其他程序员来说,专家级黑客就像自己的老板或导师,他们说哪种语言好用,自己就会乖乖地跟进。
- ⏱ 2025-09-16 09:58:43
外部因素
- 📌 编程语言还需要有一本介绍它的书。这本书应该不厚,文笔流畅,而且包含大量优秀的范例。布莱恩·柯尼汉和丹尼斯·里奇合写的《C程序设计语言》(C Programming Language)就是这方面的典范。眼下,我大概还能再加一句,这一类书之中必须有一本由O’Reilly公司出版发行。这正在变成是否能吸引黑客的前提条件了。
- ⏱ 2025-09-16 09:59:51
简洁
📌 Cobol就是因为这个问题而声名狼藉。如果你让黑客像下面这样求和:
add x to y giving z
而不是写成:
z=x+y
那么你就是在侮辱黑客的智商,或者自己作孽了。- ⏱ 2025-09-16 10:00:17
📌 简洁性是静态类型语言力所不及之处。不考虑其他因素,没人愿意在程序的头部写上一大堆声明语句。只要计算机可以自己推断出来的事情,都应该让计算机自己去推断。举例来说,hello world本应该是一个很简单的程序,但是在Java语言中却要写上一大堆东西,这本身就差不多可以说明Java语言设计得有问题了。
- ⏱ 2025-09-16 10:00:26
可编程性
- 📌 至少对男生来说,某些类型的破坏非常刺激。针对青年男性读者的《马克西姆》(Maxim)杂志每年出版一本特辑,里面一半是美女照片,另一半是各种严重事故的现场照片。这本杂志非常清楚它的读者想看什么。
- ⏱ 2025-09-16 10:01:48
效率
- 📌 随着互联网软件的兴起,越来越多的程序主要不是受限于计算机的运算速度,而是受限于I/O速度。加快I/O速度将是很值得做的一件事。在这方面,编程语言也能起到作用,有些措施是显而易见的,比如采用简洁、快速、格式化输出的函数,还有些措施则需要深层次的结构变化,比如采用缓存和持久化对象。
- ⏱ 2025-09-16 10:02:44
时间
📌 一种编程语言要想变得流行,最后一关就是要经受住时间的考验。没人想用一种会被淘汰的语言编程,这方面已经有很多前车之鉴了。所以,大多数黑客往往会等上几年,看看某一种新语言的势头,然后才真正考虑使用它。
- ⏱ 2025-09-16 10:04:19
📌 大多数人接触新事物时会使用类似的过滤机制,甚至有时要听到别人提起十遍以上他们才会留意。这样做完全是合理的,因为大多数热门新商品事后被证明是浪费时间的噱头,没多久就消失得无影无踪。虚拟现实建模语言VRML刚诞生时曾经轰动一时,但是我决定等到一两年后再去学习它,结果一两年后已经没有学习的必要了,因为市场已经把它遗忘了。
- ⏱ 2025-09-16 10:04:32
再设计
- 📌 一种可能的解决方法是,将软件内部的接口设计成垂直接口而不是水平接口。这意味着软件内部的模块是一个个垂直堆积起来的抽象层,层与层之间的接口完全由其中的一层控制。如果较高的一层使用了较低的一层定义的语言,那么接口就由较低的一层控制;如果较低的一层从属于较高的一层,那么接口就由较高的一层控制。
- ⏱ 2025-09-16 10:05:34
梦寐以求的编程语言
- 📌 这种语言的句法短到令人生疑。你输入的命令中,没有任何一个字母是多余的,甚至用到Shift键的机会也很少。
- ⏱ 2025-09-16 10:06:02
15 设计与研究
📌 如果把创造一种编程语言看成设计问题,而不是科研方向,那么有何不同?
最大的不同在于你会更多地考虑用户。在设计的时候,一开始总是问:“我为谁设计?他们需要什么?”比如,优秀的建筑师不会先设计,然后强迫用户接受,而是先研究最终用户的需求,然后做出用户需要的设计。
注意,我说的是“用户需要的设计”,而不是“用户要求的设计”。我不想让读者产生一种印象,认为设计师就像厨师一样,顾客点什么菜就一模一样地做出来。艺术的各个领域有着巨大的差别,但是我觉得任何一个领域的最佳作品都不可能由对用户言听计从的人做出来。- ⏱ 2025-09-16 10:07:02
📌 有一句话说“顾客永远是对的”,这是指评价优秀设计的标准是看它能够在多大程度上满足用户的需求。如果你的小说没人爱看,或者你做的椅子极不舒服,那么就说明你的作品失败了,就算你的小说(或者椅子)有着最先进的理论指导也无济于事。
可是,让用户满意并不等于迎合用户的一切要求。用户不了解所有可能的选择,也经常弄错自己真正想要的东西。做一个好的设计师就像做一个好医生一样。你不能头痛医头,脚痛医脚。病人告诉你症状,你必须找出他生病的真正原因,然后针对病因进行治疗。
大多数优秀设计是这样产生的,它们关注用户,并且以用户为中心。- ⏱ 2025-09-16 10:07:21
📌 如果目标用户群体涵盖了设计师本人,那么最有可能诞生优秀设计。如果目标用户与你本人差别很大,你往往会假定目标用户的需求比你本人的需求更简单,而不是更复杂。低估用户(即使出于善意)一般来说总是会让设计师出错。我怀疑那些设计公共住宅项目(housing project)的建筑师根本没想过自己住在里面会是什么感觉。编程语言也有这种现象。C、Lisp和Smalltalk都是设计者为了自己使用而设计的,而Cobol、Ada和Java则是为了给别人使用而设计的。
- ⏱ 2025-09-16 10:07:42
📌 为了做出优秀的设计,你必须贴近用户,始终寸步不离,永远站在用户的角度调整自己的构想。19世纪英国作家简·奥斯汀的小说为何如此出色?一个原因就是她把自己的作品大声读给家人听,所以她就不会陷入孤芳自赏难以自拔的境地,不会长篇累牍地赞叹自然风光,也不会滔滔不绝地宣扬自己的人生哲学。(事实上,奥斯汀还是在小说里宣扬了自己的人生哲学,不过她把它编进故事之中,而不是直接像贴标签那样讲出来。)你可以随便找一本平庸的“文学”读物,想象一下把它当作自己的作品读给朋友们听,这样会让你真切地感受到那些“文学”读物高高在上的视角,读者必须承受所有沉重的负担才能阅读这些作品。
- ⏱ 2025-09-16 10:08:34
📌 与之对照,还有另一种软件设计思想,也许可以被称为“万福玛丽亚”模式。它不要求尽快拿出原型,然后再逐步优化,它的观点是你应该等到完整的成品出来以后再一下子隆重地推向市场,就像圣母玛丽亚降临一样,哪怕整个过程漫长得像橄榄球运动员长途奔袭、达阵得分也没有关系。在互联网泡沫时期,无数创业公司因为相信了这种模式而自毁前程。我还没听说过有人采用这种模式而获得成功。
- ⏱ 2025-09-16 10:09:06
📌 我的一位美术启蒙老师告诉我:如果你觉得画某样东西很乏味,那么你画出来的东西就会真的很乏味。假设你必须画一幢建筑物,你决定从每一块砖头开始画起。你觉得自己可以坚持下去,但是画到一半的时候突然感到很厌倦,于是你就不再认真观察每块砖头并画出它们各自不同的特点,而是以一种机械重复的方式草草地把砖头画完了事。这样一来,你的作品效果就很差,甚至还不如一开始就不采用写实手法,只是若隐若现地暗示砖头的存在
- ⏱ 2025-09-16 10:09:46
📌 大多数画家是先画一个草图,然后再逐步加工。如果你采用这种方式,那么从理论上说,你每天收工的时候都可以看到整体的效果,不会对最后的成品一点感觉都没有。跟你说实话吧,画家之间甚至流传着一句谚语:“画作永远没有完工的一天,你只是不再画下去而已。”第一线的程序员对于这种情况真是再熟悉不过了。
- ⏱ 2025-09-16 10:10:15
术语表
📌 Bug:程序包含的错误。它的历史甚至比计算机还要悠久。20世纪早期的百老汇舞台剧就经常说“把bug处理了”。
- ⏱ 2025-09-16 10:11:07
📌 JavaScript:一种针对浏览器的脚本语言,由布兰登·艾奇(Brendan Eich)设计。它与Java语言并没有内在联系,而且本身在很多方面都有设计缺陷。它的名声也不太好,因为许多网站用它干见不得人的勾当。
- ⏱ 2025-09-16 10:11:33
📌 Linux:Unix操作系统的一个开源版本。讲究一点的话,它应该被称为GNU Iinux,因为它的内核部分是由林纳斯·托瓦兹(linus Torvalds)编写的,但是其他更大量的代码来自理查德·斯托曼(Richard Stallman)的GNU项目。
- ⏱ 2025-09-16 10:11:55
📌 Parkinson’s Law帕金森定律:完成一项任务所需要的资源会不断扩展,直至把这种资源消耗光为止。
- ⏱ 2025-09-16 10:12:21
📌 QA/Quality Assurance质量保证:软件行业中负责找出和登记bug的人。
- ⏱ 2025-09-16 10:13:26
📌 RAID/Redundant Array of Independent Disks独立磁盘冗余阵列:一种硬件,将多个硬盘模拟成单硬盘,(理论上)避免了硬盘崩溃。
- ⏱ 2025-09-16 10:13:36
📌 Recursive递归:一种调用自身的算法。警察审讯犯人时就会用到递归。警察先问犯人是否知道案件的情况,或者是否知道谁干的,如果犯人回答知道,那么继续这样问下去。
- ⏱ 2025-09-16 10:13:59
📌 Spaghetti Code面条式代码:扭曲缠绕在一起的代码,没有人能够读懂,包括作者本人。
- ⏱ 2025-09-16 10:14:32
贝叶斯推断与过滤垃圾邮件
📌 贝叶斯推断与其他统计学推断方法截然不同。它建立在主观判断的基础上,也就是说,你可以不需要客观证据,先估计一个值,然后根据实际结果不断修正。正是因为它的主观性太强,曾经遭到许多统计学家的诟病。
- ⏱ 2025-09-16 10:15:52
📌 要理解贝叶斯推断,必须先理解贝叶斯定理。后者实际上就是计算“条件概率”的公式。
所谓条件概率,就是指在事件发生的情况下,事件发生的概率,用来表示。- ⏱ 2025-09-18 09:54:53
📌 我们把称为“先验概率”,即在事件发生之前,我们对事件发生概率的一个判断。称为“后验概率”,即在事件发生之后,我们对事件发生概率的重新评估。称为“可能性函数”,这是一个调整因子,使得预估概率更接近真实概率。
所以,条件概率可以理解成下面的式子:
后验概率=先验概率×调整因子
这就是贝叶斯推断的含义。我们先预估一个先验概率,然后加入实验结果,看这个实验到底是增强了还是削弱了先验概率,由此得到更接近事实的后验概率。
在这里,如果可能性函数,意味着先验概率被增强,事件发生的可能性变大;如果可能性函数=1,意味着事件无助于判断事件发生的可能性;如果可能性函数<1,意味着先验概率被削弱,事件发生的可能性变小。- ⏱ 2025-09-18 09:56:36