2009年,我从从事了三年多的互联网行业转向嵌入式方向的开发,其中有迫不得已的意味。我尝试在这个行业发掘一些自己的兴趣点,很遗憾,最终还是发现互联网行业更加适合我一些。于是,在2010年就要到来的时候,毅然提出了离职。很快,也许我就要离开深圳,只为了寻找一个能够从事自己感兴趣职业的发展机会。有几次面试的时候,面试官都会问我,为什么这么喜欢互联网,我想都没想就回答说,当初选择做软件就是为了能给他人带来帮助,而在这个互联网这个行业里我能找到最大的成就感。
技术方面,今年重点关注了几个方面:
1) Linux内核。年初刚开始转行嵌入式的时候,想借着机会学一下Linux内核方面的知识,当时也蛮有决心。但是,后来的工作,与系统底层关系不大,而内核的代码又太过庞大。坦率的说,阅读Linux内核给我带来极大的挫折感,一方面就在于没有相关的经验,第二不知道从何看起。所以,暂时这个计划就被搁置了。虽然如此,阅读内核的代码的经历,也进一步培养了自己探究真相的好奇心,同时,如果能在操作系统层面上思考一些问题,我想会理解起来会更加深入。所以,这个阅读内核的计划迟早还是会重新捡起来的。反思这一次的失败,我想,以后的阅读首先挑自己感兴趣的部分,带着疑问,步步深入进去吧,比如我目前更加感兴趣的部分是:进程调度模块,内存管理模块,TCP协议栈实现这几块。
2) Nginx代码的阅读。Nginx在之前有短暂的接触,当时已经被它的效率折服,一直想看代码来着,不过一直没抽出空来。广州技术沙龙上,第二期老zhu分享了自己阅读Nginx的心得,没赶上沙龙现场,不过就后面看到的文档,再结合着自己以前阅读Ligty的经验,也就相关的部分进行了一些比较分析。个人的感觉,Nginx的代码写的很考究,作者是个重视细节,重视编码优雅的也许有些“代码洁癖”的人。Nginx的分析,和之前的ligty分析一样,我只重点关注到服务器I/O架构部分,还有几个部分需要关注的,比如内存管理,比如模块设计细节,读取配置文件等。应该说,Nginx里面可学的不止这些,其他的,等我真要好好研究一个web服务器的实现时,再慢慢看了,都是涉及到具体业务细节的部分了,可以暂时略过。
其实,就我的感觉来看,所谓的“高性能”服务器,在I/O网络模型设计方面已经有比较成熟的模型了,这方面不会有太多的变化,关键在于与业务逻辑相关的架构,服务器集群之间的架构,服务器的可维护性,容错性,以及后端的存储等。在阅读了Nginx/Ligty之后,我想,就单纯的I/O网络模型上,我已经有一些自己的想法了,今后应该会减少单纯的服务器项目代码的阅读,而转为其他一些我更加不熟悉部分内容项目的阅读上去。比如我想阅读GFS的文档以及相关的一些开源项目,还有一些分布式相关的项目等,因为这样涉及到分布式的项目,会更多的考虑服务器之间的关系,我比较缺这方面的经验。
3)存储相关的项目。今年的一个收获是,我找到了自己更加感兴趣的方向,就是与高性能存储相关的部分,比如cache,持久化存储等。这一部分,之前阅读过的开源项目是memcached,我也做过类似的开源项目,不过仅是cache方面的。cache的舞台多是内存,而持久化存储如tokyocabinet等则多是文件了,存储介质变了,文件的组织,算法,数据结构都有很大的不同。我最近也开始在看tokyocabinet的实现了,应该最近在比较有把握的情况下会有一些文档交出来。
这么一看,其实这一年里面,技术上的长进着实不多,更多的我想是在个人心智的成长上。这一年对我而言,更多的是低潮,磨砺,以及自省,有了这些开始看上去不那么愉快的经历,我想在今后都是一个财富。
另外,我在找C++服务器端的开发工作,有以下几个小小的要求:
1) 腾讯就算了。我之前从腾讯出来,之后想回去,去面过几次,技术上算过关了吧,不过现在回流腾讯难度似乎比较大,所以我想还是不要浪费大家的时间了。
2) 做网游开发的就算了。我曾经很喜欢做游戏类的开发,不过当前中国大陆的网游现状,与我的预想差别还是比较大,每次看到那些在网吧沉迷游戏的孩子,都会觉得是网游害了他们。所以,如果做网游,我想我过不了自己这一关的,还是算了吧。
3) 北京,上海就免了,不太喜欢这两个大城市,压力大,同时排外情绪也严重一些。
除了以上几个条件,其他的,都可以谈,如果觉得靠谱,就给我博客留言吧,我将尽快回复,谢谢。
2009年,不是一个平静的年份。