最近同实习生交流的一些感慨。欢迎大家交流指正。
夏天来了,实习生也来了。去年的这个时候,我一个朋友带了两个实习生,特别开心,说实习生都好萌好可爱好好学啊。然后一个月后说他累死了,两个实习生啥都不会所以他只能把他俩的项目先自己做一遍然后再给他俩解释一遍怎么做。我心想,我实习的时候怎么就没碰上你这么尽心尽力的老板啊?想当年我实习的老板可是一大坑货。给我的第二个starter task我废寝忘食地做了一个周末几乎要哭地同他说,这个bug碰到了三个不同团队的大refactor,都说现阶段没解。结果他开心地点点头说,没错,我给你这个任务就是想看你能自己debug到哪里,你做得已经比我想象中好很多了。后来工作的时候,发现大家(包括自己)看待实习生都跟看孩子一样,再简单不耐烦的问题也会很耐心地同他们解释清楚。才后悔以前当实习生的时候不曾好好利用这一点。我以前当实习生的时候很害怕吵到我的老板。后来才搞清楚,在某些公司一个软件工程师带一个实习生其实正儿八经是TA1/3的工作量,而在大多数我所了解的科技公司,如果实习生的项目挂了,其实是老板的锅(除非这实习生人见人恨大家一致说TA蠢成猪)。
公司的目的是什么
其实最流行实习生的行业,是那些人才竞争强烈的行业。最喜欢招实习生的公司,则是那些有他自己一套做事方法的大公司。小公司不爱招实习生(没人带),招人门槛低的行业也不怎么爱招实习生。大公司招实习生其实不是真正指望实习生在实习期间的那一点劳动力,他的真实目的是:
- 招聘部门给公司树立品牌形象,便于校招社招。
- 招错人成本很高,实习相当于一个长期面试看看这个人合不合适。
- 给未来员工提前做培训,以便TA入职以后能够马上上手。
毕竟脸书和Quora为例的公司都会有长达六周的新员工训练营来做公司内部系统相关的培训,谷歌这种公司会给新员工长达3个月的新项目适应期。曾听过一个招聘部门的同事说,一般一个校招员工要在公司至少待两年,我们的招聘成本才算持平,因为他要在公司6个月以后才能真正发挥一个软件工程师的价值。所以很多公司对returning intern给的待遇比直接面试的应届生要高,其实是因为你已经提前经历过这个公司本身系统的培训,公司也确定你能够发挥出价值了。这个信号在硅谷一般值+2万左右的signing bonus。据说TripleByte给公司成功介绍一个员工会拿相当于这个员工三个月工资的中介费。
哦对了,还有一些类似于谷歌的Engineering Practicum,脸书的FBU,Palantir的Path。这些是比较纯为公司形象以及社会的教育公平做贡献的项目,专门给低年级(大一大二)的学生提供实习(培训)机会。
你的目的是什么
这个看你有多喜欢这家公司以及你离毕业有多远了,不过一般无非是两样:拿到return offer,尽可能学到更多的行业知识/职业技能。这两个并不相等,也并不互相排除。
根据不同团队的具体情况,你实习期间需要做到的事情不一定是完成一个具体的项目。若想要拿到return offer,其实你需要做的事情是向你的老板和你的团队证明你有能力成为一个有价值的队友。每个公司衡量应届软件工程师的具体标准不一样,然而无非是从技术/学习能力,项目执行能力,沟通合作能力,以及自主性几个方面去衡量。
一个最好的员工是一个不需要老板去管或者监督就能够主动给团队和公司创造价值的员工。
你的实习项目
我大概了解过三个不同公司的实习项目制定过程。一个是并没有实习项目,团队做啥你做啥,直接把你当半个工程师去用。另外两个是要求一个实习生的host去制定一个应届工程师能够在4周(+/-2周)完成的项目给大一大二的学生,或是一个应届工程师能够在6-8周(+/-2周)完成的项目给大三或是研一的实习生去完成。这个项目应该是一个off the critical path的项目,没有马上的时间期限,做好了可以给团队带来价值做不好也并不坏事的这样一个项目。一般给小朋友的多数是internal tool,给需要考核的实习生的一般是下一个quarter的项目的一小部分。不管怎么样,负责实习项目完成的是host/manager/mentor。如果实习生很有能力,那你要准备一些延展性的工作让实习生可以做。如果实习生啥都不懂,你要能够给TA制定学习计划和相应地去缩小项目范围。简单的说,是否完成这个项目,不是一个实习生最重要的事情,大约更多的是实习导师的锅。
那重要的是什么呢?不是说实习项目本身不重要,而是透过现象看本质,实习项目其实只是一个考核实习生综合能力的手段。项目范围是可以商榷的,甚至项目本身都可以因你的兴趣而调整。重要的是你如何去完成你的项目,并通过它证明你有胜任全职的能力。
在公司A实习的时候,我的实习项目做到一半整个项目组就被毙了,我的实习项目也没有完成。后来通过老板的牵线另外找了一个项目,做了不到六周,最后做的项目也没有launch。但绩效考核的结果还是不错也拿到了return offer。后来想想,是因为老板考察了蛮多其他的东西的,比如说见到复杂的bug能不能自己去debug并且同别的组沟通,能不能自己去找项目,能不能跨时差同纽约和伦敦的团队合作,等等各种同项目本身的impact毫无关系的事情。
在公司B全职的时候,我们组的实习生还真心没有实习项目。因为那个组当时的变动非常之多,所以基本上是每周团队有n个事儿去做,每人分掉m个,实习生就负责m/2个。后来找不到合适实习生上手的任务的时候,TL就把实习生直接扔进了oncall loop。后来实习生拿到return offer的大部分原因完全不是因为他完成了一个什么项目,而是因为他oncall的时候极其靠谱,能够跟着TL处理问题的时候把所有的常见问题写下来,不会的时候直接escalate,提出了很多整个pipeline里面不合理的地方,并且做出了一些很有用的documentation和refactor。没有人给他布置了这些任务,但他从观察团队最大的痛点中找到了很多有价值的东西去做。
你的绩效考核
绩效考核一般都是由实习生的manager和host还有一到两个熟悉实习生工作的员工来写出peer review做的。简单来说就是没有什么测试或者硬性标准,说白了就是看你尽量多的同事和队友觉得你靠不靠谱,有没有能力胜任全职的工作内容,愿不愿意同你共事。所以工作的时候尽量多的跟更多的同事接触,能够至少有两个人足够了解你去写你的peer review是一件值得计划的事情。尽量不要搞出code review只有你的mentor/host一个人做的情况。至于考核的能力到底是什么,你具体可以参考公司engineering ladder初级level的要求。
基本技能
- 你有能力去自主学习你做成一个项目所需要的技术技能和了解一个也许庞大的代码库。
- 给你一个项目或者板块你能够负责到底,简单明了就自己完成,不懂就问,有问题或突发状况及时提出。
- 你能够主动和同事队友沟通,去了解你们整体项目的技术架构、产品需求、接受和提出反馈。大家愿意跟你共事。
- 你能够在一个项目要求有变化的环境中适应,并搞明白自己要做什么。
加分技能
- 你能在团队中”own”一个板块(哪怕再小),成为这一板块的专家/负责人,不懂得人能找你去问,别人能够放心知道交给你的东西你一定会完成或者及时提出反馈。
- 你能够不仅明白你自己的项目要求,更能够搞明白为什么你要做这个项目,项目带来什么价值,你触碰的代码的上下游都有哪些dependency哪些用户,从而能够对不同bug/feature request/task的重要性形成你自己的判定。比如说做一个demo或者prototype讲究的是速度而非质量,但在一个有很多下游用户的infra项目中改一个API需要多方考核可能出现的bug和edge case。
- 你能够成为某一个领域(哪怕再小)的技术专家,能够给团队分享技术经验,通过code review或者tech talk或者tip of the day / week / documentation中帮整个团队提高技术水平。
一个小小的例子是最近有个实习生同我吐槽说他项目的要求总是改来改去,好不容易把diff/changelist/pr交上去了,结果reviewer让他把整个解决方案重写,因为需要更加extensible。
其实一个bug或者fr,说白了其实都是人写的,也不知道是多久以前写的。大多数file的任务并不是教授和TA反复推敲出项目要求和打分标准的作业,更像是某一个会开完以后某个人匆匆几笔记下的TODO List。所以接到task的时候,完全没有必要将task description当圣旨。大约应该自己先研究一下相关的要求是否仍然make sense,具体的implementation大概会涉及哪些代码,然后git blame一下找文件的owner和写task的人稍稍确定一下项目的要求以及解决方案的可行性。这样可以减少很多无用功。
大约还应该写一个学习篇,但我有点懒。下次再叙。
网友评论