我如何进入 ThoughtWorks 或面试样本

我如何进入 ThoughtWorks 或面试样本

当你要换工作,需要通过面试时,你首先想到的就是“你需要准备面试”,这对你来说是不是很奇怪。 解决 HackerRank 上的问题,阅读破解编码面试,记住 ArrayList 的工作原理以及它与 LinkedList 的不同之处。 哦,是的,他们也可能会问有关排序的问题,如果说快速排序很可能是最佳选择,显然是不专业的。
但是等等,你每天编程 8 小时,解决有趣且重要的问题,而在你的新工作中你也会做同样的事情,无论是加还是减。 但尽管如此,为了通过面试,你需要做一些额外的准备,甚至不是磨练你的日常技能,而是学习一些你在当前工作中不需要并且在下一份工作中不太可能需要的东西。 对于你的反对意见,计算机科学已经融入了我们的血液,如果你在半夜叫醒我们,我们就不得不闭着眼睛在枕套上写字,绕着一棵树的宽度走一圈,甚至没有恢复知觉,我我会回答说,如果我在马戏团找到一份工作,而我主要的技巧就是这个——那么也许是的,我同意。 这项技能需要经过考验。

但为什么要测试与你当前工作无关的技能呢? 就因为它变得时尚? 因为谷歌就是这么做的? 或者因为你未来的团队负责人必须在面试前学习所有排序方法,而现在他认为“每个优秀的程序员都必须牢记在字符串中查找回文的实现”。

好吧,你不是 Google (c)。 谷歌能买得起的东西,普通公司却买不起。 谷歌在分析了其员工的数据后得出的结论是,具有奥林匹克背景的工程师擅长处理其特定任务。 此外,通过设计他们的选择过程,他们可以承担由于无法轻松解决数学问题而无法雇用一些优秀工程师的风险。 但这对他们来说不是问题,有很多人想在谷歌工作,这个职位会被关闭。
现在让我们看看窗外,如果在你的办公室前面想要为你工作的工程师还没有搭起帐篷营地,而你的开发人员更多地在 stackoverflow 上寻找下一个需要安装的 Spring 注解,而不是复杂的排名算法,那么,显然,是时候让你考虑是否应该复制谷歌了。

好吧,如果这次谷歌失败了并且没有提供答案,你该怎么办? 准确检查开发人员在工作中将做什么。 您看重开发商的什么?
为您想要雇用的人员制定标准,并开发准确测试这些技能的测试。

ThoughtWorks的

ThoughtWorks 与此有何关系? 这是我为自己找到的一个模型面试的例子。 ThoughtWorks 是谁? 简而言之,这是一家高端咨询公司,办事处遍布世界各地,从中国、新加坡到美洲大陆,在发展领域咨询了约25年,拥有自己的科学部门,由马丁领导福勒。 如果您要查找软件工程师必读的 10 本书清单,那么其中可能有 2-3 本书是由 ThoughtWorks 的人编写的,例如 Martin Fowler 的《重构》和 Sam 的《构建微服务:设计细粒度系统》纽曼或构建进化架构
作者:帕特里克·库阿、丽贝卡·帕森斯、尼尔·福特。

该公司的业务建立在提供相当昂贵的服务之上,但客户为卓越的质量买单,其中包括专业知识、内部标准,当然还有人员。 因此,雇用合适的人才在这里至关重要。
什么样的人是对的? 当然,每个人都有不同的。 ThoughtWorks 确定其开发者商业模式最重要的标准是:

  • 结对发展的能力。 这是能力,而不是经验或技能。 没有人想到会来一个已经练习了5年结对编程的人,但是接受别人的意见并能够倾听是一项必要的技能。
  • 能够编写测试,最好能够实践 TDD
  • 了解 SOLID 和 OOP 并能够应用它们。
  • 提出你的意见。 作为顾问,你必须与客户的开发人员以及其他顾问合作,如果一个人知道如何做好某件事,但完全无法将其传达给团队的其他成员,那么并没有多大好处。

现在评估候选人的这些特殊技能非常重要。 这里我想谈谈我在ThoughtWorks面试的经历。 我马上就说我去了新加坡就通过了,但是招聘流程是统一的,各个国家不会有太大差别。

阶段0.人力资源

正如经常发生的那样,与 HR 进行 20 分钟的面试。 我就不多说了,我只是说我从来没有遇到过一个人力资源人员能够花 15 分钟谈论公司的开发文化,为什么他们使用 TDD,为什么结对编程。 通常,人力资源部门会对这个问题犹豫不决,并表示他们的流程很正常:开发人员开发,测试人员测试,经理推动。

第 1 阶段。您在 OOP、TDD 方面的表现如何?

采访开始前1.5小时,我接到一个任务,要做一个火星车模拟器。

火星漫游者任务美国宇航局将把一队机器人漫游车降落在火星高原上。 这个高原是奇特的矩形,必须由漫游车导航,以便其机载摄像机能够获得周围地形的完整视图,然后发送回地球。 流动站的位置和位置由 x 和 y 坐标以及代表四个基本罗盘点之一的字母的组合表示。 该高原被划分为网格以简化导航。 示例位置可能是 0, 0, N,这意味着漫游车位于左下角并面向北。 为了控制漫游车,美国宇航局发送一串简单的字母。 可能的字母是“L”、“R”和“M”。 “L”和“R”使漫游车分别向左或向右旋转 90 度,而不离开当前位置。 “M”表示向前移动一个网格点,并保持相同的航向。
假设从 (x, y) 正北的正方形是 (x, y+1)。
输入:
输入的第一行是高原的右上坐标,左下坐标假定为0,0。
其余的输入是与已部署的漫游器有关的信息。 每个流动站都有两行输入。 第一行给出了流动站的位置,第二行是一系列指令,告诉流动站如何探索高原。 该位置由两个整数和一个以空格分隔的字母组成,对应于 x 和 y 坐标以及流动站的方向。
每个漫游车都将按顺序完成,这意味着在第一个漫游车完成移动之前,第二个漫游车不会开始移动。
输出:
每个流动站的输出应该是它的最终坐标和航向。
笔记:
只需实现上述要求,并通过为其编写单元测试来证明真空吸尘器的工作原理即可。
创建任何形式的用户界面都超出了范围。
优先采用 TDD(测试驱动开发)方法来解决问题。
在有限的时间内,我们更关心的是质量而不是完整性。
*我无法发布发送给我的作业,这是几年前给出的旧作业。 但相信我,从根本上来说一切都保持不变。

我特别想提请注意评估标准。 您有多少次遇到这样的情况:对候选人来说重要的事情在审核过程中完全不重要,反之亦然。 并非每个人的想法都与您相同,但如果您的价值观得到明确表述,很多人都可以接受并遵循您的价值观。 所以,从评估标准来看,现阶段最重要的技能是

  • 时分驱动;
  • 能够使用OOP并编写可维护的代码;
  • 结对编程能力

因此,我被警告要花 1.5 个小时思考如何完成任务,而不是编写代码。 我们将一起编写代码。

当我们接到电话时,这些人简要地告诉了我们他们是谁、他们做什么,并提出开始开发。

整个采访过程中,我从来没有感觉到自己被采访了。 有一种在团队中开发代码的感觉。 如果你在某个地方遇到困难,他们会提供帮助、建议、讨论,甚至互相争论如何最好地做到这一点。 在面试中,我忘记了如何在 JUnit 5 中检查某个方法是否抛出异常 - 他们提出继续编写测试,而其中一个人正在谷歌搜索如何做。

面试后几个小时,我收到了建设性的反馈——我喜欢什么,不喜欢什么。 就我而言,我因使用 Sealed 类作为 null 对象的替代品而受到赞扬; 事实上,在编写代码之前,我用伪代码编写了如何控制流动站,从而收到了类的草图,至少是机器人 API 中涉及的类的草图。

第 2 步:告诉我们

面试前一周,我被要求准备一份关于我感兴趣的主题的演讲。 形式简单且熟悉:15 分钟演示,15 分钟回答问题。
我选择了鲍勃叔叔的清洁架构。 我再次接受了几个人的采访。 这是我第一次用英语演讲,也许,如果我处于压力很大的情况下,我就无法应对。 但话又说回来,我从来没有感觉到自己正在接受面试。 一切都像往常一样——我告诉他们,他们仔细听。 即使是传统的问答环节也不像采访;很明显,提出的问题不是为了“沉下去”,而是那些他们对我的演讲真正感兴趣的问题。

面试后几个小时,我收到了反馈——演讲非常有用,他们真的很喜欢听。

第三阶段:生产质量规范

在警告说这是技术面试的最后阶段后,我被要求将家里的代码带到生产就绪状态,然后发送代码进行审查并安排面试,在面试中任务的要求会发生变化,代码也会发生变化。需要修改。 展望未来,我可以说代码审查是盲目进行的,审查人员不知道候选人申请的职位,他们看不到他的简历,甚至看不到他的名字。

电话响了,显示器的另一边又出现了几个人。 一切都和第一次面试时一样:最主要的是不要忘记 TDD,告诉你你做什么以及为什么。 如果你以前没有实践过 TDD,那么我建议立即开始这样做,不是因为它在公司是必要的,而是因为它可以显着简化你的生活,如果你愿意的话,可以减轻你的压力水平。 还记得您如何不得不用调试器疯狂地搜索只能通过浏览器重现的错误,但无法通过测试重现它吗? 现在想象一下,你在面试过程中必须发现这样一个错误——你肯定会白头发。 通过 TDD 我们能得到什么? 我们更改了代码,意外地发现现在测试是红色的,但是我们第一次无法弄清楚错误是什么? 好的,我们对面试官说“哎呀”,按 Ctrl-Z 并开始向前迈出一小步。 是的,你需要培养自己使用 TDD 进行开发的能力,朝着目标前进的能力,这样你的测试永远是绿色的,而不是半天是红色的,因为“你有很多重构”。 这与编写可维护的代码或编写高效的代码完全相同。

因此,您的代码可以更改的程度取决于您开始时的设计、它的简单程度以及您的测试有多好。

面试结束后几个小时内我就收到了反馈。 在这个阶段,我意识到我已经快要结束了,在我“遇见福勒”之前已经所剩无几了。

第四阶段:决赛。 技术问题已经够多了。 我们想知道你是谁!

说实话,我对这个问题的提法感到有些困惑。 一小时的谈话你怎么能了解我是一个什么样的人? 更何况,我说的不是我的母语,而且说实话,非常蹩脚、结结巴巴,你怎么能理解呢? 在之前的采访中,我个人更容易说话而不是回答问题,口音是罪魁祸首。 至少有一位面试官是亚洲人,而且他们的口音,嗯,我们只能说,有点欧洲人特有的口音。 因此,我决定采取积极主动的方法——准备一份关于我自己的演讲,并在面试开始时提出用这个演讲来谈论我自己。 如果他们同意,那么至少我的问题就会少一些;如果他们拒绝这个提议,那么,我一生中花 3 个小时做演示的代价也不算高。 但是您应该在演示文稿中写什么? 传记 - 出生在那里,当时,上学,大学毕业 - 但谁在乎呢?

如果您用 Google 搜索一下 Thoughtworks 文化,您会发现 Martin Fowler 撰写的一篇文章 [https://martinfowler.com/bliki/ThreePillars.html],其中描述了 3 个支柱:可持续业务、卓越软件和社会正义。

让我们假设已经为我检查了软件卓越性。 它仍然是为了展示可持续的商业和社会正义。

此外,我决定重点关注后者。

首先,我告诉他为什么选择 ThoughtWorks——我在大学时读过 Martin Fowler 的博客,因此我喜欢简洁代码。

项目也可以从不同的角度呈现。 他还开发了医学软件,简化了患者的生活,据传言甚至挽救了一条生命。 我还为银行开发了软件,这也让公民的生活变得更轻松。 特别是如果该银行有全国 70% 的人口使用。 这与俄罗斯联邦储蓄银行无关,甚至与俄罗斯无关。

想了解我吗? 好的。 我的爱好是摄影,不知怎的,我手里拿着相机已经有大约10年了,有些照片我并不不好意思展示。 另外,有一次,我帮助了一个猫收容所:我拍摄了需要永久家的猫。 有了好的照片,放置一只猫就容易多了。 我可能拍了一百只猫:)

最后,我的演示文稿的 80% 都是猫。

演讲结束后,HR立即给我写信说,他还不知道面试结果,但整个办公室的人已经对猫印象深刻了。

最终,我等待反馈——我让每个人都满意。

但在最后的谈话中,HR委婉地说,Social Justice很好,很有必要,但并不是所有项目都是这样。 他问我是否害怕。 总的来说,我对社会正义有点过分了,这种情况确实发生了:)

结果,我已经在新加坡的 Thoughtworks 工作了几个月了,我看到这里有太多的公司正在采用 Google 的“最佳面试实践”,使用 leaves 和 Whiteboard 进行编码,尽管他们的知识比 Spring 多, Symfony、RubyOnRails(在必要的部分下划线)在工作中不是必需的。 工程师在面试前休息一周进行“准备”。

在 Thoughtworks,除了对候选人提出充分的要求外,以下原则也是最重要的:
面试的乐趣。 更何况,对于双方来说。 确实,如果你想得到最好的人才(谁不想呢?),那么面试就不是一个选择奴隶的市场,而是雇主和候选人互相评价的一场秀。 如果候选人将愉快的情绪与一家公司联系起来,他很可能会选择这家特定的公司

多名面试官以减少偏见。 在 Thoughtworks,结对编程是事实上的标准。 如果这种做法可以应用到其他领域,TW 就会尝试这样做。 每个阶段由2人进行面试。 因此,每个人至少由 8 个人进行评估,TW 尝试选择不同背景、不同方向(不仅是技术人员)和性别的面试官。

最终,聘用决定将根据至少8人的意见做出,没有人有决定性的一票。

基于属性的招聘 不是根据候选人的好恶来做出决定,而是为每个角色和每个阶段开发一个表格,其中包括所评估的属性。 同时,在评估时,强烈建议评估的不是某项技能的经验,而是应用它的能力。 因此,如果候选人无法应用任何技能,例如 TDD,但他仍然尝试应用它们,听取如何正确使用它们的建议,那么他就有机会通过面试。

不需要教育证书 TW 不需要任何计算机科学认证或教育。 仅评估技能。

这是我第一次在没有准备的情况下接受外国公司的面试。 每个阶段结束后,我并没有感到疲惫,相反,我很高兴我可以应用最佳实践,监视器另一边的人们很欣赏它并每天都应用它们。

几个月后,我可以说我的期望完全达到了。 ThoughtWorks 与普通公司有何不同? 在普通公司,你可以找到优秀的开发人员和友善的员工,但在台湾,他们的专注度却是超乎寻常的。

如果您有兴趣加入 ThoughtWorks,您可以查看我们的空缺职位 这里
我还建议关注有趣的职位空缺:
首席软件工程师: 德国, 伦敦, 马德里, 新加坡
高级软件工程师: 悉尼, 德国, 曼彻斯特, 曼谷
软件工程师: 悉尼, 巴萨, 米兰
高级数据工程师: 米兰
质量分析师: 德国 中国
基础设施: 德国, 伦敦, 智利
(我想诚实地警告你,该链接是一个推荐链接,如果你去TW,我将收到一份不错的奖金)。 选择您喜欢的办公室,您不必将自己限制在欧洲,毕竟每隔两年TW会很乐意将您转移到另一个国家,因为... 这是 ThoughtWorks 政策的一部分,因此文化得以传播和同质化。

请随时在评论中提出问题或向我寻求建议。
如果这个话题看起来很有趣,我会写一些在 ThoughtWorks 工作的感觉以及在新加坡的生活。

来源: habr.com

添加评论