去年 12 月份的时候我曾经给自己写了一份 "OpenStack 开发基础知识 " 书单,贴在墙上,书单大概如下:
- 网络基础:
- 语言基础:
- JavaScript:
- Web Design
- +Rabb+itMQ in Action
- Database
- Django
读书进度 = 书名中划线部分的长度/书名的长度。之所以有这份书单,是因为在前面几个月的开发中,我发现自己的基础知识薄弱,远远不能满足 OpenStack 开发的需要。虽然自己已经能够按照公司的基本要求,照猫画虎地开发出几个能用的所谓 Feature,但是我内心明白,自己的能力上尚不足以透彻理解 OpenStack 代码1。
我认为自己还算是一个比较努力的人,并且自认为对自己目前所从事的行业还是有着满心的热爱和期待,期待自己能做出一些有用的产品,留下一些真正有用的能改善人们生活的东西。这个宏大的愿望映射到眼前,就是努力使自己成为一个合格的 Full-Stack 类型的 Web 开发工程师。而进一步将眼前目标付诸行动,就是上面的书单了。我原本定的时间是 3–5 个月左右,不过现在看来还是太狂妄太浮躁了。客观上是自己要工作,时间不完全都是自己的;主观上则是自己“深度优先,随性而为”的阅读习惯常常会不自主的打乱原本订好的读书计划。比方说我在读 "Pro Python" 的时候为了搞清楚细节会去读 "Python 源码剖析",会去尝试理解 Python 的 整个历史 ;在读 "HTTP" 的时候为了理解 REST,会去读《REST in Practice》;而我在尝试理解 Python TDD 的时候会把 Ruby 中关于 Cubumber 的书加入阅读计划。这或许不是一个良好的阅读习惯,但这能保持我的兴趣,这就够了。
我不是一个 Top 的工程师,至少目前不是——Top 的工程师不会像我一样还在费力的学习理解 REST/TDD 这些概念性的东西。我知道 Top 的工程师在哪里2。这类人天赋异禀,并且在很早的时候就接触计算机。在你还在骑着自行车围着院子绕圈的时候他们已经开始理解算法和数据结构,在你刚刚写出"hello world"的时候他们已经能写出成型的软件作品,在你毕业之际为找工作焦头烂额的时候,他们已经受过了 1 万小时的训练,有更好的机会和最聪明的人合作更快的提高自己。这个博客基本上忠实记录了我正式开始认真学习计算机的全部历程。四年来我几乎做过各种各样的东西,Windows Mobile 开发,Java SSH(已经忘光光 ),OpenGL 程序,Hadoop,Python/FFmpeg 写的转码系统等等,很杂,也很浅。但我一直坚持一个方向,就是拥抱开源,先是尝试学习基础知识,用好 Linux/Emacs 这类基本工具,毕业工作后开始去尝试读一些开源代码,提一些无关痛痒的 patch 试图接近开源,这一年来又开始尝试理解 OpenStack,并真正的提交了一些 patch。我不敢评价 OpenStack 的设计是否优秀,事实上我还没有这个能力去完全理解它,更妄论评价了。但是 OpenStack 的开发确实让我学到了很多东西,我开始理解了 TDD,开始逐理解了 REST 和 Web Service,开始逐渐理解作为工程语言而不是脚本语言的 Python,开始理解 Message Queue。而我也通过自己的努力,让基于 Jenkins/Gerrit 的自动化测试部署的全套流程在公司运转了起来。
两年前信心满满刚来北京的时候,我从未想过自己会那么快的离开百度3,一年前开始寻找新的工作机会的时候,我完全没有听过 OpenStack 这个词。当初一心坚持离开学校是为了远离校园里学习的束缚,现在走向工作岗位又会感慨感叹时间的宝贵和校园里相对的自由。说白了,我是一个贪心的实用主义者,胸无大志,从来不会想五年以后的事情,学校里面不想听无聊的课程,就天南海北山山水水的疯跑,哪怕一学期挂科五门依然无所畏惧不懂屈服;工作以后顶撞上司就来个偷得浮生半年闲,躲进小楼成一统,管他春夏与秋冬,云卷云舒花开花落——但为了生活还是要出来找工作。
貌似扯的有些远了……最后回到本文的正题吧,OpenStack的开发。上个星期做了两个东西,第一是做了个 OpenStack 代码的国内镜像,方便教育网内学生党4,地址是:
第二是基于 Vagrant 做了个 OpenStack 的开发环境,地址是:
- https://github.com/xiaohanyu/vagrant-hackerbox
- https://github.com/xiaohanyu/vagrant-ansible-devstack
好了,吹牛到此结束,各位好梦晚安。
比如我至今依旧没完彻底理解 OpenStack 中基于 SQLAlchemy ORM 的数据模型,基于 iptables/openvswitch 等的底层网络原理,更妄想理解 KVM/Xen/内核这类 CS 工程领域真正“高富帅”的东西了。事实上,如果没有扎实的数据库/网络/操作系统知识,要彻底理解这些东西是很难的。↩
也从未想到过自己的一篇文章能引起那么大的争议。↩
顺便吐槽下北大的校园网,30元 /80 小时,50元 /160 小时,90元不限时包月,超时流量 1 元 /MB,这价格都快赶上北京正常的联通宽带了。而且速度那么慢 (github clone 20k/s),北京联通现在可是号称 20M 光纤入户的。这就是世界一流大学的校园网,可笑。↩