如何去外国当程序员

前期规划

自信

电影《独立游戏大电影》中,主人公 Tommy 自我介绍说,"我非常非常擅长编程。" 当时在屏幕前的我第一反应是被吓到了,虽然程序员之间存在鄙视链,但是大部分的程序员都谦逊且不擅于社交,我极少听过自己非常擅长编程这样的直白。第二反应是一些不屑,我当时觉得要像 Linus 这种程度的程序员才能自称非常擅长编程吧,一般人配不上这几个字。不过后来的几年我慢慢明白,这或许是国内教育给我的烙印,缺乏自信而不擅长表现自己。其实不需要成为 Linus 才能自称擅长编程,无论是做业务开发,运维管理还是人工智能,只要认真钻研于一个领域,有一定的技术能力,有人喜欢你的代码写出来的产品,那么你就已经比世界上 95% 的程序员要优秀了。所以前期规划中,建立自信是非常重要的,程序员出国工作并不难,对学历和技术的要求也不高,只要有出国的意愿都可以来尝试。

简历以及 Cover Letter

国外求职意味着要和全球的优秀人才竞争,而且近几年越来越多其他专业的人才转到编程领域,所以竞争越来越激烈。之前我的项目招一名远程开发的工程师,一个多月时间,我收到大约 100份 求职者的简历,里面不乏顶尖学校如伯克利,哥伦比亚,加州大学的应届生简历,也有几名十多年工作经验的工程师以及一名前谷歌高级工程师的简历。同国内收到的简历一样,越优秀的人越重视自己的简历。简历的基本写法可以参考我们之前的文章如何写一份更好的简历,不过英文简历与中文简历要求不同,并不是直接拿中文简历翻译就可以,例如投美国的简历通常不允许出现照片,年龄,种族等个人资料,还有些公司会要求提供 Cover letter,也就是一段个人简介以及想加入该公司的原因。怎么写 Cover Letter 呢,可以分为两个部分,第一部分是个人简介,也就是精简版的简历,主要讲自己的相关工作经验以及特长,控制在四句话内:

Dear XXX, Foure-year experience in computer programming has urged me to apply for this position. As you can see in the enclosed resume, I have a very strong academic background in operating systems combined with over five years research experience in search engine optimization. My recent job at CPython, allowed me to further develop and strengthen my technical skills.

第二部分介绍对公司的了解以及自己为什么适合这个工作,可以从岗位描述入手:

I have studied your products carefully and found the following advantages... I had experience in Natural Language Processing, web scraping, Go, and React during my last company, that is why I suitable for this role.

你也可以参考这里的 Cover Letter 例句。我自己的求职方向是后端工程师以及全栈工程师,所以准备了两份简历。如果不确定自己写得怎么样的话,你也可以使用我们提供的简历修改服务,我们会提供简历修改以及模拟面试等内容。

国家地区

当你放眼全球的话,国家与地区的选择实在太多了。近的如新加坡,日本,远的如欧洲,美国。不过我很清楚自己的目标,我最终要到 Google,但是现在英语与算法能力还不够好,所以先到英语系国家锻炼英语以及学习,永居暂时不是我的目标。首先要清楚自己的目标,再决定走向哪个方向。如果你没去过当地旅游,我建议出国工作前最好先逛逛当地的留学生论坛或者华人论坛(美国的一亩三分地,德国的 abcdv)了解下华人眼中的当地情况。当然,这些国家不是说去就能去的,需要根据当地的要求申请工作签证。这里我整理了各个国家地区的工作签证在 https://info.osjobs.net/,给大家做一个初步的了解。

求职平台

每个国家都有大量的求职平台,我一开始也常常担心会错过一些好公司。而且有些平台不是上传简历就好,还需要填写额外资料以及信息,极为耗时。所以最有效率的方式是找内推,在领英上搜索国人内推会是比较靠谱的方式,其次才是使用求职平台。抱着多了解,多锻炼的想法,我海投了超过一百家公司。从回复率来说,AngelList 以及 Whoishiring 比较高,我建议先从这两者入手投递。

实力

实力包括英语能力,计算机能力以及软技能三方面。有时候英语能力以及软禁甚至比计算机能力更重要,应该先了解自己不足的地方,再按实际情况去分配时间准备。

英语水平:

英语水平分为听说读写四个部分,面试对读和写的要求并不高,所以你应该着重在听和说两方面。

由于面试官可能来自各个国家,如果两个母语都不是英语的人用英语来面试,体验难以置信地差。以我的经验,印度与法国的口语比较难听懂,有一次面试中我把 Symmetric and Asymmetric (对称和非对称) 听成了 Synchronize and Asynchronous(同步与异步),我回答了一通之后,面试官给了我一个疑惑的表情然后说了句" Forget about it "。所以如果你不确定你的听力水平的话,建议上 Udacity 的课程或者浏览 YouTube 上编程相关的频道练习听力,者能让你熟悉常见的技术名词是怎么读的,例如 Ajax 这类不好读的单词,不然面试的时候根本无法回答。

面试前我找了一名英语老师(微信号:bohe_yoyo)上了 10节 商务英语以及英语模拟面试的课程,课程中她会问我一些常见的非技术问题,然后根据我的回答给出反馈以及建议,所以在真实面试中,我发现有一些问题都曾经模拟过,回答起来也就得心应手。在本文之后的章节我也会举相关的一些例子。另外,我还使用 Pramp进行算法模拟面试,系统会按照你的选择自动匹配一名工程师与你轮流担任面试官和求职者,求职者需要使用半小时解决一道算法题并与面试官保持沟通。经过多次的训练之后,我从一开始的战战兢兢到现在的心如止水,真正感受到 Pramp 的名字所暗示的 Practice makes Perfect,Pramp 既训练算法还训练口语表达能力,实在是两全其美,关键的是它还是免费的。

最好阅读自己感兴趣领域的文章,我从两年前开始经常阅读 Hackernews 的文章,里面发布着业内最新的资讯,有些文章艰深而且词汇量多,不像文档那么易读。令我坚持下来的是这里聚集着全球最优秀的工程师以及追赶新技术的热情。两年后,我的阅读能力大有进步,现在能阅读原文的技术书籍,这部分并没有捷径,只有努力。

我使用 Grammarly 修正 GitHub,开源社区以及邮件中的语句的语法,同时写英语博客。一部分锻炼自己的写作能力,另一方面也能让面试官更能了解我的技术水平。

计算机能力:

按照不同的方向有不同的准备方法,具体可以参考我们的另外一篇文章程序员如何准备技术面试。

软技能:

面试官会问一些 behavior 问题,回答这些问题可以根据事先模拟面试中记下的要点来回答,这样会更容易记忆以及有条理。举几个题目为例:

What kind of colleagues do you like?
    1. Collaboration and easy going
    2. Creative and flexible
    3. Optimistic and keep on learning
How do you keep up with current trends and advances in this field?
    1. Programmer must also be an eternal student.
    2. Networking with other programmers
    3. Be open to debate, discussion 
What does your best day of work look like?
    1. flexible time arrangement
    2. working at home
    3. highly effective teamwork and cooperation
How did you get all of your work done with heavy pressure?
    1. make time arrangement in advance
    2. solve problems in order of priority
    3. set up rewards
    4. ask for supervising

面试

我面了大概 20家 公司,位于新加坡,美国,欧洲不同的国家以及地区。面国内的公司我很少紧张,因为经验丰富,而且用的是母语,但是国外不同公司的面试要点都不一样。顺便提下,这个过程中没有一家公司问过我的年龄,接下来我简单介绍面试流程以及各个流程要注意的地方:

  1. 约定时间

如果公司觉得简历符合他们的要求,一般会请你使用 Calendly 约定面试时间,建议大家先把它的教程过一遍,我就因为不熟悉而错过了一次面试时间。选好面试时间后,使用手机/邮件设定面试前的 1小时 提醒自己,这时候抽时间了解下公司的背景以及产品,过一遍模拟面试中的常见问答。

2. 笔试题 

一般公司会使用 Hackerrank 让你解决一些算法题,这部分可以使用 Leetcode 多锻炼。有的公司会让你完成一个小项目,虽然耗时但是相对简单,可以阅读类似项目的文章,确保有简单的文档和清晰的 git commit messages 。 

3. 视频面试

一般视频面试使用的软件是 Google Hangout,如果没用过的话请先下载,然后学习如何开启摄像头,麦克风等基本操作。由于大陆所在地区 Google Hangout 不稳定,我一般请求对方使用 Skype 或者 Zoom。这部分异常重要,想象下对方有口音而且网络不好断断续续,面试效果极差。建议大家先提前测试下这几款软件,看哪款信号最好然后提前与公司沟通确定。

自我介绍

自我介绍大概 1分钟,可以从 3个 方面进行阐述:

  • 项目经验以及技术能力
  • 团队能力
  • 为什么来这家公司

由于自我介绍经常被问到,所以我建议你把自我介绍背下来。

专业问答

相对于国内偏项目经验的问答。国外偏重编程基础,系统设计以及算法。编程基础根据你的方向因人而异,系统设计会问类似“如何设计推特的时间流功能?“这类的问题,要考虑系统架构,工具选型以及可能出现的瓶颈。

软技能

这部分可以根据模拟面试中记下来的要点回答,我们举一些常见的例子:

Do you know anything about our company?
  1. I learned about it in advance, your company is engaged in …., with the idea of ...... I think it fits me well. 
  2. I have studied your products carefully and found the following advantages…… Several problems were also found ... I think we can improve in this way …… 
What do you think of your technical ability?
  1. After years of accumulation and growth, I am now confident in my own technology. I am a senior developer, and I feel capable of various development tasks. 

Q&A

面试官一般会给你提问的时间,这时候可以问问公司的对候选人的期望:

I attach great importance to/ think highly of this interview, so I want to know more about the company's expectations and goals for this job.
I 'm used to getting to work on time, so I'd like to know your company's work hours.
The company is certain to often have temporary task, I can cooperate to work overtime, but do you have overtime pay?

我感觉国外面试的气氛都比较轻松,如果在面试过程中能发挥下幽默感就更好了。另外一点就是放慢语速,因为对方是 native speaker,语速快很正常。但是如果你英语水平不够却尝试跟上对方语速的话,既会减少思考问题的时间,也会由于想不到如何表达所以断断续续,可能会使面试官非常难受。面试结束后,根据邮件反馈进行下一步即可,国外一般处理时间是以周为单位的,定时发邮件问问进度就好,同时准备面试其他公司。 

总结

同软件开发一样,找到好工作并没有银弹,经过这几个月的面试,我觉得自己的眼界也更加开阔了,了解到不同国家大企以及创业公司的文化。其实我们担心的并不是人到中年,而是人到中年却碌碌无为。勤能补拙是良训,一分耕耘一分才。最后希望大家能脱离 996,找到自己喜欢的工作。

你可能感兴趣的:(经验分享)