《黑客与画家》摘录【四】
- 创业公司如同蚊子,往往只有两种结局,要么赢得一切,要么彻底消失。你通常不知道自己会是哪个结局,只有等到最后一刻才会明白。
- 你必须时刻牢记的最基本的原则就是,创造人们需要的东西,也就是创造财富。如果你想通过创造财富使得自己致富,那么你就必须知道人们需要什么。很少有公司真的关注如何使顾客更满意。有多少次,你的心中怀着担忧和恐惧?当你听到“你的意见对我们很重要,请不要挂断”,你真的觉得事情会得到圆满解决吗?
- 缓慢工作的后果并不仅仅是延迟了技术革新,而且很可能会扼杀技术革新。只有在快速获得巨大利益的激励下,你才会去挑战那些困难的问题,否则你根本不愿意去碰它们。开发新技术是非常痛苦的经历。工程师愿意接受普通薪水去做一些诱人的项目(比如战斗机和登月火箭),而与日常生活关系更密切的技术革新(比如电灯泡和半导体)只能由创业者来发明。
- 如今创造财富而致富已经成为了普遍的模式。每一个这样做的人差不多都应用了同样的诀窍:可测量性和可放大性。前者来自于小团队的合作,后者来自于开发新技术。
- 如果我可以做选择,到底是生活在一个整体上非常富裕但是我个人相对贫穷的社会,还是生活在一个我个人非常富裕但是整体上非常贫穷的社会呢?我会选择第一个选项。如果我有小孩,可能哪一个选择更好还值得争论。但是,总的来说,你要避免的是绝对贫穷,而不是相对贫穷,但是整体上更富裕的社会。
- 一个社会需要有富人,这主要不是因为你需要富人的支出创造就业机会,而是它们在致富过程中做出的事情。我在这里谈论的不是财富从富人流向穷人的那种扩散效应,也不是说如果你让亨利-福特致富,他就会在下一场宴会上雇用你当服务员,而是说如果你让他致富,他就会造出一台拖拉机,而你不再需要使用马匹耕田了。
- 你仔细审视一种语言的内核,考虑那些部分可以被摈弃,这至少也是一种很有用的训练。在长期的职业生涯中,我发现冗余的代码会导致更多冗余的代码,不仅代码如此,而且像我这样性格懒散的人,我发现在床底下和房间角落里这个命题也成立,一件垃圾会产生更多的垃 圾。
- 那些内核最小、最干净的编程语言才会存在于进化的主干上。一种语言的内核设计得越小、越干净,它的生命力就越顽强。
- 你可能认为只有那些自以为是的人才会去预言一百年之后的技术,但是,请不要忘记,软件发展的历史已经走过了50年。在这50年中,编程语言的进化其实是非常缓慢的,因此展望一百年后的语言并不是虚无缥缈的想法。
- 编程语言的进化速度更像是数学符号的进化速度,而不像真正的技术(比如交通或通信技术)的进化速度。数学符号的进化是缓慢的渐变式变化,而不是真正技术的那种跳跃式发展。
- 我认为,在未来50年中,编程语言的进步很大一部分与函数库有关。未来的函数库将像语言内核一样精心设计。优秀函数库的重要性将超过语言本身。某种语言到底是静态类型还是动态类型、是面向对象还是函数式编程,这些都不如函数库重要。那些习惯了用变量类型思考问题的语言设计者可能会对这种趋势感到不寒而栗。这不等于把语言设计降到开发应用程序的层次吗?函数库的使用应该符合程序员的直觉,让他可以猜得出哪个函数能满足自己的需要。
- 正如需要最终用户已经意识到的,运行速度的概念正在发生变化。随着互联网软件的兴起,越来越多的程序主要不是受限于计算机的运算速度,而是受限于I/O的速度。加快I/O速度将是很值得做的一件事。在这方面,编程语言也能起到作用,有些措施是显而易见的,比如采用简洁、快速、格式化的函数,还有些措施则需要深层次的结构变化,比如采用缓存和持久化对象。
- 让我们试着描述黑客心目中梦寐以求的语言来为以上内容做个小结。这种语言干净简练,具有最高层次的抽象和互动性,而且很容易装备,可以只用 很少的代码就能解决常见的问题。不管是什么程序,你真正要写的代码几乎都与你自己的特定设置有关,其他具有普遍性的问题都有现成的函数库可以调用。 这种语言的语法短到令人生疑,使得你可以快速写出一个程序的原型。然后等你开始优化的时候,它还提供一个真正出色的性能分析器,告诉你应该重点关注什么地方。你能让多重循环快到难以置信,并且在有需要的地方还能直接嵌入字节码。 这种语言有大量的优秀的范例可供学习,而且非常符合直觉,你只需花几分钟阅读范例就能领会应该如何使用此种语言。偶尔才需要查阅手册。 这种语言的内核很小,但很强大。各个函数库高度独立,而且和内核一样经过精心设计,它们都能很好地协同工作。语言的每个部分就像精密照相机的各种零件一样完美契合,不要为了兼容性问题放弃或者保留某些功能。所有函数库的源码都很容易得到。这种语言能够很轻松地与操作系统和其他语言开发的应用程序对话。 这种语言以层的方式构建。较高的抽象层透明的构建在较低的抽象层之上。如果需要的话,你可直接使用较低的抽象层。 除了一些绝对必要隐藏的东西,这种语言的所有细节对使用者都是透明的。它提供的抽象能力只是为了方便你的开发,而不是为了强迫你按照它的方式行事。事实上,它鼓励你参与它的设计,给你提供与语言创造者平等的权利。你能对它的任何部分加以改变,甚至包括它的语法。它尽可能让你自己定义的部分与它本身定义的部分处于同等地位。这种梦幻般的编程语言不仅开放源码,更开放自身的设计。