【读书笔记】《黑客与画家》

P32

源代码也应该可以自己解释自己。如果我只能让别人记住一句关于编程的名言,那么这句名言就是《计算机程序的结构和解释》1一书的卷首语:

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

  1. Harold Abelson 与 Sussman Gerald 合著的 Structure and Interpretation of Computer Programs

P66

桌面软件导致了bug的宿命论。你很清楚,发不出去的软件肯定有bug,你甚至早就做好了应对机制(比如发布补丁)。既然如此,bug再多一点又何妨?没过多久,你要发布下一个版本了,你明知其中某个操作完全不能使用,但还是照样发布。苹果公司前几年就干过这种事。他们必须发布新版操作系统了,压力越来越大,发布日期已经推迟了四次,无法再推了,可是有些部分还一点儿没写(比如CD和DVD操作的部分)。怎么办?他们就把没写完操作系统发布出去了,用户必须日后自己动手安装缺失的部分。

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

P68

解决新代码的bug要比解决历史遗留代码的bug容易。在自己刚刚写好的代码中,找出bug往往会比较快。有时,你只要看到出错提示,就知道问题出在哪里,甚至都不用看源码,因为潜意识中你已经在担心那个地方可能会出错。如果你要解决的bug出自于6个月前写好的代码(假定你一年发布一个新版本,那么6个月就是发现bug的平均时间),那么就麻烦了,就要大费周章了。那时,你对代码也已经不熟悉,就更可能采用危险的方式解决问题,甚至引入更多的bug。1

1. 这个观点引申自特雷弗·布莱克韦尔(Trevor Blackwell)的话,他说:“随着软件规模的增大,开发成本指数上升。这可能是因为修正旧bug的原因。如果bug都能被快速发现,成本的上升形态就能基本保持线性。”

P78

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

P79

大公司付出的高价之中,很大一部分是商家为了让大公司买下这个商品而付出的费用。(如果国防部花1000美元买一个马桶座圈,部分原因是要让国防部买下它本身就需要花很多钱。)这就是为什么公司内部的局域网软件明明不可取、但是还会继续存在并且不断发展的一个原因。这样的软件更昂贵,但是你对这个难题就是无能为力。所以,最好的安排就是把个人和小企业客户放在第一位。其他的客户该来的时候就会来。

P80

  1. 口碑效应发挥效果需要很长一段时间。报道我们的媒体也不是很多,后来我们以每月1.6万美元(再加上一些认股权证)的代价,聘请了Schwartz Communications 公司(他们大概是高科技行业中最好的公关公司),媒体报道才多了起来。但是,真正起到决定性作用的销售推广渠道只有一个,那就是我们自己的网站。

P83

典型的创业公司行动快速,看上去不是那么正式,只有很少几个人,资金也有限。这几个人勤奋工作,技术放大了他们的决策。如果他们赌赢了,那就是一场大胜利。

P87

如果你是一个黑客,并且梦想自己创业,可能会有两件事情令你望而却步,不敢真正开始采取行动。一件是你不懂得管理企业,另一件是你害怕竞争。可是实际上,这两件事都是没有通电的电篱笆。

首先,管理企业其实很简单,只要记住两点就可以了:做出用户喜欢的产品,保证开支小于收入。只要做到这两点,你就会超过大多数创业公司。随着事业的发展,你自己就能琢磨出来其他的诀窍。

P93

致富的方法有许多种,本文只谈论其中的一种,也就是通过创造有价值的东西在市场上得到回报,从而致富。其他许多种的致富方法包括赌博、投机、婚姻、继承、偷窃、敲诈、诈骗、垄断、行贿、游说、造假、开矿等。获得最客观的财富往往会涉及其中的几种方法。

扫描二维码关注公众号,回复: 15185843 查看本文章

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

P98

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

P100

如果你有一个令你感到安全的工作,你是不会致富的,因为没有危险,就几乎等于没有放大性。

P102

乔布斯曾经说过,创业的成败取决于最早加入公司的那十人。我基本同意这个观点,虽然我觉得真正决定失败的其实只是前五人。小团队的优势不在于它本身的小,而在于你可以选择成员。我们不需要小村庄的那种“小”,而需要全明星第一阵容的那种“小”。

P107

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

P108

此外,公司管理视同软件优化还能帮助你避免VC担心的另一个陷阱——开发某种产品的时间过长。现在,黑客都已经熟知这一点,并总结出一个术语“过早优化”(premature optimization)。尽快拿出1.0版,然后根据用户的反映而不是自己的猜测进行软件优化。

P121

技术的发展加大了贫富差距,这是不是一个社会问题?好想没有那么严重。技术在加大收入差距的同时,缩小了大部分的其他差距。

P151

那么,应该使用哪一种语言?嗯,关于这个问题,现在有很多争论。部分原因是,如果你长期使用某种语言,你就会慢慢按照这种语言的思维模式进行思考。所以,后来当你遇到其他任何一种有重大差异的语言,即使那种语言本身并没有任何不对的地方,你也会觉得它极其难用。缺乏经验的程序员对于各种语言优缺点的判断经常被这种心态误导。

P151

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

P165

有一句俗话说,如果你自己做不到,那就去当老师。这在语言设计领域不成立,我认识的一些最出色的黑客就在当教授。但是,当老师的人确实有很多事情不能做。研究性职位给黑客带来了一些限制。在任何学术领域,都有一些题目是可以做的,另一些题目是不可以做的。不幸的是,这两类题目的区别通常取决于它们写成论文后看上去是不是很高深,而不是取决于它们对软件业的发展是否重要。最极端的例子可能就是文学,文学研究者的任何成果机会对文学创作者都毫无影响。

P209

所以,发明新事物的人必须有耐心,要长年累月不断地做市场推广,直到人们开始接受这种发明。我们就耗费了好几年才使得客户明白Viaweb不需要下载安装就能使用。不过,好消息是,简单重复同一个信息就能解决这个问题。你只需要不停地重复同一句话,最终人们将开会开始倾听。人们真正注意到你的时候,不是第一眼看到你站在那里,而是发现过了这么久你居然还在那里。

P210

你必须对解决难题的可能性保持乐观,同时对当前解法的合理性保持怀疑。

P210

做出优秀成果的人,在做的过程中常常觉得自己做的不够好。其他人看到他们的成果觉得棒极了,而创造者本人看到的都是自己作品的缺陷。这种视角的差役并非偶然,因为只有对现状不满,才会造就杰出的成果。

P215

怎么理解编程语言?你不要把它看成那些已完成的程序的表达方式,而应该把它理解成促进程序从无到有的一种媒介。

P215

评价一种语言的优劣不能简单地看最后的程序是否表达得很漂亮,而要看程序从无到有的那条完成路径是否很漂亮。某种设计使得最后的程序非常漂亮,但是不一定同时具备漂亮的编程过程。

P216

在软件领域,贴近用户的设计思想被归纳为“弱即是强”(Worse is Better)模式1。这个模式实际上包含了好几种不同的思想,所以至今人们还在争论它是否真的成立。但是,其中有一点是正确的,那就是如果你正在设计某种新东西,就应该尽快拿出原型,听取用户的意见。

  1. 弱即是强”指的是一种软件传播模式,由Common Lisp专家理查德·加布里埃尔(Richard P. Gabriel)于1991年在Lisp: Good News, Bad News, How to Win Big(Http://www.dreamsongs.com/WIB.html)一文中首先提出。它的含义非常广泛,设计软件设计思想的各个方面,其中一个重要结论就是软件功能的增加并不必然带来质量的提高。

P217

软件开发也可以这样做。原型(prototype)并不只是模型(model),不等于将来一定要另起炉灶,你完全能够在原型的基础上直接做出最后的成品。我认为,只要有可能,你就应该这样做。这样的方式使得你可以利用在开发过程中一路产生的新想法。不过更重要的是,这样做有助于鼓舞士气。

术语解释

自上而下编程法:要求你把编程任务分解成一个个更小的单元。

自下而上编程法:最先开发最底下的层,然后用底层所定义的“语言”开发上一层,这样直到最高层。可以与上一种编程方法结合使用。

闭包:一个函数,通过它可以引用由包含这个函数的代码所定义的变量。

摩尔定律(Moore’s Law):摩尔定律的正式版本是指,一块芯片上的晶体管数量每两年就会翻一番。但是,大多数人提到这个术语时,指的却是处理器的运算速度每18个月就会翻一番。很多人认为摩尔定律更像是商业计划,而不是产业发展的规律,毕竟它的提出者Gordon Moore是英特尔公司的创始人之一。

“奥卡姆剃刀”原则(Occam’s Razor):简单的解释就是较好的解释。

猜你喜欢

转载自blog.csdn.net/yotcap/article/details/128438392