黑客与画家
根据使用的语言不同,程序员往往会被分成不同的派别。人们区分程序员甚至不是看他们写了什么程序,而是看他们使用什么语言。
声称一种语言优于另一种语言被认为是不礼貌的行为。
优秀的黑客养成了一种质疑一切的习惯。
为什么书呆子不受欢迎:他们的心思在别的地方
虽然“书呆子”饱尝不受欢迎之苦,但是为了解除痛苦而让他们放弃“聪明”,我想大多数人是不会愿意的。
任何一种艺术,不管是否重要,如果你想要在该领域出类拔萃,就必须全身心投入。”
青少年每时每刻都想融入群体之中。
书呆子不受欢迎的真正原因,是他们脑子里想着别的事情。他们的注意力都放在读书或者观察世界上面,而不是放在穿衣打扮、开晚会上面。
那些受欢迎的小孩从小就在琢磨如何受欢迎,打心底里追求这个。但是,书呆子从小琢磨的却是如何更聪明,心底里也是这样追求的。
要是不受欢迎仅仅意味着不受到关注,书呆子们可能觉得还能忍受。不幸的是,在学校里不受欢迎等同于被歧视和被欺负。
在任何社会等级制度中,那些对自己没自信的人就会通过虐待他们眼中的下等人来突显自己的身份。我已经意识到,正是因为这个原因,在美国社会中底层白人是对待黑人最残酷的群体。
没有什么比一个共同的敌人更能使得人们团结起来了。
如果我没记错的话,最受欢迎的孩子并不欺负书呆子,他们不需要靠踩在书呆子身上来垫高自己。大部分的欺负来自处于下一等级的学生,那些焦虑的中间层。
真实世界的关键并非在于它是由成年人组成的,而在于它的庞大规模使得你做的每件事都能产生真正意义上的效果。学校、监狱、上流社会的女士午餐会,都做不到这一点。这些场合的成员都好像关在封闭的泡沫之中,所作所为只对泡沫内部有影响,对外部没有影响。那么很自然地,这些场合就会产生野蛮的做法。因为它们不具备实际功能,所以也就无所谓采用的形式。
我在这个世界中过得并不好,我觉得一定是自己什么地方做错了。我没有意识到,作为书呆子,我不适应周围环境,某种程度上正说明我领先了一步。
当今的青少年在生产活动中,根本就是毫无用处的。他们只能在诸如快餐店这样的地方充当廉价劳动力,而快餐店也看出来了,充分利用了这个事实。
青少年都不喜欢孤独一人,即使具有叛逆心理的青少年也是如此。
怪人使用毒品,是为了建立他们之间的社交纽带,至少一开始如此。因为毒品是非法的,所以一起使用的话,就创造出了一种共同反叛的标志。
黑客与画家:黑客也是创造者,与画家、建筑师、作家一样。
你把整个程序想清楚的时间点,应该是在编写代码的同时,而不是在编写代码之前,这与作家、画家和建筑师的做法完全一样。
编程语言首要的特性应该是允许动态扩展(malleable)。
大公司为了避免设计上的灾难,选择了减少设计结果的标准差。但是当你排斥差异的时候,你不仅将失败的可能性排除在外,也将获得高利润的可能性排除在外。这对大公司来说不是问题,因为生产特别优秀的产品不是它们的获胜手段。大公司只要做到不太烂,就能赢。
真正竞争软件设计的战场是新兴领域的市场,这里还没有人建立过防御工事。只要你能做出大胆的设计,由一个人或一批人同时负责设计和实现产品,你就能在这里战胜大公司。
更一般地说,“白天工作”的意思是,你有一份为了赚钱的工作,还有一份为了爱好的工作。几乎所有的创作者在职业生涯的早期都有一份“白天工作”。
大多数黑客不是通过大学课程学会编程的,他们从实践中学习,13岁时就自己动手写程序了。即使上了大学,黑客学习编程依然主要通过自己写程序。
科学家研究的基础都是现有的很完美的成果,在这个意义上,他们的第一步只是在复制别人已经做过的工作。最后,他们才会从某一个点开始,进行自己的原创性工作。
黑客的出发点是原创,最终得到一个优美的结果;而科学家的出发点是别人优美的结果,最终得到原创性。
坚持一丝不苟,就能取得优秀的成果。因为那些看不见的细节累加起来,就变得可见了。
如果你查看优秀软件的内部,就会发现那些预料中没有人会看见的部分也是优美的。
正确的合作方法是将项目分割成严格定义的模块,每一个模块由一个人明确负责。模块与模块之间的接口经过精心设计,如果可能的话,最好把文档说明写得像编程语言规范那样清晰。
事实表明,从他人的角度思考问题正是成功的奥秘所在。“换位思考”并不就意味着你要做自我牺牲。
某些情况下,比如打仗的时候,了解对手正是为了打击对手。
为了吸引用户,你必须理解用户需要什么。举例来说,几乎所有最伟大的绘画作品都是画人的,因为人类总是对自身感兴趣的。
有些黑客很聪明,但是完全以自我为中心,根本不会设身处地为用户考虑。这样的人很难设计出优秀软件,因为他们不从用户的角度看待问题
判断一个人是否具备“换位思考”的能力有一个好方法,那就是看他怎样向没有技术背景的人解释技术问题。
软件的部分功能就是解释自身。为了写出优秀软件,你必须假定用户对你的软件基本上一无所知。
程序写出来是给人看的,附带能在机器上运行。
不能说的话:如果你的想法是社会无法容忍的,你怎么办?
如果伽利略说帕多瓦城(Padua)的人身高三米,他只会被当作一个古怪的疯狂科学家。但是,他说地球围绕太阳运转,性质就完全不一样了。教廷知道,这种话会让人们开始思考。
孩子眼里的世界是不真实的,是一个被灌输进他们头脑的假想世界。将来当孩子长大以后接触社会,就会发现小时候以为真实的事情,在现实世界中是荒唐可笑的。
我猜想,道德禁忌的最大制造者是那些权力斗争中略占上风的一方。你会发现,这一方有实力推行禁忌,同时又软弱到需要禁忌保护自己的利益。
大多数的斗争,不管它们实际上争的是什么,都会以思想斗争的形式表现出来。
斗争。思想斗争更容易争取支持者。
在科学领域,质疑他人的结论和公认的假设是尤其重要的一件事,会提供巨大的科学创造的优势。
科学家(或者至少是优秀科学家)做事的方式,准确地说,就是寻找传统观点无法自圆其说的地方,然后试着拆开那里,看个究竟,瞧瞧里面到底出了什么问题。新的理论就是这样产生的。
智力越高的人,越愿意去思考那些惊世骇俗的思想观点。这不仅仅因为聪明人本身很积极地寻找传统观念的漏洞,还因为传统观念对他们的束缚力很小,很容易摆脱。从他们的衣着上你就可以看出这一点:不受传统观念束缚的人,往往也不会穿流行的衣服。
自由思考比畅所欲言更重要。
你的思想是一个地下组织,绝不要把那里发生的事情一股脑说给外人听。“格斗俱乐部”的第一条规则,就是不要提到格斗俱乐部。
守口如瓶,笑脸相迎
弥尔顿的时代与我们的时代并没有本质不同。每个时代都有自己的忌讳,如果你触犯它们,就算没有坐牢,至少也会为自己惹来麻烦,干扰了正常生活。
“守口如瓶”的真正缺点在于,你从此无法享受讨论带来的好处了。讨论一个观点会产生更多的观点,不讨论就什么观点也没有。所以,如果可能的话,你最好找一些信得过的知己,只与他们畅所欲言、无所不谈。
不过,更好的回答是“我还没想好”。
不管问谁,人们都会说同样的话:“我们心态很开放,愿意接受新思想。”但是实际上,人们脑子里有一根界线,早就认准了什么是对的,什么是错的。
良好的坏习惯:与其他美国人一样,黑客的成功秘诀就是打破常规。
最新的版权法设置了前所未有的障碍,禁止外部人员了解专有技术的内部细节,从而也就禁止了外部人员从这个途径产生新构想。
黑客都是聪明人,很少出现所有人意见一致的情况。如果他们都说有问题,那么也许真的就是什么地方出了问题。
黑客是不服从管教的,这就是他们的本性。这也是美国人的本性。硅谷出现在美国,而不是出现在法国、德国、英国、日本,这绝非偶然。后面那些国家的人们总是按部就班地行事。
黑客永远是自负的。
不远。IBM推出个人电脑的时候,懒得自己开发操作系统,就与微软公司签了一个很大方的授权协议,将微软的DOS作为默认操作系统,每卖出一台电脑,微软都可以提成,并且还可以把DOS授权给其他公司使用。
专制国家会变成腐败国家,腐败国家会变成贫穷国家,贫穷国家会变成弱小国家。
这些开国元勋就像直率的老祖母,用自己的言辞让他们的那些不自信的继承者感到了惭愧。他们提醒我们不要忘记自己从何而来,提醒我们,正是那些不服从管教的人们,才是美国财富与力量的源泉。
如何创造财富:致富的最好方法就是为社会创造财富。创造财富的最好方法就是创业。
创业公司其实就是解决了某个技术难题的小公司。
如果你想赚100万美元,就不得不忍受相当于100万美元的痛苦。
当你开始做生意时,很容易陷入一种迷思,认为只要把东西做出来就会有人要。
关注贫富分化:“收入分配不平等”的危害,会不会没有我们想的那样严重?
中产阶级的出现使得财富总量不再是一个固定不变的值,财富的分配也不再是一种零和游戏。
由于人类历史上主要的致富方式长期以来都是偷窃,所以我们依然对有钱人抱有一种怀疑态度。
巴尔扎克说过:“每一笔巨大财富的背后,都隐藏着罪行。”这句话被广泛引用,但是他其实说的是另一个意思,如果巨大财富没有明显的来源,那可能就来源于精心安排的犯罪活动,由于掩盖得太好,使得罪行被人遗忘了。
技术无法使其变得更便宜的唯一东西,就是品牌。
这正是为什么我们现在越来越多地听到品牌的原因。
富人日常做的事情也和普通人差不多。无所事事的闲适生活早就成为罕见情况了。如今,确实有很多人非常有钱,完全不必再去工作,他们之所以还在工作,不是因为感到社会压力,而是因为无所事事使人感到孤独和消沉。
即使是最先进的高科技公司,也有至少90%的工作没有乐趣、令人生厌。
但是,总的来说,你要避免的是绝对贫穷,而不是相对贫穷。如果必须在这两种社会之间做选择,根据目前的证据,我选择个人相对贫穷、但是整体上更富裕的社会。
哥白尼不认同托勒密的体系,一个极其重要的原因是,他觉得托勒密提出的偏心等距点(equant)毫无美感……
我们所有人都受到凯利·约翰逊的影响,狂热地相信外观优美的飞机一定会飞得同样漂亮。
人类的思想就是没有经过整理的无数杂念的混合。
我们大多数人从孩提时代起就被鼓励不要去分析清楚自己的头脑。
现在流行“相对主义”,即认为真理是相对的。即使你已经从小孩变成了成年人,这种观点依然可能妨碍你思考“品味”。
好设计是简单的设计。
这些装饰都是花架子,在作家的长句、画家“表现主义”的画笔之下,根本就是空洞无物,表面的装饰掩盖了内部的空虚,太可怕了。
好设计是永不过时的设计。
随着时间经常改变。如果一件东西长盛不衰,那么它的吸引力一定来自本身的魅力,而不是来自风潮的影响。
许多坏设计做得很辛苦,但是从一开始方向就错了。
好设计是启发性的设计。
好设计通常是有点趣味性的设计。
始终拥有幽默感就代表你对厄运一笑了之,而丧失幽默感则表示你被厄运深深伤到。
好设计是艰苦的设计。如果观察那些做出伟大作品的人,你会发现他们的共同点就是工作得非常艰苦。如果你工作得不艰苦,你可能正在浪费时间。
并非所有的艰苦都是值得的。世界上有有益的痛苦,也有无益的痛苦。你需要的是咬牙向前冲刺的痛苦,而不是脚被钉子扎破的痛苦。
科学和工程学的一些最重大的发现在形式上往往很简单,会使得你觉得自己也想到过。可是,如果它真的那么简单,为什么发现人不是你呢?
对称的危险在于它可以用来取代思考,在大量使用重复的时候这种危险性更大。
好设计是模仿大自然的设计。
好设计是一种再设计。
你应该培养对自己的不满。达·芬奇为了把一根线画对,经常要画五六次。保时捷911型汽车的原型很粗糙,只有在重新设计后它的背部轮廓才变成现在这样独特的曲线。
最伟大的大师最终会达到一种超脱自我的境界。他们一心想找到正确答案,如果别人已经回答出了一部分,那就没理由不拿来用。他们足够自信地使用他人的成果,完全不担心因此丧失个人的特点。
好设计常常是奇特的设计。某些最出色的作品堪称不可思议:欧拉公式、
爱因斯坦并不想让相对论变得很奇特,他只想找出真理,是真理本身显得很奇特。
好设计是成批出现的。
达·芬奇的出现除了他本身的天赋以外,还有赖于1450年的佛罗伦萨。
推动人才成批涌现的最大因素就是,让有天赋的人聚在一起,共同解决某个难题。互相激励比天赋更重要。
在历史的任何时刻都有一些热点项目,一些团体在这些项目上做出伟大的成绩。如果你远离这些中心,几乎不可能单靠自己就取得伟大成果。某种程度上,你个人最多可以对趋势产生一定的影响,但是你不可能决定趋势,实际上是趋势决定了你。
单单是无法容忍丑陋的东西还不够,只有对这个领域非常熟悉,你才可能发现哪些地方可以动手改进。
编程语言解析:什么是编程语言?为什么它们现在很热门?
机器语言的加法命令是11001101,这可能就是计算机内部的加法表达方式,但是在汇编语言中,这条命令就改成了add。
编程语言的一个重要特点:一个操作所需的代码越多,就越难避免bug,也越难发现它们。
高级语言还有一个优点,它使得程序更具有可移植性。
编译器不是高级语言唯一的实现方法,另一种方法是使用解释器,它的作用是实时地将代码解释为相应的机器语言,然后一行行运行。相比之下,编译器则是先将整个程序全部翻译成机器语言,然后再运行。
编译器处理的高级语言代码又叫做源码。它经过翻译以后产生的机器码就叫做目标码。顾客购买市场上的商业软件时得到的往往只是目标码。
如果你长期使用某种语言,你就会慢慢按照这种语言的思维模式进行思考。所以,后来当你遇到其他任何一种有重大差异的语言,即使那种语言本身并没有任何不对的地方,你也会觉得它极其难用。
一百年后的编程语言:一百年后,人类怎样编程?为什么不从现在开始就这样编程呢?
我的判断是,那些内核最小、最干净的编程语言才会存在于进化的主干上。一种语言的内核设计得越小、越干净,它的生命力就越顽强。
趋势。随着技术的发展,每一代人都在做上一代人觉得很浪费的事情。
我已经预测了,一旦未来硬件的性能大幅提高将会发生什么事。新增加的运算能力都会被糟蹋掉。
浪费程序员的时间而不是浪费机器的时间才是真正的无效率。随着计算机速度越来越快,这会变得越来越明显。
另一种消耗硬件性能的方法就是,在应用软件与硬件之间设置很多的软件层。这也是我们已经看到的一种趋势,许多新兴的语言就被编译成字节码。
字节码(bytecode)是已经经过编译但是需要进一步处理才能变成机器码的中间代码。它的好处是与硬件和软件环境无关,在编译器的配合下,可以在不同的操作系统上运行。字节码的典型运用就是Java语言。——译者注
我不认为面向对象编程将来会消亡。我觉得,除了某些特定的领域,这种编程方法其实没有为优秀程序员带来很多好处,但是它对大公司有不可抗拒的吸引力。
有一句俗话说,如果你自己做不到,那就去当老师。
在我看来,一种语言不支持宏,那就不值得使用了)。
事实上,我们的思想可能往往会受限于某种现存的语言,只采用在这种语言看来更简单的形式,它对我们思想的束缚作用会大得令人震惊。
设计语言的正确做法就变成了,看着一段程序,然后问自己是不是能把它写得更短一点?
用想象出来的一种一百年后的语言来写程序,这件事情的可靠程度,取决于你对语言内核的估计是否足够正确。
别忘了你的对手与你一样,能用任何想用的语言编写互联网软件。
软件业是竞争非常激烈的行业,而且容易出现垄断。在不考虑其他情况的条件下,某家公司的软件更快更好用,就会把竞争者赶出这个市场。一旦你开始创业,你就会更深切地感受到这一点。一般情况是,创业公司要么赢得一切,要么彻底失败。
从来没有人向我们泄露他们的内部机密,只是我们的开发速度比别人想象的更快而已。
商场如战场,对手摸不透你,你的胜算就增加了。
创业公司对竞争对手应该越保密越好。如果他们不知道(或者不关心)我们的软件用什么语言开发,我就要把这个秘密保持下去。
20世纪80年代开始,硬件的指令集都是针对编译器而不是针对程序员设计的。
到了一定年龄之后,程序员极少主动更换自己的编程语言。不管习惯使用的是哪一种语言,他们往往认为这种语言已经足够好了。
在高科技行业,只有失败者采用“业界最佳实践”。
Java语言之父詹姆斯·戈斯林在第一份《Java白皮书》中说得很清楚,之所以要设计Java,就是想解决C++的一些弱点。
一种好的编程语言,是让黑客可以随心所欲使用的语言。
一心让臣民行善的暴君可能是最专制的暴君。
只有流行才会让它保持优秀。编程语言的最高境界一直在发展之中。虽然语言的核心功能就像大海的深处,很少有变化,但是函数库和开发环境之类的东西就像大海的表面,一直在汹涌澎湃。
如果你想设计一种流行的编程语言,就不能只是单纯地设计语言本身,还必须为它找到一个依附的系统,而这个系统也必须流行。
简洁性是静态类型语言的力所不及之处。不考虑其他因素时,没人愿意在程序的头部写上一大堆的声明语句。只要计算机可以自己推断出来的事情,都应该让计算机自己去推断。
我认为,语言设计者应该假定他们的目标用户是一个天才,会做出各种他们无法预知的举动,而不是假定目标用户是一个笨手笨脚的傻瓜,需要别人的保护才不会伤到自己。
你也许能够阻止他引用另一个模块中的变量,但是你没法防止他日日夜夜不知疲倦地写出结构混乱的程序去解决完全错误的问题。
黑客改造语言的乐趣就好比外科医生摆弄病人内脏的乐趣,或者青少年喜欢用手挤破青春痘的那种感觉。