黑客与画家,这本书是硅谷创业之父 Paul Graham 的一本文集,所以各篇文章之间没有很强的关联。书中谈了不少有关黑客与计算机领域的问题,包括黑客本身的成长,黑客使用的编程语言,计算机行业的发展等等。这本书我大一时曾度过一次,当时刚进入计算机领域还一知半解,如今重读,有了不少新的感悟。
书呆子
提到书呆子,往往随之而想到的就是“聪明”和“不受欢迎”,但既然书呆子们都很聪明,为什么不让自己变得受欢迎呢?作者给出的解释是他们自己选择了不受欢迎。相比于受欢迎,书呆子们更愿意做一个聪明的人,将注意力放在读书或观察世界上面,去设计巧妙的东西,去做伟大的事情。书呆子们的青少年时期往往是痛苦的,因为他们与其他人格格不入,且在这个时期更容易受到受欢迎程度的影响。
黑客与画家
“计算机科学”是大学中一个广泛使用的概念,但这一学科是一个笼统的说法,严格来说其中包含了三种人。一种是计算机科学家,甚至可以直接说是数学家,他们研究各种计算机理论;一种是黑客,他们致力于写出优美的软件;还有一种介于二者之间的,往往专注于计算机领域的某个特殊问题。其中,黑客与画家最为想像,因为二者同为创作者,都试图创造一个优秀的作品,而不是一个研究者,去研究某个理论或者命题。
研究者与创作者有着本质上的区别,黑客存在的目的就是写出有趣的软件,而不是去探索未知领域、去撰写论文,这些工作会极大地影响黑客的效率。而且软件实现也不是一个好的论文题材,因为写出一个好的软件,往往基于前人的工作(或是在现有成果上做一点调整,或是已有观点的组合),这种工作很难用研究性的论文来描述。
所以,当我们在读大学时,应该明确自己未来的目标,到底是要做一名“科学家”还是一名“黑客”,两种不同的目标对应着两种截然不同的学习方法。作为一名黑客,你并不需要知道特别多的理论,如果拿着科学家的学习方法去学着做一名黑客,往往会使自己内心矛盾,无所适从。
财富与创业
讨论创造财富前,我们必须要先搞清楚一个概念,即金钱不等于财富。金钱是用来交易财富的一种手段,我们要追求的应该是财富,而不是金钱。也许有些人会认为,财富是固定不变的,一些人分到的多一些,另一些人就会少,然而事实上财富是可以创造出来的,财富来源于满足他人的需求的创造活动。
因为财富是创造出来的,所以会出现这样一种状况,同事的薪水可能是你的两倍,CEO 的薪水可能是你的50倍。这并不奇怪,这些人拿到了更多的钱,只是因为他们更好的满足了人们的需要,他们的工作产生了更大的价值。所以我们要理解看待贫富差距,有时候贫富差距并不是坏事,财富可以让那些富人更好地投身于自己的事业,从而产生更大的价值,使全人类收益。
公司本质上是一群人聚在一起创造财富的地方,而且不仅仅局限于生产物质商品的制造业公司,只要一个公司满足了人们的某种需要,就可以说是在创造财富。如果想在公司获得更多的薪水,要注意两点,可测量性和可放大性。可测量性指的是你的贡献应该是可以量化的,可放大性指的是你的工作应该是有深远影响而不是平平无奇的。
但大的公司往往会使得每个员工的贡献平均化,即你个人做的再多,从全公司的角度来看总量并没有增加多少。这时,创业会是更好的选择。创业公司聚集了一群和你有共同理想的人,大家压缩时间高强度地工作,从而获取更大的收益。
品味与设计
当今社会,不少人认为品味是一个主观的东西,没有绝对的好与坏之分。这种说法可以有效地杜绝争论,防止人们陷入到哪种品味更好这种无意义的讨论之中。但问题是,品味应该是有好坏之分的,当你自己设计某项东西时就会明白这一点。不论在哪一领域,好的设计往往遵循一些共同的原则:
- 简单。当你把东西做得足够简单时,就不得不关注事物的本质。
- 解决主要问题。好的设计往往是能解决实际问题的,而不是华而不实的。
- 启发性。具有启发性的设计使得人们可以在其之上发挥自己的想象力。
- 艰苦。困难的问题需要付出艰苦的努力。
- 大胆。今天的错误可能就是明天的新理论,平凡无奇的东西不会吸引人们的注意。
- 有趣味性,对称,模仿大自然,再设计,能够复制……
编程语言
计算机语言有机器语言(低级语言)和高级语言之分,计算机刚刚发明的时候就是使用机器语言,机器语言实际上就是一个个二进制串。后来出现了汇编语言,但也只是比机器语言方便了一点。这两种语言不仅晦涩难懂,而且不利于编写复杂的程序。
后来,高级语言出现了,高级语言使得程序员编写程序容易了许多。而且高级语言具有更好的可移植性,只要为不同的机器编写不同的编译器,就可以将程序部署在各个平台上。
高级语言呈现一种百家争鸣的现象,但随之也带来了一些争论,即到底哪种语言是最好的语言?有些人偏爱静态类型语言(如C++, Java),认为静态类型语言可以减少bug的数量;而有些人偏爱动态类型的语言(如Python, Javascript),认为动态语言给了自己更大的自由。双方各有各的道理,语言之间确实存在差别,很难说哪一种语言就是最好的,只有在不同的情况下使用合适的语言才是最好的。例如,如果你关注程序的运行速度,使用更底层的C语言往往是更好的选择。
一种编程语言能否流行起来,专家级黑客的看法是一个很重要的因素。大多数程序员无法分辨编程语言的好坏,他们只是专业黑客们的跟随者,黑客们的影响力和足够长的时间使得一种语言变得流行。黑客更偏爱那些简洁且免费的语言,如果这一语言还可以让他们放手去做而不是处处限制的话,就更好了。