亚麻良好virtual实习体验

大家叫我正午
9488
39
刚结束实习并且运气好拿到了return,写一下自己的经历,文笔不太好请见谅。楼主在语音助手下某Service组实习,由于是第一次远程实习,公司给每个实习生配备了丐版MBP16 + Lenovo 32inch 4K显示器 + 键鼠耳机套装,已经很实在了。所在的组成立了两年多,主要做语音助手的一些Service,具体就不描述了。整个team有10个人左右,mgr是印度人,mentor是国人女生,SDE I和II一半一半,4个国人,两个印度人等等,diversity还算可以,没有出现印度mgr然后组里全是印度人的情况。组里开发语言主要是Java,一部分是Kotlin,一次和mgr单独开会的时候他说组里正打算整体迁移到Kotlin(不知道是真的还是我听错了。。)。楼主之前主要是写Java没接触过Kotlin,不过貌似用的都是一套东西,内部找了点学习资料101之类的很快就上手了。

下面说一下项目。楼主的项目是解决一个High Severity Ticket并且在一个已有的Service上加feature,刚开始实习的第二天mentor就把project wiki分享给我了。组里人很nice,从parent directory发现有一个doc是征集intern project idea的,点进去发现每个组员都有自己的idea并且上面还有comment讨论之类。。最后确定了我mentor的idea。每个人的idea都有被讨论,比如scope大小,impact合适与否,实现难度等等,而不是随便甩一个project给我。楼主之前在国内某厂实习的project就是mgr随便找了个东西让我做,结果也不太好。主要开发都是在AWS上,DynamoDB + Streaming、AWS Lambda、CloudWatch logging + metrics + alarms、CloudFormation集成、Pipelines自动部署、VPC/IAM权限控制等等。。学到了很多东西。楼主是一个fast learner,实习第一天就把general的配置比如编译工具,包管理器,git啥的都配置好了,第二天开始看project东西尝试去理解。大概在第三周左右和solution就想好了,接下来就是开会讨论可行性并且撰写design doc。之前觉得SDE只要写好代码就行了,后来在实习的过程中发现文档写的要好,也得擅长和别人撕逼,对不合理的需求/改动说No。Design document完成的很坎坷,前前后后改了30+revisions。初稿完成后在第四周和全组人约了一个2hours 的meeting,现在想起来简直就是公开处刑。。首先会给20mins让大家看一下我写的内容,同时他们可以在上面加comment,时间到了我再一个个的回答那些评论。楼主耳朵不太好(小时候打cs1.5声音开太大被AWP和AK的声音影响到了。。)导致有些问题听不清楚,还有的问题出发点是从整个platform的角度提的,我根本听不懂。这种情况好心的mentor都会上来替我打掩护,帮我挡掉一部分问题(Kudos for my mentor!)。开完会设计文档上全是一片黄(30+个comments),我需要解决这些comments然后再和team约一次meeting,让组里的SDE II签字才行(因为要进prod)。第二次会议很顺利,和组里人确认了几个细节问题就过了,字也签了,然后就是implementation。

由于基本思路/细节都在写design document的时候确定了,implementation实现起来就很快,水到渠成。我开发的package是80%+Kotlin,于是顺带学了一门新语言。具体开发方式是本地Intellij Idea写码,写完了用unison(一种同步软件,和scp差不多)同步到dev desktop上,再ssh过去进行编译部署测试。不得不说大公司这些basic infra都很成熟,编译/部署/测试/虚拟化/打包/Pipeline都是内部的,有专门的team在做,大部分都很好用。比如编译写完的package,会显示code coverage即单元测试的覆盖率(in terms of lines of codes),本地编译结束后就可以提交code review让组员(mentor)帮忙看,approve了以后就可以merge到main branch。然后Pipeline会merge from main branch开始CD(Continuous Deployment),一般是分着好几个stage,每一个stage对应一个aws user并且是循序渐进的,有一个prebuild/build/test不成功就会block后面所有的stage。block了可以点到那个aws进去看一下是什么问题。比如在Alpha stage CloudFormation create了一个新stack出错了,这时候就可以进到Alpha对应的aws console进到CloudFormation看具体的error log。如果所有的stage都没问题,那最终就会ship到生产环境里接受真正数据的检验了。到Prod里出了错要背锅的哈哈,别的组会发ticket到我们组,然后谁的错导致的这个ticket他/她就要写类似检讨一样的文档。。。这是基本的开发流程。楼主project主要开发周期是两个星期,在自己的dev account上测了又测,感觉没什么问题了就开始发code review了。这时候已经是第六周(实习总共12周)。这里建议发cr前单元测试/Integration test要写好,edge case考虑周全,revision次数尽量少,我见过有9个revision的cr。。然后每一个code review内容尽量少,不要一发几百行big bang,没人看的。开发期间碰到了一些bug,不过都是可以在内部Stack Overflow上解决的,大部分是权限问题。

组里是应用了Scrum Development,除去每天都会开的stand up meeting,还有两周一次的retrospective和一周一次的oncall summary。Stand up meeting就是每个人汇报昨天干啥了今天要干啥等等,我们组貌似ticket不是很多,一周里面能听到三四次oncall的人汇报"Didn't get paged yesterday"。但周围人包括mentor每天都工作到很晚,晚上七八点还在线(据说AWS加班更狠)。两周一次的Retro就是scrum master开一个网页,每个人可以匿名添加小卡片到Kudos/Things doing good/ Things need to improve栏下,同时每一个卡片有一个点赞功能。我刚来的时候组里第一个kudos就是Welcome 楼主!,写完了design doc第一个kudos也是楼主 for Design Doc Review,看来大家还是对实习生挺上心的哈哈。组里的code base我觉得感觉质量很高,大家都对自己写的代码负责,整个组的氛围是比较和谐的(也有可能是远程看不到脸),而且组里有一个SDE II经常讲冷笑话。。最后在第10周的时候所有cr全部merge,project deploy到了prod并且没有产生各种问题,算是成功deliver result。11周和mgr单独开会的时候他说我是第一个他见过在第10周就把项目完成并且进入生产环境的实习生(可能是没啥可夸的了hhh,我认识有人第六周就做完project开始做第二个了,当然每个proj scope不一样,也不太好说),整体他对我的印象很不错,也是最后能拿return的原因之一。Mentor一直都很给力,每次发消息很快就回,问问题也很积极的回答我,很nice而且不push,希望她在我走后可以被promote吧!

接下来总结一下:

Pros:



  • Big Name,成熟的dev tools,严谨的dev process

  • 有钱,给实习生发16MBP + 32寸4k,我mentor还是13寸小mbp233

  • 运气好进了不错的team,遇到了很棒的mgr和mentor

  • 项目scope合理,学到了很多aws的东西,顺带还学了一些Kotlin

  • 除去technical skills,还学到了一些软性能力比如交流,Scrum,写Design Doc,项目上线要有metrics和alarm监控

Cons:



  • 远程实习只能Chime上聊天,不能手把手交流。。有些问题面对面一下子就可以说清,远程交流成本太高

  • 税太狠了。。工资税后打八折

  • 经理是印度人,经理的经理是印度人,经理的经理的经理还是印度人。。



总体来说实习体验很棒,有时会忙里偷闲翘掉一些无关紧要的会去打篮球,也有debug到很晚第二天起来接着搞的时候。作为一个小实习生感觉Amazon很不错,但玄学公司就意味着也会有同学遇到很坑的mgr/mentor/team/project等等。。只是提供一个data points供大家参考。秋招还是要投的呀,毕竟亚麻给实习生return的tc挺低的(据说都是low ball?待确定),希望这次实习经历能给简历上增加点分量哈哈,祝大家找实习/秋招/抽卡/排期顺利
  • 87
  • 90
  • 分享至
39条回复
时间排序

发表回复