先看个小故事。
有一天我问我媳妇:你觉得操作系统复杂么?
我媳妇想都没想就来了一句:复杂!
我又问:为什么觉得操作系统复杂?或者操作系统复杂在哪里?
我媳妇眼睛转了两圈之后说:不知道!
我说:操作系统其实不复杂!
然后,我兴高采烈地给我媳妇讲起来了“搞技术也是有境界的,也讲究看山就是山,看山不是山,看山还是山”。
再然后,我看到了鄙视的眼神。
最后,故事结束。
PS:我媳妇本科是计算机专业,还正儿八经地干过几年软件测试,虽然这几年转行了,但也算是科班出身。
我大约是11年左右开始接触大数据领域的,当时带我入门的是一位来自百度的导师,除了经常自嘲自己是农民工,就念叨他那句话:搞技术,就得看源码。那个时候自己还太年轻,也没有问问具体怎么个看法,但就知道看源码是对的。
那会儿比较推崇谷歌的三驾马车,开源社区的就是 Hadoop 和 HBase,实习生有的是时间,打开官网把代码下载下来,然后就一个字:看!
最开始的时候确实不知道如何下手,我就在网上到处搜索源码分析之类的文章,稀里糊涂地看了一大堆之后,慢慢地还真摸到了路子。现在回想起在寝室边刷剧边看代码的日子,真爽啊!
代码看进去之后,马上就有一个很强烈的冲击:
Java 原来是这样用的啊!
Java 还可以这样用的啊!
反射、动态代理、多线程、IO,...,这些费劲巴拉学会的东西,真的是有用的!
真正体会到了,不是编程语言不行,而是我不行!
后来我琢磨出了一个自己的 What - How - Why - Create 理论:
What:这个东西是干什么?
How:这个东西是怎么实现的?
Why:这个东西为什么这么实现?
Create: 我能不能自己写一个新的?
大概过程就是从文件研究到字节,再从字节研究到位,把 Hadoop 和 HBase 的大部分代码翻了个遍,明显能感觉到自己的技术能力快速提升。
进入工作岗位之后,因为对源码熟悉,明白实现原理:
系统性能有瓶颈的时候,可以调整参数;
系统需要扩展功能的时候,可以写插件;
系统需要更换模块的时候,可以写模块;
整个系统不行了,带着团队,我们自己写一个!
现在回过头来想,看源码就是少林和尚挑水劈柴,日复一日地重复,看似枯燥无味,慢慢地就打下了基本功。
一开始的时候,Hadoop 就是 Hadoop;到看 HBase 的时候,发现这个地方和 Hadoop 差不多嘛;再看其它的时候,这不也是那么回事儿嘛。
嗯,搞技术真的是讲境界的。