第一遍读书笔记

P23:大公司为了避免设计上的灾难,选择了减少设计结果的标准差。但是当你排斥差异的时候,你不仅将失败的可能性排除在外,也将获得高利润的可能性排除在外。《黑客与画家》
P25:黑客如何才能做自己喜欢的事情?我认为这个问题的解决方法是一个几乎所有创作者都知道的方法:找一份养家糊口的“白天工作”(day job)。这个词是从音乐家身上来的,他们晚上表演音乐,所以白天可以找一份其他工作。更一般地说,“白天工作”的意思是,你有一份为了赚钱的工作,还有一份为了爱好的工作。《黑客与画家》
P25:但是,在Viaweb,要是你不愿意这样干,我们会很犹豫要不要雇佣你。我们面试程序员的时候,主要关注的事情就是业余时间他们写了什么软件。因为如果你不爱一件事,你不可能把它做得真正优秀,要是你很热爱编程,你就不可避免地会开发你自己的项目。《黑客与画家》
P27:同样地,黑客可以通过观看优秀的程序学会编程,不是看它们的执行结果,而是看它们的源代码。开源运动最鲜为人知的优点之一,就是使得学习编程变得更容易了。《黑客与画家》
P27:绘画的这个创作过程就值得学习。我认为黑客也应该这样工作。你不能盼望先有一个完美的规格设计,然后再动手编程,这样想是不现实的。如果你预先承认规格设计是不完美的,在编程的时候,就可以根据需要当场修改规格,最终会有一个更好的结果。《黑客与画家》
P29:同样地,优秀的软件也要求对美的狂热追求。如果你查看优秀软件的内部,就会发现那些预料中没有人会看见的部分也是优美的。我对待代码的认真程度远远超过我对待其他事情,如果我以这种态度对待日常生活的每件事,那么我就够资格找心理医生开处方药了。看到代码前面的缩进乱七八糟,或者看到丑陋的变量名,都会把我逼疯的。《黑客与画家》
P29:如果黑客只是一个负责实现领导意志的技术工人,职责就是根据规格说明书写出代码,那么他其实与一个挖水沟的工人是一样的,从这头挖到那头,仅此而已。但是,如果黑客是一个创作者,他从事的就不是机械性的工作,他必须具备灵感。《黑客与画家》
P29:对于编程,这实际上意味着你可以把bug留到以后解决。消灭bug对我来说属于轻松的工作,只有在这个时候,编程才变得直接和机械,接近社会大众想象中的编程的样子。消灭bug的过程就像解一道数学题,已知许许多多的约束条件,你只要根据条件对方程求解就可以了。你的程序应该能产生x结果,但是却产生了y结果。哪里出错了?你知道自己最后肯定能解决这个问题,所以做起来就很轻松,就好像刷墙一样,接近于休闲了。《黑客与画家》
P30:正确的合作方法是将项目分割成严格定义的模块,每一个模块由一个人明确负责。模块与模块之间的接口经过精心设计,如果可以的话,最好把文档说明写得像编程语言规范那样清晰。《黑客与画家》
P30:就像绘画作品一样,大多数软件是为人类用户准备的。所以,黑客必须像画家一样,时刻考虑到用户的人性需求,这样才能做出伟大的产品。你必须能够站在用户的角度思考问题,也就是说你必须学会“换位思考”。《黑客与画家》
P31:事实表明,从他人的角度思考问题正是成功的奥秘所在。“换位思考”并不就意味着你要做自我牺牲。实际上,这是完全不同的两回事。了解别人对于事情的看法,并不代表你为他的利益服务。某些情况下,比如打仗的时候,了解对手正是为了打击对手。《黑客与画家》
P31:判断一个人是否具有“换位思考”的能力有一个好办法,那就是看他怎样向没有技术背景的人解释技术问题。《黑客与画家》
P31:软件的部分功能就是解释自身。为了写出优秀软件,你必须假定用户对你的软件基本上一无所知。你要明白,用户第一次使用你的软件的时候,不会预先做好功课,他们没有任何准备就开始用了,所以软件的使用方式最好能符合用户的直觉,别指望用户去读使用手册。《黑客与画家》
P32:源代码也应该可以自己解释自己。如果我只能让别人记住一句关于编程的名言,那么这句名言就是《计算机程序的结构与解释》一书的卷首语:程序是写出来给人看的,附带能在机器上运行。《黑客与画家》
P32:声望这个东西,总是经过漫长的时滞以后才会确立,它就像遥远星系发出的光,经过了许多光年才能被我们看到。那些如今声名显赫的绘画作品,来自于五百年前的画家的卓越工作。在那些画家生前,没有人像我们今天那样看重这些作品。1465年的人们也许会感到非常奇怪,后世的人们提起乌尔比诺城(Urbino)不可一世的费德里科公爵,最主要的原因居然是弗朗切斯卡把他的鼻子画得非常独特。《黑客与画家》
P33:我们能够有把握说的就是,现在正是编程的黄金年代。大多数领域的伟大作品都诞生于很早以前。1430年到1500年之间的绘画杰作,至今仍是不可超越的。莎士比亚出现的时候,戏剧这种文艺体裁才刚刚发展起来,专门表演戏剧的创所“戏院”才刚刚诞生。他把戏剧这种艺术形式提升到了一个难以触及的高度,让后世的每一个剧作家都不得不生活在他的阴影之中。德国雕塑大师丢勒,英国小说家简.奥斯丁都是这样的大师。《黑客与画家》
P33:在达芬奇的年代,绘画并不是一件很酷的事情,达芬奇用自己的工作推动绘画成为一种伟大的表达方式。同样,编程到底能够有多酷,取决于我们能够用这种新媒介做出怎样的工作。《黑客与画家》
P36:如果你真的相信了它,凡是不认同社会之处,你连想都不敢想,马上放弃自己的观点,那才会真正出问题。《黑客与画家》
P158:我的判断是,那些内核最小、最干净的编程语言才会存于进化的主干上。一种语言的内核设计得越小、越干净,它的生命力就越顽强。《黑客与画家》
P158:编程语言进化缓慢的原因在于它们并不是真正的技术。语言只是一种书写法,而程序则是一种严格符合规则的描述,以书面形式记录计算机应该如何解决你的问题。所以,编程语言的进化速度更像数学符号的进化速度,而不像真正的技术(比如交通或通信技术)的进化速度。数学符号的进化是缓慢的渐变式变化,而不是真正技术的那种跳跃式的发展。《黑客与画家》
P162:比尔·伍兹曾经对我说,根据经验判断,每增加一个解释层,软件的运行速度就会慢一个数量级。但是,多余的软件层可以让编程灵活起来。《黑客与画家》
P171:选择使用哪一种技术的时候,你不能考虑别人的做法,只能考虑什么样的技术能最好地完成工作。《黑客与画家》
P179:如果你为创业公司工作,那么这里有一个评估竞争对手的妙招——关注他们的招聘职位。《黑客与画家》
P190:如果你创业的话,千万不要为了取悦风险投资商或潜在并购方而设计你的产品。让用户感到满意才是你的设计方向。只要赢得用户,其他事情就会接踵而来。如果没有用户,谁会关心你选择的“正统”技术是多么令人放心。《黑客与画家》
P193:技术本来就应该是尖端的。正如伊拉恩·加内特所说,编程语言的所谓“业界最佳实践”,实际上不会让你编程最佳,只会让你变得很平常。《黑客与画家》
P193:所以,我们就有了两点结论,我认为它们非常有价值。事实上,这是我用自己的经历换来的。第一,不同语言的编程能力是不一样的。第二,大多数经理故意忽视第一点。你把这两点事实结合起来,其实就得到了赚钱的诀窍。ITA软件公司是运用这个诀窍的典型例子。如果你想在软件业获得成功,就使用你知道的最强大的语言,用它解决你知道的最难的问题,并且等待竞争对手的经理做出自甘平庸的选择。《黑客与画家》
P196:“格林斯潘第十定律”(Greenspun's Tenth Rule):任何C或Fortran程序复杂到一定程度后,都会包含一个临时开发的、只有一半功能的、不完全符合规格的、到处都是bug的、运行速度很慢的Common Lisp实现。《黑客与画家》
P209:所以,发明新事物的人必须有耐心,要常年累月不断地做市场推广,知道人们开始接受这种发明。我们就耗费了好几年才使得客户明白Viaweb不需要下载安装就能使用。不过,好消息是,简单重复同一个信息就能解决这个问题。你只需要不停地重复同一句话,最终人们将会开始倾听。人们真正注意到你的时候,不是第一眼看到你站在那里,而是发现过了这么久你居然还在那里。《黑客与画家》
P210:如果你能平衡好希望和担忧,他们就会推动项目前进,就像自行车在保持平衡中前进一样。在创新活动的第一阶段,你不知疲倦地猛攻某个难题,自信一定能够解决它。到了第二阶段,你在清晨的寒风中看到自己已经完成的部分,清楚地意识到存在各种各样的缺陷。此时,只要你对自己的怀疑没有超过你对自己的信心,就能够坦然接受这个半成品,心想不管多难我还是可以把剩下的部分做完。《黑客与画家》
P211:发展用户就像一种优化过程,明智的做法就是放慢速度。一般情况下,用户比较少意味着你任何时候都可以加大修改的力度。《黑客与画家》
P213:优秀的建筑师不会先设计,然后强迫用户接受,而是先研究最终用户的需求,然后做出用户需要的设计。《黑客与画家》
P214:做一个好的设计师就像做一个好医生一样。你不能头痛医头,脚痛医脚。病人告诉你症状,你必须找出他生病的真正原因,然后针对病因进行治疗。《黑客与画家》
P214:除非设定目标用户,否则一种设计的好坏根本无从谈起。《黑客与画家》
P216:评价一种语言的优劣不能简单地看最后的程序是否表达得很漂亮,而要看程序从无到有的那条完成路径是否很漂亮。《黑客与画家》
P218:开发软件的时候,我有一条规则:任何时候,代码都必须能够运行。如果你正在写的代码一个小时之后就可以看到运行结果,这好比让你看到不远处就是唾手可得的奖励,你因此会受到激励和鼓舞。《黑客与画家》
P218:跟你说实话吧,画家之间甚至流传着一句谚语:“画作永远没有完工的一天,你只是不再画下去而已。”这种情况对于第一线的程序员真是再熟悉不过了。《黑客与画家》

原文地址:https://www.cnblogs.com/flowjacky/p/2813197.html