KKXUE A blog about coding pratice

OpenStack hacker

I read this post when i was starting learning OpenStack I think it helpful,feel free read it, OpenStacker newbie!

This post is reproduce by Joshua@openstack.cn

OpenStack的官方文档在开源世界里应该说做得还是很不错的,如果你只是想随便跑一下运行一下的话, 看看这些文档应该足够了。 但是如果它出问题了呢?由于还未真正懂OpenStack,可能你会感到: 一是解这个问题会很累; 二是经常性的没有思路,不知道如何下手; 三是花费的时间成本也不会少,会成十上百倍的大增; 四是下次遇到类似的问题可能依然不清楚,依然耽误时间; 五是由于未理解把不是问题的问题当成问题; 六是由于未理解也容易出方向性问题得不偿失; 七是一直看不到系统的全貌与本质始终在一个局部打转转,长时间处于恶性循环中; 八是同样没有真正理解给别人讲的时候也讲不明白,问个问题别人都不知道你在问什么耽误大家时间;

这样,无论对于公司还是对于你自己来说都是损失,不会有好效果,对于此类问题,笔者给出的药方就是系统性学习,没有捷径。 可能有人以为,系统性学习看起来在内功修炼未开窍之前会没有效率,那特错特错了,俗话说得好,磨刀不误砍柴工,你的Skill的提高带来的将是效率的成几 何倍数的提升。这也是为什么IT领域永远是20%的人干80%的活,看看Linux,看看Hadoop,看看那些创业公司就知道了。

既然从事了码农这一行,怎么着都是一个累,但是系统性学习了,开窍了,那就一劳永逸的解决这些问题了,上层再怎么变,底层的Linux内核或者网络这些知 识却不会变,并且万变不离其踪,有了这些底层牢靠的基础,是非常容易理解上层的变动的。这就会步入良性循环,你算算这其中的好处帐吧,呵呵。

下面是笔者这一年半学习OpenStack的历程,仅供参考: 1,首先随便找几篇架构方面的理论文章,心里清楚它是干什么的。 2,看代码之前,首先得会用。会用可以看官方的文档,我反正是没看,因为早期的文档并不像现在这么丰富。我直接看的devstack的脚本,照着它那脚本一步步手工源码安装一遍之后就基本能解决所有的安装使用方面的最基础的问题了。 3,做为一个程序员,首先debug得先行,使用pydev创建开发环境,在debug的过程中,你就知道它的运行流程了,当然现在有文档讲它的运行流程,但早期也少见啊。再怎么着,也没有你自己debug一遍来的印象深吧。 4,稍微fix一些bug,任何一个小bug都会把你带到实际代码之中去,遇到很多脚踏实地的问题。但是这个不用太多,因为你还要省时间出来系统性学习消化了。 5,多review社区那些高质量的代码,尤其是看那些对你理解代码有代表性的patch。每一个patch背后都会有它的背景知识,这个就需要系统性的学习了,刚开始一两周可能稍微影响效率一点,但接下来马上带来的效率提升就会大丰收了,绝对是划算的买卖。 6,反复地看,反复的加深印象,好记性不如烂笔头,慢慢随着你知识的广度的提高,你就能随意触类旁通了。如果再有机会对某一领域进行深度的探索时,你也总能把握住方向,出了问题就从理论上都能想象得到可能问题出在哪个环节,站得高,看得远,还轻松。

这期间笔者也系统性地学习了下列25本书,不包括电子文档等。基本原则就是: 1,想精通python的话,随便找本python的书花个半天时间了解一下就可以开始写代码了然后遇到什么回过头来再翻阅什么就行了,然后想精通 python的话最应该看的是C编程的书,如UNIX编程的大块头,慢慢啃吧,神马进程死锁啊,同步啊等等思想都在里头了,因为技术都是相通的,当然,世 间万事万物都是相通的,技术和非技术也是通着的。 2,学OpenStack当然要看OpenStack的代码,但也不是全看,笔者在之初就很少直接盯着看Neutron的代码,而是系统性学习它背后的知 识,然后再回过头来你就会发现原来这些代码都是按你心里预想的步骤来写的。举个例子,笔者最初想评审IPSec VPN的代码,直接上去看肯定看不懂,算了,不看了,回过头先花半天系统性过一下IPSec的理论与Linux下的IPSec的具体实现 strongwan的用法,再花一个小时回过头来仔细研究代码,你就会发现这些代码都是顺着你的思路来走的,这样又能review到点子上,也节省时间, 更轻松人不累,还能学到东西。我相信你直接一上来就对着这个patch干看,不系统的话,估计看两天也是一知半解吧,就像社区某些不是很懂的人一样看不懂 又要量化的数字就尽提一些莫名其妙的python的用法相关的comment。又累又没效果也没学到什么东西。Python也就是一个壳,掌握它远没有掌 握里面的领域知识更有意义。社区的有些core他们永远被那些量化的数字纠缠着,有美丽的光环,但很少有时间来掌握领域知识的,顶多多熟悉了点 python了而已,不熟悉,又要评审,就只能莫名的-2,不能服众,影响了组件的稳定性,延迟了openstack在企业的部署。

总之,系统性最重要,那才是正规军,非游击队。

Be social and share this post!