文艺复兴时期的代表人物阿尔伯蒂有一句名言:"任何一种艺术,不管是否重要,如果你想要在该领域出类拔萃,就必须全身心投入。
没有什么比一个共同的敌人更能使得人们团结起来了。
今天的青少年则是神经兮兮、供人玩耍的哈巴狗。他们的疯狂源于到处都是一片可怕的无聊。
学校是一个很奇怪的、人为设计出来的体系,一半像是无菌室,一半像是野蛮洪荒之地。它就像人生一样,里面无所不包,但又不是事物的真实样子。它只是一个暂时的过程,只要你向前看,你就能超越它,哪怕现在你还是身处其中。
建筑学和工程学之间的区别并不是很严格的,但就是存在区别。这表现在"做什么"和"怎么做":建筑师决定做什么,工程师想出怎么做。
优秀程序员不仅负责建造,还负责架构。
优美的软件并不总是论文的合适题材。
确保自己正在开垦新领地的方法,就是去找那些没有人要的土地。
你可以写那些为了完成工作、你不得不克服的障碍。没有什么比一个错误的前提更容易产生大量待解决的问题了。人工智能(AI)领域的大部分情况,都符合这条"如何凭空创造出问题"的规律。如果你假定,使用一系列的谓词逻辑(predicate logic)表达式,再加上代表抽象概念的参数,就能表达人类的知识,那么,你就可以写出许许多多的论文,解释如何完成这项工作。
唯一有效的外部考核就是时间。经过岁月的洗礼,优美的东西生存发展的机会更大,丑陋的东西往往会被淘汰。
你把整个程序想清楚的时间点,应该是在编写代码的同时,而不是在编写代码之前。(P.S.: 动态类型语言)
编程语言首要的特性应该是允许动态扩展(malleable)。编程语言是用来帮助思考程序的,而不是用来表达你已经想好的程序。它应该是一支铅笔,而不是一支钢笔。
静态类型是某些计算机语言的一个特性,指编译时对变量类型进行严格检査,典型代表是C、C++和Java。在这一类语言中,声明变量的时候,必须指定类型,而且以后不能再改变。
一页写满了数学公式的纸真是令人印象深刻啊。(小窍门:用希腊字母表示变量名会令人印象更深刻。)因此,你就受到巨大的诱惑,去解决那些能够用数学公式处理的问题,而不是去解决真正重要的问题。
大部分公司不把设计软件的职责交给一个优秀的黑客,而是交给一个委员会,黑客的作用仅仅是实现那个委员会的设计。
大公司为了避免设计上的灾难,选择了减少设计结果的标准差。但是当你排斥差异的时候,你不仅将失败的可能性排除在外,也将获得高利润的可能性排除在外。这对大公司来说不是问题,因为生产特别优秀的产品不是它们的获胜手段。大公司只要做到不太烂,就能赢。
真正竞争软件设计的战场是新兴领域的市场,这里还没有人建立过防御工事。只要你能做出大胆的设计,由一个人或一批人同时负责设计和实现产品,你就能在这里战胜大公司。
因为如果你不爱一件事,你不可能把它做得真正优秀,要是你很热爱编程,你就不可避免地会开发你自己的项目。
画家学习绘画的方法主要是动手去画,黑客学习编程的方法也理应如此。
应该定期地从头开始,而不要长年累月地在一个项目上不断工作,并且试图把所有的最新想法都以修订版的形式包括进去。
黑客的出发点是原创,最终得到一个优美的结果;而科学家的出发点是别人优美的结果,最终得到原创性。
创作者另一个学习的途径是通过范例。
黑客可以通过观看优秀的程序学会编程,不是看它们的执行结果,而是看它们的源代码。
一幅画是逐步完成的。通常一开始是一张草图,然后再逐步填入细节。但是,它又不单纯是一个填入细节的过程。有时,原先的构想看来是错的,你就必须动手修改。
如果你预先承认规格设计是不完美的,在编程的时候,就可以根据需要当场修改规格,最终会有一个更好的结果。
过早优化(premature optimization)是一件危险的事情。我认为,我们应该对"过早设计"(premature design)坚持一丝不苟,就能取得优秀的成果。因为那些看不见的细节累加起来,就变得可见了。
暂时放手有时也能防止热情熄火。
正确的合作方法是将项目分割成严格定义的模块,每一个模块由一个人明确负责。模块与模块之间的接口经过精心设计,如果可能的话,最好把文档说明写得像编程语言规范那样清晰。
从他人的角度思考问题正是成功的奥秘所在。"换位思考"并不就意味着你要做自我牺牲。
了解别人对于事情的看法,并不代表你为他的利益服务。某些情况下,比如打仗的时候,了解对手正是为了打击对手。
判断一个人是否具备"换位思考"的能力有一个好方法,那就是看他怎样向没有技术背景的人解释技术问题。
软件的部分功能就是解释自身。为了写出优秀软件,你必须假定用户对你的软件基本上一无所知。
程序写出来是给人看的,附带能在机器上运行。
流行的道德观念,其实不是善而是恶。
历史的常态似乎就是,任何一个年代的人们,都会对一些荒谬的东西深信不疑。他们的信念还很坚定,只要有人稍微表示一点怀疑,就会惹来大麻烦。
如果别人告诉你应该相信什么,你就真的相信了,那么你就会和别人一样犯下同样的错误。
触怒他人的言论是那些可能会有人相信的言论
最令人暴跳如雷的言论,就是被认为说出了真相的言论。
找出"不能说的话"的第一种方法:判断言论的真伪。
关注"异端邪说",是找出"不能说的话"的第二种方法。
你只要看看人们怎么称呼那些自己不赞成、但是又不算错的观点就行了
因为最先从你头脑中跳出来的想法,往往就是最困扰你、很可能为真的想法。你已经注意到它们,但还没有认真思考过。
很多看似叛逆的"异端邪说",早就"潜伏"在我们的思维深处。如果我们暂时关闭自我审查意识,它们就会第一个浮现出来。
我们可以去找那些过去被认为理所当然,如今却被认为不可思议的事情,这是用来找出我们自己正在犯下的错误的第三种方法。
方法:将当代观念与不同时期的古代观念diff^一下。
diff是计算机术语,最早是一个程序,用来比较同一个软件不同版本源码之间的差异。它会告诉你,哪些是新增的代码,哪些是被删的代码。后来,这个词还可以当动词用。
如果某个观点在大部分时空都是不受禁止的,只有我们这个社会才把它当作禁忌,那么很可能是我们出错了。
第四种寻找"不能说的话"的方法:寻找那些一本正经的卫道者,看看他们到底在捍卫着什么。
第五种方法,可以找出"不能说的话",那就是去观察禁忌是如何产生的。某种道德观念到底是怎么出现的,又是怎么被其他人接受的?
如果一个团体太弱小,就会无力推行禁忌。
大多数的斗争,不管它们实际上争的是什么,都会以思想斗争的形式表现出来。
带动流行的两种力量之中,恐惧心比抱负心有力得多。
如果你要寻找"不能说的话",可以观察流行的产生方式,试着预测它会禁止哪些话。哪一个团体势力强大,却又精神高度紧张?这种团体喜欢压制什么样的思想观点?近来有没有什么社会斗争,失败的一方是哪一方,受到他们牵连的是什么样的思想观点?如果一个先锋人物想要挣脱当前的流行(比如上一代人的观点)脱颖而出,他会支持什么样的思想观点?随大流的人对什么样的思想观点抱有恐惧心?
优秀作品往往来自于其他人忽视的想法,而最被忽视的想法就是那些被禁止的思想观点。
不受传统观念束缚的人,往往也不会穿流行的衣服。
做一个异端是有回报的,不仅是在科学领域,在任何有竞争的地方,只要你能看到别人看不到或不敢看的东西,你就有很大的优势。
训练自己去想那些不能想的事情,你获得的好处会超过所得到的想法本身。
自由思考比畅所欲言更重要。
在心里无所不想,但是不一定要说出来。
你的思想是一个地下组织,绝不要把那里发生的事情一股脑说给外人听。
守口如瓶,笑脸相迎,也就是说,你要对每一个人微笑,但是不要说出自己的真实想法。这样不仅可以获得新观点,还可以用来选择朋友。能够一起谈论"异端邪说"并且不会因此气急败坏的人,就是你最应该认识的朋友。
你的策略,简单说,就是不赞同这个时代的任何一种歇斯底里,但是又不明确告诉别人到底不赞同哪一种歇斯底里。
人们喜欢讨论的许多问题实际上都是很复杂的,马上说出你的想法对你并没有什么好处。更好的回答是"我还没想好"。
有几种方法可以使你免于被贴上"黄色分子"的标签。
逐步把辩论提升到一个抽象的层次——你不要直接攻击某个标签,而要攻击它的"元标签"(meta-label)。所谓"元标签",就是对某个标签的抽象描述。如果人们开始讨论元标签,那么原来的标签反而不会受到注意了。
反击的方法就是使用隐喻(metaphor)。
最好的一种可能就是幽默。狂热分子都有一个共同点:缺乏幽默感。
人们脑子里有一根界线,早就认准了什么是对的,什么是错的。换言之,在他们看来,所有观点都是可以讨论的,除了那些错的观点。
所谓"流行"(传统观念也是一种流行),本质上就是自己看不见自己的样子。
只有保持一定的距离才能观察到人们观念的变化,发现流行(也就是人们自以为正确的事情)到底是什么。
时间就是一种产生距离的简单方法。实际上,新的流行让旧的流行更容易被观察到,因为对比之下,旧的流行会显得很荒唐。
没有了时间所产生的距离,你不得不自已创造距离。你不要让自己成为人群的一分子,而要尽可能地远离人群,观察正在发生的事情,特别注意那些被压制的思想观点。
如果一个命题不是错的,却被加上各种标签,进行压制和批判,那就有问题。
只要不是错的观点,就不应该被压制讨论。所以每当你看到有些话被攻击为出自XX分子或XX主义,这就是一个明确的信号,表明背后有问题。
如果你发现自己也在用这些标签,那就更要问为什么。
你不仅要远距离观察人群,更要远距离观察你自己。
如果自己就是潮水的一部分,怎么能看见潮流的方向呢?你只能永远保持质疑。问自己,什么话是我不能说的?为什么?
不服从管教,其实是黑客之所以成为优秀程序员的原因之一
思想自由(intellectual freedom),指的是自由思考以及表达这种思考的权利。
很自负的人必须培养出敏锐的感觉,及时发现周围情势的变化,知道怎样才能脱身