其他分享
首页 > 其他分享> > 《黑客与画家》摘录

《黑客与画家》摘录

作者:互联网

gqZOW6.jpg

保罗 · 格雷厄姆有一套完整的创业哲学,他的创业公式是:

  1. 搭建原型
  2. 上线运营(别管 bug)
  3. 收集反馈
  4. 调整产品
  5. 成长壮大

  首先,他鼓励创业公司快速发布产品,因为这样可以尽早知道一个创意是否可行。其次,他认为一定要特别关注用户需要什么,这样才有办法将一个坏项目转变成好项目。

  「黑客」这个词不仅是第一流能力的象征,还包含着求解问题过程中产生的精神愉悦或享受。也就是说,从一开始,黑客就是有精神追求的。自由软件基金会创始人理查德· 斯托尔曼说:「出于兴趣而解决某个难题,不管它有没有用,这就是黑客。」

1 为什么书呆子不受欢迎

  几乎在任何团体中都存在等级关系。成年人在真实世界中形成的团体,一般来说,都存在某个共同目标,团体的领导者往往由最善于实现目标的人担任。学校就不一样,大多数情况下,学生内部形成的团体没有一个共同目标。但是,等级关系却不会缺席,所以孩子们的等级是凭空创造出来的。

  对于书呆子来说,意识到学校并非全部的人生,也是很重要的事情。学校是一个很奇怪的、人为设计出来的体系,一半像是无菌室,一半像是野蛮洪荒之地。它就像人生一样,里面无所不包,但又不是事物的真实样子。它只是一个暂时的过程,只要你向前看,你就能超越它,哪怕现在你还是身处其中。

2 黑客与画家

  在英语中,「建筑师」(architect)和「架构师」(architect)是同一个词,所以这里用的是双关语,意思是优秀程序员不仅负责建造,还负责架构。后一句中的「建筑学」( architecture )也是这种双关用法,同时指「架构学」( architecture )

  创造优美事物的方式往往不是从头做起,而是在现有成果的基础上做一些小小的调整,或者将已有的观点用比较新的方式组合起来。

  程序写出来是给人看的,附带能在机器上运行。

3 不能说的话

  如果你想要清晰地思考,就必须远离人群。但是走得越远,你的处境就会越困难,受到的阻力也会越大,因为你没有迎合社会习俗,而是一步步地与它背道而驰。小时候,每个人都会鼓励你不断成长,变成一个心智成熟、不再耍小孩子脾气的人。但是,很少有人鼓励你继续成长,变成一个怀疑和抵制社会错误潮流的人。
如果自己就是潮水的一部分,怎么能看见潮流的方向呢?你只能永远保持质疑。问自己,什么话是我不能说的?为什么?

4 良好的坏习惯

5 另一条路

  对于互联网软件,没人规定只能使用某些语言开发,因为所有的硬件都控制在你手里,你想要用什么语言,就能用什么语言。不同的语言适合不同的任务,你应该根据不同场合,挑选最合适的工具。

6 如何创造财富

  我们这个世界,你向下沉沦或者向上奋进都取决于你自己,不能把原因推给外界。许许多多不创造任何财富的人——比如本科生、记者和政客——一听到最富有的 5%人口占有全社会一半以上的财富,往往会认定这是 不公平 的。一个有经验的程序员很可能也认为 这是不公平 的。因为最顶尖的 5%的程序员写出了全世界 99%的优秀软件。

  一个大学毕业生总是想「我需要一份工作」,别人也是这么对他说的,好像变成某个组织的成员是一件多么重要的事情。更直接的表达方式应该是「你需要去做一些人们需要的东西」。即使不加入公司,你也能做到。公司不过是一群人在一起工作,共同做出某种人们需要的东西。真正重要的是做出人们需要的东西,而不是加入某个公司。

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

7 关注贫富分化

  如果我可以做选择,到底是生活在一个整体上非常富裕但是我个人相对贫穷的社会,还是生活在一个我个人相对非常富裕但是整体上非常贫穷的社会呢?我会选择第一个选项。如果我有小孩的话,可能哪一个选项更好还值得争论。但是,总的来说,你要避免的是绝对贫穷,而不是相对贫穷。如果必须在这两种社会之间做选择,根据目前的证据,我选择个人相对贫穷、但是整体上更富裕的社会

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

9 设计者的品味

  把品味说成个人的偏好可以有效地杜绝争论,防止人们争执哪一种品味更好。但是问题是,这种说法是不正确的。只要你自己开始动手设计东西,就能明白这一点。

  好设计是简单的设计 。从数学领域到绘画领域,你都可以听到这种说法。在数学中,它表示简短的证明往往是更好的证明。特别是对于数学公理来说,少即是多。在编程中,这种说法也基本适用。

  好设计是永不过时的设计 。只要没有错误,每一个数学证明都是永不过时的。所以,数学家哈代才会说:「丑陋的数学在世界上无法生存。」他的意思与飞机设计师凯利 · 约翰逊的观点是一样的:如果解决方法是丑陋的,那就肯定还有更好的解决方法,只是还没有发现而已。

  好设计是艰苦的设计 。如果观察那些做出伟大作品的人,你会发现他们的共同点就是工作得非常艰苦。如果你工作得不艰苦,你可能正在浪费时间。

  好设计是一种再设计 。很少有人一次就把事情做对。专家的做法是先完成一个早期原型,然后提出修改计划,最后把早期原型扔掉。

  好设计是能够复制的设计 。我们对待复制的态度经常是一个否定之否定的过程。刚入门的新手不知不觉地模仿他人,逐渐熟练之后才开始创作原创性作品。最后他会意识到,把事情做对比原创更重要。

  好设计常常是大胆的设计 。在任何一段历史中,人们都会把某些荒谬的东西当作正确的,并且深信不疑,以至于一旦你出言质疑,就有被排挤或者被暴力伤害的危险。

  只有在成为某个领域的专家之后,你才会听到心里有一个细微的声音说:「这样解决太糟糕了!一定有更好的选择。」不要忽视这种声音,要培育它们。优秀作品的秘诀就是:非常严格的品味,再加上实现这种品味的能力。

10 编程语言解析

  眼下另一个争论的热点则是 面向对象编程 。它是一种不同的组织程序的方法。假定你要写一个程序,计算二维图形的面积。首先,你必须知道到底是圆形还是正方形。一种解决方法是用一整块的代码判断遇到的是什么图形,然后再用相应的公式计算面积。面向对象编程不是这样,它的方法是写出两个 类 ,一个是圆形类,另一个是正方形类,然后每个类里面用一小块代码(叫做 方法 )计算该类图形的面积。求面积的时候,你就问要用哪一个类,然后再使用相应的方法得出最后答案。

11 一百年后的编程语言

  编程语言进化缓慢的原因在于它们并不是真正的技术。语言只是一种书写法,而程序则是一种严格符合规则的描述,以书面形式记录计算机应该如何解决你的问题。所以,编程语言的进化速度更像数学符号的进化速度,而不像真正的技术(比如交通或通信技术)的进化速度。数学符号的进化是缓慢的渐变式变化,而不是真正技术的那种跳跃式发展。

  目前,性能分析并没有受到重视。许多人好像仍然相信,程序运行速度提升的关键在于开发出能够生成更快速代码的编译器。代码效率与机器性能的差距正在不断加大,我们将会越来越清楚地看到,应用软件运行速度提升的关键在于有一个好的性能分析器帮助指导程序开发。

12 拒绝平庸

  如果你为创业公司工作,那么这里有一个评估竞争对手的妙招——关注他们的招聘职位。他们网站上的其他内容无非是一些陈腐的照片和夸夸其谈的文字,但是招聘职位却不得不写得很明确,反映出他们到底想干什么,否则就会引来一大批不合适的求职者。

13 书呆子的复仇

  技术本来就应该是尖端的。正如伊拉恩 · 加内特所说,编程语言的所谓「业界最佳实践」,实际上不会让你变成最佳,只会让你变得很平常。如果你选择的编程语言使得你开发软件的速度只有(选择更激进技术的)对手的几分之一,那么「最佳实践」真的起错了名字。

14 梦寐以求的编程语言

  黑客欣赏的一个特点就是简洁。黑客都是懒人,他们同数学家和现代主义建筑师一样,痛恨任何冗余的东西或事情。有一个笑话说,黑客动手写程序之前,至少会在心里盘算一下哪种语言的打字工作量最小,然后就选择使用该语言。这个笑话其实与真实情况相差无几。就算这真的是个笑话,语言的设计者也必须把它当真,按照它的要求设计语言。

  一种真正优秀的编程语言应该既整洁又混乱。「整洁」的意思是设计得很清楚,内核由数量不多的运算符构成,这些运算符易于理解,每一个都有很完整的独立用途。「混乱」的意思是它允许黑客以自己的方式使用。

  在一些应用程序中,处理器的运算能力是瓶颈,那么最重要的优化对象就是软件的运行速度。但是,一般情况下内存才是瓶颈,你能够同时支持的用户数量取决于用户数据所消耗的内存。编程语言在这方面也能发挥作用,对线程的良好支持将使得所有用户共享同一个内存堆(heap)。持久化对象和语言内核级别的延迟加载( lazy loading )支持也有助于减少内存需求。

  著名散文家 E.B.怀特说过,「最好的文字来自不停的修改」。所有优秀作家都知道这一点,它对软件开发也适用。设计一样东西,最重要的一点就是要经常「再设计」,编程尤其如此,再多的修改都不过分。

15 设计与研究

  设计与研究的区别看来就在于,前者追求「好」(good),后者追求「新」(new)。优秀的设计不一定很「新」,但必须是「好」的;优秀的研究不一定很「好」,但必须是「新」的。我认为这两条道路最后会发生交叉:只有应用「新」的创意和理论,才会诞生超越前人的最佳设计;只有解决那些值得解决的难题(也就是「好」的难题),才会诞生最佳研究。所以,最终来说,设计和研究都通向同一个地方,只是前进的路线不同罢了。

标签:语言,画家,编程语言,一个,黑客,数学,设计,摘录
来源: https://www.cnblogs.com/shanfeng606/p/14798420.html