《黑客与画家》

很多时候,我们读不下一本书是因为书写得太烂,太矫揉造作,与生活太远,而不是我们不爱读书。当我第一次听说”黑客与画家”这个名字的时候,我的反应和大多数人一样,这是什么鬼东西,但我看到后面的书评说很好看(在一个通常会负面评分的地方),我就尝试看了一下,结果如你所料,我深深地被其中的观点吸引了。我如饥似渴,不断获得共鸣,每一章都像甘霖一样滋润着我的思想。也可能是阮大神翻译得好的原因,语言没有一般的翻译作品那样生硬,读来就像作者跟你谈话一样,不知不觉学到了很多,获得了一点人生经验。下面是我的一些摘抄和感悟。

本书主要谈论了程序员和创业的事情,原书2004年出版,中文版2011年出版的,距现在也有好几年了,但其中的观点到现在都不过时。书中的内容并不深奥,不仅仅是写给程序员和创业者的,更是写给普通读者的。作者最大的目的就是,通过本书让普通读者理解我们所处的计算机时代。

下面是部分摘要:

译者序

  • 作者最大的目的就是,通过这本书让普通读者理解我们所处的计算机时代。

  • 想要把握这个时代,就必须理解计算机。理解计算机的关键,则是要理解计算机背后的人。表面上这是一个机器的时代,但是实际上机器的设计者决定了我们的时代。程序员的审美决定了你看到的软件界面,程序员的爱好决定了你有什么样的软件可以使用。

  • 我们的时代是程序员主导的时代,而伟大的程序员就是黑客。

  • 自由软件基金会创始人理查德.斯托尔曼说:“处于兴趣而解决某个难题,不管它有没有用,这就是黑客。”在本书中,黑客就是指最优秀的程序员。

前言

  • 你选择什么语言,决定了你能说什么话。编程语言就是程序员的思维方式。因此,编程语言对程序员的思想有巨大的影响。

  • 如果你喜欢思考,阅读此书应该会带给你很多乐趣。虽然黑客从外表看上去一般都是呆呆的,但是他们的大脑内部却是一个有趣得让你吃惊的地方。

良好的坏习惯

  • 经济学里有一条拉弗曲线(Laffer curve),认为随着税率上升,税收收入会先增加后减少。我认为政府的力量也是如此,随着对公民自由的限制不断上升,政府的力量会先增加后减少。

另一条路

  • 对于开发者来说,互联网软件与桌面软件最显著的区别就是,前者不是一个单独的代码块。它是许多不同种类程序的集合,而不是一个单独的巨大的二进制文件。

  • 一部分Viaweb服务器上故意不安装某些程序,因为保证Unix系统安全的关键之一就是不运行那些不需要的东西,降低服务器被侵入的可能性。

  • 由于互联网应用程序由多种软件而不是单独一个二进制文件构成,所以可以使用多种编程语言开发。

  • 对于互联网软件,没人规定只能使用某些语言开发,因为所有的硬件都控制在你手里,你想要用什么语言,就能用什么语言。

  • 互联网软件每时每刻都在被使用。你的代码一上线,就会经历严酷考验。bug很快就会浮出水面。

  • 软件公司有时会受到指责,因为他们竟然把发现bug的任务交给用户去完成。说实话,我其实提倡这种做法。对于互联网软件,这样做的好处很多,因为它的bug相对比较少,而且处理周期比较短。我们连续不断地发布新版本,所以bug就比较少。我们能够再现用户遇到的问题,又能在修复后立刻发布,使得用户不用等很长时间,所以大部分bug的处理周期都比较短。我们的bug数量一直不多,以至于没有必要使用一个正式的bug追踪系统。

  • 我们的客户支持是免费的,因为我们希望知道用户的反应。如果他们使用时遇到困难,我们希望立刻知道,这样就能再现错误、解决问题、发布新版本。

  • Viaweb的开发人员总是与客服人员保持密切联系。客服人员坐在距离程序员只有9米的地方,知道自己可以随时打断程序员的工作,提交新证实的bug的报告,遇到重大bug,我们就算在开董事会,也会马上回来修改程序。

  • …Vieweb不是这样,在收到使用者的bug报告之后一分钟内,程序员就会对站在身边的客服人员说:“没错,你是对的,这是一个bug.”客服人员从黑客嘴里听到“你是对的”,会感到欢欣鼓舞。客服人员告诉我们发现bug的时候,他们心里怀着期待,就好像小猫想让别人知道自己抓住了一只老鼠一样。这也使得客服人员在判断bug严重性时格外小心,因为这关系到他们的声誉。… 我们被雅虎收购以后,客服人员被移到离程序员很远的地方。直到那时,我们才意识到客户支持就是质量监控,也是某种程度的市场营销。

  • 能够即时发布软件,对开发者是一个巨大的激励。步行上班途中,我经常会想哪些地方还需要变动,然后当天就予以实现。…如果软件的新版本要等到一年后才能发布,我就会把大部分新构思束之高阁,至少过上一段时间再来考虑。但是,构思这种东西有一个特点,那就是它会导致更多的构思。…所以,将一个构思束之高阁,不仅意味着延迟它的实现,还意味着延迟所有在实现过程中激发的构思。

  • 大公司的做法不是立刻实现新功能,而是先对新功能做一个计划。…我们没有任何计划。我们有改进的想法,但是如果我们想到应该怎么改进,就已经把它实现了。…计划这个词,只是将构思束之高阁的另一种表达方式。只要想到好的构思,我们就立刻着手实现。

  • 如果你梦想写完代码,向服务器递交,然后就可以回家,一天工作结束,这在互联网软件身上肯定没有实现的可能。互联网软件是活的,每时每刻都在你的服务器上运行。一个严重的bug影响的可能不是一个用户,而是所有用户。

  • 互联网软件能够让你前所未有地了解用户行为。…每个用户的每一次点击你都可以看到。

  • 效率对互联网软件至关重要,因为硬件费用由你支付。你的资本支出成本除以服务器所能支持的最大用户数量,就是你为每个用户付出的成本。…如果软件效率足够高,每个用户的硬件成本现在可以接近免费。

  • 几乎所有我们的新客户都是通过在线试用发展起来的。我想大多数互联网软件都是如此。

  • 一定数量的盗版对软件公司是有好处的。不管你的软件定价多少,有些用户永远都不会购买。如果这样的用户使用盗版,你并没有任何损失。事实上,你反而赚到了,因为你的软件现在多了一个用户,市场影响力就更大了一些,而这个用户可能毕业以后就会出钱购买你的软件。

  • 如果某样东西易于购买,你就会多买一些。…互联网软件提供的服务可能是世界上购买起来最方便的东西,如果你试用完demo再买,那就更是如此了。

  • 谁是互联网软件的目标客户?Viaweb一开始就把个人和小企业当做目标客户。这些客户决策比较灵活,又需要低成本的新技术,所以他们更愿意尝试新事物。

  • 开发互联网软件的创业公司会把与创业有关的每一件事做到极致。只用更少的人、更少的钱,就可以把软件写出来,并且开始运作。你必须打破常规、快速行动,循规蹈矩不可能成功。…许多软件公司的开发者都有一段睡在桌子底下的日子,尤其是在初创期。令人惊恐的是,对于互联网软件来说,这样的日子没有尽头,什么都不足以阻止这种事情成为常态。

  • 管理企业其实很简单,只要记住两点就可以了:做出用户喜欢的产品,保证开支小于收入

如何创造财富

  • 如果你想致富,应该怎么做?我认为最好的办法就是自己创业,或者加入创业公司。…创业公司其实就是解决了某个技术难题的小公司。

  • 通过创造有价值的东西而致富,这种方法的优势不仅仅在于它是合法的,还在于它更简单。你只需要做出别人需要的东西就可以了。

  • 创造财富就是提供别人需要的东西。…财富是最基本的东西。我们需要的东西就是财富,食品、服装、住房、汽车、生活用品、外出旅行等都是财富。即使你没有钱,你也能拥有财富。如果有一台魔法机器,能够按照你的命令变出汽车,为你洗衣做饭,提供其他你想要的东西,那么你就不需要钱了。要是你身处南极洲内陆,再多的钱对你也是无用的,因为没有东西可买,你真正需要的是财富。

  • 财富才是你的目标,金钱不是。

  • 程序员坐在电脑前就能创造财富。优秀软件本身就是一件有价值的东西。…公司就是许多人聚在一起创造财富的地方,能够制造更多人们需要的东西。当然,有些雇员并不直接参与制造过程,但是程序员却不然。他们真正地面对产品,一行行写代码把产品做出来。所以,在程序员看来,事情再明显不过,财富就是被做出来的,而不是某个想象出来的神秘人物分发的大饼。

  • 另一个程序员看来显而易见的事情就是创造财富的速率存在巨大的差异。一个优秀程序员连续工作几个星期可能可以创造价值100万美元的财富。同意的时间内,一个平庸的程序员不仅无法创造财富,甚至还可能减少财富(比如引入了bug)。

  • 一个大学毕业生总是想“我需要一份工作”,别人也是这么对他说的,好像变成某个组织的成员是一件多么重要的事情。更直接的表达方式应该是“你需要做一些人们需要的东西”。即使不加入公司,你也能做到。公司不过是一群人在一起工作,共同做出某种人们需要的东西。真正重要的是做出人们需要的东西,而不是加入某个公司。

  • 如果一家公司真正能够按照贡献付薪,它将取得巨大成功。许多雇员会更努力地工作。更重要的是,这样一家公司将吸引那些工作特别努力的人,从而超越竞争对手。

  • 公司越小,你就越能准确估计每个人的贡献。

  • 创业公司不仅仅是十个人的团队,而且是十个同类人的团队。…小团队的优势不在于它本身的小,而在于你可以选择成员。