一个二本小白如何走向年薪百万的职业编程之路
和大多数人一样,我来自北方一个普通的小山村,父亲工厂下岗,母亲单位常年发不出工资。小学成绩差强人意,中考发挥失利,上了一个普通的高中,高考再次发挥失利,上了一个普通二本。和大多农村孩子一样,对前路迷茫,对专业更加不了解,更别说未来的就业方向了。
按照高中时对物理学科的喜爱,自己选择了应用物理学专业。大学很努力,泡图书馆,学专业课。虽然对未来仍然很迷茫,可是没有后悔自己对专业的选择,从开始就知道自己走了一条少有人走的路。
大学学了几年,发现自己除了考试之外,仍然什么都不会,不知道未来能做什么?大三系里开始准备考研,那时恰好看了一本关于华为创业的书,看得心潮澎源,自己也开始了人生的第二次独立选择,通信专业,去南方。是的,我决定跨专业考研。
考研过程不表,我考上了 985 学校的通信与信息系统专业研究生。那是我成长以来,人生最光辉的时刻。没有报过考研班,完全凭自己的刻苦努力考上的。
这个时候,我对编程是没有任何概念的,虽然大学时学过 C++,但是对于完全没有接触过编程的人来说,真的是完全听不懂,也不知道编程对于未来的工作竟然如此重要。除了毕业设计时写了一些工作中永远不会用到的 Matlab 之外,基本上没有任何编程训练。
考上了研究生,也接触了更多编程相关东西。除了 Matlab 之外,自己也了解到了 Python,那个时候 Python 还刚刚兴起,了解到豆瓣网站就建立在 Python 之上,还有兴盛一时的豆瓣 Python 小组。
刚开始学 Python 的时候,发现原来编程可以这么简单,看着 Python 海量的第三方库,就像发现了新大陆,遇到任何问题都想搜一下 Python 是不是已经有了可以用的第三方库。
就这样,研究生期间,我用 Python 写了一些玩具,完成了专业课的大作业,算是编程的第一次入门。因为 Python 有很多库可以玩,所以,如果你是小白,把 Python 作为你的第一门语言,无论对学习,还是以后找工作,都是很好的帮助和经验积累。
读研期间,因为导师有嵌入式项目,所以自己也学习了很多 DSP 嵌入式编程,间接也接触了一些比较底层的计算机原理。做项目那一年读了大概 200+ 本书,关于嵌入式编程,操作系统,计算机网络,数据结构和算法,加密解密等。为了加深理解,还手动实现了一些极简的模型,包括操作系统,面向对象,解释器等等。虽然项目没做成,但是编程相关的知识倒是积累了不少,也算没白白浪费时问。
为了找工作,自己还专门加强了数据结构和算法的训练,看了不同编程语言的数据结构和算法实现,包括 C、C++、Java、Python 等,算法导论刷了 3、4 遍。那个时候自己也不知道刷题,所以面试手写算法也吃了不少亏,如果知道多刷题,面试手写算法好一些,可能就进微软,网易之类的大厂了。
也是在那个时候了解到函数式编程。发现原来还有不同的编程范式,以及递归和迭代的关系,学习了 Scheme,Forth 编程语言,不能说对未来工作有多少用处,现在看来这些算是内功修炼吧,屠龙之术。
总结下来就是,为了对计算机相关专业知识有足够全面的了解,以便工作之后不会遇到知识死角,我开始了很长一段时间,大量的阅读,重复阅读,强化记忆。大量阅读了解领域知识,重复精读加深关键知识,动手实践验证知识。甚至还整理一本操作系统相关的笔记书,打印出来经常翻看,强化专业知识。
开始找工作了,同学中有去 Google、微软、腾讯、百度、英伟达的等等,因为面试手写算法没有发挥好,与大厂失之交臂。我去了一家中型互联网公司(别问我为什么没去华为,我确实面了,但是群面的时候挂了,我也没有求助师兄帮忙推荐,所以就没去华为。对华为的 HR 无力吐槽,没有下限,实在喜欢不起来),但是我没有失落,我继续努力。
这个时候我其实面对和高考选专业同样的问题,也是迷茫,对未来职业方向没有规划,只知道是编程,软件开发,但是这么多方向该选哪一个?是的,我没有选择好,实际是我自己没有做选择,我不知道如何选择,然后被随机分到了一个部门。
入职一段时间,愈来愈感觉没有选择好自己的方向,虽然很忙碌,但是技能水平并没有什么提高,眼看着和周围同学的水平差距越来越大,心里很慌。
这段时间的工作真的就是和搬砖一样,自己在工作中发挥不了很大的作用,很多东东西都实践不到,所以做了不到一年,我准备离职了。其实离职还有另一个原因。就这样我离开南方,来到了互联网圣地北京,来到了一家创业公司,一个从豆瓣上了解到的电商创业公司,那时的电商创业公司人人都有一个马云的梦。当然工资也虚涨了一波。
在电商创业公司做了一段时间,除了公司氛国过于浮夸之外,面临同样的问题,很累但是学不到什么东西,更没有系统的积累,我想参与一个能直接面向用户的系统,全面了解整个流程,这个公司给不了我,所以我又跳槽了。
但是在这家创业公司,我学到的最重要的知识,是来自身边的一个同事身上。工作中他乐于表达自己的观点,独立思考分析,而不是一个简单的需求实现机器。从产品体验出发,从全局思考,就像自己在创业一样,这对我的职业影响很大,我后面的职业生涯也是在践行这些原则。
就这样,在电商创业公司干了半年,我跳槽去了一家用 Python 做游戏服务的公司。当然工资没有涨多少,因为我本身没什么经验积累,心里也很虛,自然也要不上价。但是没关系,我是去学习的。所以,任何时候,你都必须清楚知道你的目的是什么,这样才能做出正确的选择。
在游戏公司工作仍然很累,无休止加班,但是我很开心,因为有积累,开始了解到实际中的分布式系统是怎么从零构建、网络编程、分布式锁、协程,以及游戏服务是怎么样的等等。就这样干了一年,感觉基本上学不到什么东西了,职业也没有上升期,钱也比较少,所以我直接裸辞了。
很快,我找到了新的工作,还是一家游戏公司。本以为靠着自己在上家公司的积累可以大干一场,可是总感觉和团队格格不入,我明明有更先进的技术,却无法施展,但是没办法,我只能强迫自己融入他们的技术体系,为了生活不能再跳槽了,现在开始我需要努力挣钱了。
就这样在这家公司待了两年,见识了太多 PUA,默默承受,默默努力,心理承受能力也获得了极大地提高,也掌握了化解心理压力的方法,就是听一本英文小说,上下班路上重复不断地听。把这一切都当成对自己的成长的考验,无论周围的人怎样,自己都要做一个有职业素养的人,不要把自己拉低到和他们同样的水平,把所有的不公转化成动力。这两年我也更加精进了自己的技术,当然还有钱。就这样,年底拿完年终奖,回来就提了离职。
我又跳槽了,进了一家大厂,也就是我现在的公司。同样是做游戏,自己开始独立负责一个游戏的开发架构和优化,通过理论和实践的结合,我将之前所有的积累都倾注到这个项目之上,能力水平也是进步飞速,工作整体也很舒心。
后来工作室所有的新游戏都用到了我最初的架构。两年之后,公司上市了,我也拿到了股票,就这样,我达到了年薪百万。
这就是我的故事,写出来希望能给曾经像我一样迷茫的你,提供一些参考。我想说的是,工作的起点和平台很重要,但也不绝对,长期看,对一个不断努力的人来说,方向才是最重要的。坚持读万卷书,行万里路,你总会走上你曾经羡慕的人同样的道路。
职业初期,最重要的是在一个方向上深入发展,坚持下去,在没有积累到足够深度之前,不要更换职业方向,但可以跳槽。鼓励多跳槽几次,跳槽之前,一定要知道自己想要的是什么,只有说服自己,才能做出好的选择。其实中小型公司更锻炼人,中型公司能让你更多接触到整个系统的架构,小型或者创业公司更容易让你从全局方向思考,更容易体验从 0 到 1 的过程。随时调整和检验自己的技术储备和市场需求之间的关系。
在能力没有足够积累之前,薪水并不重要,学习永远是第一位的,如果学不到东西,尽快走。读万卷书 行万里路。当你读了足够的书,就可以出去走走看看了。
成长的过程一定是非常艰辛的,学会自己寻找解决办法,坚持住,永远相信自己,做一个打不死的小强。现在的我,仍然在努力拓展自己的边界,未来会怎样,目前还不清晰,期待下一次出发。