我的静谧成长岁月: 劫后重生

技术人成长,却不仅仅是技术上,其中很重要的一面是心智的成长,心智的成长跟个人的思考习惯相关,思考习惯又和一个人的性格有着密不可分的联系,性格又主要是由成长环境和教育铸就的。

我不仅聊过自己的少年时代:

我的野蛮成长岁月-少年时代

也聊过自己的大学时代:

我的不羁成长岁月-大学时代

还聊过自己的职场初期:

我的勇莽成长岁月-职场初期

如果你看过了,会觉得这其中有苦有乐,有笑有泪。而我在回忆过去的时候,偶尔有那么一点点懊恼,但也不会深切地抱怨什么。首先是成长环境,我们生下来是没法自己选择的,而我们也不应该因为没有好的环境而怨天尤人甚至怪罪于父母。其次,在我们的成长过程中,其实是有一些选择机会的,可能我们因为性格或其它方面的原因,没有办法去抓住那样的机会让自己变得更好,这可能是有些懊恼的原因。然而,我认为每个人在特定的成长背景和环境下,都具有局限性,不管是思想上还是能力上的,那么我们能做的,就是反思过去的不足,力争在将来面临其它选择时,能表现得更好。而现在,应该选择与过去的自己和解,而不是带着满腔怨气面对未来。

一双凉鞋,短裤和背心,再加个程序猿标配的双肩包,我就这样在一个大雨滂沱的傍晚,搭上了从北京开往深圳的列车,时长23小时。列车开动后很长一段时间内,我都是面无表情地望着车窗外,好像在期待着这场大雨,洗去这些年来所有的颓意和迷茫,好让我在深圳有一个崭新的开始。

我买的是硬座票,虽然有座位,但列车非常的拥挤,过道上都站满坐满了人,还有一些人直接钻到别人座位下面,躺着睡地板,呼噜打得可香了。我在座位上腿伸不直,再加上平时也有点失眠症,怎么也睡不着,心情复杂又激动,复杂是因为将要到一个自己完全陌生的城市,激动是心中渴望一个新的开始。

插曲:直到多年后我再次坐火车,第一次买了卧铺票,我才知道只要加一百块钱,就可以完全不用感受那些拥挤,可以不用穿过、跳过拥挤的人群才能去到洗手间。虽然我的身体里一直流淌着艰苦朴素的血液,但不可否认的是,贫穷,又一次限制了我的想象力……

到深圳时,天快黑了,我在车站附近的一家旅馆住了下来。第二天天刚亮,我醒了过来,就离开了旅馆。然而这时候我还没有明确的目的地,就在附近走走,反正对我来说,到哪儿都差不多。走到儿童公园里面时,脚起泡了,感觉很累,于是就躺在一块大石头上休息。没想到这一休息,就睡了过去,醒来的时候,慌忙摸摸背包和裤袋里的钱包,没有丢失,才舒了一口气。继续走着走着,走到龙岗区布吉镇,看到居民区里有很多房屋出租信息,我没有多想,就立马租了个单间,先安顿再说,反正月租370块比住旅馆便宜多了。

跟房东办完入住手续,我买了条凉席,铺到房间里本来就有的一张破旧床上,关起门来,就躺了上去,一种终于有安身之地的感觉弥漫心间。我感觉实在太累了,心想不管那么多了,就算天要塌下来,也要睡一大觉先再说,就这样沉沉睡去了。

前边说过,我到深圳来并没有明确的目的地,而是先看看再说。那个时候的我,也并没有找工作的打算,在北京开店搞网站失败对我来说只是暂时的失败,我还不愿意承认自己暂时不具备创业的能力。其实在上一份工作离职之前,公司大领导挽留了我,说如果我觉得部门领导或者谁不好相处,可以协调之类的,我说没有这个问题,完全是因为想自己出去闯。他说你是否做好了准备呢,很多方面可能还不够成熟,我回答说会在锻炼中慢慢成熟的,他也不好说什么了。有些前同事也跟我说,我这个人的性格可能不适合单打独斗,而我就偏偏不信,我觉得人家只看到我的表面,而我关注的那些东西,我所了解的行业及资讯,他们根本就想不到。创业成功的人,有各种各样的性格,外向内向的都有,不是说话不多的人就不适合创业,因此,我心里还憋着一股劲,就是要证明自己。

那个时候,我毕业了三年,上班时间大概两年多点。那两年挣到的钱还掉了助学贷款,在老家盖了一小房子,又因为开店期间没挣到什么钱,所以到深圳时,身上只剩三千多块。我在想着,那么多人白手起家,我三千块钱,是否也可以起家?

我每天辗转反侧难以入眠,还是没有办法开始做任何事情,曾经想去应聘酒店的临时工作,那种可以跟人打交道比较多的工作,我知道蜕变是会痛苦的,但却愿意去经受。同时在学习一些SEO(搜索引擎优化)相关的知识,并且想去兼职做SEO,因为这样对自己之后创业的推广也有帮助。又花了点时间写C语言培训课程,想在那里的小镇上搞个网上培训。现在多年过去了,我都惊讶于当时自己的胆量,才毕业三年,并没有太多的IT行业经验,乳臭未干就盘算着去传道授业了,也许这就是无知者无畏。

就这样过了两个星期。有一天,突然接到家里的电话,说老妈住院了。我赶紧跟在医院的她通了电话,说我第二天就回去。老妈用微弱的声音说,你回来又要影响工作了,而她并不知道,我当时并没有上什么班。可怜天下父母心,自己重病不起,想着的还是孩子的工作是否受影响。我感觉有些不妙,二话没说就去附近的车站买了张票,第二天就回老家并赶去医院了。

很遗憾我的这一回去,并没有能留住母亲,在父亲离开不久后,她又永远地离开了我们。于是我,彻彻底底沦为了,这个美丽世界的孤儿。几天后,我就回了深圳,我知道往后的日子里,身在异乡的我,将少了一丝牵挂,却多几份空落,或伴着苦笑。

这种情况下,我已经折腾不起了,只能找工作。不过又很快地,我在南山科技园找到了工作,职位是Windows开发工程师,待遇比之前上班也提高了不少。我感觉还可以,毕竟差不多一年没上班,没有在Windows开发上有精进了,但还能拿到满意的待遇。这次,我对自己工作上的要求只有四个字:心无旁骛。

公司是做存储起家的,而我的任务是改进他们客户端的使用体验,让用户访问他们远程存储系统就像访问本地硬盘一样。面试时面试官对我的要求是,在Windows开发方面独挡一面,后来证明确实如此,毕竟部门只有我一个人做Windows开发。我采用扩展资源管理器的方案来做,并实现像SVN那样桌面右键扩展的功能,同时还写了浏览器下载插件,再配以一个类似网盘客户端的管理软件。全部设计和开发都是一个人完成。后来,领导觉得我一个人虽然能做完,但未免太寂寞了(也许是开玩笑),让我招聘一个新人来一起开发。我招了一刚毕业的研究生小伙子,小伙子做事勤勤恳恳,责任心满满,周末也喜欢来公司呆着,这样我就轻松了许多。后来我离开这家公司后,小伙子去了华为,联系也少了,不过这么肯加班的年轻人,应该发展得也不错。

我在这家公司的总体表现也还可以,在一次考核中,直接领导给我的评价是Windows编程专家,而我自认为没有达到这个水平,毕竟只有三年的工作经验。平时工作上的事情应付起来比较轻松,更多时间,我主要自学Windows内核驱动开发,因为一直对程序破解、逆向比较有兴趣。两年后我离开这家公司的原因,主要是Windows上的事情越来越少了,而我也想转到Linux方向,但公司并没有相应的职位可以调整。这期间工资也有涨过,所以在薪资上并没有什么太多不满意,主要还是觉得,我所学的内核开发知识,在这里没有用武之地,对自己技能的成长不利。

紧接着,我迎来了在深圳的第二份工作,入职一家小型的云计算公司。当时云计算已经火了好几年了,而我还以为只是概念上的炒作比较多,平时也没太留意相关的技术。这家公司想使用一个叫做USBIP的开源项目,实现的效果就是在远程服务器插上一块U盘,然后在客户端电脑访问这块U盘时,好像这块U盘直接插在客户端电脑主机上一样的使用体验。但这个项目源码涉及到Windows和Linux内核驱动开发,他们公司里没有人能搞定,而我有点内核基础,又宣称对内核有浓厚的兴趣,就被录用了。

即使没有任何Linux编程基础,经过一个多月的摸索,进行Windows内核、Linux内核代码的调试后,我对这个项目的源码基本理解了。写了一个剖析文档,这个项目就算是基本完成了,可惜并没有真正使用起来,可能跟当时的客户需求有关。然后被安排去做一些服务器/交换机规划、配置方面的工作,再之后,就是各种虚拟化平台的部署工作。在内部,我们给这个项目起名叫云工厂(Cloud Factory),意思是生产各种私有云的工厂,达到的效果是:用户按我们的规划布好线、连接好服务器交换机等设备,然后通过图形界面点击诸如“部署XenServer”按钮,半个小时候,一个XenServer集群就安装配置好了;点击“部署vSphere”按钮,同样半个小时候,一个vSphere集群就部署配置好了。这个项目除了Web界面开发,其它部分都是由我一个人完成设计开发。

因为这个项目,我真正接触到了云计算,并一头扎了进去。要想搞好云计算平台,需要你具备计算、存储、网络等方面扎实的知识,而我只在Windows方面开发多年,对网络的很多东西似懂非懂。要把项目做好,我必须拼命去学习和补上这些知识。

我发现有些同事在这里从事云计算相关的工作几年了,对云计算的一些思想及模式并不了解,只会按照网上的教程把一个集群搭建起来。而在我看来,如果一个云厂商的很多系统工程师只达到这种水平,我是尽量不要成为他们的客户的。在虚拟化方面,我不仅要理解各种技术的基本原理,还需要深入到Xen、KVM这些开源虚拟化技术的源码层。在网络方面,要熟悉主流的SDN方案,对路由器交换机的配置、Vlan划分等原理都能理解并且有实践。在存储方面,对主流的存储技术,各种方案的优劣都要了解,并且能够面对不同的客户给出不同的合理的解决方案。

那时候,软件定义计算、软件定义网络、软件定义存储的概念都比较时髦,而VMWare提出了软件定义数据中心的概念(SDDC),并认为这将是云计算的终极形态。我一直跟进这些理念和技术,还对当时最流行的开源虚拟化平台OpenStack的源码进行了一系列剖析并放到了个人技术博客上。当时这家公司没有年终奖,没有公积金,社保也基本没交,但却是我呆得最久的一家公司,君子能屈能伸,我要在这里完成彻底的技术转型,即从Windows桌面开发转向Linux服务器开发及运维。这期间,我同样深入去学习了部分Linux内核代码,并将这些原理和Windows内核原理进行比较,想弄清楚这些设计的不同是如何形成的或者是出于什么目的。为了更好地掌握,我还利用几个周末的晚上,翻译了国外的论文,在这里:Linux和Windows设备驱动架构比较

总的来说,我在这家云计算公司得到了极大的成长,也完成了个人的技术转型。三年后准备离开的时候,我觉得周围已经没有人可以交流云计算相关技术了,我跟公司的技术总监说,希望再利用几年的时间,让自己成为云计算领域名副其实的专家,但继续留在这里的话,恐怕无法完成这个愿望。我的工作之前一直是直接向技术总监汇报,他对我的技术面也比较了解,曾经在内部会议上跟一些同事说,大家有什么问题可以来找我,我什么都懂。其实我并不是什么都懂,能给他这种印象,是因为他每次到我工位上,基本上我都是在看英文资料,满屏的英文,好像在偷懒不做事情,但却总能按时完成工作任务。有一次他跟我谈起写操作系统的话题,我马上打开自己电脑上保存的关于自己动手写操作系统的书籍资料,并跟他说我之前研究过一些,然后他又跟我聊起编程语言,说如果能设计一门语言怎样怎样,我又马上拿出程序设计语言的文档资料给他看,并奉上了知乎上很有名的轮子哥的一个系列《如何设计一门语言》。因此,技术总监整体上比较认可我,于是说了一些挽留的话,比如说我可以给你涨工资到多少多少,我表示了感谢,并表示自己去意已决。

因为在我看来,当时公司老板倾向于玩概念,什么概念新就炒什么,这样的话其实公司在哪方面都没有深厚的积淀,而对时髦的技术,倒是什么都懂一点。同时我认为,一家云计算公司,没有几个虚拟化、网络、存储方面的专家级人员,想要在市场上有竞争力并能服务好客户,是极为困难的。云计算是大厂或者技术极为先进的新兴公司才能玩得起的,而大部分公司,到最后都属于云计算厂商的客户,只需要懂得如何去使用好云计算就可以了。

也在那一年,大数据技术开始时髦起来,我在离职之际也开始学习大数据方面的技术,去了解了大数据在国内外一些大公司的实践经验,为自己在职场竞争中增添筹码。

后来合同快到期的时候,我还没找好新的工作,但已经决定离开了。我先后面试了深圳不少公司,不过整体上都不太理想,很多面试官可能就工作个三到五年,提的一些问题是我很早就研究过甚至已经忘记了的,让我对他们的技术反而没有信心。也有些公司需要某一方面有专长的人才,我在那方面又没有那么多经验,情况比较尬尴。

至今记得比较清楚的是美的云计算的电话面试,面试官问了一些我觉得相对有深度的问题,同时兼具广度,让我觉得面试官是一个牛人。比如我提到协程,他马上问我那种实现是对称的还是非对称的,我提到操作系统的进线程,他马上问我Linux系统中进程状态为D(不可中断屏蔽状态)是什么意思,提到C++模板库STL的时候,问我迭代器失效的问题,重新分配内存的问题等等。这个面试让我们有一种棋逢对手的感觉,于是在一种愉快的气氛中结束了面试。

然而过了一段时间后,我并没有接到后续通知,心里有点小小的沮丧。那段时间家里人跟我说,可以考虑回南宁了,这样离老家也近一些,来回方便。我之前已经在南宁买了房子并已装修好,所以我也听从家人的意见,将简历上可接受的工作地点增加了南宁。

之后,我通过猎头比较快地拿到了南宁两家公司的offer,一家是小型的云计算公司,给我的职位是技术总监,另一家是智慧农业方面的公司,职位是高级软件工程师。待遇都差不多,但技术总监职位这家公司离家近一些,而我最后选择了智慧农业公司,原因我在拙作《漫谈中小企业研发技术栈》中有提及,这里先不赘述了,下一篇可能还会详细说这个事情。

我决定好回南宁了,最主要的理由是离家近,清明回老家方便,在外漂泊太久了,心已累。就在我正收拾东西准备快递回南宁的时候,突然接到美的云计算之前那位面试官的电话,说之前因为休假了,没得及时联系我,问我是否考虑他们的岗位。我姑且相信他是真的休假了,并说我已经决定好回南宁,然后他说如果我想法有变化后面又回深圳的话,可以跟他联系,我说若有缘再续吧,并表示了感谢。

还记得吗?之前我从北京到深圳,原因之一是因为人家都说深圳是创业者的天堂,而我在深圳这几年,并没有再想着去创业,而是踏踏实实做技术去了。之前看到很多年纪轻轻的人创业成功,我就特别有危机感,而到深圳后,我却觉得创业什么时候都可以进行,上班反而不是什么时候想上就能上的,得有公司录用你才行,因此,我需要珍惜上班时间,好好做事情,多做各种准备,这样到年纪大了不容易找工作时,还可以去创业。

几天后,我在动车上发了这么一条朋友圈,结束了五年的深圳漂泊之旅。

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