缘起

到现在我仍然会觉得这次实习的机会有些梦幻,不知是幸运女神眷顾着我,还是用我在桌游中牺牲的运气换来的(?)。

0. 种子 🪴

别误会这个标题哈

从大一暑假(2019.7)开始,就在学校的实验时里做一些教学事务相关的系统,当时唯一接触的也就是基于 PHP 的框架 Laravel。

由于并没有做到前后端分离,所以整个项目的目录结构会有些混乱,而每个人的开发工作只能说是更加混乱了。小组一共算四个人,无论是后端的接口,数据库,还是前端的页面,再到部署到服务器上,配置 Nginx,几乎每个人都需要会。

而我所谓的「种子」也就是在那时埋下的。对于当时的我来讲,唯有写网页布局的时候最有成就感(虽然当时用的是 Bootstrap),其他调试接口,设计数据库,部署服务器的过程都显得痛苦而繁琐。

不过抛开这个项目,大一大二的我并没有深入后端和前端,所有的开发技能仅局限于开发使用到的东西,对于后端就是使用 PHP 实现 MySQL 的增删改查,对于前端就是用 BootStrap 把页面画出来,把数据放上去。

1. 建站

时间快进到 2020 年,当时由于疫情影响,返校从二月份延迟到了五月份,那学期也一直保持着线上上课的状态。

众所周知,网课就是摸鱼的圣地,听课与否并不重要,分数都是靠自学和刷题而已。

自五月份返校后,和女朋友保持着高强度12小时以上的图书馆自习时间📖,这就给了当时的我几乎无限的自学时间,该学什么呢?很可惜,当时的我并没有意识到那已经是一个应该做出职业规划的时候了,可怜的我为了更高的 GPA 将许多时间「浪费」在了本科课程上。

值得庆幸的是,由于网课带来了过剩的空余时间,我在当时做的两件事在无形之中帮助了未来的自己。一是搭建自己的个人博客,二是刷 Leetcode。

可能我本质上是一个追求花里胡哨的人,也是一个喜欢疯狂安利自己喜欢的东西的人,所以在当时那段时间里,我第一次真正意义上接触到「博客」。在那之前,我印象中博客应该是一种已经被时代所淘汰的东西,就和「网上冲浪」,「MM还是GG」,「偷菜抢车位」这种热词一样。无非只是在过去的一段时间内火了一把,接着很快就被浇灭了热度,被技术的更迭所淘汰。而所谓的 CSDN 博客,也只是一个略胜过百度知道的知识引擎罢了。

有趣的是,在使用了「Clash」进行上网之后,通过 Google 我发现了现在还有不少优质的个人博客👤,他们产出的博文质量比 CSDN 高到不知道哪里去了。在某个博客的 Footer 处,我看到了有种技术叫做 Wordpress。我自己尝试着用了一下,才发现建立一个网站可以这么快捷!而且网上都有现成的样式和模版可供使用,比平日里见到的那些破网站好看多了。就像是第一次输出 Hello world 一样的兴奋感席卷我的大脑 🧠。

随着逐步深入,我发现另一款基于 PHP 的 Typecho 框架看起来更加新颖,有着更多好看的主题(这个应该是当时的痛点)。于是乎,我利用 Typecho 第一次搭建了个人博客,并且开始记录一些东西。

尽管 Typecho 在当时已经很好用了,但是我仍然存在了一些痛点没有被解决。

  1. Typecho 自带 Web 端后台管理系统,毕竟是一套全栈的框架,有着数据库的支撑。但是框架自带的 markdown 编辑器实在难以接受,导致我都是在本地 Typora 编辑好之后复制到网页端上点击保存。属于是非常不优雅了。
  2. PHP 作者都不想维护这门语言了,更何况是基于 PHP 开发的 Typecho 和基于 Typecho 的一些主题作者呢。社区生态可以说是非常不完善了。

当时搬家的时候我也简单阐述了原因:Typecho->Hexo搬家日记 | Ethanloo’s

在使用 Hexo 之后,我又花了许多时间折腾主题之类的,让自己的博客表面上「花里胡哨」。从 2020 年 6 月份建站,到 2020 年 11 月搬家完毕,抛开表面,博客内容并没有变得更加「优质」。

但是搭建博客的过程对我而言,就像是哥伦布的一次远航🚣‍♀️,收获可能不大,然而意义非凡。

2. 刷题

2020 年 9 月,当时是大三上学期开学,事实上应该是我最忙的一个学年,毕竟学分多,竞赛多,是决定保研成功与否的关键一年。一想到自己再过一个学期就要开始面试暑期实习了,我仿佛又能看到了各种大厂 Offer 正在向我招手🙋‍♂️。

面对 GPA,竞赛和 Offer,我选择「全都要」。在当时初步了解了一下各大厂笔试面试的内容,发现有一个公共的也是最基础的要求:「算法与数据结构」。

于是,Leetcode,我来了!

我又回到了自己大一上学期为了 Python 期末考试而每天刷题的状态。

image-20211216103810094

image-20211216103829756

其中特别绿的日子,一般都是面试的前两天 🤣

对我而言,刷题并不是一个非常痛苦的事情,因为我个人并不喜欢死磕难题,我关注更多的是中等题和简单题,而 pass 的成就感也能洗去做不出题的挫败感。在将刷题培养成习惯之后,每日一题显得更加轻松愉快(困难题除外)。

为了杜绝看题解后不动脑子的写代码行为,我也尝试将每日一题的思路和代码记录📝到了我的博客里,这所有的一切都是自己真真切切努力过的痕迹。

image-20211216104845918

3. 入门

真正要提到入门前端,已经是 2020 年底的时候了,即使当时是期末考试时期,我仍然选择了充分利用时间去学习前端的各项技术栈。

从零开始的前端工程师生活 | Ethanloo’s,2020.12.21 写了篇小小博文阐述了自己选择前端的理由,也算是立下了一个 Flag(正向的)。

感谢当时的自己,每天都在幸苦地强迫着知识进入脑袋 🧠。

敲门

OK,花了几个月刷了题,学习了基础的 HTML + CSS + JavaScript,终于是到了要接受挑战的时候了。

引路人

在 2021 年的寒假,大概也就一二月,在学校的就业群里,有一个 15 届的学长转发了苏州微软的暑期实习推文,并说有意参加的同学准备好简历找他内推。印象里似乎他是最早开始发的,并且在这之后群里开始陆陆续续的有各个在中大厂就业的学长学姐们开始内推暑期实习。

当时的我是相当紧张的,毕竟自己只能算学了基础而已,简历上也只有可怜的一两个项目经历,甚至还是 PHP 写的。

但是我还是决定投一下试试,出于对自己英语能力的自信,「万一就过了呢」,你说是吧?

在跟学长简单沟通之后,他告诉我「正好」他们组就是做前端的,「正好」他们现在非常缺人,所以我就「正好」被定向内推到了他们组。

如果不是内推我的 Johnny 学长,那之后面试我的大概率就不是前端组,那按我的算法水平估计多半凉了。

咚咚咚

在一月份成功投递完简历之后,根据微软推文上的日程安排,大概是在三月中旬之后逐步开始笔试和面试。

然而一开学(2/20+)我就收到了笔试邀请!给我吓飞了都快,原本的我准备开学之后巩固巩固算法和 JavaScript 基础,结果一上来就是王炸💥。

不过笔试和面试的过程甚是幸运,虽然一面大概是挂了(怪我基础太薄弱了),但是微软暑期实习给二面平行面的机会,通过之后三面的面试官也没过多为难我。

微软暑期实习面筋 | Ethanloo’s,暑期实习面了四家,过了两家,其中没过的两家的面试体验可以说是非常糟糕了。

终面完的后一天,学长告诉我面试通过了,安心等待 offer 即可。

太 COOOOOOOOOOOL 了!!!

在一系列入职前的手续和第一次租房完成后,终于在 6.15 那天进入了微软的大门。

Work Life Balance

Work

不太清楚我可以通过怎样的方式来描述我的工作内容,保险起见跳过部分内容。

2021-06-18 04.14.22 1_11zon

入职当天只有临时门卡,图片里的这个是在入职一周之后申请拿到的正式门卡。

关于我的工位嘛,实习了六个月,我总共呆过两个地方,可以说苏州微软的工位是非常紧缺了,都在盼着那两栋新的大楼赶快造好吧。

IMG_20210615_180719_11zon

第一个工位,是跟许多实习生一块儿,坐在一楼的 trainning room 里,原本应该是一间用来培训的大 room。虽说房间大,人多,单显示器,但是 32GB 的内存,10900K 的 U 以及眼前的落地窗还是给我带来了不错的体验。

在这个工位呆了大概三个月,到九月份的时候,有管理人员说这边马上要装修,让仅剩的四个实习生(这个时间点大部分实习生已经离职了)搬到楼上去。

IMG_20211210_154026_11zon

第二个工位显得就正式多了,虽然仍然不是正式员工的工位,只是在一个 focus room 里,原本是用来给电话或者面试的私人空间。拥有了两个显示器和更加舒服的凳子之后,工作体验也更上了一层楼,不过偶尔会可惜失去落地窗之后眼前的景色的单调乏味。

工作日程也非常的纯粹,每周大概两三次 sync up meetings 用来讨论进度,若干小时的开发和 debug 时间,若干次跟他人单独的 call 用来咨询或者被咨询。对于包括我室友在内的许多实习生,任务不多,基本没有 ddl,可以说是没什么压力了。

虽然这么说,但是我确实也做了不少东西。和某司 leader 描述的「去微软学不到东西」不同,单纯就前端而言,MS 的技术栈更新迭代相当之快。

我们组负责的项目花了将近一年的时间从主流的 React 迁移到了 Web Component,只为了那么几十毫秒的性能优化能给用户带来更好的使用体验。 之所以花了一年倒也不是重构的难度有多大,而是微软的项目 DAU 之高导致不敢将一次性地将 Web Component 架构的产品部署到线上,而需要经过将近一年的 hybrid 模式和相当一段时间的实验,在保证了不会有事故发生的情况下,才完全上线。

进入微软之后,也算是我第一次正式规范化协作开发流程,和之前相比学校的项目开发模式简直就是讲笑话。

大学前三年的开发几乎都是,把代码仓库放到 gitlab 上,修改代码之前 pull 一下 master 分支,改完代码本地调通之后,push 上去,偶尔还需要跟别人讲一下自己改了啥,反正整个仓库最多只有三个人会改动代码。要部署的时候就用 ssh 远程连接一下 linux 的服务器,cd 到对应文件夹,pull 一下代码,检查一下线上网站有没有问题。

明眼人,或者说当时的我就已经感觉到这种流程是相当不优雅的,但是出于懒惰以及图省力的目的,我并没有选择纠正

在微软实习的项目无论是从代码规模还是使用人数上都是远超学校事务类的系统,全球上百个程序员同时进行开发,我也有幸能在仓库中留下了不少自己的代码。

但仅仅是为了提交这些代码,就需要花费不少的功夫。

  1. 首先就是学习 Web Component 技术栈,针对当前开发的 feature 写一个 spec,说明 feature 解决的问题,面向的用户,主要需求。
  2. 然后本地从 master 新建分支开发,开发完之后,将代码提交到当前分支,并且 pulish 该分支。
  3. 提出 Pull Request,在 PR 中说明该项代码更改的作用,每一个 PR 都会自动跑一遍 pipeline,build 一个用于测试的版本,生成对应的 test link。
  4. 每一个 build 都会进行至少一次的 unit test, integration test, visual parity tests。只有测试全部通过的 build,才会被允许 complete。
  5. 找到其他 dev 帮助进行 code review,在 PR 底下 comment 一些需要改进的地方。部分文件的代码更改会 trigger 对应的 review 的逻辑,将特定的人加入到 reviewer 中。
  6. 逐个解决 comments,并且将更改的代码 push 当前分支,重新生成 test link,检查当前的版本是否还有相应问题。
  7. 解决完 comments 之后,需要等其他 dev 给当前提出的 PR 至少两个 sign off 后才可 complete 当前 PR,所有代码会自动创建一个 merge request 进入到 master 分支。

从 6.15 入职到 12.10 号离职,我提出了大概 16 个 PR,其中有 13 个合了进去,剩余 3 个交接给了同事后续进行完成。

虽然实习只有六个月,但我自己前后总共参与过四个项目,开发了四个 feature,虽然这四个 feature 里只有一个真正上线了,但是每个 feature 都让我学到了好多好多东西。

image-20211218140544206

唯一上线的这个就是这么一个简单的 carousel,可惜的是因为是我离职前做的 feature,没办法在下次面试的时候给面试官吹嘘自己的数据了。

还有一个 feature 是一个类似小彩蛋的东西,从 2021 年开始每年的圣诞月🎄大家都可以在 Edge 的新标签页上看到这个啦!

image-20211218141238217

身边的同事,我的 mentor 和 leader,都完全符合了我之前对外企程序员的期望,大家都相当善良并且给人一种相处很舒服的感觉。虽然我比较喜欢一个人吃饭,因为是每天的快乐玩手机时间(其他时间摸鱼总是没那么光明正大),但是也会和同事快乐约饭,完全不会有那种强制社交的感觉。

实习后半段和美国 team 的合作的过程也相当愉快,无论是美国人,中国人还是印度人,他们都真的很会鼓励人,是那种无数 great, good job, well done 的好听的 🌈 屁。

交流的时候偶尔会觉得自己不太客气,一方面是英文词汇量不行,一方面自己还不太习惯跟不熟悉的人放 🌈 p。

Life!!!

终于到了分享快乐生活的时候了。

从食堂讲起,苏州微软的食堂被很多同事所诟病,光看价钱确实略显夸张,素菜3.5,小荤5.5,大荤10/15,有时吃一顿中饭会有物价水平直逼美利坚的错觉。

在这里随便贴几张几顿午餐的照片,其实味道和份量都是还可以的,样式也不少,但是食堂吃多了终究会腻。

IMG_20210805_173125 IMG_20210830_082803 IMG_20211210_153451
微软也提供无限量的免费饮料和零食,每周三也有小蛋糕(暑假是雪糕,中秋是月饼)。
IMG_20210805_173125 IMG_20210830_082803 IMG_20211210_153451 IMG_20211210_153451
> 突然发现自己忘记拍冰箱和不需要支付的售货机了,总之就是非常的后悔。

每个月还有一次 team 内部的 happy hour,虽然是自费的,但是大家竟然可以在工作时间玩桌游,吃零食!

IMG_20210621_160629

当然啦,微软也有不少的娱乐设施,包括桌面足球,台球,XBOX,我也给自己的个人账户兑换了一个年费的 Xbox Game Pass,偶尔会在摸鱼的时候开两把车。

IMG_20210805_173125 IMG_20210830_082803 IMG_20211210_153451 IMG_20211210_153451
为了每天能心安理得的吃夜宵,下班前的健身也是必不可少的! IMG_20210624_174227

在12.10离职前,和大家吃的最后一顿午餐,被迫坐在 C 位。

WechatIMG17

Ending

时间过得真是快呀,没想到六个月实习这么快就结束了。不管是学习到的知识,还是认识到的小伙伴,工作和生活,这段经历都太棒了!

「First enjoy your life, then work for fun. 🤩」

cover