《黑客与画家:硅谷创业之父paul graham文集》
搞一些好玩的新鲜的技术和东西。
业余时间他们写了什么软件。
编程语言决定思维方式。
利用已有的资源,开发出更好的东西。
提高技术的唯一方式:看代码,写代码。
只要想到好的构思,我们就立刻着手实现。
程序员坐在电脑前就能创造财富。优秀软件本身就是一件有价值的东西。
小团队+高科技
2014-12-31
原文:,其中有一点是正确的,那就是如果你正在设计某种新东西,就应该尽快拿出原型,听取用户的意见。
笔记:
2014-12-31
原文:设计与研究的区别看来就在于,前者追求“好”(good),后者追求“新”(new)。
笔记:
2014-12-31
原文:这种语言以层的方式构建。较高的抽象层透明地构建在较低的抽象层之上。如果需要的话,你可以直接使用较低的抽象层。
笔记:
2014-12-31
原文:这种语言有大量优秀的范例可供学习,而且非常符合直觉,你只需花几分钟阅读范例就能领会应该如何使用此种语言
笔记:
2014-12-31
原文:这种语言的抽象程度很高,使得你可以快速写出一个程序的原型。然后,等到你开始优化的时候,它还提供一个真正出色的性能分析器,告诉你应该重点关注什么地方。你能让多重循环快得难以置信,并且在需要的地方还能直接嵌入字节码。
笔记:
2014-12-31
原文:这种语言的句法短到令人生疑。
笔记:
2014-12-31
原文:代码就解决常见的问题。不管是什么程序,你真正要写的代码几乎都与你自己的特定设置有关,其他具有普遍性的问题都有现成的函数库可以调用。
笔记:
2014-12-31
原文:让我们试着描述黑客心目中梦寐以求的语言来为以上内容做个小结。这种语言干净简练,具有最高层次的抽象和互动性,而且很容易装备,可以只用很少的
笔记:
2014-12-31
原文:一种可能的解决方法是,将软件内部的接口设计成垂直接口而不是水平接口。这意味着软件内部的模块是一个个垂直堆积起来的抽象层,层与层之间的接口完全由其中的一层控制。如果较高的一层使用了较低的一层定义的语言,那么接口就由较低的一层控制;如果较低的一层从属于较高的一层,那么接口就由较高的一层控制。
笔记:
2014-12-31
原文:著名散文家E.B.怀特说过,“最好的文字来自不停的修改”。所有优秀作家都知道这一点,它对软件开发也适用。设计一样东西,最重要的一点就是要经常“再设计”,编程尤其如此,再多的修改都不过分。
笔记:
2014-12-31
原文:效率
笔记:
2014-12-31
原文:函数库
笔记:
2014-12-31
原文:一次性程序的另一个特点就是简洁。
笔记:
2014-12-31
原文:什么样的语言适合写一次性程序?首先,它必须很容易装备。
笔记:
2014-12-31
原文:为了吸引黑客,一种编程语言必须善于完成黑客想要完成的各种任务。这意味着它必须很适合开发一次性程序。这一点可能出乎很多人的意料。所谓一次性程序,就是指为了完成某些很简单的临时性任务而在很短时间内写出来的程序。
笔记:
2014-12-31
原文:一种真正优秀的编程语言应该既整洁又混乱。“整洁”的意思是设计得很清楚,内核由数量不多的运算符构成,这些运算符易于理解,每一个都有很完整的独立用途。“混乱”的意思是它允许黑客以自己的方式使用。C语言就是这样的例子,早期的Lisp语言也是如此。真正的黑客语言总是稍微带一点放纵不羁、不服管敎的个性。
笔记:
2014-12-31
原文:可编程性(Hackability)
笔记:
2014-12-31
原文:黑客欣赏的一个特点就是简洁。
笔记:
2014-12-31
原文:假定你的语言已经能够满足上面三项条件——一种免费的实现,一本相关书籍,以及语言所依附的计算机系统——那么还需要做什么才能使得黑客喜欢上你的语言?
笔记:
2014-12-31
原文:的。第一,不同语言的编程能力不一样。第二,大多数经理故意忽视第一点。你把这两点事实结合起来,其实就得到了赚钱的诀窍。ITA软件公司是运用这个诀窍的典型例子。如果你想在软件业获得成功,就使用你知道的最强大的语言,用它解决你知道的最难的问题,并且等待竞争对手的经理做出自甘平庸的选择。
笔记:
2014-12-31
原文:在大型组织内部,有一个专门的术语描述这种跟随大多数人的选择的做法,叫做“业界最佳实践”。这个词出现的原因其实就是为了让你的经理可以推卸责任。既然我选择的是“业界最佳实践”,如果不成功,项目失败了,那么你也无法指责我,因为做出选择的人不是我,而是整个“业界”。
笔记:
2014-12-31
原文:而且即使多雇人手,也无助于缩短开发时间,因为当团队规模超过某个门槛时,再增加人手只会带来净损失。Fred Brooks在他的名著《人月神话》中描述了这种现象,我的所见所闻印证了他的说法。
笔记:
2014-12-31
原文:“自下而上”的编程往往也便于修改,因为许多时候你自己添加的中间层根本不需要变化,你只需
笔记:
2014-12-31
原文:如果你创业的话,千万不要为了取悦风险投资商或潜在并购方而设计你的产品。让用户感到满意才是你的设计方向。只要
笔记:
2014-12-31
原文:事实上,选择更强大的编程语言会减少所需要的开发人员数量。
笔记:
2014-12-31
原文:把软件运行在服务器端就可以没有顾忌地使用最先进的技术。
笔记:
2014-12-31
原文:序可能无法很好地与使用其他语言写的程序协同工作;你可能找不到很多函数库;你可能不容易雇到程序员。
笔记:
2014-12-31
原文:另一方面,许多项目是无所谓选择哪一种编程语言,反正不同的语言都能完成工作。一般来说,条件越苛刻的项目,强大的编程语言就越能发挥作用。但是,无数的项目根本没有苛刻条件的限制。大多数的编程任务可能只要写一些很小“胶水程序”,然后再把这些小程序连起来就行了。你可以用自己熟悉的编程语言或者用对于特定项目来说有着最强大函数库的语言来写这些“胶水程序”。如果你只是需要在Windows应用程序之
笔记:
2014-12-31
原文:程语言发展的两大方向。前者的基础是数学,后者的基础是硬件架构。
笔记:
2014-12-30
原文:但是,编程语言是不一样的。
笔记:
2014-12-30
原文:既然它是标准,那么使用它就不会错。另外,这也意味着人才市场上肯定有无数Java程序员,即使现在为我打工的这批人都辞职了(真奇怪,这种事情总是不断发生),我也能够轻易地找到替代者。
笔记:
2014-12-30
原文:如果你为创业公司工作,那么这里有一个评估竞争对手的妙招——关注他们的招聘职位。他们网站上的其他内容无非是一些陈腐的照片和夸夸其谈的文字,但是招聘职位却不得不写得很明确,反映出他们到底想干什么,否则就会引来一大批不合适的求职者。
笔记:
2014-12-30
原文:硬件的指令集都是针对编译器而不是针对程序员设计的。
笔记:
2014-12-30
原文:Lisp语言
笔记:
2014-12-30
原文:如果开发只在自己服务器上运行的软件,这意味着你想用什么语言就能用什么语言。如果开发桌面软件,就完全不一样了,大多数
笔记:
2014-12-30
原文:选择使用哪一种技术的时候,你不能考虑别人的做法,只能考虑什么样的技术能最好地完成工作。
笔记:
2014-12-30
原文:某家公司的软件更快更好用,就会把竞争者赶出这个市场。
笔记:
2014-12-30
原文:他建议从Python和Java入手,因为它们比较容易学。想当高级一点的黑客,还应该学习C和Perl。前者用来对付Unix系统,后者用来系统管理和开发CGI脚本。最后,真正非常严肃地把黑客作为人生目标的人,应该考虑学习Lisp:Lisp很值得学习。你掌握它以后,会感到它给你带来的极大启发。这会大大提高你的编程水平,使你成为一个更好的程序员。尽管在实际工作中极少会用到Lisp。
笔记:
2014-12-30
原文:拒绝平庸
笔记:
2014-12-30
原文:新语言更多地以开源项目的形式出现,而不是以研究性项目的形式出现。这是语言的一种发展趋势。另一种发展趋势是,新语言的设计者更多的是本身就需要使用它们的应用软件作者,而不是编译器作者。这似乎是好的趋势,我期待它继续保持下去。
笔记:
2014-12-30
原文:因为这段差距正在变得越来越大,所以性能分析器(profiler)将变得越来越重要。
笔记:
2014-12-30
原文:使用这种语言写出来的软件第一版的运行速度很慢,只有对编译器进行优化设置后运行速度才会提升。
笔记:
2014-12-30
原文:除了某些特定的应用软件,一百年后,并行计算不会很流行。如果应用软件真的大量使用并行计算,这就属于过早优化了。
笔记:
2014-12-30
原文:我预料,对于普通程序员来说,一切更像对进程进行分叉,然后让多个进程在后台并行运行。
笔记:
2014-12-30
原文:另一种消耗硬件性能的方法就是,在应用软件与硬件之间设置很多的软件层。这也是我们已经看到的一种趋势,许多新兴的语言就被编译成字节码^。比尔·伍兹曾经对我说,根据经验判断,每增加一个解释层,软件的运行速度就会慢一个数量级。但是,多余的软件层可以让编程灵活起来。
笔记:
2014-12-30
原文:一百年后的程序员最需要的编程语言就是可以让你毫不费力地写出程序第一版的编程语言,哪怕它的效率低下得惊人(至少按我们今天的眼光来看是如此)。他们会说,他们想要的就是很容易上手的编程语言。效率低下的软件并不等于很烂的软件。一种让程序员做无用功的语言才真正称得上很烂。浪费程序员的时间而不是浪费机器的时间才是真正的无效率。随着计算机速度越来越快,这会变得越来越明显。
笔记:
2014-12-30
原文:语言设计时,对实现方式少作限制还会使得程序具备更大的灵活性。
笔记:
2014-12-30
原文:对于大多数程序,速度不是最关键的因素,所以你通常不需要费心考虑这种硬件层面上的微观管理。随着计算机速度越来越快,这一点已经越发明显了。
笔记:
2014-12-30
原文:正确做法应该是将语言的语义与语言的实现予以分离。在语义上不需要同时存在列表和字符串,单单列表就够了。而在实现上做好编译器优化,使它在必要时把字符串作为连续字节的形式处理^。
笔记:
2014-12-30
原文:对速度的追求是人类内心深处根深蒂固的欲望。
笔记:
2014-12-30
原文:小、最干净的编程语言才会存在于进化的主干上。一种语言的内核设计得越小、越干净,它的生命力就越顽强。
笔记:
2014-12-30
原文:任何一种编程语言都可以分成两大组成部分:基本运算符的集合(扮演公理的角色)以及除运算符以外的其他部分(原则上,这个部分可以用基本运算符表达出来)。
笔记:
2014-12-30
原文:静态类型语言的拥护者认为这样可以防止bug,并且帮助编译器生成更快的代码(这两点理由都成立)。动态类型语言的拥护者认为静态类型对程序构成了限制(这点理由也成立)。
笔记:
2014-12-30
原文:不过,硬件的运行速度越来越快了,所以使用C这样的低层次语言开发应用程序的必要性正在不断减少,但是大家似乎还是要求操作系统越快越好。
笔记:
2014-12-30
原文:如果你长期使用某种语言,你就会慢慢按照这种语言的思维模式进行思考。所以,后来当你遇到其他任何一种有重大差异的语言,即使那种语言本身并没有任何不对的地方,你也会觉得它极其难用。
笔记:
2014-12-30
原文:编译器不是高级语言唯一的实现方法,另一种方法是使用解释器,它的作用是实时地将代码解释为相应的机器语言,然后一行行运行。相比之下,编译器则是先将整个程序全部翻译成机器语言,然后再运行。
笔记:
2014-12-30
原文:高级语言还有一个优点,它使得程序更具有可移植性。不同计算机的机器语言都不是完全相同的。所以,你无法将为某一种机型写的机器语言程序放到另一种机型上运行,只有彻底重写才能实现。但是,如果你的程序是用高级语言写的,你只需要重写编译器就可以了。
笔记:
2014-12-30
原文:所谓“编译器”,本身就是一个程序,作用是将简便方式书写的程序(就像上面这一行命令)转变为硬件可以理解的语言。
笔记:
2014-12-30
原文:证明编程语言的一个重要特点:一个操作所需的代码越多,就越难避免bug,也越难发现它们。
笔记:
2014-12-30
原文:优秀作品的秘块就是:非常严格的品味,再加上实现这种品味的能力。
笔记:
2014-12-30
原文:好设计常常是大胆的设计。在任何一段历史中,人们都会把某些荒谬的东西当作正确的,并且深信不疑,以至于一旦你出言质疑,就有被排挤或者被暴力伤
笔记:
2014-12-30
原文:推动人才成批涌现的最大因素就是,让有天赋的人聚在一起,共同解决某个难题。互相激励比天赋更重要,达·芬奇之所以成为达·芬奇,主要原因不仅仅是他的天赋,更重要的是他生活在当时的佛罗伦萨,而不是米兰。今天,人类生活的流动性高得多,但是伟大的项目依然不成比例地集中在少数几个热点上:德国包豪斯建筑学院、曼哈顿计划、《纽约人》杂志、洛克希德
笔记:
2014-12-30
原文:好设计常常是奇特的设计。
笔记:
2014-12-30
原文:好设计是能够复制的设计。我们对待复制的态度经常是一个否定之否定的过程。刚入门的新手不知不觉地模仿他人,遂渐熟练之后才开始创作原创性作品。最后他会意识到,把事情做对比原创更重要。
笔记:
2014-12-30
原文:好设计是一种再设计。很少有人一次就把事情做对。专家的做法是先完成一个早期原型,然后提出修改计划,最后把早期原型扔掉。
笔记:
2014-12-30
原文:好设计是模仿大自然的设计。我不是说模仿大自然这种行
笔记:
2014-12-30
原文:对称有两种:重复性对称和递归性对称。递归性对称就是指子元素的重复,比如树叶上叶脉的纹路。
笔记:
2014-12-30
原文:好设计通常是有点趣味性的设计。
笔记:
2014-12-30
原文:在软件业中,这条原则意味着,你应该为用户提供一些基本模块,使得他们可以随心所欲自由组合,就像玩乐高积木那样。
笔记:
2014-12-30
原文:好设计是启发性的
笔记:
2014-12-30
原文:好设计是解决主要问题的设计。厨房的煤气灶有四个出火口,排成一个正方形。每个出火口都由一个调节器控制,四个出火口就有四个调节器。请问应该如何摆放调节器?最简单的摆放方法当然是把四个调节器排成一列,但要是这样做,人们使用起来就很不方便,每次都要停下来想一下到底每个调节器对应的是哪个出火口。如果直接把调节器排成与出火口一样的正方形,就不会有这个问题了。
笔记:
2014-12-30
原文:说来奇怪,如果你希望自己的作品对未来的人们有吸引力,方法之一就是让你的作品对上几代人有吸引力。我们很难猜想未来是什么样子,但是可以肯定,未来的人们不会在乎今天流行的风潮,这一点与上几代人是相同的。所以,如果你的作品对今天的人们以及1500年的人都有
笔记:
2014-12-30
原文:以永不过时作为目标是一种帮助自己找到最佳答案的方法:如果你不愿别人的答案取代你的答案,你就只好自己做出最佳答案。
笔记:
2014-12-30
原文:当你被迫把东西做得很简单时,你就被迫直接面对真正的问题。当你不能用表面的装饰交差时,你就不得不做好真正的本质部分。
笔记:
2014-12-30
原文:好设计是简单的设计。
笔记:
2014-12-29
原文:我自己就亲眼目睹过技术的这种杠杆效应不断扩大。高中时,我通过割草和在冰激淋店当服务员赚钱,它们是我能找到的仅有的工作。现在的高中生可以通过开发软件或制作网站赚钱。不过,只有少数高中生具备这种能力,其余的人还是只能去冰激淋店当服务员。
笔记:
2014-12-29
原文:还记得从经济学观点看什么是创业公司吗?简单说,就是可以让人更快速工作的地方。你不再是慢慢地积累50年的普通工资,而是要尽快地将这笔钱赚到手。所以,政府禁止个人积累财
笔记:
2014-12-29
原文:熟知这一点,并总结出一个术语“过早优化”(premature optimization)。尽快拿出1.0版,然后根据用户的反映而不是自己的猜测进行软件优化。
笔记:
2014-12-29
原文:排在榜首的信号中有一个就是公司由技术顽童掌控,只想解决有趣的技术问题,不考虑用户的需要。你开办创业公司不是单纯地为了解决问题,而是为了解决那些用户关心的问题。
笔记:
2014-12-29
原文:次强的动机则是让他们担心如果现在不买你,你的高速成长将使得未来的收购耗资巨大,甚至你本身可能变成一个他们的竞争对手。
笔记:
2014-12-29
原文:在这两种收购动机中,归根结底的因素都是用户数量。你以为买家在收购前会做很多研究,搞清楚你的公司到底值多少钱,其实根本不是这么回事。他们真正在意的只是你拥有的用户数量。
笔记:
2014-12-29
原文:潜在的买家会尽可能地拖延收购。收购这件事最难的地方就是让买方真正拿出钱。大多数时候,促成买方掏钱的最好办法不是让买家看到有获利的可能,而是让他们感到失去机会的恐惧。对于买家来说,最强的收购动机
笔记:
2014-12-29
原文:我认为,如果你的公司有机会被收购,那将是不错的选择。管理一家公司与创立一家公司是不同的两件事。当情况基本稳定下来以后,不妨让大公司来接手。
笔记:
2014-12-29
原文:自己的创业公司,放弃未来发展壮大(但风险也随之增大)的机会,只求数量较少但是更有把握的回报。
笔记:
2014-12-29
原文:如果创业就是比别人工作得更勤奋、赚到更多的钱,那么很显然人人都想去创业。而且一定程度上,创业也比较有趣。我觉得许多人都不喜欢大公司处事按部就班、会议没完没了、人际关系冰冷、管理层瞎指挥……
笔记:
2014-12-29
原文:大公司不害怕打官司,这对它们是家常便饭。它们很清楚,打官司的成本高昂又很费时。
笔记:
2014-12-29
原文:设置“进入壁垒”的方法之一就是申请专利。
笔记:
2014-12-29
原文:问他是否投资,他首先就会问你几个问题,其中之一就是其他人复制你的模式是否很困难。也就是说,你为竞争对手设置的壁垒有多高^
笔记:
2014-12-29
原文:在实际操作中,这就意味着我们故意选择那些很困难的技术问题。假定软件有两个候选的新功能,它们创造的商业价值完全相同,那么我们总是选择较困难的那个功能。不是因为这个功能能带来更多的收入,而是因为它比较难。我们很乐于迫使那些又大又慢的竞争对
笔记:
2014-12-29
原文:高科技=可放大性
笔记:
2014-12-29
原文:乔布斯曾经说过,创业的成败取决于最早加入公司的那十个人。我基本同意这个观点,虽然我觉得真正决定成败的其实只是前五人。小团队的优势不在于它本身的小,而在于你可以选择成员。我们不需要小村庄的那种“小”,而需要全明星第一阵容的那种“小”。
笔记:
2014-12-29
原文:这就是创业公司的真正意义。理想情况下,你与其他愿意更努力工作的人一起组成一个团队,共同谋取更高的回报(相比他们为大公司工作的情况)。因为创业公司的团队往往是自发形成的,许多有抱负的创始人彼此之间早就相识(至少听说过对
笔记:
2014-12-29
原文:小团体=可测量性
笔记:
2014-12-29
原文:但是,如果你想同时具备可测量性和可放大性,不一定非当上CEO或电影明星不可。你只需要成为某个攻克难题的小团体的一部分就可以了。
笔记:
2014-12-29
原文:可测量性和可放大性
笔记:
2014-12-29
原文:杂在一起,这样就产生了问题。在大公司中,个人的表现无法单独测量,公司里其他人会拖累你。
笔记:
2014-12-29
原文:大公司会使得每个员工的贡献平均化,这是一个问题。
笔记:
2014-12-29
原文:你的贡献也许不是直接性的,但是公司作为一个整体必须提供某种人们需要的东西,否则不可能盈利。
笔记:
2014-12-29
原文:公司一切行为的目的都是盈利,从而生存下去。
笔记:
2014-12-29
原文:因为最顶尖的5%的程序员写出了全世界99%的优秀软件。
笔记:
2014-12-28
原文:另一件程序员看来显而易见的事情就是创造财富的速率存在
笔记:
2014-12-28
原文:程序员坐在电脑前就能创造财富。优秀软件本身就是一件有价值的东西。
笔记:
2014-12-28
原文:大饼谬论
笔记:把蛋糕做大
2014-12-28
原文:对于自己感兴趣的东西,你会觉得它们很有价值,伹是它们恰恰最不可能与他人眼中有价值的东西发生重合。」
笔记:
2014-12-26
原文:通过创造有价值的东西而致富,这种方法的优势不仅仅在于它是合法的(许多其他方法如今都是不合法的),还在于它更简单。你只需要做出别人需要的东西就可以了。
笔记:
2014-12-26
原文:仅仅因为工作经常受到干扰,黑客就会无法应对高难度的项目。这就是为什么黑客往往在深夜工作的原因,也是黑客无法在小隔间里写出优秀软件的原因(除非在半夜)。创业公司的一个巨大优势就是不会有任何人来打扰你。没有人事部,也没有表格,自然也就不会有人打电话要
笔记:
2014-12-26
原文:从经济学观点看,你可以把创业想象成一个压缩过程,你的所有工作年份被压缩成了短短几年。你不再是低强度地工作四十年,而是以极限强度工作四年。在高技术领域,这种压缩的回报尤其丰厚,工作效率越高,额外报酬就越高。
笔记:
2014-12-26
原文:创业公司往往与技术有关,所以“高技术创业公司”这个短语几乎就是同义重复。创业公司其实就是解决了某个技术难题的小公司。
笔记:
2014-12-26
原文:如果你想致富,应该怎么做?我认为最好的办法就是自己创业,或者加入创业公司。
笔记:
2014-12-26
原文:不要被微软吓到。你能做到它做不到的事情,正如它能做到你做不到的事情一样。
笔记:
2014-12-26
原文:首先,管理企业其实很简单,只要记住两点就可以了:做出用户喜欢的产品,保证开支小于收入。
笔记:
2014-12-26
原文:如果你是一个黑客,并且梦想自己创业,可能会有两件事情令你望而却步,不敢真正开始采取行动。一件是你不懂得管理企业,另一件是你害怕竞争。可是实际上,这两件事都是没有通电的电篱笆。
笔记:
2014-12-26
原文:创业公司典型的创业公司行动快速,看上去不是那么正式,只有很少几个人,资金也有限。这几个人勤奋工作,技术放大了他们的决策。如果他们赌赢了,那就是一场大胜利。
笔记:
2014-12-26
原文:为什么桌面电脑大获全胜?主要是因为它们的软件更出色。为什么它们的软件更出色?原因可能是这些软件是小公司写出来的。
笔记:
2014-12-26
原文:有钱的客户倾向于更贵的选择,即使便宜的选择更符合他们的需要,他们也不会买。这种现象普遍存在。原因就是,那些索要高价的人将更多的钱投入推销。
笔记:
2014-12-26
原文:谁是互联网软件的目标客户?Viaweb一开始就把个人和小企业当作目标客户。我认为这是互联网软件的通行规则。这些客户决策比较灵活,又需要低成本的新技术,所以他们更愿意尝试新事物。
笔记:
2014-12-26
原文:软件公司有时会采用分销模式,让ISP分销互联网软件。这样做很不好。服务器必须在你自己的控制之中,因为你需要不断改进硬件和软件。如果你放弃对服务器的直接控制,你就放弃了互联网软件的大部分优势。
笔记:引入第三方的风险
2014-12-26
原文:购买时,除了输入信用卡号码以外,用户不应该再被要求做其他事。(要求用户做得越多,你担的风险就越大。)
笔记:
2014-12-26
原文:相比桌面软件,互联网软件卖得更好,因为它易于销售。你可能认为,购买商品时,人们是先做出决定,然后再购买,好像这个行为分成两个独立的步骤。
笔记:
2014-12-26
原文:只要有可能,商业性公司就会采用一种叫做“价格歧视”(price discrimination)的定价方法,也就是针对不同的客户给出不同的报价,使得利润最大化^。
笔记:
2014-12-26
原文:一定数量的盗版对软件公司是有好处的。
笔记:
2014-12-26
原文:金钱问题20世纪90年代早期,我读过一篇文章,它称应该让用户像订报纸那样按照使用时间长短订购软件的使用权。
笔记:
2014-12-25
原文:几乎所有我们的新客户都是
笔记:
2014-12-25
原文:效率对互联网软件至关重要,因为硬件费用由你支付。
笔记:
2014-12-25
原文:软件应该做到用户认为它可以做到的事情。但是,你不知道用户到底怎么想,除非你亲眼看到他们如何使用你的软件,相信我,看到和看不到大不相同。互联网软件能够让你前所未有地了
笔记:
2014-12-25
原文:互联网软件不仅把开发者与他的代码更紧密地联系在了一起,而且把开发者与他的用户也更紧密联系在了一起。
笔记:
2014-12-25
原文:开发软件需要的程序员人数减少,不仅意味着省下更多的钱。正如《人月神话》一书中所指出的,向一个项目增加人手,往往会拖慢项目进程。随着参与人数的增加,人与人之间需要的沟通呈现指数式增长^。
笔记:
2014-12-25
原文:提高软件可靠性的关键在于开发时全神贯注,而不是降低开发速度。
笔记:
2014-12-25
原文:只要想到好的构思,我们就立刻着手实现。
笔记:
2014-12-24
原文:我们的政策是当场修复bug,这改变了客服人员与黑客之间的关系。
笔记:
2014-12-24
原文:我们的客户支持是免费的,因为我们希望知道用户的反应。如果他们使用时遇到困难,我们希望立刻知道,这样就能再现错误、解决问题、发布新版本。
笔记:
2014-12-24
原文:早一点发现bug就不容易形成复合式bug,也就是互相影响的两个bug。
笔记:
2014-12-24
原文:软件公司有时会受到指责,因为他们竟然把发现bug的任务交给用户去完成。说实话,我其实提倡这种做法。对于互联网软件,这样做的好处很多,因为它的bug相对比较少,而且处理周期比较短。我们连续不断地发布新版本,所以bug就比较少。我们能够再现用户遇到的问题,又能在修复后立刻发布,使得用户不用等很长时间,所以大部分bug的处理周期都比较短。我们的bug数量一直不多,以至于没有必要使用一个正
笔记:
2014-12-24
原文:互联网软件的另一个技术优势在于,你能再现大部分的bug。用户的数据都在你的硬盘上。如果某个用户使用软件时出错了,你就不必像开发桌面软件那样苦苦猜测到底发生了什么事情。一般来说,只要用户通过电话向你描述一番,你就能把问题再现出来。如果你的程序中有自动侦测错误的代码,那么不用等到用户找上门,你可能已经知道哪里出错了。
笔记:
2014-12-24
原文:互联网软件的发布规则是:它运行不了,你就无法发布;一且它能运行了,你就可以立刻发布。
笔记:
2014-12-24
原文:互联网软件则完全不同,就像你写给自己用的程序一样,修改起来很方便。软件的发布过裎可以分解为一系列的渐进式修改,而不是猛地推出一个大幅变动的版本。常见的桌面软件可能一年发布一到两个新版本,而我们在Viaweb经常是一天发布三到五个版本。
笔记:
2014-12-24
原文:由于互联网应用程序由多种软件而不是单独一个二进制文件构成,所以可以使用多种编程语言开发。
笔记:
2014-12-24
原文:硬件需要考虑的地方,不仅仅在于怎么才能避免出问题,还在于怎样才能最大地发挥它们的作用。
笔记:
2014-12-23
原文:如果使用互联网软件,数据会更安全。
笔记:
2014-12-23
原文:现在,升级不再对用户形成大的冲击。久而久之,软件变得更强大了。这需要开发者付出一定的努力。他们必须正确地设计软件,使得它能够平滑升级,不让使用者感到困惑。这就是互联网软件面临的新问题,不过解决办法是有的。
笔记:
2014-12-23
原文:“你的电脑”这个概念正慢慢成为过去时,取而代之的是“你的数据”。你应该可以从任何电脑上获取你的数据。或者更准确地说,在任何终端设备上获取你的数据,终端设备不一定是
笔记:
2014-12-23
原文:如果互联网软件能够击败桌面软件,一定是赢在更方便这一优势上。无论从用户的角度还是从开发者的角度来看都是如此。
笔记:
2014-12-23
原文:互联网软件运行在服务器上,用户界面就是网页。对于普通用户来说,使用这种新型软件将更容易、更便宜、更机动、更可靠,通常也比桌面软件更强大。
笔记:
2014-12-23
原文:计算机现在就处在这个阶段。一旦拥有了桌面电脑,你就被迫不情愿地学习很多东西,了解它的内部运作机制。
笔记:
2014-12-23
原文:软件从桌面移到服务器上,对于开发者来说,一切将发生根本性的变化。
笔记:
2014-12-23
原文:你的软件定价多少,有些用户永远都不会购买。如果这样的用户使用盗版,你并没有任何损失。事实上,你反而赚到了,因为你的软件现在多了一个用户,市场影响力就更大了一些,而这个用户可能毕业以后就会出钱购买你的软件。
笔记:
2014-12-23
原文:第一周,我们打算写一个传统的桌面软件。没过几天,我们就想了另外一个方法:可以让软件在服务器上运行,浏览器作为操作界面。我们试着重写,让所有操作都通过网络完成。那时已经很清楚了,这就是我们的方向。如果软件运行在服务器上,一切都会简单得多,无论对于用户,还是对于我们。
笔记:
2014-12-23
原文:只有深入了解当前的技术,黑客才能构想下一代技术。
笔记:
2014-12-23
原文:但是,即使考虑到黑客令人恼火的种种怪癖,他们不服从管教的性格依然是利大于弊。
笔记:
2014-12-23
原文:永远质疑
笔记:
2014-12-23
原文:程序写出来是给人看的,附带能在机器上运行。
笔记:
2014-12-23
原文:软件的部分功能就是解释自身。为了写出优秀软件,你必须假定用户对你的软件基本上一无所知。你要明白,用户第一次使
笔记:
2014-12-23
原文:就是看他怎样向没有技术背景的人解释技术问题。
笔记:
2014-12-23
原文:事实表明,从他人的角度思考问题正是成功的奥秘所在。
笔记:
2014-12-23
原文:公用杂物间,没人管理,又脏又乱,到处堆满了冗余代码。正确的合作方法是将项目分割成严格定义的模块,每一个模块由一个人明确负责。模块与模块之间的接口经过精心设计,如果可能的话,最好把文档说明写得像编程语言规范那样清晰。
笔记:
2014-12-23
原文:黑客是一个创作者,他从事的就不是机械性的工作,他必须具备灵感。
笔记:
2014-12-23
原文:还有一个可以借鉴绘画的地方:一幅画是逐步完成的。通常一开始是一张草图,然后再逐步填入细节。但是,它又不单纯是一个填入细节的过程。有时,原先的构想看来是错的,你就必须动手修改。无数古代油画放在X光下检视,就能看出修改痕迹,四肢的位置被移动过,或者脸部的表情经过了调整。
笔记:
2014-12-22
原文:黑客可以通过观看优秀的程序学会编程,不是看它们的执行结果,而是看它们的源代码。
笔记:
2014-12-22
原文:通过范例
笔记:
2014-12-22
原文:黑客通过实践学习编程
笔记:
2014-12-22
原文:我们面试程序员的时候,主要关注的事情就是业余时间他们写了什么软件。
笔记:
2014-12-22
原文:更一般地说,“白天工作”的意思是,你有一份为了赚钱的工作,还有一份为了爱好的工作。
笔记:
2014-12-22
原文:如果你想赚钱,你可能不得不去干那些很麻烦很讨厌的事情,因为这些事情没人愿意义务来干。
笔记:
2014-12-22
原文:真正竞争软件设计的战场是新兴领域的市场,这里还没有人建立过防御工事。
笔记:
2014-12-22
原文:大公司为了避免设计上的灾难,选择了减少设计结果的标准差。
笔记:
2014-12-22
原文:这对大公司来说不是问题,因为生产特别优秀的产品不是它们的获胜手段。大公司只要做到不太烂,就能赢。
笔记:
2014-12-22
原文:等我来到雅虎以后,发现在他们看来,“黑客”的工作就是用软件实现某个功能,而不是设计软件。在那里,程序员被当作技工,职责就是将产品经理的“构想”(如果这个词是这么用的话)翻译成代码。
笔记:
2014-12-22
原文:大学和实验室强迫黑客成为科学家,企业强
笔记:
2014-12-22
原文:我不是耐心地一步步写出整个程序,确保大体上是正确的,而是一股脑不管对错,先把代码堆上去,再
笔记:
2014-12-22
原文:明白这一点对软件设计有重大影响。它意味着,编程语言首要的特性应该是允许动态扩展(malleable)。编程语言是用来帮助思考程序的,而不是用来表达你已经想好的程序
笔记:边思考边开发,是好的。
2014-12-22
原文:创造优美事物的方式往往不是从头做起,而是在现有成果的基础上做一些小小的调整,或者将已有的观点用比较新的方式组合起来。这种类型的工作很难用研究性的论文表达。
笔记:利用已有的资源,开发出更好的东西。
2014-12-10
原文:我认为,真实世界的关键并非在于它是由成年人组成的,而在于它的庞大规模使得你做的每件事都能产生真正意义上的效果。
笔记:关注有意义的事。
2014-12-10
原文:书呆子不受欢迎的真正原因,是他们脑子里想着别的事情。他们的注意力都放在读书或者观察世界上面,而不是放在穿衣打扮、开晚会上面。他们就像头顶一杯水来踢足球,一边踢球,一边拼命保持不让水洒出
笔记:
2014-12-10
原文:你选择什么语言,决定了你能说什么话。编程语言就是程序员的思维方式。
笔记:语言决定思维方式。
2014-12-09
原文:黑客行为必须包含三个特点:好玩、高智商、探索精神。
笔记:
2014-12-09
原文:我们的时代是程序员主导的时代,而伟大的程序员就是黑客。
笔记:这个时代需要程序员,优秀程序员可以做很多有意义的事情。