读《黑客与画家》

Intro

大名鼎鼎的书了,出于兴趣解决问题,那就是黑客。将本书结合起《人月神话》,《人件》等来看尤其有趣,本书作者给程序员描绘了一个更自由更高效的工作模式。即使面对大项目也能快速优雅解决问题。而非陷入人与人的政治斗争,少量精锐的船员远比臃肿的团队更好。读来和devOps也似有联系。

最封闭的泡沫中,斗争最残酷,男人的监狱,女人的社交,以及小孩的校园,当无法通过外界其他方法改变自己时,只能通过不断欺负弱者来保持自己的地位不下跌。

幽默感是强壮的一种表现,始终拥有幽默感就代表你对厄运一笑了之,而丧失幽默感则表示你被厄运深深伤到。

书摘

◆ 保罗·格雷厄姆其人其事

格雷厄姆心想,如果网景公司的设想是正确的,未来人们都在互联网上购物,那么必须有人为零售商们开发软件。所以,他决定开发一个搭建网店的软件。

运营创业公司,每天都像在战斗;而为大公司工作,就像在窒息中挣扎。

“以前创业很昂贵,你不得不找到投资人才能创业。而现在,唯一的门槛就是勇气。”

◆ 译者序

“出于兴趣而解决某个难题,不管它有没有用,这就是黑客。

◆ 1 为什么书呆子不受欢迎

任何一种艺术,不管是否重要,如果你想要在该领域出类拔萃,就必须全身心投入。

在任何社会等级制度中,那些对自己没自信的人就会通过虐待他们眼中的下等人来突显自己的身份。我已经意识到,正是因为这个原因,在美国社会中底层白人是对待黑人最残酷的群体。

大部分的欺负来自处于下一等级的学生,那些焦虑的中间层。

所以,想要欺负书呆子的人比被欺负的书呆子多得多。

你不去埋头探寻,就不会发现具体的证据,就会永远以为这件事是抽象的。

监狱里的成年人不也照样以强凌弱吗?而且很显然,上层社会的阔太太之间也是如此,在曼哈顿的某些地方,女性之间的交往听来就像高中时代的延续,同样充满了各种算计和勾心斗角。

它的庞大规模使得你做的每件事都能产生真正意义上的效果。

这些场合的成员都好像关在封闭的泡沫之中,所作所为只对泡沫内部有影响,对外部没有影响。那么很自然地,这些场合就会产生野蛮的做法。

大佬们的轶事后人看来大多幽默有趣,尤其在艰难地读过他们著作后 哈哈

约翰·纳什[插图]非常钦佩诺伯特·维纳[插图],就学维纳的样子,经过走廊的时候都用手扶着墙走路。

约翰·纳什[插图]非常钦佩诺伯特·维纳[插图],就学维纳的样子,经过走廊的时候都用手扶着墙走路。

逃离这种空虚生活的唯一方法,就是向它屈服。

一些孩子因为具备所谓的“人格”和“正直”,而受到夸奖,可是他们不是呆得像一头大笨牛,就是轻浮得像一个不动脑筋的吹牛者。

◆ 2 黑客与画家

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

哈哈,大佬也是在写bug呢!

可是我的工作方法看上去却像编程就是在调试。

编程语言是用来帮助思考程序的,而不是用来表达你已经想好的程序。它应该是一支铅笔,而不是一支钢笔。

科学界的每一个人,暗地里都相信数学家比自己聪明。我觉得,数学家自己也相信这一点。最后的结果就是科学家往往会把自己的工作尽可能弄得看上去像数学。对于物理学这样的领域,这可能不会有太大不良影响。但是,你越往自然科学的方向发展,它就越成为一个严重的问题。

黑客就像画家,工作起来是有心理周期的。有时候,你有了一个令人兴奋的新项目,你会愿意为它一天工作16个小时。等过了这一阵,你又会觉得百无聊赖,对所有事情都提不起兴趣。

现实中,这必然意味着你要做其他人需要的事情,而不是你自己想做的事情。

所以,虽然我必须承认,眼下看来艺术家比黑客更酷,但是我们不应忘记,古时候绘画蓬勃发展的那些黄金年代,画家也不是像今天这样酷的。

◆ 道貌岸然

寻找那些一本正经的卫道者,看看他们到底在捍卫着什么。

我们喜欢孩子们看上去天真无邪。

但是,扪心自问,我们向孩子灌输圣诞老人的神话,到底是为了孩子,还是为了我们自己?

你可以想象一下,假定有一个康拉德[插图]式的当代人物,他在非洲当雇佣兵,然后去了尼泊尔当医生,后来又到迈阿密经营夜总会。

◆ 机制

道德禁忌的最大制造者是那些权力斗争中略占上风的一方。你会发现,这一方有实力推行禁忌,同时又软弱到需要禁忌保护自己的利益。

大多数的斗争,不管它们实际上争的是什么,都会以思想斗争的形式表现出来。

第二批接受者就加入进来了,人数比上一批庞大得多,恐惧心在背后驱使着他们。[插图]他们接受流行,不是因为想要与众不同,而是因为害怕与众不同。

◆ 守口如瓶

哈哈,不要和杠精死杠

这时你要明白,自由思考比畅所欲言更重要。如果你感到一定要跟那些人辩个明白,绝不咽下这口气,一定要把话说清楚,结果很可能是从此你再也无法自由理性地思考了。

◆ 笑脸相迎?

《是的,大臣》的名句就是:“yes,and no”

狂热分子试图引诱你说出真心话,但是你可以不回答。如果他们不放手,一定要你回答“到底是赞成还是反对我们”,你不妨以不变应万变:“我既不反对也不赞成。”

避免正面对抗敌人的大部队,只打一些小规模的局部战争。比如,从远处用弓箭骚扰他们就是很好的方法。

一种方法就是逐步把辩论提升到一个抽象的层次。

所有反击方法之中,最好的一种可能就是幽默。狂热分子都有一个共同点:缺乏幽默感。他们无法平静地对待笑话。

◆ 永远质疑

荷兰人认为自己思想开放,但是这种想法本身却什么也证明不了。有谁认为自己的思想不开放?

换言之,在他们看来,所有观点都是可以讨论的,除了那些错的观点。

但是走得越远,你的处境就会越困难,受到的阻力也会越大,因为你没有迎合社会习俗,而是一步步地与它背道而驰。小时候,每个人都会鼓励你不断成长,变成一个心智成熟、不再耍小孩子脾气的人。但是,很少有人鼓励你继续成长,变成一个怀疑和抵制社会错误潮流的人。

◆ 4 良好的坏习惯

经济学里有一条拉弗曲线(Laffer curve),认为随着税率的上升,税收收入会先增加后减少。我认为政府的力量也是如此,随着对公民自由的限制不断上升,政府的力量会先增加后减小。

让我想起黎塞留[插图](Richelieu)或者马萨林[插图](Mazarin)

◆ 5 另一条路

这就是云的趋势吧

我认为,大量的下一代软件都将采用这个模式。甚至最大的输家——微软公司,看来也明白了,部分软件从桌面消失将是不可避免的。

◆ 用户的胜利

“太麻烦,不如死”(death before inconvenience)。

我能比较明显体会到这点都是有了多台电脑之后,才觉得云方便,但是云的问题还是只有网速够快的情况才能用着比较舒服

随着互联网越来越深入人心,桌面模式的弊端也就越来越明显。

“你的电脑”这个概念正慢慢成为过去时,取而代之的是“你的数据”。你应该可以从任何电脑上获取你的数据。或者更准确地说,在任何终端设备上获取你的数据,终端设备不一定是电脑。

协调办公,对于版本管理这些也是很有帮助的啊

大多数用户现在还不了解软件协同办公,否则估计他们会强烈要求大部分应用程序都具备这个功能。

◆ 软件的发布

随着迭代越来越方便,做出最小可运行版本之后即发表,用户也能帮助找到bug

互联网软件的发布规则是:它运行不了,你就无法发布;一旦它能运行了,你就可以立刻发布。

◆ 客户支持

客服人员坐在距离程序员只有9米的地方,知道自己可以随时打断程序员的工作,提交新证实的bug的报告。

与客户能直接交流我感觉很棒啊 哈哈

我们的这种方法让所有人都感到满意。

◆ 全身心投入

唯一的代码保护机制就是你的羞耻心,你不想被同事当成傻瓜,这就足矣。

◆ 关注用户

我研究了用户点击行为,发现在某一个地方,在线试用的用户会停止前进,改为点击浏览器的“后退”按钮。

◆ 金钱问题

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

◆ 目标客户

《禅与摩托车修理》里面就有这样的描述,作者的朋友更愿意用比如德国工程师推荐的配件解决他名牌摩托车刹车失灵的问题,而不是用铝制易拉罐剪成的垫圈,即使易拉罐垫圈的效果更好,更方便也更便宜

有钱的客户倾向于更贵的选择,即使便宜的选择更符合他们的需要,他们也不会买。

有钱的客户倾向于更贵的选择,即使便宜的选择更符合他们的需要,他们也不会买。

◆ 创业公司

互联网软件永远没有收工的那一天,如果你愿意,可以一直干下去,每天忙上16个小时。而且,你能够做到这一点,意味着竞争者也能做到这一点,所以长时间工作变成了一种必需,不得不如此。因为你能做到,所以你必须做到。这简直就是逆向的帕金森定律[插图]。

◆ 为什么不尝试一下?

如果你不打算自己动手设计和开发,那就不要创业。

◆ 可测量性和可放大性

要致富,你需要两样东西:可测量性和可放大性。你的职位产生的业绩,应该是可测量的,否则你做得再多,也不会得到更多的报酬。此外,你还必须有可放大性,也就是说你做出的决定能够产生巨大的效应。

◆ 高科技=可放大性

在实际操作中,这就意味着我们故意选择那些很困难的技术问题。假定软件有两个候选的新功能,它们创造的商业价值完全相同,那么我们总是选择较困难的那个功能。不是因为这个功能能带来更多的收入,而是因为它比较难。

这不仅是创业公司运作的好方法,更是创业公司的本质。风险投资商(VC)知道这个道理,为它起了一个名字——进入壁垒(barriers to entry)。

◆ 用户数量

大多数时候,促成买方掏钱的最好办法不是让买家看到有获利的可能,而是让他们感到失去机会的恐惧。对于买家来说,最强的收购动机就是看到竞争对手可能收购你。我们发现这会使得CEO们连夜行动。次强的动机则是让他们担心如果现在不买你,你的高速成长将使得未来的收购耗资巨大,甚至你本身可能变成一个他们的竞争对手。

◆ 财富和权力

只有在快速获得巨大利益的激励下,你才会去挑战那些困难的问题,否则你根本不愿意去碰它们。

允许赚到大钱的人保住自己的财富。

◆ 7 关注贫富分化

收入差距不是会导致社会割裂并且最终爆发武力冲突吗?

有没有可能,在现代社会中,收入差距拉大实际上是一种健康的信号?

◆ 偷窃

游牧社会是偷别人的牲口,农业社会是征税(和平时期)和直接掠夺(战争时期)。

1530年,亨利八世将修道院的财产分给大臣,这是政治斗争导致财富分配变化的一个例子。不管是战争还是政治斗争,本质上都属于偷窃。

那个年代要赚大钱仍然主要通过贪污,而不是经商

◆ 技术的杠杆效应

技术无法使其变得更便宜的唯一东西,就是品牌。

如今,确实有很多人非常有钱,完全不必再去工作,他们之所以还在工作,不是因为感到社会压力,而是因为无所事事使人感到孤独和消沉。

◆ 公理的不同意见

我想提出一种相反的观点:现代社会的收入差距扩大是一种健康的信号。技术使得生产率的差异加速扩大,如果这种扩大没有反映在收入上面,只有三种可能的解释:(a)技术革新停顿了;(b)那些创造大部分财富的人停止工作了;(c)创造财富的人没有获得报酬。

◆ 9 设计者的品味

喜欢一件东西,却不知道为什么自己喜欢它,原因可能是这件东西是美的,但也可能因为他们的母亲也拥有同样的东西,或者杂志上某个明星使用它,或者仅仅因为它的价格很昂贵。人类的思想就是没有经过整理的无数杂念的混合。

幽默感是强壮的一种表现,始终拥有幽默感就代表你对厄运一笑了之,而丧失幽默感则表示你被厄运深深伤到。

。你需要的是咬牙向前冲刺的痛苦,而不是脚被钉子扎破的痛苦。

好设计是看似容易的设计

科学和工程学的一些最重大的发现在形式上往往很简单,会使得你觉得自己也想到过。

好设计是一种再设计。

这想法很危险。你应该培养对自己的不满。

等到你逐渐对一件事产生热情的时候,就不会满足于模仿了。你的品味就进入了第二阶段,开始自觉地进行原创。

互相激励比天赋更重要

你必须锻炼自己。只有在成为某个领域的专家之后,你才会听到心里有一个细微的声音说:“这样解决太糟糕了!一定有更好的选择。”不要忽视这种声音,要培育它们。

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

◆ 高级语言

编译器不是高级语言唯一的实现方法,另一种方法是使用解释器,它的作用是实时地将代码解释为相应的机器语言,然后一行行运行。相比之下,编译器则是先将整个程序全部翻译成机器语言,然后再运行。

◆ 文艺复兴

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

一般来说与欧洲中世纪进行比较的是中国的战国时代,亡国灭种的压力让贵族们不断推行改革,使得名人辈出,百家争鸣。精彩是精彩但却是以无数百姓的人间悲剧为代价的。随着之后的大一统,人民生活相对稳定,自然对新事物就不那么渴求了,这就是黑暗时代的光明处,在光明时代就成了黑暗吧。

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

◆ 11 一百年后的编程语言

效率低下的软件并不等于很烂的软件。一种让程序员做无用功的语言才真正称得上很烂。浪费程序员的时间而不是浪费机器的时间才是真正的无效率。随着计算机速度越来越快,这会变得越来越明显。

◆ 12 拒绝平庸

当然,那个时候许多人可能都想到过这个主意。但是,就我所知,Viaweb是第一个互联网应用程序。

◆ 秘密武器

在竞争中,你的对手无法理解你的技术优势,这可是再宝贵不过了。商场如战场,对手摸不透你,你的胜算就增加了。

◆ 创业公司的合气道

技术的变化速度通常是很快的。但是,编程语言不一样,与其说它是技术,还不如说是程序员的思考模式。编程语言是技术和宗教的混合物。[插图]所以,一种很普通的编程语言就是很普通的程序员使用的语言,它的变化就像冰山那样缓慢。

◆ 13 书呆子的复仇

软件业有一场永不停息的战斗,书生气的开发者与官僚主义的经理之间总是发生冲突。

那些经理奇迹般地同时具备了两种很常见但很难结合在一起的特点:(a)对技术一无所知;(b)对技术有强烈的个人观点。

◆ 向心力

使用一种不常见的语言会出现的问题我想到了三个:你的程序可能无法很好地与使用其他语言写的程序协同工作;你可能找不到很多函数库;你可能不容易雇到程序员。

到目前为止,大家公认少于10个人的团队最适合开发软件。雇用这样规模的开发团队,只要使用的不是无人知道的语言,应该都不会遇到很大麻烦。

◆ 流行的秘诀

你让人们使用一种他们需要的应用程序,这个程序偏巧就是用某种新语言开发的。

◆ 可编程性(Hackability)

对于制造工具的人来说,总是会有用户以违背你本意的方式使用你的工具。