学了这么多年技术,为什么水平还是一般般?
仅以此文以自勉。(大神们可以轻点拍)
先举个例子。公司里面有两个同事,暂时叫做A,B。
A君是90后,但是可别小看90后,工作的经验可比我们这帮80后还要丰富。学生时代暑假工地打工搬过砖,而且有了三四年的工作经验。小伙很吃苦耐劳,工作也很拼命,性格也很随和,经常在一起插科、打诨、扯淡,但是公司给他的待遇基本上是垫底的。所以每次看到这哥们,我都有点心疼(我少年老成,虽然是80后的尾巴),总觉得他的努力与回报不是很成比例。但是,容我说说为何待遇这么不公平。A君的基础并不是很好,我说的基础是计算机基础。虽然做过很多事情,但是比较毛躁,而且没有系统性。聊技术的时候,往往也说不到关键的问题点上,提出的问题也基本上是回答的不在点上。所以,如果在公司或者面试的时候,你遇到了这么一个求职者自然不会给很高的待遇。(A君如果把基础打牢固一些也是相当不错的)
再说说B君。B君是科大毕业的,为人老实淳朴,对Hadoop非常精通,看了3年的Hadoop源代码。最近跳槽到阿里去搞HBase了,待遇自然不会低。如果我说B君基本上没写过代码,你相信吗?从学生时代到工作到现在,B君基本上没写过多少代码。我俩一届入职,在这将近一年中,他经常问我有关C++,Linux系统调用,计算机系统的一些问题,而我向他请教Hadoop方面的知识,所以自然我和他聊的也比较多。在这过程中,我发现B君的逻辑性特别强,而且对计算机的体系结构都有相当程度的认识,对系统架构方面有这自己的见解,可以说,如果你要和他聊天,你会觉得他技术了得可能是个架构师,而当你听我说他基本没写过代码时,你又会大跌眼镜。(鉴于大家对B君的疑惑,B君虽然没写过多少代码,但是不代表不会写代码,俗话说熟“读唐诗三百首,不会作诗也会吟”,看了3年的Hadoop代码,我想他固然已经知道怎么写代码,更重要的是3年中,他肯定深入了了解Hadoop,而且在其中窥见了一些大师们的思想。B君工作这一年中修复了集群中的很多BUG,怎么写代码固然重要,但是知道如何才能解决问题更重要,显然,我跑题了)
其实说了A君与B君,我只想说,拼技术到最后都是拼基础。而基础积累的够多,表现在你对事物的思考逻辑上面。B君虽没写过代码,但是我知道他肯定在一些最基本的问题上下过死功夫。你能一眼看出一个系统的关键在什么地方,这东西靠的不是直觉,而是依托你积累的知识而做出的判断。一个系统的设计,虽然初看上去高屋建瓴,但是当你不断深入细化到它的各个分支,每个小部分都是一个实实在在的基础问题,而有时候一些基本问题就决定了这个大系统的架构是什么样子的。举个例子,我们都知道Hadoop只有一个namenode节点,但是有没有想过为什么他要这么设计?因为存在多个namenode,节点的同步将是一个问题(当然最新版的的已经解决了这个问题)。接下来会由这一个namenode节点引出很多问题,比如为什么一个Hadoop集群为什么不可能无限的大?原因自然是namenode能承受的压力有限。这些都是自然引出的问题以及解释。而你觉得很自然那是因为你的思维逻辑很清晰,间接的能代表你的基础怎么样。而你有了基础之后,再看其它的东西就轻而易举了。比如说,我没做过Zookeeper,Redis,Kafka,但是我也能和他们聊聊。因为这些东西都一样存在着一些基本问题。就好比张无忌在学会九阳神功后,只用了3个时辰便学会了乾坤大挪移,而基础知识对我们来说就是九阳神功。
想象一下,如果你是一个头头,下面有些小弟。如果你想提拔某些人,如果你问的问题,他都回答不到关键点上,你能重用他么?你敢重用吗?聊天时闹出笑话还好说,真要是系统交付时出了问题,是你负责还是那个人负责?所以,搞了这么多年技术还是水平一般的技术君们,是否可以考虑一放下手里面正在跟风的时下时髦的技术,回头翻翻自己基本没有翻过的组成原理,操作系统,算法,数据结构,网络,数学书,也许在你时隔多年,折腾了这么多年技术之后,回头再看看这些书会有不一样的收获。