我是如何学会不再担心和喜欢找工作的

这是一个关于在多伦多寻找高级软件工程师工作的故事 - 有一个转折点:刚从德国搬到那里。

我做好了准备我有个计划但它完全失败了 - 起初我必须适应和学习这是一个过山车。

我讲述自己的故事,因为它可以帮助别人从错误中吸取教训这是意味着关于移民或科技现状的更大声明这只是我的经历。

请注意:我会的提到公司的名称通过这种方式,我可以更公开地说话而不会损害任何人的声誉 - 最重要的是我的声誉同样,它并不是要谴责任何人,而是要深入了解我是如何找到自己的工作的。

制备

我是一名软件工程师,在软件领域工作了近10年,拥有先前的创业经验,并且来自Java / Scala背景,具有来自副项目的React,Go和Node经验。

虽然我对自己想要的东西有很好的了解,但我对那些完全不符合我标准的工作持开放态度由于我非常喜欢在我上一个雇主的产品上工作,我想再次这样做技术堆栈不是很重要,但有一些我不想再触摸的东西(如PHP和Angular.js 1.x)此外,我正在寻找拥有20到100名工程师的公司来自一家规模较小的创业公司,我想体验一个更大的创业公司行业类型对我来说并不重要,但是,像在线赌博这样的阴暗商业模式在我的黑名单上。

研究

首先,我想广泛了解多伦多的机会通过搜索工作板,优秀工作场所列表或“要注册的初创公司”,我编制了一份广泛的初创公司列表。

我使用Trello来跟踪所有这些我总是记下公司的技术堆栈及其行业另外,我把它们放在了Google我的地图了解初创公司通常所在的位置由于我还没有公寓,如果我想要接近工作,知道我应该住在哪里是有用的。

I categorized each company into "Hell, no!" (red), "Well..也许“(黄色)和”哇“(绿色)基于他们的技术,行业以及我在Glassdoor上可以找到的东西。

侧项目

作为我研究的结果,我注意到我发现最有趣的公司不是使用Java而是使用Python,Ruby或Node在几十家创业公司中,我实际上发现了一个基于Java的创业公司幸运的是,仍然有足够的时间给我带来帮助。

我曾在上一家公司玩过Python用于数据科学项目我喜欢它与Ruby相比,势头似乎在Python的一面,而Ruby似乎正在下滑由于我已经从玩具项目中获得了相当多的Node经验,我打赌Python。

因此,我阅读了两本Python书籍,一本用于学习基础知识,一本用于更高级的模式此外,我练习了各种编码挑战网站 - 这帮助我应用我的新技能,学习语言的各个方面,并通过查看其他用户的解决方案,了解惯用的Python使用情况。

大约在同一时间,我也有一个侧面项目的想法因为我的印象是这些天几乎需要一个辅助项目,所以我开始工作并开始用Python实现我的想法 - 一石二鸟。

最终的结果是subvoc它允许人们在电影中搜索难以理解的单词这个想法是,如果英语不是你的母语,但是你很高级,你可以看到你刚用英语观看的电影中哪些单词最难,你可以学习它们的含义。

应用

作为我研究的一部分,我了解到大多数工作都没有在网上找到,只能通过你的网络访问了解合适的人才是北美的发展方向虽然我一遍又一遍地阅读,但我认为它不适用于我毕竟我是一名软件工程师,我想,对我来说有很大的需求事实上,我感兴趣的每家公司都有一份大致符合我经验的职位空缺我想,我会没事的。

好...

几天之内,我就在网上申请了五家公司我花了一些时间为他们每个人写一封求职信它们并不完美,但非常好然后我在等待所有查询填满我的收件箱。

没有发生了。

即使是一家我似乎几乎100%合身的公司也没有回复我。

我惊慌失措。

我在质疑一切Is my resume not good enough? Is my cover letter bad? Is my skill set not required? Am I lacking experience? Is it because I'm not Canadian? Doubt and uncertainty were getting to me.

我知道未来,这种做法是行不通的幸运的是,我首先对此进行了测试,并没有立即针对我最受欢迎的公司但是我现在能做些什么呢?

然后是B计划

聚会

好事我开始涉足每一项技术聚会in the city I could find the time for基本上,前三周的每个晚上我都会遇到科技界人士这是快速进入现场的关键一步在那些聚会上,我可以访问公司办公室,与同事交谈,了解多伦多的IT状况,并简单地扩展我的网络。

但更好的方法是在聚会上实际呈现一些东西我设法在当地的Hack&Tell获得了一席之地我展示了我的侧面项目(意外地赢得了Raspberry Pi)当我参加Python聚会时,我借此机会谈论了我在我的副项目中发现的有趣的技术和概念这让我成为人们关注的焦点人们开始向我提起他们正在招聘......

在线社区

然后我了解到有两个大型在线技术Slack社区:TorontoJS和Techmasters当然,我加入了他们并开始阅读和贡献一点点然后我采取主动,并在#jobs频道询问工作机会我描述了我在找什么,并告诉他们通过Slack与我联系一些开发人员做了一次谈话实际上导致了一次采访另一个告诉我公司要避免并最终让我与他信任的招聘人员联系。

招聘

我以前没有任何招聘经验通常,他们在LinkedIn上写我并忽略它们现在我很绝望我跟那个被推荐给我的招聘人员聊了一个小时他非常有见地问我一些帮助我意识到重要事项的问题分享了一些如何改进我的简历的技巧他还粗略地了解了我可以期待的薪水总而言之,这次谈话非常有帮助。

网络

对我有利的另一件事是,来自我上一个工作场所的人在一年一度的人力资源会议上认识了多伦多的一些人她让我联系了一个人,他将我介绍给一个与许多初创公司合作的创新中心的人我们举行了一次简短的会议,并向我感兴趣的公司介绍了几个介绍Jackpot! The network at work.

更多在线申请

但是有一些公司离开了我根本无法接近我决定再次提交在线申请我完全重新写了我的简历,应用了我到目前为止的技巧,花了很多精力来完善我的LinkedIn个人资料,要求前同事提出更多建议,并在求职信上投入更多时间。

我在简历中改变了一些事情:

  • 通过将技能部分放在右侧列而不是底部的第三列,使技能部分更容易被发现和扫描
  • 添加一个简短的摘要部分,您可以在其中提到您在第一行中拥有多少年的经验
  • 确保每个子弹点都适合一行
  • 使用颜色突出显示不同的部分

The result? I got two responses out of two applications I sent out.

就业市场

我也听说过你提供个人资料的平台,公司也开始联系你I tried雇用设置一切花了大约两个小时当我的个人资料上线时,令人振奋调查正在涌入在一天之内,我有10家公司对我感兴趣不幸的是,他们中的大多数都不符合我的标准:他们是大型企业公司,不在多伦多或早期创业公司最后,我与其中两家公司进行了交谈总而言之,这是一次有益的经历。

预检

面试过程的第一个障碍几乎总是与人力资源部门的人打电话关于这一步,网上有很多提示,但这是我观察到的。

First of all, do your research! Know what the company does, what industry they are in奖励积分:阅读1-2篇博客文章并随便提及您选择的内容如果可能,请与他们一起设置帐户并浏览产品我还试图找到公司期望从招聘广告中获得的最重要的品质(例如速度)然后用这些来形容自己。

其次,每个人通常会问同样的问题我的前五名是:

  • 你为什么想为我们工作?
  • 你能告诉我一些关于你自己的事吗?
  • 你最大的成就是什么?
  • Are you applying elsewhere? / Do you already have an offer?
  • 您的预期薪水是多少?

别忘了,这是一名人力资源专业人士他们试图看看你是否可以形成完整的句子,知道你在和谁交谈,并且 - 只是非常粗略 - 适合他们正在寻找的东西帮助他们理解,使用招聘广告中的一些关键词,正确看待问题并解释您在外行人的条件下所产生的积极影响。

编码挑战

编码挑战是一种非常明显的IT现象In what other profession do you find such an elaborate and commonplace procedure to put applicants to the test? Maybe this should give us all something to ponderWhy is it that someone who worked at various tech companies, has an active GitHub profile and a blog, is asked to go through programming puzzles? I digress.

以下是我必须要做的编码挑战:

HackerRank

HackerRank是一个致力于编码挑战的平台您可以使用多种编程语言来练习它们他们的商业模式是将这个平台出售给公司,作为测试申请人的一种方式。

我的挑战涉及九个练习,例如:

诀窍是你只有90分钟但至少你可以使用IDE和你的语言文档此外,还有测试可以运行您的解决方案并获得及时的反馈。

说实话,我讨厌那个考试我实际上已经在HackerRank上练习,并且认出了两个练习但是,最后我在时间到来之前只完成了大约80%我知道测试的目的是让我失败,但这并没有让我感觉更好。

Remoteinterview.io

这个测试与之前的测试非常相似,但是在不同的平台上更加轻松没有倒计时这对我如何进行练习产生了巨大的影响。

挑战是:

  • 复制数组
  • 修复代码只打印偶数
  • 修复代码以计算两个数字的平方
  • 重构一些代码以使其更具功能性
  • 解释一下[“123”,“456”,“789a”,...]。map(parseInt)回报
  • 您最感兴趣的ECMAScript提案是什么?
  • 鉴于一系列要求,您会选择哪种技术堆栈?

我比以前更喜欢这个挑战这些问题没有测试我是否能找到完全人为问题的算法,而是探索编程的各个方面:理解和修复现有代码,重构以及更高层次的思考和意见。

唯一的例外是测试我对JavaScript怪癖的知识。parseInt函数有一些非常奇怪的行为但幸运的是,你可以去阅读文档,因为没有倒计时。

小型项目

另一家公司让我根据简短的规范创建一个Web应用程序我喜欢我能够选择我想要的任何语言和框架此外,该项目与公司的业务有关,并且描述得非常好。

虽然他们说我不应该花费超过几个小时的时间,但我花了一天半的时间才完成这主要是因为我选择了一个技术堆栈,我不像Java那样精通(但在Java中构建前端是一种痛苦)另一个原因是我有一段时间没有使用PostgreSQL(需要使用)。

无论如何,当我完成并打包它时,我非常接近提交它但后来我意识到我没有尝试运行我创建的包我试过了,应用程序没有启动我忘了添加其中一个目录我修好了,再次尝试,它有效好事我还没发送破碎的那个!

总而言之,我认为这是一个有趣而有价值的挑战,虽然有点太耗时。

棘手的算法

从另一家公司,我收到了一个相对较小但仍然非常困难的挑战从事件列表中,我应该找到并返回重叠的所有事件对的列表最重要的是,我被要求用他们选择的编程语言来编写它我只对这种语言有过一些经验由于它是一种函数式编程语言,因此我确保尽可能将算法编写为惯用语。

提出算法花了我大约一个小时 - 但实现它简洁,实用和高效,因为我可能花了我大约三个小时我使用测试来覆盖所有边缘情况,并确保我提交了一个有效的解决方案。

这是一个非常酷的挑战我必须解决一个棘手的问题并使用新的编程语言。

交互式编码

最后但并非最不重要的是,我被要求准备一个小的ToDo应用程序(花了我大约一个小时)然后,在与工程师的通话中,我需要添加一些额外的功能。

最后,我被问到最后一个最具挑战性的算法的空间和时间复杂性总而言之,非常简单我发现与面试官进行对话非常重要特别是,要求他澄清约束和要求会产生巨大的差异刚开始编码通常是一个不好的举动。

无视挑战

我接到了公司的挑战,由于我的优先顺序和承诺,我无法在截止日期前完成工作我写了这些并解释了情况,告诉他们我不能再与他们面谈,因为我太忙于与其他公司合作。

令我惊讶的是,他们提议让我直接飞到他们的纽约总部去见团队我很困惑最终,我认为公司并不合适,但我不得不继续前进。

访问

#1

在我第一次面试之前,我并不紧张我把它看作试运行。

起初,CTO要求我谈谈我之前的工作经历,并且我要在白板上深入解释我最大的成就。他们印象非常深刻。

然后,有一个编码挑战我被要求事先准备好我的开发环境这项练习是为了实现生命游戏,与工程副总裁配对这很有趣,因为它不仅仅是关于我的编码技巧,也是关于我的沟通技巧。

起初,情况非常糟糕我对Python的信心并不像我想的那么自信我在前五分钟犯了一堆业余错误但是由于我的测试驱动方法,我逐渐获得了信心最后,我按时完成了一个有效的解决方案Success! The CTO and VP of Engineering both commented on the solution being very succinct.

显然,每个人都印象深刻,因为突然首席执行官进来采访我我们聊了一个多小时我询问了公司面临的主要挑战和未来发展方向他问我对角色和工资的期望是什么经过一个漫长的下午,我心情非常愉快地离开了采访室,很快就期待了。

两天后,我收到了一封电子邮件他们拒绝了我很惊讶,想知道我做错了什么后来让我接受采访的人发现他们确实留下了深刻印象,但他们认为他们现在在公司里没有合适的角色。

#2

我的第二次采访是在一家公司看来,这对我来说似乎很自然:他们使用Java来做所有事情On the one hand, I was confident because of my vast Java experience - but on the other hand, I didn't yet know the reason why my first interview didn't get me an offer and feared I was doing something fundamentally wrong.

我遇到了三个人,每个人都会对我进行各种测试。

第一个基本上是一个Java测验:可以标记为什么final? What types of visibility exist? What is the default behavior of==? What is the relation between的hashCode等于? I knew most of it but it was getting harder with every question当我被问到Java如何HashMap中实施工作,我画了一个空白在我的整个职业生涯中,我已经使用了数十万次,但最后一次我想到哈希地图如何在内部工作是在大学毋庸置疑,它并没有那么顺利我的一部分因为不知道这一点而对自己感到生气,另一部分因为问这样一个低级问题而对面试官感到愤怒。

第二位采访者在白板上绘制了应用程序的仪表板,并要求我为它设计一个REST API我很快就开发了一个解决方案,并讨论了RESTful和优化性能的权衡我甚至谈到了GraphQL。

第三次采访是关于设计我的任务是设计多人棋牌游戏的对象我发现它非常人为面试官似乎也不自信这是一次奇怪的经历。

第二天早上我接到了电话他们给了我一个报价I told them, I'm still talking to other companies and they were okay with that but wanted an answer soon.

#3

我下一次面试的过程非常有条理。

当我到达时,我被快速浏览了一下办公室不幸的是,我的印象非常消极他们在办公桌旁边有一个公共区域(响亮!)(应该很安静!)办公室几乎完全没有自然光线 - 感觉就像一个沙坑之后,我被安排在一个会议室,在那里我进行了四次采访,每次采访一小时。

第一个建立在我给我的家庭作业的基础上我的任务是使我的解决方案适应新的要求这很有趣,有点儿有两个采访者,我们都挤在我的13英寸笔记本电脑周围当我完成练习时,我感到有点不知所措的边缘案例和期待的面试官我无法及时完成任务最大的问题是,即使在采访者离开后,我的大脑仍在忙着解决最后的任务我花了很长时间才放手重新聚焦。

接下来的采访是关于数据建模和系统设计起初,我的任务是建模“收据”但我的头仍然忙于最后一次练习更糟糕的是,我对整个概念感到困惑:在德国,你通常会处理发票而不是收据面试官似乎无法指导我解决这个问题无论如何,我偶然发现了这个练习,并且对于事情的进展感到非常失望。

但后来它转过身来我们还有一点时间,我遇到了系统设计问题:为收据设计OCR现在,在我进入采访之前,我在Glassdoor上阅读了一些内容并发现了这个问题的暗示在面试的前一天,我解决了两次问题它把它们吹走了我能够非常迅速地提出一个非常好的解决方案我可以说他们留下了深刻的印象我会让你决定这是不道德的。

然后,我在上次采访中与两位发展经理讨论了他们的工作方式和两位“常规”人士对他们的文化的看法没什么太壮观的了。

第二天早上,我收到了报价他们告诉我,我的报价是我各自职位的最高薪水事实上,它超过我对多伦多的一般薪水预期15%这给了我巨大的信心提升。

#4&#5

这些访谈与其他访谈截然不同。

在第一篇文章中,我与开发经理谈了大约两个小时Since I had solved an online coding challenge beforehand, we focused on high-level questions有趣的是,我们讨论了如何选择工具和技术例如,如何在Angular和React之间做出决定。

我被邀请参加第二次面试,以见到工程副总裁采访很快发现他们对我的角色不同于我最后,他们告诉我他们会回复我 - 但是第二天早上我发了一封电子邮件,告诉他们我觉得这不合适,就是这样。

#6

因为我必须签署保密协议,所以我不能谈论这个游民。

¯\ _(ツ)_ /¯

快进到第二天,我收到了报价。

决策

毕竟说完了,我有三个提议他们非常不同For example, the difference between the highest and lowest salary was 23%! And that's not counting additional benefits like catered lunch, health benefits etc.

我安排了与每个公司的经理打来的电话,并与他们聊了一个小时我们讨论了详细信息,如待命要求,我将加入的团队,我将要工作的事情等等我还咨询了一位朋友(软件工程师)以获得第二意见。

经过广泛的考虑,我做出了我的选择我选择了公司,我觉得自己可以进一步成长为一名软件工程师,这似乎有很好的工作与生活平衡,出色的薪酬以及对重要事项的工作。

得到教训

这就像一个销售渠道: I applied to 14 companies, talked to 8, interviewed at 5 and got an offer from 3You see how the numbers get smaller? If your pipeline dries out, the odds of getting an offer decline dramatically.

和大家谈谈: Even though I was hesitant to talk to a recruiter at first, it helped me immensely他本身并没有找到工作,但给了我一些关于当地科技场景和人力资源最佳实践的见解,我需要作为一个新人。

高级事项:也许是因为我申请了更多的高级职位,但总的来说,在现场采访中几乎没有任何低级别的问题采访者对我如何设计系统,对象关系和API感兴趣当然,我也必须实际编码 - 但是没有人关心我的ACID是什么或让我在白板上编码。

副项目不是有所帮助:所以至少对于一个高级开发人员来说,有一个副项目似乎并没有太大的区别没有人问过这个问题我试着在我的求职信中或在电话放映期间提出全栈位置,但我不知道它是否有任何影响即便是那些痴迷于Python的公司似乎并不关心 - 这让我感到惊讶然后,一家公司甚至不会采访我,因为我没有足够的Python堆栈经验所以最后,它没有似乎帮助那么多。

准备好个人电梯: The only 'question' I was consistently asked in every interview by every person I met was: "Tell me about yourself." You需要这里的答案很好它可以让你塑造叙事,画出自己的照片简短而引人注目算一算吧。

选择一个堆栈并使用它:在采访中 - 至少与更好的公司 - 我被允许选择筹码一世was comfortable with to solve a problem这产生了巨大的差异,并通过选择一种打字的语言(Typescript)来帮助我“欺骗”一点,所以我不必依赖我压力大脑来为我提供现场的所有功能名称。

能够深入讨论项目:When the inevitable question "What are you most proud of?" comes up, it's your turn to impress您应该能够为听众提供足够的上下文,以了解为什么它确实令人印象深刻Furthermore, if you are asked by an engineer, you can show off your technical expertise尽可能详细地了解详细信息让你知道自己在说什么,这很明显。

利用这个机会做好准备:在一半的访谈中,我被指示提前准备开发环境这是你获得成功的机会我为最常见的用例预先安装了一堆帮助程序库,例如模板,发出HTTP请求和提供REST API另一个好主意是准备一个测试运行器,在每个文件上运行,除了持续反馈。

了解复杂性和可扩展性:每次我需要编写代码时,都会被问到时间和空间的复杂性以及我是否可以简单地提高它的效率偶尔,我还被问到如果输入变得巨大会发生什么,所以它不再适用于一台机器在这里得到答案至关重要。

简化您的简历:首先,我的第一批在线申请的简历并不好它太长了,不容易“扫描”由于人力资源部门的人员收到了如此多的申请,据称他们只看了10-30秒的简历在大多数采访中,我可以说面试官没有读过我的简历超过一分钟人们很忙这里的教训是成功suuuuper容易学习关于你的最重要的事实基本上,应用课程Don't Make Me Think如果他们通过关键词判断你,就会输入很多关键词这不容小觑。


评论由Disqus