最近我在家里很闲,读了一系列大数据的书。我从读者的角度,粗浅谈谈什么是好的技术书。
作为对比,我列出四本近期读过的书。他们的作者都是行业牛人,我尊重他们的工作。不过从写作角度看,这四本书正好分为两类,好书与不好的书。
好的两本:《Learning HBase》《Learning Scala》
不好的两本:《Apache Hive Essentials》《Beginning Scala》
它们分为两类:大数据Hadoop学习、编程语言Scala学习。
好的书,毫无意外语言流畅性、清晰性是第一要义。很多作家是技术大牛,但他们的语言组织不行,或者说不擅长组织面向普通读者的语言。这样的书读起来十分晦涩,也就没有读下去的欲望。
并非所有技术大牛都是语言专家,这两者差别还是很大。比如scala那本著名的书《Programming in Scala》,我估计没有多少人完全看得懂,写的太晦涩了。但它的作者是scala的创立者,绝对权威。权威的人,不代表好看的书,这是两码事。
上述两本我认为好的书,语言表达就直观易懂。我哪怕一目十行的看过去,也能明白其中要义。
其次,好的技术书,真要从原理开始介绍。我更加想明白的是每个技术组件的内部原理,而不是简单的使用手册。比如,上述learning hbase就是一本好书。它花了大幅篇章介绍hbase内部原理、存储格式、组件运作机制等。我看起来十分过瘾,丝毫不觉得累。
与之相反的是上述介绍hive这本书,大幅篇章就是各种SQL陈述,如何编写合适的hive SQL。内容虽然实用,但仅限于方法级的介绍。
一本好的技术书,更要让读者明白,为什么要使用它,而不是如何使用它。比如hbase的存储格式的介绍,让我明白了基于列族的数据库的优势和使用场景。下次遇到特定需求时,我肯定会想起这种数据库。至于如何使用hbase,如何优化hbase,书里也有详细说明,但我不会去记忆,真要用到时再翻书就好。
而hive这本书,一直讲使用方法,我几次都有看不下去的感觉。hive SQL固然重要,但是了解hive SQL的途径很多,用到时查查手册就好。而hive内部深层次的原理,这书并未涉及到,我读了略感遗憾。
两本scala学习书籍也是,对比很明显。learning scala深入浅出,谈了很多语言的设计原理与遵循规范(比如函数式编程思想),代码演练只是一小部分。与之对比的是beginning scala,打开一看还以为是在浏览github,通篇都是代码。至于代码为什么这样运行、背后是什么思想,则没有涉及。
好的技术书读下来,读者至少对这个系统是怎样设计的心知肚明。知道了原理,也就对未来的使用场景更有把控性。这里面的知识点,应该让读者有耳目一新的感觉。分布式存储我接触过很多,ceph、couchebase的书也看了好几本。但是这次看hbase这本书,还是有了全新的收获,甚觉愉悦。
通篇是方法论的书,看起来很实用,但读过就忘记了,收获反而不大。而且,这种书要读者自己去总结,为什么用这种方法,它背后的机理是什么。如果你不总结、不思考,那等于没读。所以,只写方法论的作者,把深层次思考的问题留给了读者,是一种懒惰的表现。
第三,在表现形式上,多用图,无论是流程图,还是结构图,一图胜过千言万语。
比如hbase的存储体系,作者就画图讲的非常清晰。比如scala的collection层级关系,书里也通过图讲的清晰。图带给人最直观的感受,它胜过一堆的文字介绍。看到好的图示,我往往心里有一股感动,觉得作者太用心了。
这些年我的确看了不少书,远远不止上述四本。总体上,一本好书,让人有欲罢不能的感受,看了还想看。一本差的书,往往看了头两章就看不下去了。所以,有时候我们学不下去,真不是自己的问题,而是你的学习教材的问题。
愿大家在新的一年,多读好书,读到好书。