5月底,我们的
编程冠军赛将开始。 它会在线进行,并允许您在以下四个领域之一进行测试:后端或前端开发,机器学习或数据分析。 这些部分的任务是在机器智能管理以及研究,搜索和地理服务中开发的。

所有参与者都必须首先克服资格赛。 申请后,您将选择何时服用。 资格考试为4个小时,包括4到6个任务。 我们将邀请最优秀的选手参加决赛,决赛将于6月1日在网上举行。 结果将于6月5日公布。 每个方向的获胜者将获得30万卢布,第二名-15万卢布,第三名-10万卢布。 注册是
开放的 ,将持续到资格回合的最后一天-5月26日,但是最好尽早发送申请。
在这篇文章中,我们将分享举办此类比赛的经验-涉及听众和准备复杂的算法问题。
* * *
锦标赛是我们在2017年至2018年间在Yandex.Blitz系列中实施的理念的发展。 不同之处在于,闪电战只是一系列不同方向的独立比赛。 它们仅通过格式结合在一起,并且发生在完全不同的时间。 确保阅读habrastati并分析每项比赛的任务:
机器学习 ,
后端 ,
前端和
移动开发 。
在准备冠军和这个职位时,我们与在Blitz担任重要职务,然后在Yandex工作的人进行了很多交谈。 重要的是要考虑到球员的实际经验,以及参与者的观点,以使比赛更加透明和有趣。
为什么值得参加?
就像过去的闪电战一样,冠军赛对于公司来说是很短的路要走:来自高层的参与者将能够根据简化的采访计划来找我们工作。 但是,我们不仅在等待那些正在寻找工作并考虑Yandex的人。 我们希望比赛将由另外两个类别的开发人员的代表参加。 第一类是对算法感兴趣,从事体育编程,也大量参加(或参加过)奥林匹克运动会和其他比赛的人。 我们将为这样的人提供值得他们完成关卡任务和有趣的经验的储钱罐。
第二类是经验丰富的程序员和分析师。 他们将有机会证明自己的经验和背景。 事实是我们已经编写了非常多样化的任务。 这使冠军有别于Kaggle的比赛-不管好坏,只是Kaggle提供了其他可能性。 在那里,编译器通常会提供这样的条件和数据,使您可以在特定区域中进行自我测试(如果需要,参与者有时间进行研究)。 我们的冠军赛历时数小时之久,并记录了当前的知识。 例如,您无法理解语音技术或计算机视觉,但要表现出这样的想法,以至于将来您可以快速进入任何主题。 当然,与Kaggle的比较仅与冠军的ML轨迹有关。
像生产
因此,主要思想保持不变:为参与者提供与军事任务接近的任务-Yandex开发人员和分析师真正遇到的任务。 因此,您可以了解这些任务的级别和特殊性,了解在公司找到工作后必须面对的问题。 此外,我们为比赛设置的任务将帮助参与者评估他们在特定领域的表现,他们是否有真正可以转化为改进的服务和应用程序的想法。
那些参加2017年和2018年闪电战的人看到任务部分是由战斗项目的源代码决定的。 但是,公司发展的战斗重点通常在于理解算法的需求-即使乍一看,这些领域与算法(例如前端和移动开发)相距甚远。 因此,针对这两个主题的竞赛通常被参与者认为接近战斗。 但是另外两个竞赛-在算法编程和机器学习中-即使没有任何“战斗”潜台词也需要对算法的理解。 他们也有这样的潜台词,但并非总是能够根据任务的情况来识别它。 但是,这并没有阻止参与者竞争,而是阻止了我们-实施闪电战的主要思想。
创意
当体育节目竞赛的任务不是由他们自己编写,而是基于服务中实际出现的任务时,它们的编译过程就完全不同了。 原因是在服务中,领导者或同事以与任务产生者来自比赛组织者的条件不同的方式,不同的方式将任务带给开发人员。 全职程序员甚至实习生,特别是如果他在公司工作了一段时间,比外部(甚至是非常有才华的)开发人员更深地沉浸在部门的流程中。 他们不能以同样的方式提出问题,特别是因为要求投标人在更少的时间内提出解决方案。 他的开发环境也不同:只有一个输入和输出文件,员工在存储库,内部接口,所有工具等中工作。
“清洁”条件
因此,我们从军事环境中接过任务,但后来我们总是问自己-他们的参与者会明白吗? 有时结果是:为了使开发人员更容易理解该条件,您需要为其写一个大的序言,介绍公司专家长期以来所熟悉的术语,等等。这种方法并不总是可行:在竞争中,条件很重要这样您就可以快速阅读它并转到最重要的内容-开发解决方案。 因此,在条件与序言一起变得太麻烦的情况下,我们尝试重新制定它并消除对序言的需求。 通常还需要使用另一种措辞,因为原始任务包含内部Yandex信息,这些信息不应在公司外部披露。 结果,任务可能变得更加抽象,不再与战斗生产中的类似物如此相似。
有趣的是,相反的情况(当条件可以立即简洁地表达而又不失去生产能力时)常常导致事实证明任务很困难。 例如,在与图像识别相关的任务中,机器学习的Blitz结局就体现了这一点。 今年的冠军赛也不例外。 除其他事项外,参与者正在等待有关机器翻译的任务-格式正确,难以实施且确实来自战斗项目(Yandex.Translate)。
我们检查什么
问题来了-使任务与生产相比变得抽象,我们不简化它吗? 以某种方式,是的,我们简化了它-要解决它,不再需要具有Yandex内部基础结构的经验以及与同事的初步沟通。 我们不需要熟悉代码审查过程,也不需要使代码美观,等等。但是,我们保留了每个需要算法思考的任务中信息最丰富的部分。 而且,即使您以某种简化的方式解决问题,也仍然意味着您是一名优秀的程序员。 优秀的程序员将迅速熟悉内部基础结构,深入研究代码审查过程,并从一种编写代码的运动模式转换为工业模式。 就像在篮球比赛中一样:对球员来说,最主要的是尺寸和对比赛的深刻理解,并且可以教授罚球。
我们提到了算法思维-在某种意义上,您需要能够使用所选语言来实现所需的算法:无需其他库。 最有可能的是,在实际工作中(比赛之前和之后),您将使用各种其他库,这些库仅调用必要的算法并大大减少了代码量。 连接它们的能力仅来自“可以教”的范畴。 确保我们在调用某个库时了解其作用和方式,这对我们来说更有趣。 从内部了解算法后,您将可以更有效地应用它们-无需自己实施它们。
分析比赛
在这篇文章中谈论冠军的目标时,我们经常回想起Yandex.Blitz。 但是现在,参与者可以选择数据分析的方向,而我们没有进行闪电战。 这是一条新曲目,有其自身的特点。 如果选择它,那么对算法的了解也将是一个加分,但程度要比机器学习或后端开发轨道小。
这里的总体思路与其他领域相同:检查Yandex专家使用的技能。 所以问题是,什么技能可以派上用场?
Yandex中出色的分析师的关键技能是能够产生假设,从模糊的任务条件,模棱两可或嘈杂的数据中提取有用信号的能力。 我们的分析师通常使用Python编写并处理大型数据流,例如,使用Yandex.Metrica日志,用户会话,技术服务器日志等。
为了解决锦标赛框架内的分析问题以及在Yandex中进行进一步的工作,了解数理统计和概率论的基础非常有用。 这是有助于对过程做出正确的,基于数据的结论的基础知识。