假如,我能上这样的课

首先声明,自从2010年初开始写书评后,偶然认识本书作者。因对本书内容感兴趣,才从当当自购本书,并承诺会写书评。但本人因同时间开始业余翻译工作,共花了数月才读毕本书。为保持尽量客观独立,本文刊登前并未经他人审阅。 
  本书分为两部分,上篇为编程范式与编程语言,下篇为抽象机制和对象范式。先分别谈上下篇,再谈综合感想。 
  上篇编程范式与编程语言 
  编程语言向来是计算机世界里的信仰话题,时常产生各种口舌之争。但编程语言不是自然语言,编程语言并非因巴别塔或地域而造成混乱,而是人类为了用不同的思考方式,方便解决不同的问题,而去设计各式各样的编程语言。要为特定问题选择合适的编程语言,并把语言使用得流利、地道,我们需要的不仅是文法(语法和语意),最重要是学习使用语言的设计哲学。而每个语言在设计上支持不同的编程范式(programming paradigm),例如过程式、函数式(FP)、面向对象(OOP)、元编程等等。林林总总的范式,代表用不同的思考方式去编程。 
  虽然本人在学生涯中曾学习过不同种类的编程语言,但是工作上主要使用支持OOP的语言。可能由于没学过编译原理,更少机会接触不同编程语言及范式的理论基础。本篇是一个不错的简介。尤其是当中比较新的发展,如并发/并行、函数、切面等范式,本人一直没有特别关注,所以本书对我而言可作为一个当代编程语言现况的简介。本篇虽然涉及不少思想概念,但以广度为主,深度为次,觉得内容像科普,读得有趣又轻松。 
  下篇抽象机制和对象范式 
  第710章主要谈OO的几个重要概念,包括封装、继承和多态。但其内容摒弃一般的直观式解释,而是深入地讨论这些概念的定义,分析使用动机,以及使用时的原则。文中举出的例子也十分有意思,例如多次描述Java SDK类库里某些类的设计问题,应如何避免等。在语言方面,经常比较C++JavaC#怎样实现一些面向对象概念,指出很多语言间的细节差异。由于我常用的编程语言是C++,对值和引用的语意不够敏感,觉得作者用第11章一整章专门讨论这个题目,对我有所得着。第12章对我则可重温一些SOLID等原则。第13章专门讨论设计模式,但篇幅略短,对一般入门者可作为简介。 
  综合感想 
  先谈一些个人经历。我是由BasicC等过程式语言踏入编程之门,那时觉得过程式的思想很自然,只是把问题分而治之。五、六年后,再自学C++,发觉语法虽然有些复杂,但最大问题,是改变不了思想去用面向对象设计。那时候读的C++书籍,主要篇幅集中在语法上,只是以一些很简单的例子(如常见的ComplexLinked ListShape)去说明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一样,尽量采用常用简单的文字,但这样风格可能会有所不同。 
  最后还有一点值得留意,本书采用对话形式的文体,内容围绕冒号老师和他的几位学生之间的对话。这是我第一次阅读这种文体的技术书籍。对话生动,人物性格突出。这令我想起《论语》中,孔子和学生们以对话形式进行有教无类、因材施教的教学。我羡慕这种理想的小班教学模式,希望自己能成为其中的学生。但是,教育界里,有多少位老师能有如此学识,又能如此开放地和学生进行讨论交流呢?假如,我能上这样的课……

扩展阅读:

《冒号课堂》豆瓣:http://book.douban.com/subject/4031906/

《冒号课堂》互动网购买链接:http://www.china-pub.com/196068 

 

posted @ 2010-07-12 18:56  博文视点  阅读(295)  评论(0编辑  收藏  举报