一个野生程序猿的转行之路——暨2016年年终总结

开博动机

自从打算转行开始学习编程以来,我除了自己看书和看视频学习以外,碰到不懂的问题的时候经常通过搜索引擎来查找各种技术文章,在此过程中发现不少技术大牛都有自己的博客,而且很多大牛除了技术精湛之外,表述能力还超强,写出来的博文重点突出,通俗易懂,使我从中受益匪浅,我在此对他们的分享精神表示感谢。关于技术人员写博客的好处,已是众所周知的了,在此就不再赘述。作为一个初级程序员的我,到目前为止还处于不断汲取知识的阶段。我一直有个心愿,就是能开一个技术博客,来总结和分享自己所学到的东西,然而却一直没有付诸实践。就在2017年刚刚来临的时候,我为自己制定这样一个目标——从2017年开始,维护自己的个人技术博客。心动不如行动,我立即在自己租用的云虚拟主机上搭建了一个WordPress博客系统,从此开始了我的技术博客之路。2017年的目标是每个月至少更新一篇博文,所有的博文都会在我的CSDN博客我的个人博客上同步发布,欢迎大家关注和阅读!
  此篇博文作为开博第一篇,我想先分享一下自己转行的一些经历和感想,也作为2016年的年终总结,辞旧迎新,展望新的一年!

转行之前的经历

首先,我想写一写自己转行之前的一些经历与心路历程。众所周知,许多中国学生幼时的梦想就是长大后当一名科学家,从小作为班上优等生的我也不例外。农村出身的我一直努力学习,从小学到高中成绩一直保持在年级的顶尖,高考时以优异的成绩考上了国内某Top 10 高校的化学系。在大学里我也属于比较努力的那一学生群体,且一直对化学保持着浓厚的兴趣,专业课从不翘课,90%的专业课成绩都在80分以上,大四时如愿以偿地被保送到中科院某研究所攻读硕士学位,离成为科学家的梦想更近了一步。当时保送研究生的时候没有争取到硕博连读的名额,心里不免有些失落,不过能来到中国最顶尖的科研机构来学习已经觉得十分不错了。还记得大四去参加夏令营的时候让同学提前带我去研究所踩点时,在见到研究所大门的那一刻,心情真是十分激动,想到自己即将来到这里学习,更是兴奋不已!当我顺利完成保送手续之后,就开始在研究所做毕业设计,开启了科研生涯。大四期间并没有自己独立的课题,基本是在帮师兄师姐们打杂,即便如此,每次有了一些小小的成果都会觉得很开心,而且一直在憧憬着自己有了独立的课题之后能够大显身手。记得在毕业设计期间发生的一件小事,当时一个将要博士毕业的师兄正在申请国外的博士后,我就缠着让他告诉我怎么写申请博士后的邮件,他很不耐烦地告诉我,你现在本科还没毕业就想着申请博后,读不读博士还不一定呢。我心想着,我一定会读完博士再读博后的!整个大四几乎都在研究所度过,与那些大部分时间在学校里度过的同学相比,我算是非常忙碌和辛苦的,但是当看到自己厚厚的本科毕业论文时又觉得一切都是值得的。
  大学毕业后,我们开始了中科院研究生为期一年的集中教学阶段,彼时的生活跟本科前三年差不太多。一个偶然的机会,我发现了一个主要为科研人员打造的网站——科学网。很多科学家在里面开博客写博文,有高校的青年教师写博文抱怨科研人员的待遇,也有资深教授分享他们的科研之道等等,科学界的一些前沿、进展、争议等新闻时事基本上都能在第一时间内获取得知。浏览这个网站使我对科研生活有了进一步的了解和认知,最令我印象深刻的是中科院数学所程代展教授的一篇博文——《昨夜无眠》。这篇博文讲的是程教授的一个科研做得非常好的博士生放弃了去国外攻读博后的机会去北京某高中当了数学教师,程教授觉得十分惋惜,一夜无眠。这篇文章对我的触动真的很大,我开始意识到对于家境不太好的学生而言选择去当科学家会有种种顾虑,开始了解到中国科研界的种种弊端,开始渐渐怀疑自己曾经选择的路。
  结束了一年的集中教学之后,我回到了实验室,终于开始有了自己独立研究的课题,开始“大显身手”,然而当自己真正独自做实验的时候,科研进展却并不顺利,实验成果没做出来,反而在一次试验中将自己的左手划伤,送到医院缝了好几针。实验室生活的异常艰辛渐渐地冷却了我做科研的热情,网上报道的各种关于科研的负面新闻也慢慢地淬灭了我对科研的兴趣。每天晚上回到宿舍之后不再仅仅只研究跟实验相关的东西。在2015年春节假期结束来到所里之后的某一天,我的脑海中突然闪现出一个念头——我要把自己的业余爱好编程发展为自己的职业!而在这个念头出现之后,我也立即开始了自己的行动!

转行之路

时间再次回到高考报志愿的前夕,那个时候我打电话给我堂哥,向他咨询关于报志愿选专业的事情,我问他现在对计算机一无所知能不能选计算机专业,可是他还没来得及回答电话就突然断线了,也没有再拨通,于是如前文所述我还是选择了自己高中时十分擅长的化学专业。
  到了大一之后,一些高中同学见面会谈论一些关于计算机二级考试的事情,这勾起了我的好奇心。我的一个高中同学考上了我同校的物理系,他们专业需要学习C语言,而我们专业跟计算机相关的课只有一门计算机基础,于是我缠着他让他给我演示一下编程,我很清楚地记得他当时给我用C语言写了一个“Hello World”的程序,然后在命令行中运行,那个黑色的框中输出了“Hello World”,我当时就觉得编程是一个很神奇的东西。等到他期末考完之后,我把他的那本教材《C语言程序设计》借了去,前前后后地翻了一段时间,但没有深入学习和实战训练。从此编程成为了我的业余爱好。
  大二寒假时,我终于自己攒钱买了人生中的第一台笔记本电脑,于是就是各种捣鼓那台电脑。后来在学校选了一门针对非计算机和软件专业的学生的选修课——C语言程序设计,做了几次简单的作业,有了一点点的实战训练。后来自己报了计算机二级C语言,也顺利地通过了考试。 偶然的一次机会,听同学说有个语言叫做汇编语言,于是我在大二的暑假专门花了两周的时间去看那本《汇编语言》,每天背着笔记本电脑到教室,一边看书,一边按照书上的指示敲指令,早出晚归,不到两周的时间我终于把那本350页的书给啃完了,而且完成了大部分的习题。现在蓦然回首,真是羡慕那时的自己,不为任何功利,全凭自己的兴趣居然能做到如此专注;也很感谢当年的自己,没有怠慢兴趣,为如今的转行奠定了不可或缺的基础。
  研一集中教学的时候,研究生的课程比较轻松,可自由支配的时间较多,闲不住的我于是又把自己曾经的兴趣给捡了起来,开始看斯坦福大学的公开课——《编程方法学》,这门课使用的语言是Java,主要面向初学者,培养学生的面向对象的编程思想,主讲老师的讲课风格幽默风趣,经常逗得学生们大笑,我听起来也觉得十分有趣。课程激起了我极大的兴趣,我经常调试程序到深夜,一个bug不解决的话都没法安心睡觉。课程中面向Karel机器人编程的例子也是十分有趣,封装地特别好,让人只关心机器人的运动,而不关心底层的实现,把编程思想体现到极致,当时觉得这没有什么,现在回头想想那门课的老师真是用心良苦啊!听完这门课之后,我自己也照着直到完成了课程作业——打砖块游戏。
  上面讲述的是我在真正准备转行做程序员之前的一些编程学习经历,由于当时只是出于业余爱好的缘由去学的,没有想过以后会以编程为职业,因此浅尝辄止,没有深入学习,以至于我在研二下学期初真正准备转行的时候连之前学的几门语言的语法都记不住,更别提那些语言的各种特性了。不过有了前面的一些基础,我知道编程需要去解决什么问题,对面向对象的编程思想也有一些了解,因此,之前的编程学习经历让我有了初步的基础,对我的转行之路起到了至关重要的作用。
  下面将时间轴重新拨到2015年3月。当要转行的念头在脑海中闪现之后,我知道这是一个很冒险的决定。如果真打算转行不读博的话,大概在七八月份就要开始找工作了,而当时已然是三月份了,还剩不到半年的时间去准备,而且我白天还要做实验,只能在晚上学习,因此时间非常有限。即便知道这个选择十分冒险,但我并没有太多的犹豫,因为我有本科的同学成功转行的珠玉在前,虽说他的空闲时间比我多,但我也有优势,我有一定的编程基础,而且我相信只要自己愿意学就一定会学好。给自己一些鼓励之后,我就开始付诸行动,电脑里有我之前收藏的各种编程方面的书籍,我从中选择了钱能的那本《C++程序设计》开始看起,从此开启了白天做实验晚上学习编程的模式。那个时候感觉每天跟打仗一样,真是在抓紧每一分每一秒的时间进行学习和coding。白天得待在实验室做实验,只有晚上才有时间来学习编程。每天从实验室一回到宿舍就迅速翻开书本进行阅读,不敢浪费一点点时间。学习的有效时间只有每天4小时不到,一般从晚上的八点半到十二点半。
  大概用了十来天的时间,那本《C++程序设计》被我啃得差不多了,于是很快陷入了迷茫,不知道接下来干什么。我打电话给本科那个已经成功转行的同学,希望能够得到一些有用的建议。他告诉我现在J2EE和Android开发比较火,也比较容易速成,可以选择其中一个方向,另外他还告诉我一定要把数据结构、计算机网络和数据库学好。在同学的建议下,我选择了学习Android开发。首先,我花了二十几天的时间把以前的Java基础给捡起来,我选择的教材是《Java编程思想》第四版中文版,在网上看到很多人评论那本书有些难,可我看那本书的时候貌似并没有觉得特别难,也许是当初并没有体会到其中深邃的思想吧。由于我的目标是Android,所以Java基础就这样草草走了一遍过场,而且也没什么实战,这样导致的后果就是后来写APP的时候连Java的语法都不熟悉,甚至很多语法和API都要现查。
  把Java基础过了一遍之后,我开始查阅关于Android的学习资料。一个偶然的机会,我发现了StormZhang的博客,他学习Android的历程是一个很励志的故事,在他的《Android学习之路》的博文中,推荐的新手入门书籍是郭霖大神的《Android第一行代码》,于是我就购买了这本书,一边看书一边按照书中的指示敲代码,很快就将这本书看得差不多了,也完成了书中的第一个APP——库欧天气。后来为了给自己加一些项目经验,就尝试着自己设计并完成了两个APP,其中一个是第三方的新浪微博,这个APP做得异常艰辛,算是自己第一次独立写APP。由于没有人指点,每遇到一个坎都要卡好半天,有时候碰到一些不理解的bug会卡很久都解决不了,最终只完成了一个界面简陋功能较少的第三方微博客户端。另外一个APP是源于我自身的灵感,当时正在参加校招,各种海投简历,很多公司的笔试和面试都记不住,于是打算设计并完成一款求职备忘录。当这款APP完成的时候我个人还算比较满意,只是当时还不会服务器端技术,只是做了本地的存储,功能也相对简单。
  除了学习Android之外,还重点学习了数据结构和算法,选择的教材是《大话数据结构》,那本书也是通俗易懂,比较适合初学者。对数组、链表、树、哈希表、图等基本数据结构有了一些认识之后,便开始在牛客网上刷题,刷各大互联网公司历年校招的笔试和面试题,还重点刷了一本算法面试题集——《剑指offer——名企面试官精讲典型编程题》。通过刷这些算法和编程题,我对一些常用的数据结构和算法有了更加深刻的理解,同时对Java的语法、语言特性、jdk集合框架等也有了进一步的认识。
  转眼间已经到了15年的7月份,各大互联网的校招都陆陆续续地开始了。为了准备校招,我打算暑假不回家,准备闷头在宿舍看书刷题,虽然只有两周,但我相信自己应该会有很大的提升。然而事与愿违,在不做实验的情况下整天学习的效率并没有想象中那么高,很容易使人感到疲惫,陷入效率低下的状态,最终还是在暑假期间回家休整了几天。接下来讲一讲我参加校招的历程。
  由于我已经下定决心要转行了,打算一条道走到底,因此当时完全没有准备去找化学方面的工作。我在各大互联网公司的校招官网上投了大量的简历,应聘Android工程师,还好互联网公司大都兼容并包,招聘技术岗位的时候并不在意我的专业,这一点让我感到很欣慰。很快,我便收到了各大公司在线笔试的邮件,由于准备得还算充分,大部分的笔试进行得很顺利,先后拿到了阿里、华为、去哪儿网、蘑菇街、360、百度等公司的面试通知。面试时,所有的面试官都无一例外问我为什么要从化学转到软件行业,我一般都会实话实说,主要原因是由于自己的兴趣浓厚,其次是因为软件工程师的收入相对较高。当我向他们讲述我的学习之路时,他们都对我的学习能力表达了很大程度的认可,给了我欣赏和鼓励。在此我想特别感谢以下几位前辈,虽然我与他们只有一面之缘,也不知道他们的名字,但是他们对我产生了深远的影响。首先是蘑菇街的一面面试官,他在了解了我的学习之路以及问了我一些技术方面的问题之后,问了一下我的家庭情况,我也如实答了。他问我有没有看过一篇文章——《我奋斗了18年才和你坐在一起喝咖啡》,然后他就结合我的情况批驳了文中的观点,最后告诉我,当你真正奋斗了18年之后你会不屑于跟他们坐在一起喝咖啡,以此来激励我继续保持学习!虽然最终并没有拿到offer,但是面试官的话让我印象深刻,给了我极大的鼓舞。最想感谢的是百度的面试官以及安排面试的那位小哥。百度所有的面试都集中一天,每一轮面试过了之后接下来立即安排下一轮面试,我在前两轮的面试中表现还算不错,面试官也给了比较高的评价,于是顺利通过了前两轮面试。第一次给我安排的三面面试官貌似有些排斥我,虽然我把算法题给做出来了,但是貌似也不太受待见。安排面试的小哥一直跟我说十分佩服我的学习精神,于是给我重新安排了一名三面面试官,他对我也是说了很多鼓励的话,最后让我通过了面试,虽然我知道他们也许是想鼓励我才让我通过面试的,但是那一刻真是觉得自己付出的所有努力都是值得的!面试完后回去刷了一遍电影《当幸福来敲门》,以此鼓励自己继续坚持下去。虽然最终没能进入百度,但是他们的鼓励与关怀一直烙印在我心中!我还要对360、去哪儿网、阿里的面试官表示感谢,感谢他们给我的鼓励和对我学习上提出的宝贵建议!
  到了15年十月末,知名互联网公司的校招基本已经结束,而我还一个offer没有拿到,于是打算继续学习一段时间以准备来年的春招。我开始搜一些关于Android开发的视频,不经意间发现了黑马程序员22期的Android视频,前22天讲的是J2EE的部分,主讲老师是朴乾,满口的东北话,讲起课来也是十分生动有趣,逗得学生们哄堂大笑;知识点讲得十分透彻,让人一听就停不下。大概花了半个多月的空余时间把这22天的课程看完了,并且完成了课程作业——一个简易的电子商城。这22天的课程主要讲了xml、tomcat、servlet、filter、listener、jsp、jdbc、mysql等技术,让我对Java有了更深一步的了解,同时发现自己对服务器端技术更加感兴趣。之前开发Android的时候大部分时间都用来写UI了,而我并不擅长于写UI。发现了自己的兴趣所在之后,以前面的J2EE知识为基础,我开始学习Struts2、Spring、Hibernate等框架,花了一段时间把同学送给我的那本《轻量级JavaEE企业应用实战》给看完了,这本厚厚的书对上面所述的三个框架进行了详细的介绍。终于,我开始对J2EE的主流框架有了初步的认识,正式踏上了J2EE的学习之路。
  十一月份,去了几个大型的招聘会,虽然没有一些很知名的互联网企业,但是有一些小公司在招聘Java工程师。有了前面J2EE的基础之后,我开始抱着试一试的态度去应聘Java工程师,在经过一次又一次的面试之后,终于拿到了一个公司的offer。于是打算过了年之后闲下来就准备去试着实习一下。次年三月份,毕业所需的SCI论文终于投出去了,开始准备写毕业论文了,这时不用再天天去实验室了,于是我就开始联系之前给offer的那家公司,想去实习,但是一直迟迟没得到回应。然后我就开始寻找新的机会了,经过面试之后终于拿到了一家离学校不远的公司的offer,过了几天,我就去实习了,正式开始了程序员生涯。
  还记得第一天去公司上班的时候,心情十分激动,终于有机会接触企业级的项目了,一只脚已经踏进了软件行业了。在同事的帮助下终于把开发环境搭好了,从SVN上把项目代码拉下来之后,一看傻了眼,项目结构完全看不懂,但是还是硬着头皮看代码,经过一番琢磨之后,发现公司项目用的Struts2+ Spring+ Hibernate+ freemarker,用maven作为构建工具,可我以前从来没用过freemarker和maven,于是下班之后就开始补充学习这方面的知识,同时晚上还要撰写硕士毕业论文。公司的项目都已经相对比较成熟了,大部分同事都在修复产品的bug。在把项目结构基本弄清之后,我开始试着修复一些简单的前端bug,也就是修改模板文件,在大概一个星期之后终于开始试着修复后端bug。当我开始成功修复一个后端bug之后,慢慢地发现基本上大部分的后端bug我都能够修复了,于是在公司就开始了每天修复bug的日子,基本上一天能修复大大小小的十几条bug,禅道里面的bug数也在很明显地减少,这时候开始有一些成就感了。办公室新来了两个计算机专业的大四本科生,一个是准备在这工作的,我给他讲述怎么定位bug、调试bug、解决bug,另外一位是准备在老板那儿读研究生的,我给他讲一些算法方面的原理。看到我对这些东西如此熟练,他们不曾料到我是一个才刚刚接触Java不到一年的化学专业的学生。在实习期间,我从慕课网上学习了微信后台开发技术,随后我自己在腾讯云上购买了一台云主机,开发了一个给我们实验室用的微信公众号后台程序部署在上面,有了这个微信公众号,同学们可以很方便地查询到实验室药品的位置及其它信息,大大地方便了实验室的同学们,此举得到了同学们和小导师的赞赏,真的是成就感满满。在实习的这一段时间,过得也是相当不轻松,一方面白天要上班,有时候还要请假回实验室处理SCI论文,终于在毕业答辩前一个月的时候论文被接收了;另一方面晚上还要全力地准备毕业论文,同时也要学习充电,补充工作中需要但是没学过的知识。不过不管多么难,最后还是走过来了!
  在2016年5月,我终于顺利地通过了毕业答辩,拿到了中科院的化学硕士学位,同时我也辞掉了实习,开始寻找正式的工作机会。在某互联网招聘平台上填写了简历之后,很快就有boss跟我联系,同一天接到了两个面试邀请。在两个面试中算法题都被我轻松地做出来了,因此也就很顺利地拿到了这两个公司的offer。与多个朋友和同学商议之后,选择了现在就职的这家公司。拿到offer之后,我放弃了暑假,拿到offer之后的几天就来到公司开始上班了。
  来到了公司之后,不再像之前那样被复杂的项目结构吓到,但是新的项目采用了微服务形式的分布式架构,刚开始理解起来还是比较困难的,幸运的是在构架师的悉心指导之下很快便上了手。在大概进公司之后的一个星期左右,便开始着手写新需求和新功能,此时并没有感觉到吃力。我进公司的时候刚好碰到架构师们以微服务的形式改造公司项目,算是除了架构师外第一个开始写微服务的。当我很快理解了微服务的架构和思想后,便开始给同事们普及微服务的知识。工作了一段时间之后,我的工作得到了老板们和leader的认可,老板对我说——“你让我完全改变了对学化学的人的看法”、“你完全不像一个非软件专业毕业的应届生”,听到这些我开心又欣慰,自己终于能够独当一面,真正成为一名软件工程师了。在接下来的工作中,逐渐学习并掌握了Spring-boot、Spring-MVC、Spring-jdbc、JPA、MongoDB、Redis、Zookeeper等以前没有用到甚至没听说过的技术,也逐渐成为了公司的开发骨干。在公司工作的这半年多的时间里,我从未停止学习,晚上下班回到家,仍然坚持看技术书籍,所以也在不断地进步。一个某985高校计算机专业毕业的且有一年工作经验的同事跳槽到我们公司,进来的时候让我带着做项目,只要他有问题,我基本上都能回答,帮他解决问题的同时我自己也有了更多的思考,同时觉得他亦是十分聪明,如今问我的问题已经越来越少了。今年公司开年会的时候,他借着酒劲跟我说,在公司最想感谢的人是我,因为我帮了他很多很多,当我听到这句话的时候,心中的成就感油然而生!
  写到这里,我的转行之路基本就已经讲述完了。

这两年的总结

简单地总结一下过去的两年,2015年,由于一个突然闪现在脑海中的念头,毅然决定转行,花了这一年中90%的空余时间来入门和学习Java技术,同时这一年由于各种焦虑和担心,一头浓密的头发逐渐变得稀疏。2016年,实习和工作的一年,巩固并加强了自己所学的知识,也正式踏上了编程之路。路漫漫其修远兮,吾将上下而求索!

新一年的展望

新的一年里,希望自己能够在技术上有所精进,能够不断地挑战自己。最近在学习大数据方面的技术,愿能学有所成。另外,希望自己能够回头去补充一些缺失的计算机基础知识,比如计算机组成原理、计算机网络、操作系统原理等,巩固好自己的基础,而不仅仅停留在应用层上。最后,就是要用心地去维护自己的博客,巩固和分享自己学到的知识,希望大家监督!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值