我最近几年一直在做技术面试官,除了面试有一定工作经验的社会人员外,有时还会面试在校实习生和刚毕业的大学生。同时,我也在学校里做过兼职讲师,上些政府补贴课程(这些课程有补贴,学生不用出钱),所以我会在不同的场合承担两种截然相反的职责。
幸好我的公司不会从我讲课的学校里招生,而且我讲课和面试的时间段是错开的,所以我可以免处于“自相矛盾”的尴尬境地。不过我面试官经历倒能让我不断思考,该如何更高效地提升毕业生的水平。在本文里,一方面将讲述我在面试过程中衡量计算机相关专业毕业生的标准和方式,另一方面将从培训老师的角度,向在校生和毕业生朋友提些提升自己竞争力的建议。
1 名校光环很重要,在校成绩更重要
除了一些在校生或毕业生有项目经验外,大多数同学可能最多也就有课程设计和毕业设计的经验,也就是说,实际开发编程能力大家基本差不多,那么总得用些看的着的标准来衡量。
第一,是否是名校,能进名校至少说明能力不差,而且名校里的老师能力普遍好些,学习氛围或许浓厚些。不敢说非名校出身的一定不行,但可以说,在名校里找到合适候选人所费的代价能少些。
第二,除了名校外,再看成绩,如果某同学四年一直在拿奖学金,或者成绩很好,这至少能说明态度好,积极上进,相反如果某同学连学位证毕业证都拿不到,那么何以证明自己?如果再有某些能证明自己的加成因素,比如竞赛拿奖,那么这也是加分项。
不可否认,其实各大公司在招实习生时,更倾向于在名校找,而招毕业生时,名校因素也能起比较大的作用,毕竟人家高考时占得先机,有因必有果。不过非名校的同学并不是一点机会也没。
比如在招毕业生时,某位同学可能是二本,但他一方面成绩好,另一方面有碾压别人的商业项目经验,那么公司更会看实际的动手能力。不过我也见到不少学习一般的同学,平时更在自暴自弃,比如无休止地玩游戏,这些同学总会为自己的放纵而付出代价。
2 论大学课程对提升竞争力的帮助
这里来分析些大学里学到的课程。
第一是公共课,比如数学英语等。除非进特别好的公司,可能更在考研的时候需要数学技能,而机器学习或数据分析场景里,确实会用到一些数学知识,但未必很深。英语能力就很重要,毕竟英语好就多了一个外企的选项,而且最好锻炼自己的口语能力,至少能用英语自我介绍或做简单对话。工作后英语能力可能不会用到,但用到时再操练,就晚了。
第二是计算机理论课,比如数据结构,网络通讯,操作系统,编译原理等。其中尤其得重视数据结构,而且最好用某种语言实现下,比如用java实现列表,堆栈和各种排序算法等,这在面试时会直接考。其它课程,能让我们了解有这回事,比如编译原理能让我们了解状态机,系统学下总有好处。
第三是编程类课,比如java,python编程等,或数据库编程,这些很重要,因为直接能提升调试代码的能力。学这些课时,一定得敲代码,否则你就连最基本的编程能力也没有了。
最为面试官,如果有条件,一般会要求提供成绩单,如果没条件,那么就考察编程能力,比如让用java实现个小算法,或者问些数据结构等基础知识。当我作为培训老师时,一定会要求学生自己敲代码,自己尝试排查问题,同时灌输数据结构的知识点。
3 如果只有理论经验,估计悬
在面试大学生时,我见过不少候选人理论方面说得天花乱坠,比如jsp或servlet的概念,或者网络通讯的流程,但没有任何商业项目的经验,同时甚至不会写代码,这类人,哪怕学校再好,不会要。
我在博客园等论坛上,看到不少朋友只是做理论知识的搬运工,不能停留在这个阶段。接下来,第一该调试代码,第二该找机会实践,第三更得从实践框架方面的尽管,比如SSM,或者Spring Cloud。怎么提升自己的实践能力?
第一,在自己的电脑上搭建各种开发环境,比如jdk,mysql数据库,eclipse,甚至linux虚拟机,怎么搭建?看资料。其实这就是在提升动手和学习能力。
第二,比如java,python,c#,数据库等方面,每方面买些本书,就照着书上敲代码运行。有问题自己尝试解决,或者问别人,刚开始可能步步踩坑,但这就能提升调试代码的实际能力。在实践这个步骤时,可能会遇到装环境的问题,也可能几天无法解决一个问题然后很上火,但一定要咬牙坚持,每人都得经历这个过程,现在不经历就得毕业后受苦。
第三,赶紧找份实习机会,比如找有项目的老师,或者干脆自己出去找软件公司实习,刚开始不要钱都行,如果要上课,就和人家说晚上或周末去,或者寒暑假时去。在真刀真枪里干个3个月,比自己摸索效率快多了。
我在做培训老师的时候,会逼着同学动手练习,刚开始真叫惨不忍睹,连个分号都会有问题,但最多实践个2小时,至少能复制粘贴代码,再坚持练习3到5次课,还能自己通过debug分析问题。至于实际项目经验,培训班里无法获取,但我会建议同学自己赶紧找实践机会。
4 商业项目经验优于学习项目经验,算法能力只是锦上添花
在我之前的博文里,反复在说这个观点,这里再重复下,能实际挣钱的叫商业项目。在商业项目里,调试代码单元测试之类的就不说了,写sql或者编程的技巧就更不说了。此外,大家更得关注在商业项目里通过日志排查问题的能力,以及如何把开发好的代码部署到服务器上的能力。
这里举个实实在在的例子,我见过一批非常上心的毕业生,可惜学校一般,但简历上有至少3个月的商业项目经验,比如大四3月后一直在做,有些大三下学期就在做,而且问下来都行,绝非是培训班给出了蒙人项目。这些人属于能直接干活,而且上进心态度也不错,他们绝对属于抢手货,被几个组抢着要。
我在辅导别人面试时,也见过不少同学之前只背面试题和算法题,这不是不重要,但商业项目经验更重要。而且,面试题和算法题可以通过刷题得到答案,你会别人也会,就体现不出你的优势了。相反实践经验未必每人都有,我就不理解为什么放着能碾压别人的途径不走。那么怎么找实践机会呢?说点具体的方法。
你到学院里打听下,有些老师是有项目的,尤其是带硕士和博士的老师。如果有给你上过课的老师那最好,如果没,你可以自己去找,或者通过老师同学去找,就说想跟着干,刚开始先看。一般老师看到有廉价劳力来,不会拒绝。刚开始的时候,你可以多请教学长,比如如何搭建环境,到后来可以争取个小功能点,然后慢慢就做大了。而且,如果可以,寒暑假也可以跟着老师干,这样最多,陆续能积累个1年项目经验。
其实这已经算商业项目经验了,你写到简历中绝对够算。毕竟自己老师还好些,如果要到外面找实际机会,就到处发简历,同时也说明刚开始可以少要钱。刚开始甚至会因为能力不行被公司拒,但坚持下来,也能获得实际项目经验。
5 框架性的能力优于零散的编程能力
在面试过程中,我见过不少毕业生单论知识点还行,但无法缺乏框架性的能力。比如单问java核心方面问题,或者web方面问题,或者数据库方面的,都行,但普遍缺乏框架编程能力。所要求的框架能力也不高,比如只要能在已经搭建好的SSM框架基础上,照现有代码实现新需求。框架能力如何提升?
第一搭建环境,这个是最难的,比如在idea上搭建个基于maven的ssm脚手架项目,这不简单,或者搭建个spring cloud实现简单功能的环境也不容易。我在培训班上辅导时,很多同学就卡在这块。但网上对应的资料也不少,多用点时间总能做到。
第二就找个项目运行,项目未必要业务点很多,能全栈就行,比如包括前端页面,后端的spring mvc,mybatis,能串起来跑就行。
还是这句话,如果有实践机会,这都不是问题,但我见过不少有实际项目经验的同学,可能也只是专注其中一块,比如SSM框架里的service层,只在其中写业务代码,而不关注全栈,这就属于关注点不对了。
6 再啰嗦一下,毕业生要不要上培训班
培训班能给毕业生带来哪些帮助?
第一,提升项目实践方面的技能。第二,好歹能提升学习项目。第三,面试辅导,第四,推荐工作。
而企业如何衡量毕业生?实际项目经验,动手能力外加专业基础。一些小公司可能没资本要求名校。
对于在校生,你在大学阶段能获取到项目经验吗?能通过各种方式提升专业技能吗?可以,在上文里给出了若干方法。
所以,如果你尚处大一大二大三,尚有机会自强,那么先努力一下。但你已经快毕业,但由于种种原因竞争力不强,同时是跨城市找工作,那么你可以自己考虑,不过还是这句话,在上培训班前,首先得上自己积极上进,而且培训班不是万能的,不能把所有的希望都寄托在这上面。
7 总结:赶早不赶晚,不过在任何时候努力都不算晚
总结下本文给出的观点:第一,商业项目最值钱,而且通过商业项目能快速提升自己的技能。第二,除了上课外,尽量让自己有多些实际项目经验。第三,框架经验优于零散技术经验。
所以努力不嫌早,在大二阶段就可以为自己规划了。不过努力也不嫌晚,那么就算到了毕业的时候,因各种原因导致竞争力低下,这时候发奋图强,经过一段艰苦时间也能慢慢变好。但就怕自暴自弃或甘于堕落,比如上学时无节制地玩,工作后宁可荒废也不看技术,这种就属于咎由自取了。
如果大家感觉本文有帮助,请推荐本文,也欢迎大家通过评论来交流。
版权说明:
有不少网友转载和想要转载我的博文,本人感到十分荣幸,这也是本人不断写博文的动力。关于本文的版权有如下统一的说明,抱歉就不逐一回复了。
1 本文可转载,无需告知,转载时请用链接的方式,给出原文出处,别简单地通过文本方式给出,同时写明原作者是hsm_computer。
2 在转载时,请原文转载 ,谢绝洗稿。否则本人保留追究法律责任的权利。