作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
安妮特·惠勒-罗斯的头像

Anitet Wheeler-Rose

Anitet是一名全栈工程师和CTO,精通c++、JavaScript和DevOps. 前谷歌网站可靠性和软件工程师, Anitet在算法编程竞赛活动中获得第85至90百分位排名后被招募.

Expertise

Previously At

Google
Share

竞争性编程是一种智力运动,参与者需要解决复杂的编码难题. 参加这些赛事有可能为开发者带来职业上的成功. 反过来,招聘经理也可以通过以下方式找到顶尖人才 竞争性算法竞赛. 举个例子:八年前,谷歌注意到我的印象深刻 C++ 有竞争力的节目评级上 Topcoder单轮比赛(SRM) 平台聘请我做工程师.

20世纪70年代起源于大学校园, 此后,竞争性节目越来越受欢迎, 获得大型科技公司的关注, 并涵盖了算法编程等主题, machine learning, and game development. 在本文中,我将分享自己作为一名算法程序员的观点和经验.

竞争性算法事件

大多数算法竞赛都在专门的在线平台上进行, 每场比赛都能吸引数以万计的国际参与者. 以下在线平台提供定期、实时、分级的竞赛:

值得注意的比赛赞助商包括全球公司(e.g., Meta, Google—at least, 直到项目于2023年7月结束,情况才有所改变.g., ICPC, IOI). 此外,诸如 UVa Online Judge and Project Euler 通过为开发人员提供谜题来支持竞争性编程社区.

竞争结构

在算法竞赛中, 参赛者通常要在给定的时间内解决三到六个谜题. 参赛者试图用自己选择的语言编写程序来解决这些难题. Some platforms, 比如Codeforces, 为程序员提供设计测试用例的机会,这些测试用例会导致其他竞争者的源代码失败, 通过成功的攻击获得积分.

Point System

参赛者主要通过提交正确的谜题答案来获得积分. 竞赛平台执行严格的标准,并根据一组详尽的准备测试用例自动对每个解决方案进行评分. 参赛者将获得开发速度、算法效率和代码准确性的奖励.

大多数平台只会给完美的解决方案加分, 但有些人会对不完整的解决方案给予部分赞誉, 比如那些错过了某个边缘情况,或者对于大数据集来说速度太慢的情况, 但仍然给出了一个解决这个难题的方法.

Rating Assignment

一旦得分,一个 Elo-inspired 公式决定了参与者的评分,准确地反映了竞争对手相对于同龄人的能力. Thus, 随着开发者参与的竞赛数量的增加, 他们的评级将更准确地反映他们的地位.

有竞争力的算法程序员是顶尖的工程师候选人

有竞争力的编程评级是开发者才能的有力指标. 而各在线平台的评级系统各不相同, 竞争对手的百分位分布在全球都很好. 评级是公开的,因此任何感兴趣的人都可以获得.

财富100强的科技公司都知道 竞争性算法编程 for some time. 跨国公司经常赞助比赛,将其作为营销策略和人才搜索的结合.

精简招聘流程

当一个组织以高评价的竞争者为目标时, 它可以通过取消淘汰不合格求职者的面试环节,安全地简化招聘流程. 更短的招聘流程对开发者和公司都有利:

  • 组织成本节约: 更少的面试阶段意味着每个候选人预定的会议和住宿更少.
  • 更具竞争力的招聘流程: 更快的招聘决定意味着应聘者从第一次面试到收到录用信之间的时间更短. 对公司来说,这意味着更好的候选人留存率. 对于开发人员来说,这意味着面试过程不那么繁琐.

适用的专业技能

在关键活动平台上获得高分的候选人证明了他们在算法和数据结构方面的熟练程度. 毕竟,竞争性谜题是有效的 编程面试问题. 通过竞争获得的专业知识转化为可证明的,现实世界的专业技能:

竞争力的专业知识

相应专业技能

快速准确地解决难题

  • Code accuracy
  • 发展速度

识别并覆盖所有可能的测试用例

调试算法

  • 调试业务逻辑

开发高效算法

  • 可扩展算法开发
  • Code design

敌对的思想

  • Security
  • 仔细遵守需求和规范

一步一步的推理

  • Business analysis
  • 用例生成
  • 需求澄清和协商

Finally, 如果不提到技术创造力,本节将是不完整的, 驱动创新的首要属性. 解决具有挑战性的算法竞赛难题需要聪明才智和足智多谋. 因此,有理由认为,高评价的竞争者将表现出技术创造力的熟练程度——这是专业工程师所追求的品质.

如果你是一个程序员, 通过在简历的荣誉和奖励部分展示你的评分,让自己更容易被找到. 如果你是招聘经理,找出这些候选人来简化招聘过程.

没有在竞争性算法赛事中评估的技能

算法竞赛侧重于技能的特定子集, 一些重要的熟练程度并没有在其中体现:

并行计算

竞赛程序通常在服务器上进行测试,服务器上只有一个线程. 因此,竞争激烈的程序员可能对多线程技术缺乏经验.

Networking

竞赛谜题被设计成在单个程序中解决, 所有必需的输入和输出都在本地处理. In contrast, 网络环境带来的复杂性超出了算法竞赛的范围.

Readability

在竞争性编程中,可读性排在开发速度之后. In the workplace, 工程师必须适应公司的标准,并且写得通俗易懂, 文档清晰的代码.

领导和团队合作

开发人员在分级算法竞赛中单独竞争. However, 专业软件通常是由团队开发的, 沟通和软技能是取得成功的关键.

软件架构和战略规划

为解决竞赛难题而设计的程序通常短小精悍. 相比之下,专业软件的开发是考虑到长期适应性的.

System operations

一个竞赛谜题通常由一个执行一次的小程序来解决, 与现实世界相反, 程序需要维护并且必须与千变万化的系统互操作.

适应不断变化的优先事项

竞赛谜题有明确的要求和目标. 因此,一个竞争激烈的 算法的程序员 可能对开放式情境的经验较少.

一个有竞争力的程序员能过渡到专业的工程领域吗? 是的,很多人都这么做了. 建议新人通过补充技术和软技能来提高他们的技能. And, 有竞争力的程序员证明算法的优势, 招聘经理可以自由地把精力集中在筛选业务或其他技能上.

为什么c++是竞争算法事件的理想选择

一种高性能语言, c++非常流行 在竞争性节目中. c++还提供了一个广泛的标准库,可以方便地访问位操作和低级元素类型——所有这些都可以用于竞赛谜题.

c++是为大型企业系统设计的. 在算法竞赛中, 竞争对手通常将这种功能丰富的语言的使用限制在以下子集:

竞技节目的频率

c++语言特性

Ubiquitous

  • 标准库容器和算法
  • Lambdas
  • 对元素类型的低级访问
  • Bit manipulation

Occasional

  • 泛型模板
  • 预处理器宏
  • GDB 以及其他步骤调试器
  • 操作符重载

Negligible

  • Threads
  • Polymorphism
  • Exceptions
  • Smart pointers

请注意,在准备进入专业领域时, 开发人员应该掌握除本文介绍的竞争性算法编程子集之外的c++特性.

给有抱负的竞争性算法程序员的建议

开始竞争性编程冒险就像在您选择的平台上创建个人资料并注册现场比赛一样简单. 然而,要赶上进度,需要准备、自我教育和毅力.

尝试过去比赛中的谜题是练习和熟悉所选平台标准比赛格式的有效方法. 学习标准算法和技术(例如.g.最短路径问题和 卡特彼勒的方法)建立信心,为你的竞争做好准备.

Use the 赛前的社论 that are published by many of the contest platforms as resources; they describe past puzzles exhaustively, 提供解决方案的详细分析. 此外,一些网站托管一个 精心策划的练习谜题列表.

从竞争性编程过渡到工作世界

我是带着几年的竞争性编程经验和本科学位进入专业领域的. Over time, 我处理各种各样的任务,并与多个团队合作, 并成长为一个称职的 站点可靠性工程师.

我在Google担任站点可靠性工程师时,有过一个顿悟的时刻. 我在一个利用我的竞争力的项目中表现得非常好 c++编程技能我的经理和我意识到,我可以在任何发挥这种技能的情况下茁壮成长. 我们对这一理论进行了测试,并挑选了一些强调竞争性编程技能的项目. The result? I was happy, achieved success, 随着我的专业水平的提高,我在这个行业中找到了自己的定位.

随着竞争性节目越来越受欢迎, 招聘经理将看到更多具有算法竞赛背景的候选人. 了解技能概况是释放有竞争力的程序员全部潜力的关键. 如果你是一个有竞争力的程序员 C++ or another 语言——宣传你的成就来提升你的职业形象.

Toptal工程博客的编辑团队向 Umer Arshad 用于回顾本文中介绍的技术内容.

了解基本知识

  • 我如何开始竞争性节目?

    在你选择的平台上创建一个账户,然后通过解决练习难题来磨练你的技能.

  • 为什么要创建c++?

    c++创建于1983年,是C语言的扩展. 它提供了高级语言结构,如面向对象编程和泛型, 并且已经发展成为开发高性能软件最流行的语言之一.

  • 你需要c++来进行竞争性编程吗?

    不,但是c++、Java和Python是最流行的竞争性编程语言. c++以其高处理速度而闻名,比Java或Python都快. 为了解决需要顶级表现的高级谜题,速度可能是一个优势. c++还提供了一个广泛的标准库.

  • c++在现实世界中是如何使用的?

    对于需要高性能的系统来说,c++是一种可靠的编程语言选择. 高调的c++项目包括MySQL和Node.js.

  • c++还值得学习吗?

    Yes, 许多财富100强公司, 包括亚马逊和谷歌, 仍然依赖于c++开发的关键系统. 现有的代码库和新项目都继续使用c++作为他们的语言选择.

聘请Toptal这方面的专家.
Hire Now
安妮特·惠勒-罗斯的头像
Anitet Wheeler-Rose

Located in Haiku-Pauwela,美国

Member since October 21, 2022

About the author

Anitet是一名全栈工程师和CTO,精通c++、JavaScript和DevOps. 前谷歌网站可靠性和软件工程师, Anitet在算法编程竞赛活动中获得第85至90百分位排名后被招募.

Toptal作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

Expertise

Previously At

Google

世界级的文章,每周发一次.

订阅意味着同意我们的 privacy policy

世界级的文章,每周发一次.

订阅意味着同意我们的 privacy policy

Toptal Developers

Join the Toptal® community.