《黑客与画家》读书笔记(二)

《黑客与画家》读书笔记(二)

软件的bug

在自己刚刚写好的代码中,找出bug往往会比较快。有时,你只要看到出错提示,就知道问题出在哪里,甚至都不用看源码,因为潜意识中你已经在担心那个地方可能会出错。如果你要解决的bug出自于6个月前写好的代码,那么就麻烦了,就要大费周章了。那时,你对代码也已经不熟悉了,就更可能采用危险的方式解决问题,甚至引入更多的bug。

很巧,前几日我在写编译原理的实验报告,就遇到了类似的问题。代码我在近一个月前就提交了,但实验报告却拖到ddl才开始写。写报告的时候早就忘记了自己是如何实现的,而在看实验要求时又发现了自己漏掉了一些小功能。不管是顺着自己的逻辑捋清程序流程,还是在代码中插入一些功能,都让我痛苦万分,写的东西错误百出,有时竟分不清究竟是原来的代码有问题,还是自己新加的代码有问题。正如作者所述:

复合式bug有一个子类型:两个bug是互相弥补的,好比“负负得正”,软件反而能正常运行。这种bug可能才是最难发现的bug。当你修正了其中的一个bug,另一个bug才会暴露出来。这时对你来说,你会觉得刚才修正错了,因为那是你最后修改的地方,你就怀疑自己在那里做错了,但是你其实是对的。

手工艺人

另一件程序员看来显而易见的事情就是创造财富的速率存在巨大的差异。

Viaweb的一个程序员有着惊人的生产力,我记得看着他工作了整整一天,拿出来的产品估计使得公司的市场价值增加了几十万美元。一个优秀程序员连续工作几个星期可能可以创造价值100万美元的财富。同样的时间内,一个平庸的程序员不仅无法创造财富,甚至还可能减少财富(比如引入了bug)。

这就是为什么如此之多的最优秀程序员都是自由主义者的原因。

我们这个世界,你向下沉沦或者向上奋进都取决于你自己,不能把原因推给外界。许许多多不创造任何财富的人——比如本科生、记者和政客——一听到最富有的5%人口占有全社会一半以上的财富,往往会认定这是不公平的。一个有经验的程序员很可能也认为这是不公平的。因为最顶尖的5%的程序员写出了全世界99%的优秀软件。

可测量性和可放大性

你的职位产生的业绩,应该是可测量的,否则你做得再多,也不会得到更多的报酬。此外,你还必须有可放大性,也就是说你做出的决定能够产生巨大的效应。

我认为,任何一个通过自身努力而致富的个人,在他们身上应该都能同时发现可测量性和可放大性。我能想到的例子就有CEO、电影明星、基金经理、专业运动员。有一个办法可以发现是否存在可放大性,那就是看失败的可能性。因为收入和风险是对称的,所以如果有巨大的获利可能,就必然存在巨大的失败可能。CEO、电影明星、基金经理、运动员的头顶都悬着一把宝剑,随时可能掉下来。一旦他们搞砸了,他们就完了。如果你有一个令你感到安全的工作,你是不会致富的,因为没有危险,就几乎等于没有可放大性。

上楼梯

选择公司要解决什么问题应该以问题的难度作为指引,而且此后的各种决策都应该以此为原则。Viaweb的一个经验法则就是“更上一层楼”。假定你是一个手脚敏捷的小男孩,身后有一条壮硕的大狗正在追你。你跑到楼梯口,这时应该上楼还是下楼?

应该上楼。如果下楼的话,大狗可能跑得跟你一样快。上楼的话,大狗的庞大身躯就将成为劣势。不错,跑上楼你会比较吃力,但是大狗会感到更吃力。

设计者的品味

  • 好设计是简单的设计。
    当你被迫把东西做得很简单时,你就被迫直接面对真正的问题。当你不能用表面的装饰交差时,你就不得不做好真正的本质部分。

  • 好设计是永不过时的设计。
    只要没有错误,每一个数学证明都是永不过时的。所以,数学家哈代才会说:“丑陋的数学在世界上无法生存。”他的意思与飞机设计师凯利·约翰逊的观点是一样的:如果解决方法是丑陋的,那就肯定还有更好的解决方法,只是还没有发现而已。
    如果一件东西长盛不衰,那么它的吸引力一定来自本身的魅力,而不是来自风潮的影响。

  • 好设计是解决主要问题的设计。

  • 好设计是启发性的设计。

  • 好设计通常是有点趣味性的设计。

因为幽默一定程度上反映了力量。幽默感是强壮的一种表现,始终拥有幽默感就代表你对厄运一笑了之,而丧失幽默感则表示你被厄运深深伤到。所以,强壮的标志(或者至少是特点)就是轻松面对自己的人生。充满自信的人常常像燕子一样,以一种居高临下的姿态轻盈地看待周围的一切,比如希区柯克拍摄的电影、16世纪画家勃鲁盖尔(Bruegel)的绘画(甚至莎士比亚也是一个这方面的例子)

  • 好设计是艰苦的设计。

如果观察那些做出伟大作品的人,你会发现他们的共同点就是工作得非常艰苦。如果你工作得不艰苦,你可能正在浪费时间。

  • 好设计是看似容易的设计。

在大多数领域,看上去容易的事情,背后都需要大量的练习。练习的作用也许是训练你把刻意为之的事情变成一种自觉的行为。有时,我们的训练只是为了让身体养成下意识的反应。优秀钢琴家弹奏名曲可以不经过大脑直接完成,艺术家也是这样,熟练以后,脑海中的艺术形象会自动从手上流淌出来,仿佛有人在一旁为他打节奏一样。

  • 好设计是对称的设计。

  • 好设计是模仿大自然的设计。

  • 好设计是一种再设计。

  • 好设计是能够复制的设计。

  • 好设计常常是奇特的设计。

你最后发展出来的风格是自然而然形成的。“奇特”这个特点尤其如此,没有其他路可走。它就像连接大西洋和太平洋的“西北航道”,无数人希望找到这条捷径。16世纪的风格主义者、19世纪的浪漫主义者、一代代的美国高中生都在寻找,但就是找不到。唯一达到“奇特”的方法,就是追求做出好作品,完成之后再回过头看。

  • 好设计是成批出现的。

推动人才成批涌现的最大因素就是,让有天赋的人聚在一起,共同解决某个难题。互相激励比天赋更重要,达·芬奇之所以成为达·芬奇,主要原因不仅仅是他的天赋,更重要的是他生活在当时的佛罗伦萨,而不是米兰。

  • 好设计常常是大胆的设计。

今天的实验性错误就是明天的新理论。如果你想做出伟大的新成果,那就不能对常识与真理不相吻合之处视而不见,反而应该特别注意才对。

猜你喜欢

转载自www.cnblogs.com/maple66/p/9123532.html