《黑客与画家》重读书摘

《黑客与画家》重读书摘

很早之前就看过《黑客与画家》,但彼时的我并不能很好的理解和了解这本书到底在讲些什么。时至今日,当我在践行独立开发者的时候,我才真正意识到为什么这本书如此值得读。

推荐序 “黑客精神”过时了吗?答案是永远不会

  • 黑客精神的真谛是动手去创造性地解决问题。“解决问题”必须跟人的需求有关,需要持久地满足越来越多人的需求。“动手”需要有勇气,很务实,以行动为导向,除此以外,黑客还必须是一个积极向上的人。

保罗·格雷厄姆其人其事

  • “运营创业公司,每天都像在战斗;而为大公司工作,就像在窒息中挣扎。”
  • 保罗·格雷厄姆有一套完整的创业哲学,他的创业公式是: (1)搭建原型; (2)上线运营(别管bug); (3)收集反馈; (4)调整产品; (5)成长壮大。
  • 所有学员刚刚来到YC的时候,每人都会拿到一件白色T恤衫,上面写着“Make something people want”(制造用户需要的东西),等到他们的项目得到风险投资以后,又会收到一件黑色T恤衫,上面写着“I made something people want”(我制造了用户需要的东西)。

精装版译者序 向着未来而生

  • 未来就在眼前,伸手可及。《黑客与画家》就是这次旅程的指南,为你指出通往那扇门的方向。正如格雷厄姆所说,你要做的就是“活在未来,然后造出现在还没有的部分”(Live in the future, then build what’s missing)。 阮一峰 2

平装版译者序

  • 黑客行为必须包含三个特点:好玩、高智商、探索精神。只有其行为同时满足这三个标准,才能被称为“黑客”。
  • 《黑客:计算机革命的英雄》(Hackers: Heroes of the Computer Revolution)
  • 在该书中,他进一步将黑客的价值观总结为六条“黑客伦理”(hacker ethic),直到今天这几条伦理都被视为这方面的最佳论述。 (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.)

1 为什么书呆子不受欢迎

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

2 黑客与画家

  • 黑客与画家的共同之处,在于他们都是创作者。与作曲家、建筑师和作家一样,黑客和画家都试图创作出优秀的作品。他们本质上都不是在做研究,虽然在创作过程中,他们可能会发现一些新技术(那样当然更好)。
  • 所以,大学和实验室里的黑客,就不去做那些真正想做的事情(设计优美的软件),而是觉得自己应该写一些研究性的论文。
  • 优美的软件并不总是论文的合适题材。首先,科学研究必须具有原创性。写过博士论文的人都知道,确保自己正在开垦新领地的方法,就是去找那些没有人要的土地。其次,科学研究必须是能够产生大量成果的,而那些不成熟、障碍重重的领域最容易写出许多篇论文,因为你可以写那些为了完成工作而不得不克服的障碍。没有什么比一个错误的前提更容易产生大量待解决的问题了。
  • 创造优美事物的方式往往不是从头做起,而是在现有成果的基础上做一些小小的调整,或者将已有的观点用比较新的方式组合起来。这种类型的工作很难用研究性的论文表达。
  • 经过岁月的洗礼,优美的东西生存发展的机会更大,丑陋的东西往往会被淘汰。
  • 人们无法考核你的工作,甚至误解你的工作,都不是最糟的事。更大的危险是你自己也会误解自己的工作。
  • 我发现,黑客新想法的最佳来源,并非那些名字里有“计算机”三个字的理论领域,而是其他创作领域。与其到“计算理论”领域寻找创意,你还不如在绘画中寻找创意。
  • 它意味着,编程语言首要的特性应该是允许动态扩展。编程语言是用来帮助思考程序的,而不是用来表达你已经想好的程序。它应该是一支铅笔,而不是一支钢笔。如果大家都像学校教的那样编程,那么静态类型4是一个不错的概念。
  • 我们需要的是一种可以随意涂抹、擦擦改改的语言,我们不想正襟危坐,把一个盛满各种变量类型的茶杯,小心翼翼放在自己的膝盖上,为了与一丝不苟的编译器大婶交谈,努力地挑选词语,确保变量类型匹配,好让自己显得礼貌又周到。
  • 直到最近我才发现这一点。雅虎收购Viaweb的时候,他们问我想做什么。我对商业活动从来都没有太大兴趣,就回答说我想继续做黑客。等我来到雅虎以后,发现在他们看来,“黑客”的工作就是用软件实现某个功能,而不是设计软件。在那里,程序员被当作技工,职责就是将产品经理的“构想”(如果这个词是这么用的话)翻译成代码。
  • 真正竞争软件设计的战场是新兴领域的市场,这里还没有人建立过防御工事。只要你能做出大胆的设计,由一个人或一批人同时负责设计和实现产品,你就能在这里战胜大公司。微软公司自己一开始就是这样走向成功的,苹果公司和惠普公司也是如此。我觉得几乎所有的创业公司都是这样取得成功的。
  • 所有创作者都面临这个问题。价格是由供给和需求共同决定的。好玩的软件的需求量,比不上解决客户麻烦问题的软件的需求量;
  • 黑客如何才能做自己喜欢的事情?我认为这个问题的解决方法是一个几乎所有创作者都知道的方法:找一份养家糊口的“白天工作”(day job)。这个词是从音乐家身上来的,他们晚上表演音乐,所以白天可以找一份其他工作。更一般地说,“白天工作”的意思是,你有一份为了赚钱的工作,还有一份为了爱好的工作。
  • 几乎所有的创作者在职业生涯的早期都有一份“白天工作”。画家和作家尤其显著。如果幸运的话,你能找到一份与你的“真正工作”非常相关的“白天工作”。音乐家似乎常常是在唱片行工作。同样,钻研某种编程语言或操作系统的黑客,很可能会得到一份使用这些工具的“白天工作
  • 令我惊讶的是,雇主都很犹豫,不愿意手下的黑客为开源软件项目工作。但是,在Viaweb,要是你不愿意这样干,我们会很犹豫要不要雇用你。我们在面试程序员时,主要关注的事情就是业余时间他们写了什么软件,因为如果你不爱一件事,你不可能把它做得真正优秀,要是你很热爱编程,你就不可避免地会开发你自己的项目。7
  • 我想大多数创作者是这样学习和工作的,作家和建筑师似乎都是如此。也许对于黑客来说,采取像画家这样的做法很有好处:应该定期地从头开始,而不要长年累月地在一个项目上不断工作,并且试图把所有的最新想法都以修订版的形式包括进去。
  • 绘画还有一个值得借鉴的地方:一幅画是逐步完成的。通常一开始是一张草图,然后再逐步填入细节。但是,它又不单纯是一个填入细节的过程。有时,原先的构想看来是错的,你就必须动手修改。无数古代油画放在X光下检视,就能看出修改痕迹,四肢的位置被移动过,或者脸部的表情经过了调整。 绘画的这个创作过程就值得学习。我认为黑客也应该这样工作。你不能盼望先有一个完美的规格设计,然后再动手编程,这样想是不现实的。如果你预先承认规格设计是不完美的,在编程的时候,就可以根据需要当场修改规格,最终会有一个更好的结果。(大公司的内部结构,使得它们很难这样做。这是创业公司的又一个优势。)
  • 如果黑客只是一个负责实现领导意志的技术工人,职责就是根据规格说明书写出代码,那么他其实与一个挖水沟的工人是一样的,从这头挖到那头,仅此而已。但是,如果黑客是一个创作者,他从事的就不是机械性的工作,他必须具备灵感。
  • 黑客就像画家,工作起来是有心理周期的。有时候,你有了一个令人兴奋的新项目,你会愿意为它一天工作16个小时。等过了这一阵,你又会觉得百无聊赖,对所有事情都提不起兴趣。
  • 对于画家和黑客这样的创作者,有些工作需要投入巨大的热情,另一些工作则是不需要很操心的日常琐事。在你厌倦的时候再去做那些比较容易的工作,这是一个不错的主意。
  • 消灭bug的过程就像解一道数学题,已知许许多多的约束条件,你只要根据条件对方程求解就可以了。
  • 正确的合作方法是将项目分割成严格定义的模块,每一个模块由一个人明确负责。模块与模块之间的接口经过精心设计,如果可能的话,最好把文档说明写得像编程语言规范那样清晰。
  • 了解别人对于事情的看法,并不代表你为他的利益服务。在某些情况下,比如在打仗的时候,了解对手正是为了打击对手12
  • 大多数创作者是为人类用户而创作。为了吸引用户,你必须理解用户需要什么。
  • 普通黑客与优秀黑客的所有区别之中,会不会“换位思考”可能是最重要的单个因素。有些黑客很聪明,但是完全以自我为中心,根本不会设身处地为用户考虑。这样的人很难设计出优秀软件,因为他们不从用户的角度看待问题。
  • 软件的部分功能就是解释自身。为了写出优秀的软件,你必须假定用户对你的软件基本上一无所知。你要明白,用户第一次使用你的软件的时候,不会预先做好功课,他们没有任何准备就开始用了,所以软件的使用方式最好能符合用户的直觉,别指望用户去读使用手册。
  • 程序必须写得能够供人们阅读,偶尔供计算机执行。

机制

  • 我并不是说斗争从来就与思想无关,而是要强调,不管实际上是否有思想斗争,斗争总是会以思想斗争的形式表现出来。正如刚刚过气的时尚并非一点儿也不时尚,失败一方的思想其实也并非一无是处。

为什么这样做

  • 在科学领域,质疑他人的结论和公认的假设是尤其重要的一件事,会提供巨大的科学创造的机会。科学家(或者至少是优秀科学家)做事的方式,准确地说,就是寻找传统观点无法自圆其说的地方,然后试着拆开那里,看个究竟,瞧瞧里面到底出了什么问题。新的理论就是这样产生的。
  • 一个好的科学家,并不仅仅是避开传统观点,还要努力打破传统观点。科学家就是要自找麻烦。这应该是任何学者的研究方式,但是科学家似乎特别愿意一探究竟。
  • 智力越高的人,越愿意去思考那些惊世骇俗的思想观点
  • 做出伟大产品的公司,自我评价往往以“批评”和“自嘲”为主,而不是以“肯定”和“表扬”为主。

守口如瓶

  • 讨论一个观点会产生更多的观点,不讨论就什么观点也没有。所以,如果可能的话,你最好找一些信得过的知己,只与他们畅所欲言、无所不谈。这样不仅可以获得新观点,还可以用来选择朋友。能够一起谈论“异端邪说”并且不会因此气急败坏的人,就是你最应该认识的朋友。

永远质疑

  • 所谓“流行”(传统观念也是一种流行),本质上就是自己看不见自己的样子,否则就不会有流行了。
  • 如果自己就是潮水的一部分,怎么能看见潮流的方向呢?你只能永远保持质疑:什么话是我不能说的?为什么?

4 良好的坏习惯

  • 对于适当的不服从管教保持宽容,这不会有太大的坏处,反而很有利于造就美国的国家优势,它使得美国不仅能吸引聪明人,还能吸引那些很自负的人。
  • 计算机确实是非常精确、有条不紊的,但是黑客的所作所为完全出于兴趣,想到哪里就做到哪里,没有明确的计划,只求开心。
  • 在我看来,一个人们拥有言论自由和行动自由的社会,往往最有可能采纳最优方案,而不是采纳最有权势的人提出的方案。

用户的胜利

  • 在我家附近,一辆汽车的保险杠上贴着一张粘纸,上面写着“不方便,毋宁死”(death before inconvenience)。在大多数时候,大多数人总是选择最省事的做法。如果互联网软件能够击败桌面软件,一定是赢在更方便这一优势上。无论从用户的角度还是从开发者的角度来看,都是如此。

软件的发布

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

客户支持

  • Viaweb不是这样。我们的客户支持是免费的,因为我们希望知道用户的反应。如果他们使用时遇到困难,我们希望立刻知道,这样就能再现错误,从而解决问题并发布新版本。
  • 我们的这种方法让所有人都感到满意。客户很高兴,拨打厂商服务热线是免费的,而且还被当作通风报信的人,受到郑重对待;客服人员也喜欢这样,因为这使得他们可以帮助用户,而不是对着用户读操作手册;程序员喜欢这样,因为他们能够再现bug,而不是通过模糊不清的二手报告了解bug。

全身心投入

  • 如果软件的新版本要等到一年后才能发布,我就会把大部分新构思束之高阁,至少过上一段时间再来考虑。但是,构思这种东西有一个特点,那就是它会导致更多的构思。你有没有注意过,在坐下来写东西的时候,一半的构思是写作时产生的?软件也是这样。实现某个构思,会带来更多的构思。所以,将一个构思束之高阁,不仅意味着延迟它的实现,还意味着延迟所有在实现过程中激发的构思。事实上,将一个构思束之高阁,甚至会限制新构思的产生,因为你看一眼堆放在一边还没有实现的构思,就会想“我已经为下一个版本准备了很多有待实现的新东西”,你就懒得再思考更多的新功能了。
  • 大公司的做法不是立刻实现新功能,而是先为新功能做一个计划。Viaweb就因此而遇到了麻烦。投资者和分析家会问,你们对未来有何计划。真实的回答是,我们没有任何计划。我们有改进的想法,但是如果我们想到应该怎么改进,就已经把它实现了。接下来6个月我们要做什么?进行所有能想到的最佳改进。我不知道自己是否有胆量公开这么说,但这是实话。计划这个词,只是将构思束之高阁的另一种表达方式。只要想到好的构思,我们就会立刻着手实现。
  • 当然,这样写软件也有局限。它适用于小型的、由优秀且可靠的程序员组成的开发团队,不适用于大型的、充斥着大量平庸之辈的软件公司,在那里不是程序员想出好的构思,而是一个委员会集体批准坏的构思。

逆向的《人月神话》9

  • 开发软件需要的程序员人数减少,不仅意味着会省下更多的钱。正如《人月神话》一书中所指出的,向一个项目增加人手,往往会拖慢项目进程。随着参与人数的增加,人与人之间需要的沟通成本呈现指数级增长。人数越来越多,开会讨论各个部分如何协同工作所需的时间越来越长,无法预见的互相影响越来越大,产生的bug也越来越多

金钱问题

  • 软件公司有时会采用分销模式,让ISP分销互联网软件。这样做很不好。服务器必须在你自己的控制之中,因为你需要不断改进硬件和软件。如果你放弃对服务器的直接控制,就放弃了互联网软件的大部分优势。

目标客户

  • 不少公司很想知道,什么事情可以外包,什么事情不可以外包。一个可能的答案是,公司内部所有不直接感受到竞争压力的部门都应该外包出去,让它们暴露在竞争压力之下。(我这里所说的“外包”,指的是聘请另一个公司来执行,而不是指把业务部门转移到海外。)

创业公司

  • 开发互联网软件的创业公司会把与创业有关的每一件事做到极致。只用更少的人、更少的钱,就可以把软件写出来,并且开始运作。你必须打破常规、快速行动,循规蹈矩不可能成功。你完全能够在只有三个人的情况下让产品开始运营,你们唯一的办公场所就是一间公寓,里面放着一台连着ISP的服务器。我们就是这样做的。
  • 纵观创业公司的历史,你会发现它们变得越来越小,越来越快,越来越不像正规的企业

为什么不尝试一下

  • 如果你是一个黑客,并且梦想自己创业,可能会有两件事情令你望而却步,不敢真正开始采取行动。一件是你不懂得管理企业,另一件是你害怕竞争。可是实际上,这两件事都是没有通电的电篱笆。
  • 做出用户喜欢的产品,保证开支小于收入。
  • 从制造简洁的产品着手,首先要保证你自己愿意使用。然后,迅速地做出1.0版,并且不断加以改进,整个过程中密切倾听用户的反馈。用户总是对的,但是不同的用户要求不一样。低端的用户要求简化操作和清晰易懂,高端的用户要求你增加新功能。软件最大的好处就是让一切变得简单。但是,做到这一点的方法是正确设置默认值,而不是限制用户的选择。如果竞争对手的产品很糟糕,你也不要自鸣得意。比较软件的标准应该是看对手的软件将来会有什么功能,而不是现在有什么功能。无论何时,你都要使用自己的软件。
  • 只有懂得设计的黑客,才能设计软件,不能交给对软件一知半解的设计师。如果你不打算自己动手设计和开发,那就不要创业。

运气的成分

  • 通过创造有价值的东西而致富,这种方法的优势不仅仅在于它是合法的(许多其他方法如今都是不合法的),还在于它更简单,你只需要做出别人需要的东西就可以了。

金钱不等于财富

  • 创造有价值的东西就是创造财富。你最好先搞清楚什么是财富。
  • 我这里指的只是一种特定的技术层面上的“财富”——人们用金钱和你交换的东西。这是一种很有趣、很值得研究的财富,因为它使得你免于饥饿,而且人们是否用金钱交换这种财富取决于他们,不取决于你。

手工艺人

  • 程序员坐在计算机前就能创造财富。优秀软件本身就是一件有价值的东西。

工作是什么

  • 当你为一家公司工作时,这也是你所做的事情。但是,公司内部的各种层级使得这一点有时不容易觉察到。你在公司内部所做的工作是与许多人一起合作完成的,你只是其中的一分子。你觉得自己是为公司的需要而工作,可能不会觉察到你其实是为了满足顾客的某种需求而工作。你的贡献也许不是直接性的,但是公司作为一个整体必须提供某种人们需要的东西,否则不可能盈利。

可测量性和可放大性

  • 任何一个通过自身努力而致富的个人,在他身上应该都能同时发现可测量性和可放大性。

小团队 = 可测量性

  • 整家公司产生的收入是可以测量的,如果公司只有一个员工,那么就可以准确知道他的贡献了。所以,公司越小,你就越能准确估计每个人的贡献。一家健康的创业公司可能只有10个员工,那么影响收入的人员因子最多也只有10。

用户数量

  • 风险投资商有一张清单,上面写满了各种表示不应该收购的危险信号。排在榜首的信号中有一个就是公司由技术顽童掌控,只想解决有趣的技术问题,不考虑用户的需要。你开办创业公司不是单纯地为了解决问题,而是为了解决那些用户关心的问题
  • 将公司管理视同软件优化还能帮你避免风险投资人担心的另一个陷阱——开发某种产品的时间过长。现在,黑客都已经熟知这一点,并总结出一个术语“过早优化”。尽快拿出1.0版,然后根据用户的反映而不是自己的猜测优化软件。

财富和权力

  • 还记得从经济学观点看什么是创业公司吗?简单地说,就是可以让人更快速工作的地方。

偷窃

  • 中产阶级的出现使得财富总量不再是一个固定不变的值,财富的分配也不再是一种零和游戏。苹果公司的两个创始人乔布斯和沃兹尼亚克没有使得他人变得更贫穷就赚到了钱。事实上,他们创造出来的东西使得人类的物质生活变得更富有。他们只能这样做,否则不会有人付钱给他们的。

技术的杠杆效应

  • 无法被技术变得更便宜的唯一东西,就是品牌。
  • 大学入学申请制度的设计者应该参考计算机安全行业的做法,不要假设你的系统毫无漏洞,而是搞清楚多大程度上漏洞无法被利用

公理的不同意见

  • 现代社会的收入差距扩大是一种健康的信号
  • 技术使得生产率的差异加速扩大,如果这种扩大没有反映在收入上面,只有三种可能的解释:(a)技术革新停顿了;(b)那些创造大部分财富的人停止工作了;(c)创造财富的人没有获得报酬。
  • 总的来说,你要避免的是绝对贫穷,而不是相对贫穷。

8 防止垃圾邮件的一种方法1

  • 数学家诺伯特·维纳(Norbert Wiener)说,如果你与奴隶比赛,你也会变成一个奴隶

9 设计者的品味

  • 我朋友的意思是,他想要的学生不仅应该技术过硬,还应当能够使用技术做出优美的产品
  • 好设计是简单的设计。从数学领域到绘画领域,你都可以听到这种说法。在数学中,它意味着简短的证明往往是更好的证明
  • 好设计是永不过时的设计。只要没有错误,每一个数学证明都是永不过时的
  • 好设计是启发性的设计。英国女作家简·奥斯汀的作品几乎不带有任何描述
  • 好设计通常是有点趣味性的设计。
  • 好设计是艰苦的设计。如果观察那些做出伟大作品的人,你会发现他们的共同点就是工作得非常艰苦。如果你工作得不艰苦,你可能正在浪费时间。困难的问题需要巨大的付出才能解决,高难度的数学证明需要结构非常精细的解决方法(往往做起来很有趣),工程学也是如此
  • 好设计是看似容易的设计。优秀运动员比赛时,让人觉得他轻轻松松就获胜了,优秀设计师也是如此,他们的工作看上去很容易
  • 好设计是对称的设计
  • 在数学和工程学中,递归尤其有用。归纳式证明方法既简洁又美妙。在软件中,能用递归解决的问题通常代表已经找到了最佳解法。
  • 好设计是模仿大自然的设计
  • 设计是模仿大自然的设
  • 写实的目的不是给生活留下一模一样的记录,而是为你的思想提供一个咀嚼点:你的眼睛看着某样东西,你的手就代表你的思想,画出一些比较有意思的内容。
  • 好设计是一种再设计。很少有人一次就把事情做对。专家的做法是先完成一个早期原型,然后提出修改计划,最后把早期原型扔掉
  • 扔掉早期原型是需要信心的,你必须有本事看出什么地方还可以改进。举例来说,刚刚开始学画的人往往不愿意重画画错的地方。他们觉得能画成现在这样已经很不错了,如果重画某些部分,结果可能还不如现在。所以,他们就说服自己,我的画已经过得去了,没准别人也会这么看
  • 犯错误是很正常的事情。你不要把犯错看成灾难,要勇于承认、勇于改正
  • 设计是能够复制的设计。我们对待复制的态度经常是一个否定之否定的过程。刚入门的新手不知不觉地模仿他人,逐渐熟练之后才开始创作原创性作品。最后他会意识到,把事情做对比原创更重要
  • 等到你逐渐对一件事产生热情的时候,就不会满足于模仿了。你的品味就进入了第二阶段,开始自觉地进行原创。
  • 你最后发展出来的风格是自然而然形成的
  • 好设计是成批出现的。
  • 推动人才成批涌现的最大因素就是,让有天赋的人聚在一起,共同解决某个难题。互相激励比天赋更重要,达·芬奇之所以成为达·芬奇,主要原因不仅仅是他的天赋,更重要的是他生活在当时的佛罗伦萨,而不是米兰。今天,人类生活的流动性高得多,但是伟大的项目依然不成比例地集中在少数几个热点上:德国包豪斯建筑学院、“曼哈顿计划”、《纽约客》杂志、洛克希德公司的臭鼬工作室、施乐公司的帕洛阿尔托研究中心。
  • 好设计常常是大胆的设计。在任何一段历史中,人们都会把某些荒谬的东西当作正确的,并且深信不疑,以至于一旦你出言质疑,就有被排挤或者被暴力伤害的危险。

面向对象编程

  • 允许你做某事的语言肯定不差于强迫你做某事的语言,所以至少在这方面我们可以得到明确的结论:你应该使用允许你面向对象编程的语言。至于你最后到底用不用则是另外一个问题了。

11 一百年后的编程语言

  • 我认为,基本运算符是一种语言能否长期存在的最重要因素,其他因素都不是决定性的。这有点像买房子的时候你应该先考虑地理位置。别的地方将来出问题都有办法弥补,但是地理位置是没法变的
  • essay(论文)这个词来自法语的动词essayer,意思是“试试看”。从这个原始意义来说,论文就是你写一篇文章,试着搞清楚某件事。软件也是如此。我觉得一些最好的软件就像论文一样,也就是说,当作者真正开始动手写这些软件的时候,他们其实不知道最后会写出什么结果。
  • 效率低下的软件并不等于很烂的软件。一种让程序员做无用功的语言才真正称得上很烂。浪费程序员的时间而不是浪费机器的时间才是真正的无效率。随着计算机速度越来越快,这会变得越来越明显

秘密武器

  • 我们唯一擅长的事情就是开发软件。我们希望这一点可以弥补我们的劣势。任何在软件开发上面有助于我们获得优势的事情我们都不能放过。

创业公司的合气道7

  • 编程语言是技术和宗教的混合物

朝着数学的方法发展

  • Lisp和Fortran代表了编程语言发展的两大方向。前者的基础是数学,后者的基础是硬件架构。从那时起,这两大方向一直在互相靠拢。Lisp语言刚设计出来的时候就很强大,接下来的20年它提高了运行速度。

随大流的代价

  • 因此,语言的编程能力越强大,写出来的程序就越短(当然不是指字符数量,而是指独立的语法单位

一个诀窍

  • 在大型组织内部,有一个专门的术语描述这种跟随大多数人的选择的做法,叫作“业界最佳实践”。这个词出现的原因其实就是为了让你的经理可以推卸责任。既然我选择的是业界最佳实践,如果不成功,项目失败了,那么你也无法指责我,因为做出选择的人不是我,而是整个业界

可编程性

  • 一种真正优秀的编程语言应该既整洁又混乱。“整洁”的意思是设计得很清楚, 内核由数量不多的运算符构成,这些运算符易于理解,每一个都有很完整的独立用途。“混乱”的意思是它允许黑客以自己的方式使用。C语言就是这样的例子,早期的Lisp语言也是如此。真正的黑客语言总是稍微带一点放纵不羁的个性。

再设计

  • 就算委员会只有两个人,还是会妨碍“再设计”,典型例子就是软件内部的各个接口由不同的人负责。这时除非两个人都同意改变接口,否则接口就无法改变。因此现实中,尽管软件功能越来越强大,内部接口却往往一成不变,成为整个系统中拖后腿的部分

15 设计与研究

  • 设计与研究的区别看来就在于,前者追求“好”,后者追求“新”。优秀的设计不一定很“新”,但必须是“好”的;优秀的研究不一定很“好”,但必须是“新”的。我认为这两条道路最后会发生交叉:只有应用“新”的创意和理论,才会诞生超越前人的最佳设计;只有解决那些值得解决的难题(也就是“好”的难题),才会诞生最佳研究。所以,最终来说,设计和研究都通向同一个地方,只是前进的路线不同罢了。
  • 在软件领域,贴近用户的设计思想被归纳为“弱即是强”(Worse is Better)模式2。这个模式实际上包含了好几种不同的思想,所以至今人们还在争论它是否真的成立。但是, 其中有一点是正确的,那就是如果你正在设计某种新东西,就应该尽快拿出原型,听取用户的意见。
  • 士气是设计的关键因素。令我吃惊的是,大家很少提到这一点。我的一位美术启蒙老师告诉我:如果你觉得画某样东西很乏味,那么你画出来的东西就会真的很乏味。假设你必须画一幢建筑物,你决定从每一块砖头开始画起。你觉得自己可以坚持下去,但是画到一半的时候突然感到很厌倦,于是你就不再认真观察每块砖头并画出它们各自不同的特点,而是以一种机械重复的方式草草地把砖头画完了事。这样一来,你的作品效果就很差,甚至还不如一开始就不采用写实手法,只是若隐若现地暗示砖头的存在
  • 先做出原型,再逐步加工做出成品,这种方式有利于鼓舞士气,因为它使得你随时都可以看到工作的成效。在开发软件的时候,我有一条规则:任何时候,代码都必须能够运行。如果你正在写的代码一个小时之后就可以看到运行结果,这好比让你看到不远处就是唾手可得的奖励,你因此会受到激励和鼓舞。
    • nice

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注