美文网首页
《黑客与画家》读书笔记(四)

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

作者: 陈浩要安静 | 来源:发表于2016-05-06 23:54 被阅读0次

第十三章 书呆子的复仇:在高科技行业,只有失败者采用“业界最佳实践”。

由此也就得出了20世纪50年代的编程语言(Lisp)到现在还没过时的原因。简单说,因为这种语言本质上不是一种技术,而是数学。数学是不会过时的。你不应该把Lisp语言与50年代的硬件联系在一起,而是应该把它与快速排序算法进行类比。这种算法是1960年提出的,至今仍然是最快的通用排序方法。

评论:Lisp为什么过了这么多年仍然不仅不落后,而且还是大大超越其他编程语言的原因。因为它是数学。

在大型组织内部,有一个专门的术语描述这种跟随大多数人的选择的做法,叫做“业界最佳实践”。这个词的出现的原因其实就是为了让你的经理可以推卸责任。既然我选择的是“业界最佳实践”,如果不成功,项目失败了,那么你也无法指责我,因为做出选择的不是我,而是整个“业界”。

技术本来就应该是尖端的。正如伊拉恩·加内特所说,编程语言的所谓“业界最佳实践”,实际上不会让你变成最佳,只会让你变得很平常。如果你选择的编程语言使得你开发软件的速度只有(选择更激进技术的)对手的几分之一,那么“最佳实践”真是起错了名字。

评论:其实问题不是出在“最佳实践”起错了名字,问题出在我们究竟是想把软件开发黑客化还是软件开发工程化。如果黑客化,那么尖端的、更难的技术就是更好的选择。但是如果工程化,那么我们就需要保证所采用的技术更能够被普通的,或者说平庸的程序员所理解并使用。显然Graham倾向于创业公司采用前者。

如果你想解决一个困难的问题,关键不是你使用的语言是否强大,而是好几个因素同时发挥作用:(a)使用一种强大的语言;(b)为这个难题写一个事实上的解释器;(c)你自己变成这个难题的人肉编译器。...举例来说,在面向对象编程的世界中,我们大量听到“模式”(pattern)这个词,我觉得那些“模式”就是现实中的因素(c),也就是人肉编译器。

皮特诺维格发现,总共23种设计模式之中,有16种在Lisp语言中“本身”就提供,或者被大大简化。

评论:获取我们之前并未意识到,如果某一种设计模式可以经常的被复用的话,那么为什么我们不将其放入语言机制中,而不是每次都要重新实现呢?

第十四章 梦寐以求的编程语言:一种好的编程语言,是让黑客可以随心所欲使用的语言

让我们试着描述黑客心目中梦寐以求的语言来为以上内容做个小结。这种语言干净简练,具有最高层次的抽象和互动性,而且很容易装备,可以只用很少的代码就解决常见的问题。不管是什么程序,你真正要写的代码几乎都与你自己的特定设置有关,其他具有普遍性的问题都有现成的函数库可以调用。...这种语言抽象程度很高,使得你可以快速写出一个程序的原型。然后,等到你开始优化的时候,它还提供一个真正出色的性能分析器,告诉你重点应该关注什么地方。你能让多重循环快得难以置信,并且在需要的地方还能直接嵌入字节码。...这种语言的内核很小,但很强大。各个函数库高度独立,而且和内核一样经过精心设计,它们都能很好地协同工作。

它提供的抽象能力只是为了方便你开发,而不是为了强迫你按照它的方式行事。事实上,它鼓励你参与它的设计,给你提供与语言创造者平等的权力。你能够对它的任何部分加以改变,甚至包括它的语法。它尽可能让你自己定义的部分与它本身定义的部分处于同等的地位。这种梦幻般的编程语言不仅开放源码,更开放自身的设计。

评论:就本书的作者而言,显然目前没有一种语言可以满足上面的要求,既是Common Lisp也不行,因为Common Lisp内置运算符名称“长的可笑”。Perl, Python,Ruby某种程度上是这些梦寐以求编程语言成长的范例,虽然最后仍然没有完全达到要求。也许这就是梦想和现实的差距。C++的运算符重载某种程度上给予开发者设计出语言本身运算符同等地位的定义,而Java用equals来进行字符串比较就显得非常可笑。总之,Java总是沦落到要被黑的地步了。

第十五章 设计与研究:研究必须是“新”的,设计必须是“好”的。

为什么15世纪油画首次亮相会引起轰动并很快流行起来?原因就是油彩使得画家可以在原型上直接画出最后的样子。你可以按照自己的想法画出初稿,但是它并不对你构成限制。接下来你可以逐步加上细节,甚至对初稿做出重大修改,直到最后完成。

软件开发也可以这样做。原型(prototype)并不只是模型(model),不等于将来一定要另起炉灶,你完全能够在原型的基础上直接做出最后的成品。我认为,只要有可能,你就该这样做。...我的一位美术启蒙老师告诉我:如果你觉得画某样东西很乏味,那么你画出来的东西就会真的很乏味。...开发软件的时候,我有一条规则:任何时候代码都必须能够运行。...跟你说实话吧,画家之间甚至流传着一句谚语:“画作永远没有完工的一天,你只是不再画下去而已。”这种情况对于第一线程序员真是再熟悉不过了。

评论:快速做出原型再继续打磨似乎已经成为这个年代软件开发的共识,但是如果说明白一件事情就代表会照着去做,那么所有人可能都会成为伟人。现实的情况是,当有一个好的想法或者开始动手做一个项目时,三分钟的热度会让我们在刚开始的时候花费大量的精力甚至过度设计,消耗了开发完成整个项目的热情。我觉得更好地做法是,先想好大致上整个项目做出来会是一个什么样子的情况,比如游戏,大致的流程是什么样子,然后主要的关卡都做出了,再逐渐的添加关卡或者打磨。这样至少会让我们有一个大致完整的项目。

相关文章

网友评论

      本文标题:《黑客与画家》读书笔记(四)

      本文链接:https://www.haomeiwen.com/subject/ysijrttx.html