过了年以后,新的一轮春招又要开始,于是一个迫切的问题就摆在广大计算机相关专业的毕业生面前,那就是,找工作时该如何挑选公司?该如何避坑?
在本文里,作者就将以一个有多年校招经验的IT技术面试官的身份,和大家聊聊这方面的话题,同时还会在此基础上再分享些职业规划方面的经验。
1 刚毕业的大学生一般做什么活?
不少的未来程序员对即将到来的工作有着无限的憧憬,但可能会有更多的毕业生会担心,是否能胜任未来的工作?他们的担心其实不无道理。
1 不少大学课程可能更偏重于理论,在软件开发方面的课程寥寥无几,而对一些自动化等相关专业的毕业生而言,可能相关的课程就更少了。
2 对于很多毕业生而言,不了解公司的组织形式,软件项目组的构成,以及软件开发的日常工作,由于不了解,所以就不知道未来能否胜任。
3 对很多大学生而言,接触到的软件开发项目都是学习项目,比如毕业设计或课程设计,可能未必能亲身经历过一个软件开发流程。
但这种担心其实可以不要有,因为很多公司对新招来的程序员毕业生期望并不高,具体而言,对于零工作经验的软件方面毕业生,平时需要干点什么活呢?
主要是跟着当前项目学,做些基本的增删改查工作。每个项目组用到的技术不同,有spring系列框架,有hadoop大数据框架,或者是python,但如果有刚毕业的员工入职,在基本的培训之后,会给些范例代码,让照着写。比如会让模仿订单模块的增删改查代码写个风控模块的。具体再拆分下,还可以分为如下的任务点。
1 配置环境,比如在自己电脑上搭建pycharm,idea等开发环境,再搭建mysql或oracle客户端,再配置些jenkins,jira等环境,只要人勤快些,肯请教,肯学习,这些工作一般也没问题,大不了就嘴甜些请些前辈帮忙即可。
2 环境搭建好以后,就从svn或git上拉下代码,然后结合各种环境变量让程序跑通,这块问题也不大,大不了也是请教人的事情。
3 后面就是仿照着写代码里,在这个过程中,可能会遇到各种新的技术,比如调用的API不熟悉,各种参数不熟悉,各种框架不熟悉。但可以这样说,哪怕是一个有5年经验的老手入职到一个新的公司,也会遇到类似问题,因为软件方面的技术太多了。所以在刚开始的工作中,软件相关的毕业生一定得多学,其实就是多百度多问多照着人家的代码写,而且这种新技术绝对不是高不可攀的,每个程序员都是这样过来的。
4 对刚毕业的大学生而言,写代码绝对不是唯一的事,还包括测试,参加各种(需求评审框架设计和代码评审)等会议,排查问题,以及项目上线。
畏惧来自未知,在这里针对即将毕业的软件方面的大学生,描述了未来可能的日常工作。这里不敢说,你一定能适应,一定能胜任,但对于大多数毕业生而言,只要付出必要的努力,多学习,多请教人,甚至多加班,一定能在短时间里胜任这种工作。
2 相似的日常工作,相同的项目组构成形式,和相同的项目开发模式,
软件公司有不同种,但对于这些不同的公司而言,项目开发模式,项目组的组织形式和在其中的日常工作大致相同。日常工作已经在前文里描述过,这里就说说剩下两点。
先说项目组的构成,项目的规模一般不同,但大家别把部门规模等同于项目组的规模。比如一个部门有50人,甚至更多,但一般在部门里还会分成若干个项目组。
比如作者工作过的一个部门叫“线下服务部”,有60人左右,在其中分为线下收单,搜索服务,前端项目,app项目等若干的项目组。在大多数公司里,每个项目的规模一般不会太大,一般也就10个人组成,一般有一位项目经理,若干位程序员,若干位测试构成,对于一些项目组,可能还会引入前端设计,数据库管理和运维等岗。
项目经理的作用是对外接需求,然后根据需求制定开发周期和发布周期,然后再用需求设计,详细设计等工作,把业务方面的任务拆分成一个个开发任务,再分配给程序员。然后再确保或督促程序员在规定的时间内完成开发,然后再测试通过后,把代码部署到产线上。在有的项目组里,项目经理往往还担任着技术负责人的角色,不过也有在一个项目里再配置一位负责技术的架构师。
在项目组里最常见的角色就是程序员,也就是各位即将要从事的,程序员除了要开发以外,一般还要和测试人员沟通问题,和其它组的程序员沟通接口设计和调试等事项,如果再高级点的话,最好还要等排查和调试各种线上问题。
而在项目组里,一般会配置测试人员,大多数情况下,会有资深的程序员兼任,比如某位熟悉业务和熟悉技术的程序员在开发之余还兼做测试。
大多数的项目组就是由项目经理和程序员构成,在部门里有专门的数据库管理团队和运维开发团队,以及前端开发团队,这些团队为这个部门里的所有项目开发团队服务,当然如果有需求,项目组还会额外配置前端或数据库开发等职位。
而对大多数公司而言,项目开发和发布的流程大致相同,而且当前一般都采用的是敏捷开发模式。
1 每个项目开发和发布周期为1个月,当然也可以是1个半月或2个月,往往在年初,会定好当年的发布日。
2 在每个发布日的开始阶段,各项目组从业务方等渠道接各种开发需求,这往往有个截止日,比如开发周期开始后的一周后,就不能再接新需求了,如果再有,如果紧急,可以适当调整任务,如果不紧急,可以移到下个开发周期。
3 接到任务后就各种会议各种开发,比如通过架构设计会议,定好开发架构,通过详细设计会议定好模块,通过接口会议,定好和其它组的接口,什么都定好以后,就开发,开发时遇到任何问题,就自行或讨论解决,当然开发也有个截止日期。
4 开发好的代码会提交测试,测试一般分为模块测试和同其它组的联调,一般测试以及对应的修改工作会在发布前的一周前做好。
5 最后就是发布,往往在发布日是最紧张的,各团队依次把代码部署上线,如果有问题,先排查原因,然后对应方得赶紧解决。
在一个开发周期的末尾,把当前周期的代码发布上线后,就开始下个周期的工作,如此循环。
3 不同的公司类型和不同的项目类型
虽然对软件公司而言,项目的开发模式和项目组构成可能差不多,但对于不同类型的公司和不同类型的项目,程序员在里面的体验大相庭径。在本人的借着谈转正感想的时机,再聊聊外企和互联网公司的工作体验这篇文章里,就给出了外企和互联网公司的不同工作体验,在这里就将更加详细地说说相关的差别。
1 对广大毕业生朋友而言,比较适合的是大的互联网公司,比如阿里系的,腾讯,百度等,或者拼多多等。在这类公司里,节奏一般比较快,比如外企里干一个月的任务,在这种公司里往往一周(甚至更短)就要干完。在这种公司里,在一个项目开发周期里,随时可能插入新的任务,比如遇到问题了,就得赶紧修复,而且面临的技术挑战也比较高,比如需要应对高并发和高数据压力的挑战,而且所用到的技术也会比较新,比如会用到大数据,机器学习或分布式组件。当然可能加班也工作压力也比较大。
在这类公司里,可能个人提升比较快,钱也比较多,但对应的,人可能就会比较辛苦。
2 第二类是国企或比较传统的公司,在这类公司里,可能任务开发周期比较长,用的也是比较稳妥的技术,其它特点大家可以自行想象。
3 还有就是外企,目前外企的吸引力可能没之前那样大,但外企由于一般规模比较大,而且文化多元,依然是个比较好的平台。在外企里,可能人比较轻松,但可能技术提升的速度就没有互联网公司来的快了。
4 或者是一些创业公司,在其中,由于成本等的关系,可能需要一个人同时掌握多种技能,对毕业生而言,可能在其中也能接触到各种方面的技能。
而对于项目类型,对广大毕业生朋友而言,尤其需要注意外派和外包公司类型的项目。
外包公司就是一个公司没有自己的产品,然后从其它公司接各种外包的活,或者从日本等地接各种活。在其中主要是定制化开发,比如对方给某产品里某个功能模块让开发,在这种项目里,可能用到的技术比较单一。
相对于外包公司而言,还有一种就是人力派遣公司。比如某公司和毕业生签好协议,然后把他派遣到其它公司里。在这类项目组里,人员一般分为正式员工和外派员工两种,可能这两类员工干的活差不多,但地位和薪酬未必相同。
4 不能妄自菲薄,去哪些公司得慎重
在介绍完公司和项目情况后,这里针对软件相关方面的毕业生而言,给出具体的建议。
对各位来说,好歹也是大学生,所以也是有一定的挑选余地的,对于如下的公司,大家需要慎重些。
1 有些公司可能以招工为名,然后巧立名目,让你掏钱培训。这其实是变相的培训班,哪怕大家即使要再通过培训班提升下自己,也可以找些比较正规的和比较有名气的。
2 人力外派公司,就把你外派到甲方公司做项目。这时你要看外派协议,如果外派到大型公司,或者给钱比较正规,那么这对毕业生朋友也不失为一种选项,但如果外派协议比较苛刻,或者多层转包,或者甲方公司不正规,那么就要慎重的。
3 或者去干其它专业的活。比如计算机专业的毕业生做开发是正常的,做测试也行,做产品设计或软件方面培训老师也能说得过去,但如果去做销售或者业务员之类的活,那么可以说,你之前读的书对你未来的工作帮助不大,而且如果这样,后面再要回转到软件行业,那可能就比较吃力了。
4 可能会暴雷的公司,比如有些p2p公司。这种公司可能存在跑路风险,这可能对刚走上职业生涯的毕业生同学而言,会存在不小的污点。
5 创业公司或规模比较小的公司,这种需也需要慎重。倒不是所有的此类公司都会存在风险,但公司规模小,或者初创,后期可能会存在资金和运营等方面的风险,一旦出现公司倒闭现象,对各位而言,可能就会在简历上落下“工作干不长”等不良记录。
5 短时间之内如何提升自己的能力,从而能进到心仪的公司
所以相对而言,对广大软件方面的毕业生而言,应该可以关注如下的公司。
1 互联网大厂 2 外企 3 规模比较大的公司 4 或者一些是独角兽企业 5 或者可以考虑以外派身份进大公司 6 或者可以考虑一些中小型的软件公司。
毕业生一般是从大四开始找工作,找工作的时间范围一般是从大四刚开始的9月到来年的5月。哪怕之前你没接触过任何软件开发的项目,如果你在这段时间里比较上心,依然有机会进大公司,或者是好点的公司。具体该怎么做?
1 一般大四都有实习,就趁着实习的机会,真实地干一个软件项目,别的不说,好歹体验下真实的软件开发流程,以及针对具体的业务需求,做些真实的增删改查的事情。
2 然后就把这段经历,以商业项目的形式写入简历,注意别写成学习项目。当然如果大二大三干过软件方面的活,比如帮老师干过,或者自己在外面干过兼职,也可以写入简历,总之简历中,商业项目经验越多越好。
3 尽量经营一个能展示你技能的平台,比如利用这段时间做个公众号,或者到技术网站发表若干成系列的文章。这些文章未必要描述过于深刻的技术,甚至点击量都不需要搞,但在面试时,你能以此。
4 在此基础上,到网上搜各种面试题,笔试题和算法题,总之第一要有项目经验,第二面试时能说出相关项目经验。
做到上述四点,毕业生给公司的印象是,第一至少有半年相关项目经验,第二熟悉基本的开发,外带些责任心强和学习能力强等的熟悉,这足以帮助到毕业生找到公司了,而且能找到的公司应该可以有500人以上的规模,且业务稳定,足以能帮助毕业生开始良好的职业生涯。如果再加上名校因素,或者拿过编程的奖,或者能通过公众号等证明自己的能力,甚至更有可能在校招里直接一步到位进到大公司。
6 莫欺少年穷,进大厂也就2,3年的事
各大厂每年校招的名额毕竟有限,而且也不是所有的软件相关毕业生都能一下子进大厂,但只要上心,对广大毕业生朋友而言,工作2,3年进大厂不是什么难事。本人在进大厂也就这回事,工作后2到3年进大厂操作指南这篇博文里就给出具体的建议。
1 哪怕你进的是小公司,或者是外包外派公司,首先你得通过半年时间里,做熟基本的开发工作,并了解软件开发的基本流程。
2 不能光局限于本职工作,更不能得过且过,在做好本职工作后,还得关注测试和项目发布等事项。
3 多解决线上问题,因为通过排查问题最能提升自己的技术和分析解决问题的能力。
4 多关注些值钱技能,比如分布式组件开发技术,或者机器学习深度学习相关技术。
5 工作后,更得通过写博客等方式来证明自己的实力,最好再在某个方面出版本书。
其实能做到上述几点,哪怕你刚毕业时能力一般,且毕业后公司一般薪资一般,在2,3年后至少能做到工资大涨。
7 总结和预告:本系列更关注于简历,面试和招聘问题
本文面向广大软件方面的毕业生,介绍了项目开发的日常工作和在不同种公司里干项目的体验以及发展前景,并在此基础上给出了在短时间内快速提升自己的建议。总之一句话,只要努力,不管在什么阶段,总能有收获。
本人有长时间的技术面试官经验,所以将在后继博文里,成系列地面向程序员,讲述简历,面试和招聘相关的事项,敬请大家关注。