熟悉我的读者朋友知道,我给好多技术文章的标题,都加上了 破玩意 这三个字。一开始我只是觉得好玩,直到有一次,一位读者朋友留言:这让我有了更深入的思考,于是有了这篇文章,和大家聊聊我对学习技术的两点思想上的感悟。1
具体体现为,在你还完全不了解一门技术的时候,就不自觉地认为它高不可攀,不是我等凡人可以搞明白的。比如 linux 内核、jvm 虚拟机实现、native 方法的底层原理...很多事情,不仅仅是技术,当你真正开始接触它、熟悉它、了解它之后,就会觉得,它和你的距离,并没有你想象得那么遥远。甚至你可能会觉得,它比你现在所熟悉的东西,还要简单,只是当时不知道而已。比如 linux 内核,在很多 Java 程序员眼中可能是个高不可攀的存在,我曾经也是这样的感觉。但有多少同学是连一行 linux 源码都没看过,就开始觉得它高不可攀呢?当我开始看 linux 源码之后,我便发现它不过如此,在全局上我已经不惧怕它了,需要的只是时间,把一个个的具体问题想明白。再者,很多时候也不能怪我们自己的,很多原本简单的名词,会被别有用心的人包装成晦涩难懂的概念,使我们敬而远之。内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。内核的分类可分为单内核和双内核以及微内核。严格地说,内核并不是计算机系统中必要的组成部分。
我觉得这段话没有提供任何有价值的信息量,且提供的信息组织得十分混乱。百科亦是如此,更何况现在人人都可以写的博客和书籍呢?2
不知道有多少同学看过同步异步、阻塞非阻塞的这段解释,网上应该很多。1. 老张把水壶放到火上,立等水开。(同步阻塞)
2. 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)
3. 老张把响水壶放到火上,立等水开。(异步阻塞)
4. 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)
这就是他们的区别,没那么高深,一个例子就能解释透彻!
在我看来呢,这个就属于典型的在战略上做到了藐视了技术,但在战术上却没有重视技术。同步异步、阻塞非阻塞的本质其实很简单,完全没必要用拟人化的例子去解读。且这个例子丢失了理解这些概念的几乎全部的信息量:IO、线程挂起、立即返回未就绪状态码、回调函数 等。并且后面还加了一句话,说这个例子能把这个问题解释得很透彻。本来,这种形象化解读一手资料而生产出来的二手资料,就已经丢失了大部分信息量。那么,那些以二手资料为参考,继续形象化解读而形成的三手资料,又会怎样?比如这个烧水壶的例子,是一个人读了打电话的例子后,写出的,自始至终都没有研究过这些概念的本质。
给读者造成的影响就是,读者以为自己花了几分钟就理解了之前几小时都没明白的问题,大赞笔者,于是再也不去看之前花了几个小时看的资料了。直到某一天遇到另一个问题,才恍然大悟自己当初并没有搞懂,而且当初的理解也被这种拟人化的方式误导了。当然,有些技术点,通过拟人化的方式还是十分贴切的,因为当初设计这些技术时的思路,就是通过生活中的事情而产生的灵感。所以,错不是错在拟人化,而是在于对技术细节的不重视。
所以,无论是写文章,还是学习,不但要在战略上藐视技术,更要在战术上重视技术。遇到具体的问题,细化到每一个字节,每一个位,都要重视起来。但我后面更多的时间,是一个字节一个字节地分析 ext2 文件系统的镜像文件,将其每个字节的含义和 linux 中 ext2 实现的源码,以及 ext2 官方文档的说明,对应起来。通过添加、修改、删除文件,来观察在硬盘镜像文件哪个字节发生了变化。通过对比 ext2、ext3、ext4 来看哪些是后续版本增加的功能,有什么作用。这样才能分析出什么是构建起一个文件系统的核心设计,哪些是不影响核心功能的锦上添花的设计。在文风上,我从来都是带着藐视技术的态度讲给读者,但在资料的收集和细节的打磨上,我会保持对技术的敬畏,重视技术,重视细节。战略上藐视技术,战术上重视技术,做到这两点,学习技术方式你就掌握一半了,剩下的都是细节问题,我觉得都无所谓。
比如很多人会出学习顺序呀、学习攻略之类的,其实我觉得条条大路通罗马,你是先学底层还是先学上层,学网络时是自底向上还是自顶向下,学习一门新技术时是先写 demo 还是先学原理,我觉得这些都因人而异,没有绝对的所谓的正确顺序。
有的时候,这些细节反而需要通过你自己不断学习和摸索,总结出一套适合自己的规律。
最后希望大家好好学习,天天向上,少看今天这种教你学习方法的文章,多学学实际的技术,比啥方法都强。
完~