假如,我能上这样的课_冒号课堂书评-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > 冒号课堂 > 假如,我能上这样的课
Milo 冒号课堂 的书评 发表时间:2010-07-04 16:07:45

假如,我能上这样的课

首先声明,自从2010年初开始写书评后,偶然认识本书作者。因对本书内容感兴趣,才从当当自购本书,并承诺会写书评。但本人因同时间开始业余翻译工作,共花了数月才读毕本书。为保持尽量客观独立,本文刊登前并未经他人审阅。

本书分为两部分,上篇为“编程范式与编程语言”,下篇为“抽象机制和对象范式”。先分别谈上下篇,再谈综合感想。

上篇‧编程范式与编程语言

编程语言向来是计算机世界里的信仰话题,时常产生各种口舌之争。但编程语言不是自然语言,编程语言并非因巴别塔或地域而造成混乱,而是人类为了用不同的思考方式,方便解决不同的问题,而去设计各式各样的编程语言。要为特定问题选择合适的编程语言,并把语言使用得流利、地道,我们需要的不仅是文法(语法和语意),最重要是学习使用语言的设计哲学。而每个语言在设计上支持不同的编程范式(programming paradigm),例如过程式、函数式(FP)、面向对象(OOP)、元编程等等。林林总总的范式,代表用不同的思考方式去编程。

虽然本人在学生涯中曾学习过不同种类的编程语言,但是工作上主要使用支持OOP的语言。可能由于没学过编译原理,更少机会接触不同编程语言及范式的理论基础。本篇是一个不错的简介。尤其是当中比较新的发展,如并发/并行、函数、切面等范式,本人一直没有特别关注,所以本书对我而言可作为一个当代编程语言现况的简介。本篇虽然涉及不少思想概念,但以广度为主,深度为次,觉得内容像科普,读得有趣又轻松。

下篇‧抽象机制和对象范式

第7至10章主要谈OO的几个重要概念,包括封装、继承和多态。但其内容摒弃一般的直观式解释,而是深入地讨论这些概念的定义,分析使用动机,以及使用时的原则。文中举出的例子也十分有意思,例如多次描述Java SDK类库里某些类的设计问题,应如何避免等。在语言方面,经常比较C++、Java和C#怎样实现一些面向对象概念,指出很多语言间的细节差异。由于我常用的编程语言是C++,对值和引用的语意不够敏感,觉得作者用第11章一整章专门讨论这个题目,对我有所得着。第12章对我则可重温一些SOLID等原则。第13章专门讨论设计模式,但篇幅略短,对一般入门者可作为简介。

综合感想

先谈一些个人经历。我是由Basic和C等过程式语言踏入编程之门,那时觉得过程式的思想很自然,只是把问题分而治之。五、六年后,再自学C++,发觉语法虽然有些复杂,但最大问题,是改变不了思想去用面向对象设计。那时候读的C++书籍,主要篇幅集中在语法上,只是以一些很简单的例子(如常见的Complex、Linked List和Shape)去说明OOP,心里觉得很不踏实。例如当时会思考,一个足球游戏中,过程如何变成对象:

void Kick(Player* player, Ball* ball, Vector* direction);

应该改写成以下哪一个样子呢?

void Player::Kick(Ball& ball, const Vector& direction);
void Ball::Kick(Player& player, const Vector& direction);

回头看来,其实问题在于,当时缺乏把需求以对象方式抽象的思维,只是想把过程式的写法用C++语法表示出来。后来发现必须认真学习面向对象设计,便开始阅读Booch大神的《Object Oriented Analysis and Design with Applications》。正值高中之年,感到此书艰涩非常。此后,经历多年,透过阅读一些UML书籍,以及设计方面的书籍如《Design Patterns: Elements of Reusable Object-Oriented Software》、《Agile Software Development, Principles, Patterns, and Practices》等等,配合更多的实践,才感到习惯了基本的面向对象设计方式。

虽然以上提及到的都是好书,但如果当年有这本《冒号课堂》,相信能更容易地掌握一个全局观,也更有效地有系统地学习这些知识。本书的内容非常严谨,我没有找到任何笔误错漏,内容编采有原创性,文字水平也高,我觉得完全不亚于英文书籍,甚至可考虑出版英文版。个人建议,正在学习或使用OOP语言的朋友,可先阅本书,再看相关的参考文献。本书时效长久,相信多年以后,仍可不时翻阅,温故知新。

意见方面,本人觉得本书内地版封面是一败笔。对没读过作者的博客,内地版书名亦欠吸引力。若非作者介绍,也没注意到这本书。另外,可能由于个人阅读习惯,会跳过摘要、预览、提问等环节,直接阅读内文。参考条目方面,个人较喜欢置于书末,而非置于节末。不过这些都是个人喜好而已,各有利弊。但比较混乱的,是采用中括号(如[1])去同时表示脚注和参考条目。此外,可能由于我中文的不足,文中经常遇到不认识的中文字,询问太太,她说很多都是小说常用的,而我基本上不看小说。不知道是否可以像simple English一样,尽量采用常用简单的文字,但这样风格可能会有所不同。

最后还有一点值得留意,本书采用对话形式的文体,内容围绕冒号老师和他的几位学生之间的对话。这是我第一次阅读这种文体的技术书籍。对话生动,人物性格突出。这令我想起《论语》中,孔子和学生们以对话形式进行有教无类、因材施教的教学。我羡慕这种理想的小班教学模式,希望自己能成为其中的学生。但是,教育界里,有多少位老师能有如此学识,又能如此开放地和学生进行讨论交流呢?假如,我能上这样的课……

展开全文
有用 70 无用 1

您对该书评有什么想说的?

发 表

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

对“假如,我能上这样的课”的回应

西山 2011-07-13 07:26:19

Milo对《Object Oriented Analysis and Design with Applications》的评价如何? 前段时间读了一下,觉得不但晦涩,而且空洞~

kraft 2011-04-06 22:20:20

[] 引用的问题确实不习惯

毒品 2011-03-20 15:50:22

今天看到一篇介绍您设计的小套,很喜欢,设计非常人性化。就是这篇http://9.douban.com/site/entry/175228929/ 这段是我的推荐:喜欢这样人性化的设计,小的空间才能发挥人类极致的想象力,突然很想学习室内设计,就是这种路线的,什么豪华的系列真的不太喜欢。有钱买得起的豪宅的人在装潢设计上无非就是砸钱嘛。只有这种小套的人性化设计才能发挥一个设计师德作用。而且现在的设计除非有新意有创造力才会让人眼前一亮!

七心葵 2011-01-08 20:33:40

查看《OSGi原理与最佳实践》一书的序,看到郑晖先生文字老道、切实中肯的序言;进而发现郑先生《冒号课堂》这本书,追踪下来想不到又看到milo,世界真小,呵呵。如milo所说,这本书的名字真的是不太吸引人,所以一直没怎么注意,现在看来应该是本好书,已准备购买。
同期在看的是 周爱民先生 《Javascript语言精髓与编程实践》一书,有些内容与本书类似。之前也看过一点lua,最近学习了一些ruby,忽然对语言的范型有兴趣,想系统的整理一下知识。
有一本一直悬而未看的书是关于Lisp语言的《计算机程序的构造和解释》,所学所用的一直就是 c/c++/java 这一个路子的程序语言(或许SQL算是另一个路子上的?html,xml这种我就不好意思算了,呵呵),所以我到现在还无法描述出 命令式语言 和 函数式语言 的区别,搅上 逻辑式语言什么的就更蒙了。
之前翻过《程序设计语言-实践之路》一书,当时感觉对其中语言的分类法比较懵懂,现在随着计算机性能的提升,编程语言抽象层次的提高,"动态语言”的引入,也许应该有新的讲述计算机语言的著作出现了?
如果已经有此类书籍,请推荐一二。多谢。

看了Milo的自述成长过程,回想起他去年年初就事论事地和0bug老师讨论其书中谬误一事,想起来快要一年了吧,呵呵,milo新年快乐

Jacky 2010-07-11 17:31:05

刚看了两章,有点相见恨晚的感觉

Todd 2010-07-05 13:13:50

有同感,“假如,我能上这样的课......“。楼主和作者都是治学严谨的人,这在中国浮躁的学术界和业界中难能可贵。我认为我们不必天天空喊“中国什么时候出大师”?我们首先需要的是一批真正的学者。

郑晖 2010-07-04 19:27:31

首先,非常感谢milo的详细书评。

关于摘要、预览、提问等部分,的确褒贬不一,不过参考条目我认为置于节末比置于书末好。参考文献非常重要,置于节末可以方便读者第一时间查找,若置于书末,则读者难以进行针对性的查找。另外,书中除了标注参考文献外,通常还标注了具体的页码范围。假如一些文献被参考多处,却集中放在书末,后面会跟一长串页码范围,似乎也不太美观。

你提到的中括号同时表示脚注和参考条目的问题,确是我当初没有想到的,下次再版时一定改正,并再次感谢你提出的这个建议。

Shark 2010-07-04 18:52:01

Milo真是仔细。。

ccicer 2010-07-04 16:52:47

先抢沙发