这本书在一个月前就已经读完了,对于一个科班生来说,并没有太多新的内容。但是里面有一些很有意思的点,这里顺带写下来,以对之前付出的时间精力有个交待。
这是一本偏重编程思想的书,作者是 ruby 之父松本行宏。
作者在书里也说到,这并不是讲 ruby 使用的手册,而更多是使用 ruby 或者其它语言来说明某些思想。
不过这里还是想说一下自己对 ruby 这门语言的看法。在设计 ruby 语言时,松本行宏从 lisp 里借用了很多思想;而它的成功很大程度借助了 ruby on rails。这也说明了 ruby 有某些性质,更容易实现一个更为灵活易用的 web 框架。
书中大部分知识点都是一些最为基础、必知必会的内容,记笔记意义不会很大,所以这里只记录一下自己感觉有些意思的地方。
我为什么开发 ruby
这实际上是第1章的标题。作者讲自己开发 ruby,最开始是出于兴趣爱好,希望自己能够轻松编程,提高开发效率,不想开源后变得流行并变成了自己的一个职业。
计算机语言不少,作者学习其它语言,并根据自己的理解设计及发展了 ruby。从某种程度上说,一门语言的设计表现了作者对某些特性的取舍,实际上也是他对编程语言世界的理解。
作者对自己设计的 ruby 语言提出了 3 个设计原则:
- 简洁性
- 扩展性
- 稳定性
对于简洁性,作者形容为”能直接运行的伪码式编程语言”。应该算是很直观的描述了,单从结构形式上来说,ruby 编写的代码是比较易读的。
ruby 意为红宝石,是七月的诞生石。而 perl 音同 pearl,是六月的诞生石。可见 ruby 也从 perl 里选取了一些特性。
有一个段子说 perl 和 ruby 的作者是语言学家,而 python 的作者是数学家,所以前两者注重一个问题多种解法,而后者注重只提供最优解法。
实际上松本行宏也给出了答案,他希望使用这门语言是一件很有趣的事。当然,有一些语言也标榜自己的优势是乏味,毕竟做工程嘛。
对象并非对具体物体的反映
很多地方说面向对象是对自然界系统的一个模拟,或者说对现实世界物体的模拟。作者说这种说法是错的,我赞同这种观点。
为什么人们会有这种看法?
我觉得跟人们过度的类比有关。比如讲到类,大家习惯举一些现实中的例子以简化理解。比如,老师属于人类。
那么面向对象是什么呢?
最开始,软件的基本控制结构,只有一个跳转,也就是汇编里的 jmp。实际上现在常用的三种结构也都是使用跳转来实现的。
随着软件复杂度的上升,这种控制结构可读性很差,对于后期维护也是一个灾难,所以出现了结构化编程。通过将控制结构限定在顺序、分支、循环,来提高可维护性。
但是对于数据的维护,仍然是裸露在保护之外的,语言层面还没有一个较好的工具手段。这时,面向对象概念就出现了。
可以说,结构化编程是对控制流程的结构化,而面向对象是对数据的结构化。
说到这里,想起另一本书里的观念,计算机的一些概念本身就很美,比如变量地址,我们可以试着去理解它,没必要人为多加一层注解(房间号),试图绕过这种理解。
当然,从对控制结构的限制,我们也不难看出,通过越来越多的限制,我们确实获得了更多的自由。
总结
上面讲了两个我认为很有意思的地方。其它章节大多是技术上的探讨,这里就不缀述了。
从内容用词看,作者是一个很谦虚且喜欢思考的人。不过书里有一些地方存在重复,这本书是不是作者对旧有创作的二次整理就不肯定的。
对于科班生来说,大部分内容都是一些基础内容,之前应该都有涉及,不会有太大感受;如果没有学习过这些内容,或想温顾一下,还是可以一读的。