学习:读书VS搜索引擎

学习:读书VS搜索引擎

以前也经常跟人聊起这个问题,虽然我直觉上觉得读书会更好一点,却没有深入思考过其间的原因和逻辑关系。今天偶然间又和牛哥说起了这个话题,就仔细思考了一下,得到了一个还算能自圆其说的结果。

重申一下这个命题,在学习这件事上,读书是比使用搜索引擎分散学习要效率更高,效果更好。与之对应的,在解决问题这件事上,我认为使用搜索引擎明显比读书更好。

学习知识有三层境界:(括号中的翻译是《JAVA性能优化权威指南》这本书里面的翻译,是三句诗,觉得比较有意思就拿过来了)
第一层,I don’t know what I don’t know.(花似雾中看)
第二层,I know what I don’t know.(悠然见南山)
第三层,I already know what I need to know.(一览众山小)

第一次看到这种说法不记得是在哪了,最近一次看见是在上文提到的《JAVA性能优化权威指南》这本书上,觉得说的真好。我们举一个例子来说明一下这三层境界到底对应什么样的情景。

有一天老板交给你一个任务,系统性能遇到了瓶颈,经过研究是一部分使用synchronized的代码同步效率太低,成为了整个系统的瓶颈,需要你来优化一下,你拿到这个task的时候的心情可能有以下几种(水平逐渐提升):
1、synchronized是什么,没用过啊
2、我知道synchronized是干什么的,但这玩意怎么优化毫无头绪啊
3、我知道synchronized是干什么的,而且这应该属于高并发和多线程的知识,我以前用过python做过一些多线程的东西,我研究一下在java中怎么实现
4、我知道synchronized是干什么的,并且我知道JUC包里面有一些工具类应该可以帮我优化它
5、我对JUC,CAS,ReentrantLock,AQS了如指掌,synchronized在jvm中如何实现,jvm的锁消除、锁粗化、锁升级我也很熟,现在就结合这块代码的业务需求优化它。

那么很明显,1和2就属于第一层境界。在这层境界下,你对即将要进入的这个领域毫无理解,或者仅从表面大体知道这是干嘛的,你连你需要去学什么都不知道。3就属于第二层境界,虽然你还不知道这件事具体要怎么做,但是你心里是有做这件事情的方法论的,你知道你应该去学什么的。4和5我归入第三层境界,其实4归入第二层境界也可以,并没有那么清晰。此时你已经知道了目标知道了方向,只需要着手去做就可以了。

那我的观点也就出来了,在第一和第二层境界下,你可能需要读书;在第三层境界下,你需要搜索引擎。结合我在本文一开始说的命题,也就是说我认为在前两层,你需要先学习,在第三层,你可以直接去解决问题。

其实这都是搜索引擎的特点决定的。它的特点决定了它并不适合学习,而适合你在遇到问题时,通过搜索解决问题。

分类数据量深浅程度同质化程度
读书
搜索

做一个简单的比较,当你处在前两层境界,使用搜索引擎搜索synchronized这个关键词,或者搜索java 多线程这两个关键词的时候,你得到的是极大量的数据,在这些数据里面,基本都是对他们的简单讲解,即使有一些深入的,也不会特别深。而且我敢保证,你把搜索引擎搜出来的前三页看完,绝大部分说的都是一样的,同质化程度非常高,全都加起来也就20页书左右的内容。
而当你在amazon上寻找和java多线程有关的书呢?我觉得结果应该不会超过30本,而且根据目录和用户评价的好坏,你可以快速锁定一本适合你的。把这本书买回来,找到你需要看的内容,把它看完,所花费的时间不过一两天,这对于一个重要的优化项目并不是太长的时间,而且这些书往往是讲解比较深入的。磨刀不误砍柴工,你做这件事的速度会很快超过一开始就使用搜索引擎的无头苍蝇。
举一个我自身的例子,MYSQL中MVCC的实现是很复杂的,我曾经在搜索引擎中搜索了很久,直到现在我都认为,所有的搜索结果中,没有一个人对MVCC的认识是完全对的,我有把握在几个问题之内就把文章作者问倒。但是读了《MYSQL技术内幕:innodb存储引擎》之后,这个问题我已经非常熟悉了。

而如果你在第三层境界,遇到问题的时候再去搜索的话会是怎样的场景呢?比如你实现了一个分布式redis锁不知道怎么解决可重入问题,比如synchronized和ReentrantLock在jdk1.8的性能对比到底是什么样子。当你碰到这样的问题,可能书上也有,但你翻目录可能也找不到了,并且对于同样的问题可能会有很多不同的答案。这时,你就只能求助于搜索引擎来解决你的问题,而鉴别搜索结果的好坏可能同样需要你对这个问题早就有很深的理解。

通过上面这两条也可以得到一个结论,那就是读书优先。换言之,当通过书本可以快速获取所需要的知识和技能时,总是优先使用书本。只有书籍无法满足你的需求时,或者你的能力完全hold的住搜索引擎的结果时,才应该偏向搜索引擎。

我的观点的话大体上就是这样的。当然书籍有一个根深蒂固的问题,容易过时,内容陈旧。有的人喜欢夸大这点,说什么刚学完的知识就再也用不上了。但是我读书实在不算少,技术也不算差,我读的每本书都还是收获颇丰,即使在计算机科学这样发展极为快速的领域,读几本十几二十几年前的书,并不会有你想象的那样过时。过时的只是少量的知识点,其中的思想是不会过时的。

总之,这还是一个开放性问题,见仁见智,也要具体问题具体对待。

发表评论

电子邮件地址不会被公开。 必填项已用*标注