第一部分,“先有商业项目经验还是先有实践机会”的两难状况。
最近我在帮助一个做Java初级开发的朋友找工作,这个人工作3年,平时做的是Spring MVC Mytatis,而他想要去的公司在职位描述上黑纸白字地写清楚:需要招Java高级开发,而且需要有Redis和Hadoop等相关经验。
我的朋友吐槽说道:为了提升能力,他才要换工作去做高级开发应该做的事情,但目标公司一般是需要(Redis和Hadoop等)这些比较高级技术的商业项目经验。实际上,在没有这些实际项目经验的前提下比较难通过面试,而他可能在平时学习这些技术,但在实际工作中没有机会实践这些技术,这就会导致一个比较尴尬的循环怪圈。
我想大家在跳槽的过程中,也应该会遇到类似的尴尬情况,下面我再举些我见过的类似情况。
情况一,某同学非计算机系毕业,比如是农业或生物,在工作1年后,想要做软件开发的工作。
情况二,某同学做了2年左右硬维或测试或实施(但就不是软件开发),现在想做开发的工作。
情况三,如刚才所说,某同学做了3年Java初级开发的工作,干的活和Java高级开发的技能不大沾边,也就是说缺乏相关实际操作经验,目前想跳槽做高级开发。
情况四,某人也做了6年左右Java,目前已经达到了高级开发的水准,目前想做架构。我们知道,架构师的活一般和集群,中间件等有关,比如要通过一些组件搭建一个高并发的系统集群 ,从而能应付类似双十一的情况。我们也知道,在做高级开发时,一般接触不到架构师所需要的技能。
在上述情况里,大家同样能看到“要工作机会没商业项目经验”和“当前工作无法提供所需商业项目经验”的两难境地。
第二部分,招聘时候为什么需要商业项目经验
先来看下哪些项目不叫商业项目。
1 如果你在平时学习过程中,搭建了一个系统,比如你从网上搞到一个Spring MVC的电商系统,从中也学到不少知识,但这个项目叫学习项目。
2 你在做毕业设计时,导师模拟了一个电商场景,也提了些需求,你自己也实现了这个系统,先恭喜你通过了毕业设计,但这也叫学习项目。
3 你报了个培训班,在其中以课程设计或实训等名义实践了一个系统,从中你也学到了很多知识,同样先恭喜你,但抱歉,这也是叫学习项目。
给出一个定义,商业项目是用来挣钱的,也就是说有客户为这个项目买单。因为客户出钱,所以要求高,比如需要处理所有异常情况,也需要考虑上线后的诸如OOM等的问题。所以大家在公司里做的项目属于商业项目,或者你平时和一些朋友自己接私活,这也算商业项目。
和学习项目(或非商业项目)相比,商业项目更能锻炼人,而公司总希望招进来的人能立即干活(或经过最长1个月的磨合期后能干活),毕竟公司不是学校,具体到刚才描述的场景,招聘所需要的相关技术的经验年限(比如Spring MVC或数据库优化)是以商业项目年限为准。
我自己一方面是公司里的面试官,另一方面也做过兼职培训,所以自认为如下的描述还算客观:
我无意评价培训学校里的实训项目,但有两个候选人具有相同的工作年限,其它条件也差不多,但一位是商业项目,一位具备学习项目, 我(包括其它大多数候选人)一定会录用具有商业项目的候选人。
基于同样的道理,在确认候选人的相关项目技能年限时,我一般会排除掉学习项目的年限。事实上,在排除后,很多人真就没相关商业项目经验了。
也就是说,你尽量别让面试官感觉到你只有学习项目的经验,可能不少培训机构会用很多例子来反驳我这个观点。我这话同样无意冒犯培训学校,而是善意的:你可以尽量在学习项目的经验的基础上外加些实际商业项目经验,这样你通过面试的可能性就更大了,或许能要到的工资也就更高了。
第三部分,作为面试官,我如何甄别非商业项目经验
可能我更了解培训学校,而且我也面了估计150 了,所以在我手里,很难用学习项目来冒充商业项目。
方法1:我会定期去看各大培训学校的招生广告,上面一般会有些实训项目的描述,比如xx学校会用个电商系统来实训,在广告上一般会提到用什么技术和大致的需求。我真就见过不少学员一字不动地在简历中照搬描述。
方法2:商业项目里一般会包含项目名,客户是谁,时间范围,多少人做,在什么公司里做等要素,而且用到的技术是比较合理的。相反,学习项目一般会露出破绽,比如就写个XX图书馆管理系统,或者是XX人事系统,也没写时间范围和人数等,或者用的技术太全面(正常项目里为了节省成本一定不会用到一些高级但没实际价值的技术),或写的时间范围和项目人数不符合常理(比如明明要8个人做的却只写了3个人,明明得用半年工期却只写了2个月)。总之,在不少人的简历中,我见过不少不打草稿的吹牛项目。
方法3:在简历中,这个项目的时间范围正好和在培训学校里的时间相重合。
方法4:这可能很多审核简历的人都有经验,往往在一个时间段里(一批学生从培训学校里毕业了),很多人的项目描述很类似,或基本雷同,这就不是巧合了,而是学习项目。
如果你的简历中不幸出现了上述情况,而且没有足够多的商业项目经验,那么你的简历也许根本无法通过筛选,也就是说,你无法得到面试机会。
可能有些人“技巧”更好些,确实能把学习项目写成商业项目,和上述情况相比,至少这些人能有面试机会,但在面试中,我会问些在这类项目里无法回避的问题点,只要你做过,你一定能知道,用这个方法我也排除掉不少学习项目。
我也见过有人“技巧更好”,不仅能编造商业项目,而且还能通过面试(不是在我手里),那么我就不知道该推崇还是反对这种做法了。
说推崇吧,这毕竟是弄虚作假,说反对吧,毕竟人家也做足了准备,而且人家也是努力上进。况且面试官都没看出,也不用我操什么闲心。
第四部分,如何在缺乏商业项目经验的前提下成功通过面试
这是这篇博文的关键。
第一,你得在实事求是的基础上合理修改你的简历,让目标公司感觉你之前(至少之前半年)的工作经历和这个职位很匹配。这种修改并没有违背基本的事实,而是在简历中合理地偏重于某方面,如下给出些能被普遍接受的案例。
比如某项目的一些模块是用C#做的,而一些和客户交互的功能用到了Spring MVC,小张主要做的是C#模块,在简历上他也以此描述为主,但他也做过点Spring MVC,那么遇到上述情况,他就可以在简历中写上Spring MVC的经验。
又如,有些公司规模比较小,所以一个人可能要做多方面事情,比如小王是以“测试”人员的身份进入的项目组,但后来项目进度比较紧,小王也被要求去开发Spring MVC了,这种情况我们也见了不少,这样当小王想往Java方向转时,也可以在简历上加上这段经历。
除此之外,我们还见过这样的简历:候选人正式工作是做C#,但他在业余时间跟着他们的项目经理用Spring MVC干私活,这样他好歹在简历上也能写上Spring MVC等相关方面的经验。
第二,合理地把培训项目和毕业设计项目转换成商业项目。
比如小张在大三时帮计算机系的王老师所在的ABC软件公司干了半年的活,如果小张在简历上写:“在校期间,从x年x月到x年x月完成了xx系统,用到了xx技术”,那么这多半会被当成类似于课程设计的学习经验,但如果再加上如下关键性的描述:“这个系统是属于xx公司的xx商业项目里的一部分,我和另外三位开发人员做了半年,最终这个系统成功上线并在客户xx公司的环境里投入运营”,那这样小张的商业项目总年限里就能加上这半年时间了。
又如小李在做毕业设计时,花了7个月的时间参与了导师的一个电商商业项目,他主要的工作是设计一个调度算法,但也参与了一些诸如订单管理模块的工作。如果他就平淡地写一句,毕业设计是xx,毕业论文是xx,那么招聘方看过就算了,也不会认为小李在做毕业设计时还有过商业项目经验,这样小李未免有些吃亏。
但如果这样写:“在x年x月到x年x月的7个月里,在毕业设计中,我参与了xx公司的xx电商项目,客户方是x,我参与了订单管理和xx模块,并设计了其中的调度算法,在我的毕业论文里,详细介绍了这种做法”。文字没修改太多,但足以让小李增加7个月的商业项目经验。
第三,在招聘过程中,我们经常会看到有些候选人参加了培训学校,在里面也做了一些实训项目。如果这些项目是用来让学生练手的,而没有产生商业价值,那么虽然这些项目可能来自真实项目,名字也叫xx实训项目,但非常可惜,我们没法把它当成商业项目。
不过我们看到过一份印象比较深刻的简历,某候选人小丁在某三个月的时间内,一边参加培训,一边还在朋友的公司里兼职做着xx信息管理系统的项目。那么如果小丁能很好地在简历中很好地说明这个情况,而且还能在面试中很好地回答相应的问题,那么我们不得不相信小丁在这个三个月里确实做的是商业项目。
通过上述的合理修改简历,至少你能得到面试的机会,这就是一个大的进步了。这也是本文能帮到你的地方。
但接下来更关键:你需要在得到的面试机会里,成功地向面试官证明你的能力。
抱歉,在本文短短的篇幅里,我无法把这讲得十全十美,在我写的java web轻量级开发面试教程里,至少能在Web方面帮助到大家。(事实上已经有成功的案例了)。
尽管如此,本文给出如下的建议。就以Java初级开发升级到高级开发为例子,大家可以在面试前做如下的功课(前提是你简历得先过关)。
1 先收集10个不同公司对高级开发职位的要求,然后具体地根据关键字到网上搜,比如很多公司都要求会Spring MVC,那么你就可以搜这方面的面试题。
2 在每次投简历前,根据目标公司的职位要求微调你的简历,然后根据具体的要求,找你项目里的契合点,比如某公司要求有数据库优化的经验,那么你就找之前项目里你做过的类似事情,把这个事情写到简历中,而且准备好说辞,这个点在面试中有可能会被问到。
3 根据高级开发职位的普遍要求点,比如Spring MVC等,你可以到网上先找个比较全面的案例,不求自己开发,先运行通过,对其中的关键步骤和关键配置要有了解,这样你就能在面试里说出一些“海底针”的技能(即只有做过才知道的技能),同样,在java web轻量级开发面试教程里,给出了不少类似的说明。
4 光说不练假把式,最好的方法可能就是实践了。具体而言,你一定得多投简历,如果简历大多石沉大海你就得修改简历,然后多参加面试。可能在刚开始的面试里,你会什么都不知道,但面着面着,你就会成精。只要你不是遇到像我这样的老狐狸,可能你就会成功跳槽了。