About me — Connecting the dots

在这个难以入眠的夜里,乔布斯年在斯坦福的演讲里说的“Connecting the dots”又萦绕耳际,即当我们往回看,清楚了自己曾经的生活和现在甚至将来是串联在一起的,这些经历决定了我们事业、生活的走向和方式。韦哥这两年都过五四青年节的权利了,回忆青春,可谓“从前的点点滴滴回涌起,在你五味杂陈的心里”。

大学毕业的时候,我有了一年多的Windows VC++的编程经验,相对于周围的同学来说,算是比较“会写程序”的了,为你懂的,大学里普遍被认为正事的是打游戏,即使是计算机专业的学生,也很少有编程经验,而且普遍对编程有一种恐惧感。10月份的时候,我就去一公司的软件出口事业部进行实习面试,虽然感觉表现不够好,但还是通过了面试,给的待遇还可以,一个月挣的钱相当于在学校里一年的生活费,让我这个农村出来的穷孩纸受宠若惊。于是没有想太多就去实习,之后也正式入职了。现在回想起来,我觉得当时在应届生里我还是有一些竞争力的,为什么没有去多尝试几个公司,多面几次试呢。现在想想,并没有多少后悔,但还是觉得当时应该多试试,多选择。我也曾经年少轻狂,英语6级考试就是一直不愿意考,因为学校规定大二结束才能考四级,而我大二时已经在背GRE单词了,大三直接拿牛津字典看了,我觉得大三后再去考6级是对我的侮辱,我北大的同学大一就过6级了。我自认为英语不错,拿过两次竞赛奖,虽然最好的也只是全国竞赛二等奖,但我认为我大一或大二过6级是没问题的,那样我才会有成就感。现在看到一些招聘要求写着英语6级时,我只能笑笑。

第一份工作是Windows开发,接下来5年,我顺理成章地继续Windows开发的工作,从应用层到内核驱动,还一度对破解有些兴趣,经常上看雪论坛逛逛,下载一些软件然后使用Olldbg、IDA Pro做一些分析,并学会Windows Sysinternals上的那些工具。Windows编程的书籍如《Windows核心编程》、《深入浅出MFC》,《Windows内核原与实践》、《Windows驱动开发详解》、《寒江独钓-Windows内核安全编程》、《c++反汇编逆向分析技术揭秘》等等书籍读了遍。我最后一份Windows工作试用期结束时,领导给我的评语是“解决问题能力强,尤其在Windows程领域,具有家级的水平”,虽然我自己认为评价过高,但心里还是有些高兴,因为这些年持续不断的学习似乎得一些认可。然我参加微软的远程上机面试,职位是内核驱动开发,给银行做项目。面试后他们给我的评价是:对Windows内核驱开发基本解,但加密算法方面没有达到项目要求。

然后我就找到了现在的这份工作,第一个项目是调试一个开源项目,包括Windows内核驱动、Linux内核驱动和应用程序。我之前只是装过几次Linux,大部分的命令都不会用,但是为了做项目开始加速学习,一个多月下来,从对Linux比较陌生到学会调试其内核驱动并分析内核代码,基本的命令使用也熟了。其实在有了Windows经验以后,我学习Linux还是比较顺畅的,虽然有些东西需要时间的沉淀。比如在Windows下,我会去了解PEB、TEB这些内核的进程、线程数据结构,PE文件格式,内核同步机制等这些东西,那么到了Linux这边,我也会去找类似的东西是怎么实现的,于是就会了解task_struct,ELF,spinlock等东西。但是原来有些我在Windows需要借助比如反汇编工具去看的东西,在Linux下我可以看源代码了,这让我有一种自由和舒畅的感觉。接着,我打算开始研究Linux内核。

现在的业余时间里,我就研究Linux内核源码和虚拟化技术,分析开源云平台如OpenStack代码,这些对于做云计算的人来说绕不过,虽然有些人可能觉得做云计算就是拿开源的东西来搭建一下就完事,但我自己觉得这样的云计算至少自己是不敢用的,同时我认为如果一个公司要做公有云,没有自己的内核和虚拟化团队做支撑,只是想拿个KVM或Xen装装就能为客户服务,简直就是给自己埋了个定时炸弹。

我有时候会想,如果我从一开始就接触Linux编程而不是Windows,那么我前五年的时间就是在做Linux开发,以我的性格肯定早就研究了Linux内核,这样我对Windows程序可能一窍不通,但对计算机的理解、对Linux内核的实现机制的理解、对各个协议栈实现的理解一定会远远高于现在的水平。但是回到乔帮主的“Connecting the dots”,谁又能知道我因为对Windows的较为深入的理解,加上对Linux内核的继续探索,会在未来给我带来怎么样的连锁反应呢。虽然我也知道,有些人可能永远不会去了解内核,但同样能用shell、python写出挺溜的东西,喜欢研究内核的,在做同样的事情时,并没有能表现出多少优势。但是我还是希望自己了解更多底层的知识,不喜欢被蒙在鼓里的感觉,并且相信量变到一定程度会引起质变。

我有一个缺点同时也能勉强认为是优点,就是醉心于资料收集。不好的地方在于,花了那么多时间去收集资料,而真正用心去研究带来水平提升的少,没有达到本来的目的。好的地方在于,通过这些我极大开阔了自己的视野,一般同事们遇到什么技术方面的问题时,我总能告诉他们哪儿有这方面的较好的资料可以学习,或者翻出藏在我电脑某个角落里的文档让他们看。好的地方还在于,因为长时间的关注,每当我打开微博、微信、RSS阅读器时,那些技术干料、各种技术大会的分享信息就从四面八方涌过来,使我能更迅速地了解行业资讯,更快的找到我想学的东西,但不是我去google,而是它们给我推送D。

 

欢迎微信扫码,进入【技术人成长】社群逛逛。

发表评论

电子邮件地址不会被公开。