偶尔在各种场景下看到有人问或谈论进入IT行业怎么样?我该如何进入IT行业,我想要学编程,如何做?而这几年大家的注意力很大一部分都聚焦在互联网上,所以关于转行,转入互联网行业的讨论及案例也是一波接一波。
为什么要进入这个行业
我的专业是经济学,现在转行从事编程行业。从2012开始学习编程知识到现在从事编程工作也4年有余。我想我的经历对于很多想要进入编程这一行业的人来说也许会带来一些价值。这一过程中面临的问题及思考正是价值所在。
我为什么要学习编程?也许大多数人会抱着从事编程这一工作平均工资高于社会平均工资。我在从事IT行业之前做了一段时间客户经理,非常个人的来讲,我觉得这不能释放我的脑力,我想思考些更有挑战性的问题。同时编程作为互联网的技术基础,我对此充满了好奇,觉得在这个互联网社会,掌握编程技能,是进入现代世界的一把钥匙。
现实的讲,假如我当时有条件或机会成为基金经理,或者证券分析领域内真的佼佼者。我的决心可能会打折。但奈何毕业于三流大学,我看不到可能性,也基于上一段所讲个人对于编程的认知。
原因还有一点,在我打算学习编程时,我已26岁。我知道学习编程不是学个开车,学个做菜一样几个月搞定。这是需要耗费好几年的时光,并且在而立之年后我也意识到还有很多事情要去面对,当时再不做,以后就再没机会了。所以我就去了。
论进入行业的姿势
如何转行?怎么走出第一步?当然是首先是相关知识的积累。两个选择?要么是自学进入,要么是从培训机构出来。经常看到有人吐槽或者带有歧视性的说,培训机构出来的拉低了整个行业的素质。我想说:“英雄莫问出处”。
这里简单说一下进入培训机构的几种情况。1非计算机毕业,之前也没什么计算机基础。想借此积累知识,进入这个行业。现在很多培训机构也打着培训完与企业挂钩,保证就业的旗号。至于这到底是个什么现实状况?我也不知道,实际一点说,学习本身很个人化,只要想想上学的经历,看看不同层次学生的学习情况,就很容易估算出大概情况了。2 计算机专业毕业,可能感觉自己知识或者实战经验还欠缺(当然,还有种情况,计算机专业出来的,上学时也没怎么听,混个毕业证,为了工作去培训机构再造),需要巩固下基础。其实无论哪种情况,只要你能干活,能保证质量按时完成任务,不知有多少企业会向你敞开大门。
这段学习生涯的开启
我就是先在培训机构学习的,然后自己期间又受到一些干扰,最后对于自己的学习效果又不满意,同时自己对于自又是有要求的,不希望自己仅仅是处于浅尝辄止的层次。总是希望自己能将自己所看到的内容达到自己所理解的程度。
这里面真有基础不扎实,取巧的手段,运气好的话还有可能拿到一个不错的offer .首先,假如是Java工程师,面试时面来面去,问的技术问题也就是那几个范围,如程序语言基础,数据库,web前端的一些内容,现在使用的常用的开源框架…。当然这几方面的内容要深入挖掘的话,那也是能问倒大部分的从业人员的。不过一般对于初入这个行业的人来说,问的层次与范围,只要多加准备,网上的宝典也是一堆,是可以搞定的。然后,你表现的沟通与解决问题的思路都还可以。要是面试你的人技术也是一般,或者对于应聘者的技术要求不高,也就是该项目对于人的技术要求能力没有那么高。那也是很容易进入的。然后再你花了几个月熟悉了该成熟产品的套路时,基本上依靠复制可以完成平时的大部分工作。那就算你进去了。如果个人技术成长就此打住,我想之前提到的吐槽—培训机构出来的怎么水,怎么拉低行业水平。可能就是指这类型人。
继续来谈我的初始学习经历,没有达到自己满意的程度,我采取的措施就是消极找工作,或者干脆不去,闷着头,从头到尾将培训内容再过一遍。然后不断地意识到,我去!还有这么多内容不会。从那时开始我就常常伴随着很强的焦虑感。
痛苦的等待之等待
当时在培训机构结束之后,是可以直接在当时的城市拿到offer的。但我继续闷着头按照我的学习计划进行,然后又回到了深圳。这时我面临的情况就是,非计算机专业毕业,并且本身的专业与计算机没有关系,没有什么工作经验,目标是从事编程工作。我的想法是我简历上就实打实的写,然后开投。在面试中征服别人。实际情况是很少收到面试邀请,即便去了,即便题上的写的满满,面试时说看你没有工作经验就没有后续了。
就这样自己一边自学,偶尔参加面试。但真正收到算是面试邀请的没超过三个。我自己也知道学习时间不能拖太长,所以给自己也有个期限。等到期限到了,再想办法。
痛苦的等待之急了
时间很快到2012年国庆。我现在都清楚的知道那个国庆的晚上,我在练SQL语句。可以使用sql语句再加上自己的逻辑实现任意数据的提取,暗暗敬佩其强大。同时自己给自己提出一个稍微复杂,不常见的提取数据方式,竟然不会,又是自我抑郁。不过我也知道,对于初入这个行业的很多人来说,也是写不出来的。国庆结束了,我只能虚编一段时间的工作经历,然后开始面试。
这个时间点,才是我真正开始面试的开始。朋友去面试,我也去面试。海投简历。不知是那年整体经济问题,还是其他问题,朋友也说,今年这个时候收到的面试邀请少。在等待中我开始焦虑,我知道不工作的时间不能拖太久。
就这样到了2013年,过完年之后我心态已经不稳了。我已经怀疑我这样做是否正确,是否应该在原先的城市先工作,然后等有一些经验再来深圳找。怀疑我这种学习思路,是否可取。也是常处于抑郁之中。有种看不到未来的绝望。不过,自己也在提醒自己,如果再没起色,是否应该放弃,因为我已经尽力了。
很快年后3月份就有收到面试邀请,面完第一轮,直接面第二轮,印象中当时的项目经理说了这样一段话:“我知道你没什么工作经验,但是我看中的是你这种学习的劲头,我也不知道你这种劲头能持续多久”。这句话,真的是久旱逢甘霖,直接说到我的心坎里去了。我这一年的付出终于有人肯定了。稍后就与人事谈了薪资,让我后面等通知。
回去的路上,我的眼泪真的是控制不住。这句话真是太暖心了。有这句话,我心里也就很知足了。即使不能从事这一行业,我也知足了。
痛苦的等待之久旱逢甘霖
过了一些时间,没反应。我打电话问人事,人事说:“马上就要过清明节了,流程会后延一下”。我就感觉八九不离十。又是两天,一好朋友说是给我推荐一家企业,一天下午我正在玩魔兽争霸,冰封王座。那个推荐企业的项目经理一个电话打来,问了些问题。然后说第二天你来公司面试,面完试,项目经理直接说第二天就来吧。
这中间还有个小插曲。项目经理让我手写了单例模式,不知是我粗心还是紧张,将静态变量的修饰符static 放到了不该放的地方。然后问我,staitc可以放到实例方法前面吗?我表示诧异的说:“不可以啊,这是修饰静态变量的啊…”,然后他指了指桌上的稿纸,你看你写的。最后谈薪资,我看交谈的还不错,有意抬高了一下。他诧异一下说,你看你这么粗心的,要不是看你学习的欲望挺大,我是不会考虑你的。后来我就去了这家企业。
又是几天,之前那一家单位给我offer了。我心想当前还是积累经验优先,于是就彻底定下来了。
之所以要花大量篇幅写进入这一行业的过程,只想说,转行肯定是要经历痛苦或者挫败的。其中肯定会经历心态的起伏,需要的是时间及自身的积累。
对行业的认知
我将IT技术从业者进入的企业分为以下几类。一线企业如BAT,腾讯,百度,阿里,华为。这里有很多技术大牛,也有不少技术天才,技术在这些公司占有重要地位。二线就是知名的互联网公司及知名集团下的科技部门,比如网易,新浪,平安科技等等。技术也很重要,只不过相对于一线,权重较低。三线就是公司业务模式稳定,占有一定的市场份额,积累着稳定的客户群体,但是名气或者热度稍逊于二线,比如金蝶,用友,恒生。再往后排就是很多小公司了,技术团队小,技术主要对公司的业务起支撑作用。
我的第一家单位就是就是给华为做外包,我将其排在四五线。虽然是外包公司,我心里还是很感激第一家公司给了我进入这个行业的机会。并且在那一年,我确实学到了很多实战经验,这些是自己培训或者自学学不到的,包括开发流程,公司使用的技术,技术面向的业务,常见的需求问题等等。
对于外包与技术能力的看法
坊间都在流行这样一种观点,在外包学不到什么东西,技术上也没什么挑战。对于这类观点我是这样看的,总体上讲进入外包的实力不如我上面列举的一二线企业,当然如果有能力进入一二线企业,我想人们还是会选择后者的。不过外包企业也是有些人很厉害的,当初面试我的那位小哥就天天研究LINUX内核,还看的不亦乐乎。
不同的公司都有自己常用的技术栈,有追求的话,当然要打好基本功了。随便说上几个方面,都够研究一段时间了,而且要是没有实战经验,断断续续看,效果又很不理想。比如编程语言,数据结构,算法,计算机系统的一些基本概念,并发,多线程,现在常用的开源框架,每个开源框架现在的使用情况及特点,这两年,大数据又很火爆,数据分析师就很吃香。如果你再牛逼,对于算法的理解已经一定程度,又是一个不错的大学毕业,出来搞搞人工智能也是可以的。成为算法工程师,就是比较难做到的,而要想转行,从一个非计算机相关专业毕业成为一名算法工程师,我没看到相关案例。
我自己学的时候,自己也看过算法导论。仅仅是想其中某一个开始的问题,其中需要很多数学知识的积淀,花我一天都没想的很透彻,最后想到的头疼。然后我意识到,这方面的效率太低,自己当前还是应该以工作中需要掌握的内容为主,并以这方面进行拓展,而且一个人单枪匹马的学太艰难。所以以后对于算法的策略就是有时间看就看,碰到感兴趣的或需要面对的一些算法问题再进行研究。
搞技术的到哪里去
客观的说,如果你是位对技术有追求的人,或者我也可以这样说,你搞技术再对技术没有追求,仅仅每天做些没有挑战性的复制黏贴,配模板的工作。轻松是轻松,甚至有些无聊,缺乏挑战性。那你进入这个行业也干不了几年的,无论是几年之后的年岁渐长,自己还不如小鲜肉,还是自己对于技术生涯的无望都会时刻敲打你心。当然,有些人本身对技术没什么追求,暂时的一个阶段而已,我之前一个同事经常告诉我们,过两年我就开个店铺,卖过桥米线。听到最多的话是,过两年,我就找个生意做做。对于搞技术的未来的分析,我在csdn上看过一篇文章,是李智勇老师<<程序员生存定律>>,只要你舍得花上几天时间看看,你就对这个群体的现状即每个个体的未来就有个大致的判断了。
焦虑与问题
进入IT行业,时常会听到这样一种声音,年纪大了,就干不动了。这一行,太费脑子了。而且经常网上看到有各种调侃码农的图片,把码农描述为不修边幅,不善沟通的书呆子。
标签化认识是很简单,省力的认知事物的一种方式。这是不少媒体或者开玩笑者经常使用的一种标签,王小波,刘慈欣,南派三叔之前都从事过程序员的工作,用职业来认知这个职业中每一个个体,我觉得太过绝对。
说天天加班,劳累容易过劳死,这里面有多少人注意锻炼,晚上经常熬夜?我在腾讯听过一场讲座,楼上的演讲者那胸肌与腹肌隐约可见。说太费脑子了,我一直不理解,何为费脑子?是脑子跟机器一样,用一年折旧一年,最好是不用,让其常年如新。那你打游戏,撩帅哥,撩妹子怎么不说费脑子呢?不过事实上讲,有些问题的解决确实是山路十八弯,千肠百转,是要耗费大量心力的。只不过懂得休息与适宜的运动是可以很快恢复过来的。真不知道,这个群体中的一些人以逻辑严密自居,自己却经常说些经不起推敲的话。其实我也一样。哈哈。
后发问题。比如刚进入这个行业时,同样的年纪,有些人已经有了3年工作经验,混得好的话是项目经理。而自己还是刚开始,这种落差让自己花了很长时间才从心底慢慢面对与承认并且适应。我想对于任何一个转行之人来说,这种落差与如何超越都是自己迫切想解决的一个问题。
我现在的技术水平虽然已有三年多的工作经验,但是依然有着很多重要的基础知识欠缺的地方。我想这也是很多人面临的一个问题,不过对于平时的工作而言,肯定是能应付的。其实这里面涉及到一个权衡的问题,针对每个人的现实情况,一味的追求技术我觉得并不可取,也不实际,技术首先是为现实,为业务,为市场服务的。而且,只要你的相应知识积累的一定程度,学习及运用这两个阶段是可以做到同步进行的。
收获与不可确定性
编程工作给我带了什么认识?单纯剥离平时的编码工作,我是真真切切的体会到做事的不易,看似简单的事情下面隐藏着是你不是一时半会就能看懂的逻辑。简单的一个页面,里面的一整套操作是那么几个帅哥,耗费几周的时间从设计,到实现,再到优化,再到碰到新的情况,再优化。这一过程,才是真正做事的节奏。做着做着意想不到的情况发生了,然后针对这,再做考虑。又要考虑合理性,又要考虑性能,又要考虑用户体验。
上述的情况其实与这个世界上真正做事的节奏是差不多的,创业者,面对市场,观察市场的变化,更新自己的策略。作家,写作从构思到完成作品,也不是从一开始就一切想的明明白白,真真切切。反过来,如果你的工作,放眼过去所有问题都一览无遗,那自身对于市场的价值也是不会高的。
另外一点,编程中认知事物,解决问题的思路是可以迁移到其他方面的。不少人说,不干技术以后,不知道能干什么了?很多有价值的工作或者事情都是发现问题,解决问题的能力,为什么就不能试着迁移过去的。如果技术转销售,很多人的瓶颈是不善于沟通,可是有些销售,你能说会吹我看也不是决定因素,买方看重的产品是否符合自己的需求,性价比是否合理,能言善辩可以锦上添花,但是你把基本问题说清楚你也可以做的不错啊。当然,涉及到销售或者公关,很多人都会联想到暗黑法则,这也许是另外一套法则。
不确定性与未来。除过之前所论述的技术水平,个人发展方向与进度也是一个不断自问的问题。现在的解决方案则是技术当然要继续积累,但却不可一味偏向于技术,强壮的身体,文字表达能力的精进(这就是我为什么要至少每周写一篇文章),对于个人其他兴趣的不可偏废都是自身应对未来不确定性,保证个人良好发展的组成模块。
设计能力
很多基础的的技术知识,都是对某种问题设计的一种解决思路。比如java中实现动态页面,就是在jsp页面中使用servlet动态生成html页面。而更高一层级的设计如现在常用的spring框架,则是对如何提供一些常用的基础功能进行封装,以便程序员开发系统时可以更加专注的思考业务方面的逻辑。说到底就是一种设计思路。我最近也是一直思考设计思路,本质上这就是解决问题的一套算法。以这种设计思路去看现实生活或者其他工种,你会惊奇的发现都是对于某种问题提供的一种思路设计。
这就是我几年的一些从业经验与心得,希望对需要的人能产生些价值。很多点其实是可以展开继续拓展的,需要的话可以继续。