Now that I have your attention with the post title, let me go in-depth on my views of competitive programming.

现在,您的职位标题引起了我的注意,让我深入了解我对竞争性编程的看法。

什么是竞争性编程? (What is competitive programming?)

Competitive programming is a sport. You have to solve a problem with code that is fast, consumes the minimum amount of memory, and is often practically unreadable.

竞争性编程是一项运动。 您必须使用快速的代码来解决问题,该代码占用最少的内存,并且实际上几乎是不可读的。

It is super popular among university students and those trying to get into big companies, primarily because it helps them get placed in those companies. Unfortunately, millions of people are hired because of some knowledge they would never use in their jobs.

它在大学生和试图进入大公司的人们中非常受欢迎,主要是因为它可以帮助他们进入那些大公司。 不幸的是,由于一些知识,他们被雇用了数百万人,他们永远不会在工作中使用。

系统坏了 (The system is broken)

Here's another example from Hen-Wen:

这是Hen-Wen的另一个示例:

There are tons of examples out there I can think of.

我能想到很多例子。

The creator of homebrew – a package manager used by almost everyone running macOS? Rejected. The creator of WhatsApp? Rejected by Facebook and Twitter.

自制软件的创建者–几乎每个运行macOS的人都使用的软件包管理器? 拒绝。 WhatsApp的创造者? 被Facebook和Twitter拒绝。

So what is happening here? Are these people not qualified enough to work in these MNCs?

那么这里发生了什么? 这些人没有足够的资格在这些跨国公司工作吗?

No, the answer is that these guys can develop useful tools and write great software with top-notch code quality, but they probably fail to (re)invent an algorithm to invert a binary tree in a 30-minute time limit.

不,答案是这些家伙可以开发出一流的代码质量的有用工具并编写出色的软件,但他们可能无法(重新)发明一种算法,可以在30分钟的时间内转换二叉树。

Some of the best code written ever was not written in 30 minutes. Some of the best algorithms written in Linux kernel used even today were not written in 30 minutes by Linus. Some of the best UIs like Stripe was not designed in 30 minutes.

有史以来最好的代码中有一些不是在30分钟内编写的。 Linus甚至没有在30分钟内编写出一些用Linux内核编写的最佳算法。 一些最好的UI(例如Stripe)不是在30分钟内设计的。

So how can some random HR person in some random company decide your worth in 30 minutes?

那么,某个随机公司中的某个随机人力资源人员如何在30分钟内决定您的价值呢?

This is how companies judge your "feasibility" – by seeing if you can solve a toy problem completely unrelated to any work you might have done in the past, or you might do in the future.

公司就是通过这样的方式来判断您的“可行性”的:通过查看您是否可以解决与过去或将来所做的工作完全无关的玩具问题。

这个可以解决吗? (Can this be fixed?)

I don't know. I can complain and yell all I want, but I honestly don't know how companies can evaluate a person applying for a job quickly and correctly.

我不知道。 我可以抱怨和大喊我想要的一切,但老实说,我不知道公司如何才能快速,正确地评估求职者。

If you want quick, you'll lose a lot of good candidates like the ones mentioned above. If you want to lose no good candidates, the interview might last for way too long – much longer than the company can afford.

如果您想很快,就会失去很多像上面提到的候选人。 如果您不希望失去优秀的候选人,面试的时间可能会太长-远远超出公司的承受能力。

竞争性编程!==现实世界编程 (Competitive Programming !== Real World Programming)

Interviews for companies are more of an exam where you have to memorize and learn about things you won't use after getting the job.

公司面试更多地是一种考试,您必须记住并了解上班后不会使用的东西。

You think you might need to learn Dijkstra's algorithm to work on Google Maps, but seriously, do you think Google is going to hand over one of their core products to someone new to the company? Do you think you'll get no help whatsoever from your peers?

您认为您可能需要学习Dijkstra的算法才能在Google Maps上工作,但是说真的,您是否认为Google会将其核心产品之一交给公司新员工? 您认为您不会从同行那里得到任何帮助吗?

You will probably be working on the interface for the product, or distributed systems rather than working on one of Google's cor algorithms. This means all of your "competitive programming" knowledge is of no use.

您可能会使用产品或分布式系统的界面,而不是使用Google的cor算法之一。 这意味着您所有的“竞争性编程”知识都没有用。

You'll find almost no use for competitive programming in the real world. No algorithm running on production Microsoft servers is written in unreadable code, with short and meaningless variable names, undocumented and optimized only for speed and not readability or maintenance.

您会发现在现实世界中竞争性编程几乎没有用。 在生产型Microsoft服务器上运行的任何算法都不会用不可读的代码编写,它们的变量名短而无意义,没有文档记录,并且仅针对速度而进行了优化,而没有可读性或维护性。

Minifying and performance improvement comes later on, with automated tools a lot of the time. Chances are, if you are a competitive coder, you developed the bad habit of writing ugly code.

后来,随着自动工具的大量使用,最小化和性能的提高开始出现。 如果您是一位有竞争力的编码器,您很可能养成了编写丑陋代码的坏习惯。

Anyone can write code for machines. The question is, can you write code for humans?

任何人都可以为机器编写代码。 问题是,您可以为人类编写代码吗?

但是有希望 (But there's hope)

Sitting for interviews like this and hoping you can solve a toy question you prepared for 3-5 months learning just DSA and competitive programming is one way.

坐在这样的面试中,希望您能解决3-5个月准备的玩具问题,学习DSA和竞争性编程是其中一种方法。

There's another way – it'll work with fewer companies and people, but you'll enjoy it, and learn a lot of real-world things along the way. You'll also be more useful than those people who only learn "competitive coding" for the sake of it.

还有另一种方法–它可以与更少的公司和人员合作,但是您会喜欢上它,并在此过程中学到很多现实世界的知识。 与那些仅因此而学习“竞争性编码”的人相比,您将更加有用。

Build something. Anything. And then build more on top of that. Have a strong portfolio. Have a complete skillset which is useful for companies. Have mastery with a tech stack – own it. Have projects, blogs, experience to show that you are what is in your resume. Build connections, network with people, ask for their recommendations.

建立东西。 什么都可以 然后在此基础上进一步构建。 拥有强大的投资组合。 拥有对公司有用的完整技能。 精通技术栈-拥有它。 具有项目,博客和经验,以证明您就是简历中的一员。 建立联系,与人建立联系,征求他们的建议。

In a lot of places, competitive coding is not the only way to clear an interview – there are all kinds of people running all kinds of companies. A person who agrees with my PoV, and is running a company would not be hiring people on their "competitive" knowledge alone.

在许多地方,竞争性编码并不是清除面试的唯一方法–各种各样的人经营着各种公司。 同意我的PoV并经营公司的人不会仅仅依靠他们的“竞争”知识来雇用人员。

Your work can take you places you couldn't imagine. The easiest way is to always follow the crowd. But nothing good comes easy, at least if you're ambitious enough. Mixing just the right amount of ambition and courage can do wonders.

您的工作可以带您无法想象的地方。 最简单的方法是始终跟随人群。 但是,没有什么好事变得容易,至少在您有足够的野心的情况下。 恰到好处地将雄心和勇气混在一起就能创造奇迹。

The world needs great programmers to progress, to move humanity forward, not people who can get hired.

世界需要伟大的程序员来进步,以推动人类前进,而不是可以被录用的人。

不要将DSA与竞争性编程相混淆 (Don't confuse DSA with Competitive Programming)

I did not want to write this section initially, but I knew too many people will confuse this. DSA - Data Structures and Algorithms is something different. Heap, Maps, Arrays, Vectors, Linked Lists, .etc, all these are super helpful in real-world programming too.

我本来不想写本节,但我知道太多人会对此感到困惑。 DSA-数据结构和算法有所不同。 堆,地图,数组,向量,链接列表等。所有这些在实际编程中也非常有用。

The fun part is you can develop that understanding with experience, too. I never explicitly learned about "heap" using some big 50-hour DSA course. And if you are learning to program, you don't need a very very deep understanding of that too.

有趣的部分是您也可以通过经验来发展这种理解。 我从未使用一些大型的50小时DSA课程明确了解“堆”。 而且,如果您正在学习编程,则也不需要非常深刻的理解。

DSA in depth is required when you want to learn computer science, not programming. Understand the difference, computer science is the theory – programming is practical.

如果您想学习计算机科学而不是编程,则需要深入的DSA。 了解差异,计算机科学是理论–编程是实践。

Be aware of things that exist, algorithms that exist, and data structures that exist. You don't need to learn or memorize them all. It sounds insanely stupid to me to memorize or learn something which is rarely used when I can get it with a bit of help from colleagues and the internet.

注意存在的事物,存在的算法和存在的数据结构。 您无需全部学习或记忆。 对我来说,记住或学习一些很少用到的东西对我来说是愚蠢的,当我在同事和互联网的帮助下可以得到它的时候。

我的故事 (My story)

I'm not a competitive coder, probably the only CS undergrad in my university who never touched competitive coding in college.

不是一个有竞争力的编码器,可能是唯一在CS我的大学谁从未接触过竞争力的大学本科编码。

Why? Because I tried it 4-5 years ago and hated it. Why? Because I could see myself spending 3-5 hours of my day, every day, solving problems that got me nothing. I knew a thing or two more about approaching the next question, but was that enough to make an impact? Was that enough to stand out from the crowd?

为什么? 因为我在4-5年前尝试过并讨厌它。 为什么? 因为我可以看到自己每天花3-5个小时来解决无法解决的问题。 关于下一个问题,我还知道一两件事,但这足以产生影响吗? 这样足以在人群中脱颖而出吗?

What good was I doing? It felt like I was wasting time on questions that were already solved. It might be different for everyone, but I am happy when I see other people using the things I programmed (I started as a web developer by then).

我在做什么 感觉就像我在浪费时间在已经解决的问题上。 对于每个人来说,情况可能有所不同,但是当我看到其他人使用我编写的程序时就感到很高兴(那时我开始是一名Web开发人员)。

I just couldn't stand wasting my time learning something I would never use in the real world. I used to participate in Google's Code Jam and Facebook's Hacker Cup back in the day. But soon I got bored and frustrated, for the lack of a better word, and never really got back to it. Getting a job or internship didn't concern me, it never did.

我只是忍不住浪费时间学习在现实世界中永远不会使用的东西。 那天我曾经参加Google的Code Jam和Facebook的Hacker Cup。 但是很快,由于缺少更好的词,我感到无聊和沮丧,从此再也没有真正回过头来。 找工作或实习与我无关,从来没有。

I sat for Google interviews once on campus. They had a resume shortlisting round as the first round, unlike all the other companies where the first round was, wait for it, competitive coding round. Well there went the 7 years of web development and systems experience down the drain.

我曾经在校园里参加过Google面试。 他们在第一轮有一个简历入围名单,这与其他公司等待第一轮竞争的编码轮不同。 过去7年的Web开发和系统经验耗尽了。

Anyway, for Google, I was the only person to be shortlisted with a GPA of 7.5 (the highest GPA is 10 in India). The rest of the 10-15 people were above 8.5 or 9.

无论如何,对于Google来说,我是唯一入围GPA 7.5(印度的GPA最高为10)的人。 10-15人中的其余人高于8.5或9。

I didn't get past the competitive round again, but that taught me that it was possible to break into the first round of a company like Google with just your resume. Therefore, it's important to work on that.

我没有再经过竞争回合,但是这告诉我,仅凭您的履历就可以打入Google之类的公司的第一轮。 因此,进行此工作很重要。

结论 (Conclusion)

TL;DR – You don't need to learn competitive coding to succeed in life. You need to learn something you like so much that you master it, and you're unbeatable in your field. That's all.

TL; DR –您无需学习竞争性编码即可成功生活。 您需要学习非常喜欢的东西才能掌握它,并且在该领域无与伦比。 就这样。

Have views and opinions? Connect with me on Twitter and Instagram and let's talk!

有意见吗? 在Twitter和Instagram上与我联系,让我们谈谈!

翻译自: https://www.freecodecamp.org/news/mythbusting-competitive-programming/

令人难以置信的竞争性编程-您无需学习相关推荐

  1. 未来最有竞争力的编程语言_如何在2020年9月开始竞争性编程

    未来最有竞争力的编程语言 Competitive programming is changing the industry hiring process drastically. Many Big C ...

  2. 如何开始学习竞争性编程

    什么是竞争性编程? 竞技编程是一项智力运动,取决于解决问题的技能.数学和编程知识.竞争性编程比赛通常每年举行一次.有些是为高中生举办的,如 IOI,海鲜种类贝壳类有些是为大学生举办的,如 ICPC,还 ...

  3. velocity.js_使用Velocity.js令人难以置信的快速UI动画

    velocity.js 性能影响一切. 明显或真实的性能提升可改善用户体验. 反过来,改善的用户体验会提高利润. 几项主要研究证明,延迟增加会大大降低收入. 必应(Bing) 报告说,延迟增加2,00 ...

  4. 用十年教会自己编程_什么学习编程实际上教会了我

    用十年教会自己编程 by Zubin 通过Zubin 什么学习编程实际上教会了我 (What learning to code actually taught me) I have to admit ...

  5. javascript编程题_如何开始使用JavaScript进行竞争性编程

    javascript编程题 by Priyabrata Biswas 通过Priyabrata Biswas 如何开始使用JavaScript进行竞争性编程 (How to get started w ...

  6. 出现字迹模糊迹象_改变迹象:如何使用动态编程解决竞争性编程问题

    出现字迹模糊迹象 by Sachin Malhotra 由Sachin Malhotra 改变迹象:如何使用动态编程解决竞争性编程问题 (Change the signs: how to use dy ...

  7. 入职顶级互联网公司,竞争性编程是必须的吗?Google code jam King赛前采访(附有视频)

    主持人:你能告诉我一些关于你自己的事吗 受访者:就像我决定从事的竞争性编程一样,竞争性编程我不仅参加了那些比赛,高中时我在美国参加Google Code Jam,因为我进入了决赛,这是我生命中的一部分 ...

  8. 为什么要学习编程?孩子学习编程有用吗?

    培养信息技术类人才是时代所需,技能学习是否应该从娃娃抓起?编程培训"低龄化"是好是坏? 为什么要学习编程?孩子学习编程有用吗? 很多家长认为:技能学习应该从娃娃抓起,而编程技能正是 ...

  9. 使用Velocity.js令人难以置信的快速UI动画

    性能影响一切. 明显或真实的性能提升可改善用户体验. 反过来,改善的用户体验会提高利润. 几项主要研究证明,延迟增加会大大降低收入. 必应(Bing) 报告说,延迟增加2,000毫秒会导致每用户收入下 ...

最新文章

  1. Linux Shell简介
  2. Java笔记-字符串编码与解码以及编码表原理
  3. 自动生成sqlserver增删改成_如何批量生成证书证件-可变条码-可变图片-可变数据-快速教程...
  4. 安装tron_具有Tron效果的JavaFX 2 Form
  5. java ajax级联_jQuery ajax级联二级菜单(转)
  6. C# RSACryptoServiceProvider加密解密签名验签和DESCryptoServic
  7. poj 1276 Cash Machine 背包问题
  8. Unity3D贪吃蛇
  9. ai跟随路径_AI 路径寻找器(形状组合工具)-怎么使用,使用教程
  10. 【线性代数·浅学】(一)行列式——n阶行列式定义,行列式性质,行列式展开定理,拉普拉斯定理,范德蒙德行列式,克拉默法则
  11. PCD文件格式的转换
  12. 华东师大计算机全国排名,华东师范大学就这水平进的985?
  13. 十大javascript难点
  14. 如何安装最新版本的office(preview预览版)、更新
  15. 国标28181:jrtplib从编译到使用
  16. O - 鸣人和佐助(BFS)
  17. 台式计算机内存可以扩展到多大,64位电脑系统可以支持多大内存【详细介绍】...
  18. 【计算机网络】传输层(一)—— 传输层概述
  19. erdas裁剪影像_在arcgis、ERDAS下如何进行影像图裁剪
  20. whistle使用指南

热门文章

  1. 【Latex】分数写法区别
  2. 【今日CV 计算机视觉论文速览 第136期】Wed, 26 Jun 2019
  3. 【今日CV 视觉论文速览】Fri, 15 Feb 2019
  4. 9203 0409 随堂
  5. 前端开发 个人简历的制作 0228
  6. IOS代理的设计模式
  7. 操作系统内核的一些事
  8. java mysql 数据类型对照
  9. 关于SpringMvc实践的一些体会和总结
  10. WCF性能优势体现 【转】