写在开头的话:找工作的目标和方向
一位亲戚家的年轻人马上要从大学毕业了,学软件工程,参加过培训的普通新手程序员,不是TOP学校也不是高学历,于是找我这十几年的老程序员给点建议。
说来惭愧,自己当年也不过是对计算机的兴趣加上热血和自信,稀里糊涂就跳上了程序员的车,干了十几年还是个程序员,还真没怎么仔细考虑这车究竟是怎么开的。这要是没毕业就一堆大公司排队等着签协议的高手,咱也不敢给啥建议不是。也曾经三言两语地给过其他一些新人建议,也有同学借鉴了建议通过改进找到了工作。所以这一次准备借这个机会把这事总结一下,拿出分析程序逻辑的劲头,仔细讲一讲我的建议。
职业的人生从程序员开始,找工作是第一步。新手程序员,刚从学校毕业或者刚培训出来,没有什么实际工作经验,然后很多岗位又需要经验,这是新手最大的挑战。
职业的人生从程序员开始,找工作是第一步。新手程序员,刚从学校毕业或者刚培训出来,没有什么实际工作经验,然后很多岗位又需要经验,这是新手最大的挑战。
所以,新手找工作的目标,就是积累实际工作经验。说白了,就是看看实际工作中怎么写代码,怎么面对需求,怎么分析业务,怎么做项目,怎么开发工程,怎么与同事协作,怎么处理线上问题,等等很多类似的,怎么应对工作的方方面面。即使是经历了培训机构的培训,所谓的真实项目、实战培训,归根结底那也是培训,和实际的工作情况其实远远不一样。
但是,单纯为了积累工作经验去找工作也是不够的,找工作也要有方向。有人在这时候去大谈职业规划,我觉得对于萌新来说,就是揠苗助长。这第一个工作,是从学校进入社会的第一步,往往还处于懵懂的状态,这时候连对职场的体会都没有呢,谈职业规划真的有点空中楼阁的味道。
作为一个程序员,思考的方式很重要。第一份工作只是一个入门,但会影响一个人思考的基础方式,个人以为最应该在乎的是开发是否正规,所以找工作的方向,是去更规范更前沿更有竞争力的互联网或者软件公司。这些公司往往正在经历或经过了市场的残酷考验,形成了比较完整正规的协同开发能力,不会像手工作坊那样稀里糊涂地做事。
接下来具体讲讲,萌新程序员找工作的三板斧。
第一板斧:简历
简历这东西,是突破企业招聘的第一个敲门砖,其他的面试啊答题啊编程能力啊都在后面呢,所以对简历这一项必须重视。
很多公司在招人的时候,HR或者猎头要先筛一轮简历,然后技术人员才筛,然后通过了才通知去面试。甚至更大的公司很可能筛简历的轮次就多一两轮,找工作首先要通过这几轮简历筛选。
总的来说,简历这第一板斧的基本原则是:点到不点破。
第一是要点到。总结自己的特点,自己的优势,就是能引起看简历的人兴趣的那些亮点。对于萌新程序员来说,本来项目经验不够丰富,亮点不够明显,所以这份简历不能太笼统,要写出自己最擅长的,最好确确实实相对于其他人是优势。
技术方面,不能概括起来一句“擅长Java开发,熟练使用IDEA、Eclipse”就完事了,总是有自己学得比较深入的技术点,举个例子,比如Spring Boot项目搭建、Spring MVC应用、数据库事务配置、SQL索引处理,这种技术点最好能写上几个,既丰富内容,也证明自己确实学习过。
工作方面,首先是工作任务描述要具体,不能是类似“多个功能接口与页面的编辑”这种千篇一律的话,尽可能写出具体成果和业绩来,其次既然是做技术,很大程度上工作经历也是为了考察技术点,所以工作中采用了什么技术,应用了什么框架,有哪些技术逻辑,尤其是能够显示自己特点的证明,每一个点要尽可能点到,让这些点去佐证你相对于其他人的优势。
有人说如果不写这些,等面试的时候再具体说不一样吗?还真不一样,因为面试官拿到这样一份没有具体点的简历,他不知道你的侧重是啥,亮点是啥,优势在哪里,那为啥要让你来面试呢?要知道面试官面试一个人,成本其实很高的。
第二是不点破,毕竟是简历而已,不用针对具体的技术点说详细的原理,也不用细致地讲过程。刚才说的那些技术点和工作业绩,写在简历上是为了证明你的优点,也是为了引起面试官的兴趣,让面试官产生进一步了解你的想法,就能通过筛选进入面试环节了。不过既然写了,那就必须准备好面试时候被提问。凡是点到的点,都要准备应付面试被考察,技术点要尽可能深入一些原理,工作经历要有完整的作事逻辑,这个之后再细说。
还有,简历不要有错别字。不要小看这件小事,因为认真,是优秀工程师的第一要求。我曾经上各个官网去核对每一个技术名词的写法包括大小写,MySQL,MyBatis,RabbitMQ,等等。
第二板斧:做题
因为应届毕业生储备的知识和经验一般不会有多丰富,所以考察基础能力和发展潜力是侧重点。
之前我做Team Leader的时候,也在负责招聘各级工程师,也曾多次作为面试官参与应届毕业生的统一招聘。个人以为,对于一个萌新工程师的最基本要求就是,能通过一些思考,写出逻辑清晰完整、开发习惯良好的代码。其他的各种技术点,知识点,项目经历,都是加分项。当然,面试都是择优录用,所以首先一定要给面试官展现出你能达到最基本要求,而且最好能展现你的知识和你的努力,获取一些其他的加分项。
在应届毕业生招聘过程中,无论是企业要求,还是我个人意见,一般都要出一到两个笔试的算法题,这个算法题的作用就是考察一个人的思考能力,看逻辑是否清晰完整,考虑事情是否周全,能不能把业务落实到代码上。用我的话讲就是,能够用代码来展示清晰完整的逻辑,是程序员的基本功。
因为很可能是纸上手写答题,所以不一定非要写得非常完整非常精确,但一定要通过这道题的回答,体现出你尽量清晰的逻辑,尽量完整的思路。最好要对基本的数据结构和算法有一些了解,比如基本的链表操作,基本的排序算法,这些很可能对解题有着重要的帮助。如果是计算机以及软件类专业的,更应该熟悉这些数据结构和算法,因为这都是大学的课程学过的。如果说一个计算机专业的毕业生,连链表是什么东西都一脸懵逼,面试官会满意吗?
所以,如果面试之前没有积累过,那还是要针对性地找一些题目去练习,当然难度我觉得不用太高,一般难度的就可以了,毕竟一般的企业招聘也不是在招天才是不。练习的目的也不是记住这些题的答案,甚至是解题技巧,而是通过这些题去锻炼一下自己的思考能力和积累一些解题的思路方法。真到了面试答题的时候,有类似的题当然好,即使没有,也能展示出自己积累的分析能力和解题能力。
第三板斧:面试准备
针对某一项语言种类的招聘,比如Java工程师,肯定要问Java的一些基础知识,比如LinkedList和ArrayList,我做面试官时,一般不会太深入,底层原理之类的一般不会问应届生,因为这是知识性质的,学校可能没有专门学过。但是有的面试性质可能不一样,因为有可能企业要招的是一个比较懂Java的人,所以面试官会问比如一些涉及Java的内部原理的东西。
准备岗位所需的基础知识,也是一个重要的点。因为没有更多的项目能力和更高级的架构能力去考察,所以面对应届毕业生,很多面试官会看重知识点,即使这个点看起来是死记硬背的,比如Java里HashMap的默认初始容量这种。往往是要通过这些貌似死记硬背的知识点筛选出基础知识更扎实牢固的同学,所以这些知识吧,其实面试之前还是捋一遍,也可以网上搜一搜Java的基础知识题做一做,把基础的知识点搞清楚。
前面曾经说过,简历点到不点破的那些点,在面试准备的时候都要搞明白,尽可能深入,既然写到了简历里,就要有针对性的准备好。面试官在浏览简历的时候,很可能会考察这些点的实际执行情况、技术原理、实现方式、一些常见问题的处理等等具体的内容。这不仅仅是验证一个人在工作中确实是有这些经验的,更重要的是体现一个人深入钻研的精神和能力。
在我个人做面试官的过程中,都会看候选人的简历去挖掘一些点,比如简历上说到事务,我可能就会问一些事务的基础,在程序里事务是如何配置的,如何实现的?比如简历上写的用过缓存,我可能就会问缓存雪崩是怎么回事,该怎么办?缓存击穿了又怎么办?比如说简历里涉及到消息队列的,我可能会问,有没有可能丢消息,有没有可能重复消息,这些怎么处理?
所以作为候选人,不能简单地说我用了什么框架,配置一下参数,能做出来功能,就行了。如果能和面试官讲讲,这里用了什么技术,为什么要这样配置,为什么通过框架配置了就行,那面试官就会觉得你不仅知其然还知其所以然,自然是要加分给你的。
最后的话
最后就是面试了,面试的过程其实就是告诉面试官,我能行,然后想办法证明我能行。所以首先要自信自己能行,没有通过面试不要紧,其实有的时候真的看脸,不是不够优秀,是缘分没有到而已。
面试本身也是实践的过程。面试做过的题,尽可能记下来,不管是会的还是不会的,回来仔细思考解答。和面试官的沟通过程,也要认真复盘。到实践中去总结学习,积累经验,逐步提高。
当然,所谓三板斧只是我个人的建议,也只是个基础。有很多我曾经面试过的应届毕业生都非常优秀,已经远远超出了三板斧提到的能力。所以最重要的还是好好学习天天向上,我相信,只要努力,找一份起步的新手工作并不难。所谓江山代有才人出,长江后浪推前浪,希望大家能更快地成长,更快地发展,更快地找到满意的工作。