大约几周后我将离开北京,离开工作了快2年的地方去追寻另一种人生体验,回想起来有许多值得感慨的地方,又一时不知从何说起。

        也许是精神空虚,在今年我其实干了许多件新鲜的事:留长发。预料到自己三十岁必定会秃顶(基因+现状),我决定在人生仅有的一次宝贵机会里试试留长发的感觉,到目前为止似乎已经可以扎马尾了。喝各类酒,除了在家自饮之外,印象最深的一次是和W约见的餐厅里,他来迟了1小时我则在等他的期间喝了一杯龙舌兰酒+一杯玛格丽特,和酒保对话时觉得自己身处云雾中,人生中最迷离的一次。玩桌游。狼人杀阿瓦隆德州扑克etc,那时候乐此不疲地和T君参加各类线下狼人杀局,我们总能很轻易地互相看透彼此的身份,但这项娱乐随着T的离职告一段落,我对于它们的兴趣也暂时中止。之后的几个月我都沉醉在音乐里,学习掌握了基本的乐理知识,每个夜晚回家使用电吉他练习布鲁斯以及隔一段时间看一场live。几次短暂旅游和人生第一次山顶露营,在十月份时我还养了只名叫Iris的小猫。

        在9月份的时候,我意识到自己对许多知识的掌握肤浅且空洞。而我目前做的绝大部分工作,既称不上前沿,自己也并未完全理解使用的这些算法包背后的数学本质。我很崇尚并希望自己能也像Understanding LSTM Networks作者Christopher Olah简介中写的那样:

"I want to understand things clearly, and explain them well."

        转眼到了十一假期,原本和好友W约定的环青海湖骑行临时被取消,我待出租屋内花了4天在把Andrew Ng的深度学习前三门学完,后几天开始看Chris Manning和Richard Socher的CS224n: Natural Language Processing with Deep Learning,仅看了rnn相关部分,并照着Denny Britz大神的Implementing a RNN with Python, Numpy and Theano手写了第一个rnn。但学习理解的越多,越发现自己一无所知,而AI的领域每天都产生着爆炸性的进展,毫不却步。

        那段时间我一度沮丧,曾今痴迷的布鲁斯solo听起来也尽显悲凉,独独听得下爵士乐:沙沙的鼓声,低沉的大提琴,深情的小号和永不知疲倦的钢琴,它们带给我一丝喘息与沉静。我开始学习更多的理论知识,萌生出申请研究生继续深造做科研的想法,但申请学术类的研究生基本都要求学术实习经历和推荐信,于是请求博士在读的学长D忙我引荐一位导师,之后与该中科院导师的面试经历并不是很顺畅,他更希望找个"听话干活"的实习生,而非满脑子异想天开的马尾少年,其中曲折此处就不赘述了。这一经历使我对国内研究生现状有了更深刻的了解,此后我继续在几大所的教师主页遍历了教授以下、研究员以上的老师,最后挑了5-6位方向对口的老师发了邮件,但有回复的基本都是老板创业招底薪实习码农,一无所获。

        病急乱投医,某天我在逛某大型同性网站时发现了HKUST的教师Sung Kim,从谷歌学术来看他此前一直在做软件理论分析,近几年才转向人工智能,但观其引用数便知此人实力不俗。在个人主页看到他正在招生,抱着试试看的心态询问他是否招收实习生,他回信说自己明年1月要到韩企Naver的Clova研究部门进行为期半年的学术假,问我是否愿意去实习,并把对方HR的邮箱给了我。我意识到这个机会稍纵即逝,因此找北美老宋要了高端冷艳的LaTex简历模板代码,花了3个晚上将原来那份玩具车简历改造得焕然一新,果然投递后立即收到了HR发来的Coding Test通知。

        准备Coding Test的过程并不长,在通知发出的那个周末进行了笔试,并在第二周通知我进行Video Interview。准备Video Interview的2周是最要命的,因为他们仅仅透露这会是一场技术面试,但具体指哪方面技术我不得而知。需要准备的技能茫茫多:

  • 普通算法。因为我对数据结构已经比较生疏了,于是草草将CC150刷了一遍,考虑到他们也许会针对之前的Coding Test进行follow up,又特意准备了这些题的其他解法。
  • 英语口语。和面试官对话用的当然是英文,但我的口语水平甚至连基本交流都成问题,更棘手的是也许我需要向他们讲明白基础算法、听懂他们关于普通算法/ML/DL/Java方向的提问,因此我需要熟悉诸如Polymorphism这种冷僻词的发音以免对方提问自己听不懂。
  • ML/DL/项目。这几个虽然是重中之重,但也恰恰是我最为熟悉的,因此花在上面的时间不多。
  • Java/Python。我遍历了glassdoor上寥寥数十条关于的Naver和Line(Naver子公司)的面试评价,许多SDE岗位的面试者都提到了关于Java中多线程/IO方面的提问,我在简历中提及自己熟悉Java与Python,因此面试官为了判定我的技术水平,是有概率提问我这类问题的。于是我摘抄了许多个版本的"Top 50 Java Interview Questions",将一些主流问题记下来。对每个问题用英语口语向自己解释一遍,关于更深的并发、多态则也做了特别准备。
  • 行为面试。对面试官而言,一位非CS专业且有几年工作经验的工程师申请学术实习,多多少少听起来有些怪异,因此我需要预测他们将会问出什么样的Behavior Question,并提前准备好自己的回答。

        这其中非技术部分的准备是最有趣的。例如对英语口语的准备,有个叫preply的教学平台提供这样一项服务:花费一定的金额购买老师1小时,然后老师通过skype在指定的时间传授给你知识。我一共使用了2次,第一次花了20刀预约了一位native english speaker教授英语的老师,确认自己能和口语纯正的人进行交流。接着担心韩国面试官有口音,我又花了15刀预约了一位教授计算机的印度老师,想试试自己是否能听懂带口音的技术问题,她精心的准备和耐心的指导让我感动。但我仍觉得没底——印度老师的技术面题目都太水了,真正的面试可不会是这样,幸而一位经历了许多场FLAG实战面试的USC学长向我伸出援手,为我进行了一次真正的Mock Interview并指出了我的许多问题。

        而Behavior Question中我预料面试官会问(事实上他也问了)的问题是:"为什么想来Clova做研究?",我在心中默记的答案也正是我的心声:

当我走出校园时就意识到自己水平不够,因此在许多个周末我会去公司学习新的知识。然而我了解得越多(尽管只是皮毛),我越会意识到这个领域的突破是爆炸性的,每天都在产生新的结构、新的想法,而我只能远远看着,或研究这些突破如何能被应用于自己的当下的工作。不,我不愿止步于此,我也希望自己成为那个创造新突破、产生新思路的人,而不是永远追随着别人的发现看能否应用于当前业务。于是...(吹捧Clova)。

        到Video Interview的那一天面试结束后我依然能记起来的是,有几个问题能答出都是机缘巧合与运气:帅弯我的小哥问了wor2vec推倒和rnn梯度求导中Jacobi Matrix的运用。前者我恰好在几天前看了一集cs224n,讲的就是word2vec,后者则得益于我在组内进行了一次rnn分享会,因此几乎对其细节都有耳闻。整个面试除了Java/Python其他都考察到了。所有的珍珠在那一时刻被无形的绳子串起来。

        前几天收到了Naver CLAIR(Clova AI Research)学术实习offer,但这中间有一个插曲:在等结果期间误打误撞被阿里巴巴HR邀请投递简历,面试了蚂蚁金服人工智能部门高级算法工程师岗位,侥幸也拿到offer。考虑到如果继续等下去蚂蚁的offer可能作废,因此又向Naver的发送询问信息表明自己通过了另一家公司对面试,才最终收到HR肯定的回复。由此这场准备了一个半月的实习面试终于以好结果收场,很幸运地被自己仅投递过的2家企业同时接受,此时应该轮到我来抉择:学术还是工程?

        我个人仍然倾向于学术实习+申请研究生博士这条道路,虽然前途远不如工程来的光明、平稳。可我又担心自己想法过于幼稚,比如未来发现自己根本不适合、不喜欢做研究。因此询问了几位博士在读的学长、我的直属领导Spencer,他们的建议虽然各不相同但也让我同时更加了解学术界与工业界的差异,更为谨慎和稳重地作出选择。

        无论如何,在行程确认后我就将离开dm组、离开北京。一路上受到了许多人的帮助和指导,非常感谢他们。

        最后附一些人生珍贵瞬间的照片。

cat grass
guitar jellyfish
cloud night
self show

林戈 | myfancoo@gmail.com