摘抄自:《Wireshark网络分析的艺术》林沛满 著
有家公司找我分析了几个网络包,事后很感激地说,“林工在网络行业做了很多年吧?”我只好如实相告,“其实我是存储行业的,看包只是业余爱好。”这回答听上去像是老林爱吹牛的毛病又犯了,但的确是实话。我身边还有很多“不务正业”的朋友,比如读化学出身的冬瓜头,年纪轻轻便写了本书叫《大话存储》, 把存储技术的方方面面都覆盖到位了,而我这个在存储行业摸爬滚打了十来年的老人却只懂文件系统和卷这两层。另一位朋友 @馒头家的花卷 也是如此,这几年翻译了好多本 IT 方面的书,从操作系统到密码学都有涉及,更神奇的是他还是果壳科普达人,还有个三产是做音响服务的。可见在这个信息爆炸的时代,很多行业的门槛已经被网络填平了,有志者皆可跨界入门,经过努力甚至能达到专业水平。本文要分享的,就是我的一些自学窍门。
第一步,从浏览权威的百科网站开始。
当我们下定决心学习某项技术时,到维基百科阅读相关词条是极好的开始。几乎所有的技术都可以在上面找到,如果真的找不到,就要考虑如此冷门的东西 是否值得投入时间学习了。大多数词条里讲到的概念都能链接到相应的新词条,比如 TCP 词条里会说到 handshake 这个概念,想多了解它就可以点进去看看。
用这种方式认真地阅读完一个词条,实际上已经把相关的概念也弄懂了,相当于读完一本简略的入门书。不光技术方面,历史、政治等学科也可以用这个方式来入门,因为词条之间的关联性非常有助于形成初步的知识体系,而不是没有关联的孤立知识点。每次使用维基百科,我都会不知不觉地打开很多相关页面。比如本来只是想了解一下曹操的生平,一不小心就把曹操的子孙、对手和谋臣的词条也读了,一下子觉得人物关系清楚了很多。
百科网站那么多,我为什么推荐维基而不是其他?这是因为它比较权威而且全面,引用和注释也很规范。对一个初学者来说,信息的准确性是最重要的,
否则误解了一个入门知识点就可能毁了学习热情。维基百科唯一的不足是中文词条的数量和质量都远不如英文的,不过也不用担心,都是很好懂的 Plain English。 技术研究到一定深度都是要读英文资料的,连中国学者写的顶级论文也是用英文的,我们何不从入门时就开始适应呢?
第二步,善用搜索引擎。
如果你求知若渴,一定不会满足于百科网站,因为脑子里产生的无数疑问会驱使你四处寻找答案。这时候身边有个大牛来指点是最好的,但是大牛回答三个以上的小白问题就会失去耐心,除非他一直在暗恋你。怎么办呢?自己搜索呗。几乎所有技术问题的答案都在网上,就算没有正面答案也会有侧面的,就看你的搜索技能了。我个人的技巧有以下三点。
• 技术方面的搜索要用 Google,因为它返回的头几条结果往往就是我想要的。
一个典型的例子就是在 Google 和某国内著名网站搜“三点透视”,出来的结果完全属于两个不同的领域。假如你的研究已经到了领域尖端,需要读学术论文,那 Google 的优势就更加明显了。
• 把关键词翻译成英文再搜。
世界上的技术高手很多,其中一些人也乐意回答网友的提问,而这些回答大多是用英文的。这就导致了英文资料比其他语种的资料丰富得多,假如你只用中文搜索就会错过这些答案了。不要怕英语不够用,开头也许是有点难,但是慢慢就能适应了。
以我为例,至今美国同事讲的笑话我还是完全不知道笑点在哪,英文算很弱吧?但是技术方面的交流则毫无障碍,因为英文的技术文档看得太多了。
• 不要忽视图片搜索的价值。
网络技术讲解得好的文章,往往是有图片的,而不是纯文本。所以当网页搜索得不到满意的结果时,尝试图片搜索,然后再从喜欢的图片链接到原网页。我就用这个方法找到过不少优秀的技术博客。
第三步,啃一本大部头。
有些人买书很大方,比如网络教程就买了很多本相似的,看到快递员扛来的一大叠书把自己都吓到了,完全符合叶公好龙的定义。其实没有必要买那么多, 大部头的买一本足矣,关键是要真的去读。像我这种铁公鸡类型的就不会犯这种错误,买书的时候精挑细选,买来之后读不完还觉得亏了。我现在还很怀念当年啃网络书的时光,每天都觉得很赚。现在还有很多书是可以免费在线阅读的,比如《The TCP/IP Guide》,觉得对胃口的话再点击 Donate 按钮给作者付点钱表示感谢,我惊奇地发现付钱之后会读得更加认真,付得越多效果越好。
第四步,动手操作。
“纸上得来终觉浅,绝知此事要躬行。”陆放翁诚不我欺。只有自己动手操作过了,才能理解得深刻,甚至纠正阅读时产生的误解。比如你可能已经把教材上的 TCP 流控理论都背得滚瓜烂熟了,但是遇到网络性能问题还是会手足无措,完全应用不上书里学过的知识。这就需要在读书的同时辅以动手训练,如果你在 Wireshark 里看过了拥塞重传,看过了 TCP zero window,甚至动手解决了它,从此流控技术就会像游泳、骑车一样成为你的自带属性,经年不忘。
也许有人会问,我到哪里找网络包来训练呢?其实机会就在身边,比如妹子寝室的网络不好啦,下载小电影变慢啦,都是抓包分析的好机会。实在没有机会也可以自己创造。十八岁以后学钢琴已经太晚了(因为你妈已经打不过你),但学网络却正是时候,自己在家搭个网络实验室都没人管。用虚拟的网络设备练习路由器命令,或者在个人电脑上搭建 Windows Domain 等,都非常有用。
能做好以上几点,我觉得已经很不容易了,进步也应该会很快。还有几点是我已经意识到了但自己也没有做好的,也列出来分享一下。
• 不要收藏了文章而不去读它,那样是在浪费时间。
很多人看到技术分享就说句 mark,但实际上从来不会回头去读(中枪了没?)。我最近采取的措施就是强迫自己不去收藏,改成当场读完,能记得多少比例都比纯收藏强。
• 多给新人做培训。
在准备培训的过程中相当于把知识点梳理了一遍。为了确保内容无误,你可能还需要做实验验证,这也是很好的练习。最重要的是,能把一个技术讲到新手能听懂,比起自己懂就高了一层境界。有的时候觉得自己很懂了,但是想把它讲出来或者写出来却很别扭,那就说明不是真的懂。也不要怕分享了之后被别人抢饭碗,实际上无论你讲得多精彩,大多数听众过几天就忘了。
• 兴趣主导。
很多领域牛人都是完全由兴趣主导的,一心钻研自己喜欢的技术,连领导交代的工作都放在第二位。越痴迷,越专注,水平也就越高。
• 多参加技术圈的交流。
有些极客很宅,拒绝任何社交,并以此为荣。我觉得这是把缺点当作优点了,其实技术交流是非常有利于进步的,很多同行 也是相当有趣的人。比如我曾经被一个难题困住了好久,没想到跟淘宝技术保障的朋友一聊,他立即就指了一条明路。虽然他也不是业内的大人物, 但是技术背景互补,合作起来相当高效。当然了,交友从来都不只是为了互助,聊得投机才是最重要的。
以上都是我的个人经验,不一定会适合你,但希望有些参考价值。