📜  竞争性编程与软件开发——我应该把时间投资在哪里?

📅  最后修改于: 2021-10-19 06:25:40             🧑  作者: Mango

竞争性编程……您首先想到的是什么……?您很可能会联想到解决 GeeksforGeeks、Codechef、Topcoder、Codeforces、Hackerrank 等编码问题的想法。

软件开发呢……?您很可能会想象一个人构建一个应用程序、一个网站、一个移动应用程序,或者一个人处理应用程序的一些后端或可扩展性问题。

许多网站鼓励您参与竞争性编程和编码问题的练习。毕竟,它为求职面试提供了很多机会。嗯,这是真的,但你们中的一些人也意识到,有些人在没有竞争性编程背景的情况下在软件开发中收入很高。所以困扰很多人尤其是学生的问题是……应该在哪里 投资我的时间?

竞争性编程与软件开发-我应该选择什么

在我们深入探讨这个话题之前,让我们先谈谈运动……以你喜欢的任何运动为例……板球、篮球、网球、羽毛球或任何其他户外运动。

很多优秀的球员(是的!……我们正在谈论优秀的球员)参与这些体育活动,不仅一直在练习篮球或板球或任何其他比赛,而且还花时间在健身房保持健康。嗯,在跑步机跑步、举重、做俯卧撑、引体向上并不能保证你在运动中取得成功,但与不做这些的人相比,会给你带来很多好处。

当你作为一名有竞争力的程序员进入软件开发世界时,同样的事情也会发生在软件工程中……(希望你已经得到了我们想要通过上面的例子传达的信息…… )。

选择一个不仅对计算机科学专业的学生来说是一个令人困惑的决定,而且对于有经验的人来说也是一个艰难的决定。 在公司中寻找更好机会或增长的开发人员。今天我们将详细讨论这个话题,我们将尝试理清这个困惑。在我们给出任何意见之前,让我们看看在一些大型科技巨头公司工作的一些工程师的意见。根据微软工程师 Satendra Verma 的说法,“虽然它增加了你的技能,但一个优秀的软件工程师需要的比竞争性编程所提供的要多得多。竞争性编程并不是成为一名优秀软件工程师的必要条件。 ” 如果我们说对立面,那么很多工程师也同意参加竞争性编程有助于他们抓住工作机会并成为一名软件工程师。

两者不是一回事吗?如果不是这样,那么在招聘软件工程师的职位时,为什么公司会优先考虑有竞争力的程序员

有竞争力的程序员也能成为优秀的开发人员吗?

一个好的开发者不就是一个好的有竞争力的程序员吗?

我们知道您的脑海中会冒出很多上述问题……同样的问题又出现了……我应该选择什么,我应该在哪里投入时间?

如果我们说你应该两者都选择,你可以成为两者??…..现在让我们详细讨论这个话题……

竞技编程

做 CP 的最大好处是它让你的生活更轻松,破解编码面试对你来说是小菜一碟。即使您是一名优秀的软件开发人员,但不是一名优秀的有竞争力的程序员,您也可能在面试中面临拒绝。 CP 让你成为一个很好的问题解决者,这在软件开发中很重要。

一个好的问题解决者很容易处理一些具有挑战性和复杂的项目。当您在处理一个大项目时,将问题分解成更小的单元并单独解决每个单元以使项目为用户工作是很重要的。解决问题的技能对于竞争激烈的程序员来说是很自然的。他们可以将问题分解成更小的单元,在脑海中轻松地将解决方案形象化,并将它们转换为几乎没有错误的代码。这种能力在软件开发中是非常需要的。一个优秀的有竞争力的程序员也会编写正确的代码并且不会犯很多错误,这是它的另一个优势。

CP 建立基本的基础技能,这一切都与学习艺术和编程文化有关。解决编码问题是对大脑的一种锻炼,对很多人来说也是一种有趣的游戏。一个有竞争力的程序员总是能很好地掌握代码的分析思维、解决问题的能力、数据结构、时间和空间复杂性。当他们在不同的网站上解决编码问题时,他们会增强这些技能,而实际问题中这很重要……如何??阅读下面给出的例子……

假设你一个大的项目,您需要使用数据的传输块来处理大型数据库工作。在这里读取和写入将是一个耗时的过程,它会降低应用程序性能。为了提高应用程序性能并节省大量资源,您需要编写高效的代码。您可以提高代码中函数的时间复杂度,并且可以通过将最常用的数据存储在缓存中减少读取调用。进行有竞争力的编程可以帮助您以最少的时间找到最佳的解决方案 可能的 时间。它有助于进行这些权衡,在这种情况下,当您需要改进代码的时间和复杂性并且需要找到问题的最佳解决方案时,非常需要此技能

在这里我们可以得出结论,一个有竞争力的程序员可以使用他们的分析思维以更好的方式解决问题。他们擅长为特定问题选择正确的数据结构。他们知道哪一个最适合特定问题。

从文章为什么学习数据结构和算法很重要?

软件开发

我们已经讨论了 CP 以及 CP 的优点,但现在我们要讨论 CP 的另一面,它无法与软件开发相提并论。喜欢CP的人一般不喜欢软件开发。原因是大多数时候他们将不得不使用一些库、框架或一些工具来构建已经实现的实际软件。在这些情况下,他们找不到任何使用其具有竞争力的编程技能的用例。

作为一名有竞争力的程序员,如果您认为软件开发就是在 Stack Overflow 上搜索解决方案或寻求一些在线社区的帮助,那么您就错了。成为一名开发人员是一个漫长的过程。这需要时间。它需要一种编码和开发东西的文化。 Ÿ欧将花费在各种网站和博客有很多的时间去了解所有的工具,技术库,让你的工作做的事情。您需要自行确定适合选择哪种工具、库或框架来解决您的问题(例如,何时使用 MongoDB,何时使用 MySQL 或何时使用 Elastic search 比较合适)。最好的工程师是那些足够聪明,可以使用最合适的工具来解决特定问题的人。

软件开发人员还处理系统的复杂性、可伸缩性问题,以及处理应用程序性能问题的一些技术(例如:缓存机制)。

在软件开发中,大多数时候你在一个团队中工作,你的代码不仅仅是你的代码(但有竞争力的程序员往往是他们的主人)。因此,在软件开发中编写清晰、更好的代码,易于阅读、易于修改、易于维护和易于扩展是非常重要的。没有人喜欢在团队中处理由 XYZ 开发人员编写的一些凌乱的代码。如果您在代码库中留下一些凌乱的代码,您会受到其他开发人员的憎恨。所以这项技能是软件开发人员应该具备的最重要的技能之一。它伴随着练习、耐心、查看其他开发人员的代码,以及当你沉迷于构建一些现实世界的项目时。不幸的是,竞争性编程不能教你这个技能。

你还需要擅长设计模式、操作系统。计算机网络、分布式系统和其他一些计算机科学的基本概念。软件开发可以在多个领域提高您的能力。它提高了您的沟通技巧,因为您需要与您的经理或同事讨论产品要求或项目中的任务。在 CP 中,只有您在编写代码并提高评分。没有其他人的参与。

关于软件开发的最好的事情之一就是你让别人的生活更轻松,你对人们的生活产生了很大的影响。看看你周围,有很多应用程序让我们的生活更轻松。 Uber、Zomato、Swiggy、Ola 正在对人们的生活产生巨大影响。这些东西只做CP是不可能的。软件开发也为自由职业者提供了机会,这对很多人来说是另一个不错的收入来源。

工作机会怎么样?

是的,我们需要谈谈这个话题……毕竟最终都是为了赚钱。

如果我们谈论初创公司,那么他们的要求是不同的。大多数时候,他们需要一个可以从头开始一切的开发人员。他们需要从头开始设置和构建一切。因此,他们在招聘时的要求不同的。它们处于开发初始阶段,因此其产品的用户数量有限,因此有时不需要深入了解数据结构算法他们通常会聘请一些熟练的开发人员,他们曾参与过一些项目,并且可以从第一天开始,几乎没有时间准备。

对于这些初创公司来说,体面的编码背景就足够了,但更重要的是,他们更喜欢已经了解他们需要使用的所有技术堆栈、编码方法、工具、库或框架的人。他们更关心尽快为用户在市场上推出他们的产品。由于用户数量不断增加,当这些初创公司开始注意到一些速度和可扩展性问题时,他们可能需要有竞争力的程序员。在这种情况下使应用程序更快更高效将是首选 为他们。

如果我们谈论大型科技巨头公司谷歌、亚马逊、微软、苹果、Facebook、沃尔玛等,那么这些公司的要求是不同的。他们在全球拥有大量用户,他们更关心应用程序的效率和性能。他们需要一些具有很强数据结构和算法知识的有竞争力的程序员。当然,有竞争力的程序员最适合他们,因为他们可以以更有效的方式思考和解决难题。一个有竞争力的程序员将能够选择正确的数据结构和算法来为他们完成工作。这些公司更关注代码的复杂性。因为其他一切都已由专业人员处理。

结论

好吧,开发人员可以在没有竞争性编程背景的情况下构建好的软件,但是您认为没有 CP 技能集以及数据结构和算法的知识,他/她可以使应用程序更快、更高效、具有更好的时间和空间复杂度吗?当然不是……  

关键是……如果您只从事软件开发,您将错过一些可以帮助您构建优秀软件的竞争性编程优势。另一方面,如果您只从事竞争性编程,那么您也很难适应软件开发文化。

他们两个都需要对方。所以更好地成为两者并帮助自己。你应该花时间 在竞争性编程中,之后你应该利用这些获得的知识使自己成为一名优秀的开发人员。如果您是一名学生,那么花时间在 CP 上打下基础是件好事,但即使较小的项目,也要亲自动手构建一些真正的项目。对于有经验的开发人员来说,他们可以将这些编码挑战当作一种爱好和有趣的一部分 他们的日常生活。就像打的健身房可以是某人的日常生活中保持健康一部分解决编码问题,也应该是开发者的生活的一部分毕竟这全都与您的大脑锻炼有关

即使我们建议选择两者,您仍然可以选择一个并做您喜欢做的事情。这完全取决于您的满意度,如果您只想专注于一件特定的事情,这完全没问题。这两个领域都有很多机会,如果您在自己喜欢做的事情上付出 100% 的精力,您将获得足够的报酬