竞争性编程…。首先想到什么…?您最有可能将解决编码问题的想法与GeeksforGeeks,Codechef,Topcoder,Codeforces,Hackerank等相关联。
那么软件开发呢?您最有可能想象一个正在构建应用程序,网站,移动应用程序的人,或者正在处理应用程序的某些后端或可伸缩性问题的人。
许多站点鼓励您参与有关编码问题的竞争性编程和实践。毕竟,它为面试提供了很多机会。是的,的确如此,但是你们当中有些人也意识到,有些人在没有竞争性编程背景的情况下,在软件开发方面的收入非常可观。因此,困扰很多人特别是学生的问题是……。我应该在哪里 花我的时间吗?
在深入探讨这一主题之前,让我们先谈谈运动……以您喜欢的任何运动为例……板球,篮球,网球,羽毛球或任何其他户外运动。
参与这些体育活动的很多优秀运动员(是的。。。我们正在谈论优秀运动员),他们不仅一直在练习篮球,板球或其他任何比赛,而且还花时间在健身房锻炼身体。好吧,在跑步机上跑步,举重,俯卧撑,引体向上并不能保证您在运动中取得成功,但与没有这样做的人相比,它可以为您带来很多好处。
当您以具有竞争力的程序员身份进入软件开发领域时,在软件工程中也会发生同样的事情……(希望您得到我们希望通过上述示例传达的信息…… )。
对于计算机科学专业的学生来说,选择一个不仅是一个令人困惑的决定,而且对于有经验的人来说,这也是一个困难的决定。 正在寻找公司中更好的机会或成长的开发商。今天,我们将详细讨论该主题,并尝试解决这种混淆。在给出任何意见之前,我们先来看看一些在大型科技巨头公司工作的工程师的意见。根据Microsoft工程师Satendra Verma的说法,“尽管它可以提高您的技能,但优秀的软件工程师所需要的远远超出竞争性编程所提供的。竞争性编程不是成为一名优秀软件工程师的必要条件。 “如果我们谈论相反的一面,那么很多工程师也同意参与竞争性编程可以帮助他们抓住工作机会并成为软件工程师。
难道不是同一件事吗?如果不是这样,那么在聘用软件工程师的职位时,为什么公司会优先考虑竞争性程序员。
有竞争力的程序员也可以成为优秀的开发人员吗?
一个好的开发者已经不是一个好的竞争者吗?
我们知道,您会想到很多上述问题……同样的问题又出现了……我应该选择什么,我应该在哪里花时间?
如果我们说您应该同时选择两者,又该怎么办呢?……..现在让我们对该主题进行详细讨论……
竞争性编程
执行CP的最大优点是,它使您的生活更轻松,而破解编码面试对您而言可谓小菜一碟。即使您是一位优秀的软件开发人员,但又不是一位有竞争力的程序员,您在面试中仍可能会遭到拒绝。 CP使您成为解决软件开发中非常重要的问题解决者。
一个好的问题解决者可以轻松地完成一些具有挑战性和复杂的项目。当您在进行大型项目时,将问题分解成较小的单元并分别解决每个问题以使该项目对用户有用是很重要的。解决问题的技能对于竞争激烈的程序员来说自然而然。他们可以将问题分解为较小的部分,轻松地在头脑中可视化解决方案,并且几乎没有错误地将它们转换为代码。在软件开发中非常需要此功能。优秀的程序员还可以编写正确的代码,并且不会犯很多错误,这是它的另一个优点。
CP建立了基本的基础技能,而这一切都与学习美术和编程文化有关。解决编码问题是您大脑的一项运动,也是很多人的有趣游戏。有竞争力的程序员始终善于分析思维,解决问题的技能,数据结构,时间和代码的空间复杂性。当他们解决编码不同网站上的问题,他们加强这些技能,并在现实世界中的问题,它的问题很多……。如何??阅读下面给出的示例…
假设你在一个大的项目,您需要使用数据的传输块来处理大型数据库工作。在这里,读写将是一个耗时的过程,并且会降低应用程序的性能。为了提高应用程序的性能并节省大量资源,您需要编写高效的代码。您可以提高代码中函数的时间复杂度,并且可以通过将最常使用的数据存储在缓存中来减少读取调用。进行竞争性编程可帮助您以最少的成本找到最佳的解决方案 可能的 时间。它有助于做出这些权衡,在这种情况下,当您需要缩短代码的时间和复杂性并且需要找到问题的最佳解决方案时,就非常需要此技能。
在这里我们可以得出结论,有竞争力的程序员可以使用他们的分析思维以更好的方式解决问题。他们擅长为特定问题选择正确的数据结构。他们知道哪一个最适合特定问题。
从文章为什么数据结构和算法对学习很重要?中了解有关数据结构和算法的重要性的更多信息。
软件开发
Ask a software developer and they will let you know how satisfying the journey is to build actual software that end users use.
我们已经讨论了CP以及CP的优点,但是现在我们将讨论CP的另一端,它不能与软件开发相提并论。热爱CP的人通常不喜欢软件开发。原因是在大多数情况下,他们将不得不使用某些库,框架或某些工具来构建已经实现了某些东西的实际软件。在这些情况下,他们找不到竞争性编程技能集的任何用例。
作为一个有竞争力的程序员,如果您认为软件开发就是要在Stack Overflow上搜索解决方案或在一些在线社区的帮助下,那您就错了。成为开发人员是长途跋涉。这需要时间。它需要一种编码和开发东西的文化。 Ÿ欧将花费在各种网站和博客有很多的时间去了解所有的工具,技术库,让你的工作做的事情。您需要自己确定要使用哪种工具,库或框架来解决问题(例如,何时使用MongoDB,何时使用MySQL或何时使用Elastic search很好)。最好的工程师是足够聪明的人,他们可以使用最合适的工具来解决特定的问题。
软件开发人员还处理系统的复杂性,可伸缩性问题以及一些处理应用程序性能问题的技术(例如:缓存机制)。
在软件开发中,大多数时候您都是在团队中工作,而您的代码不仅是您的代码(竞争的程序员通常是他们的主人)。因此,在软件开发中编写易于阅读,易于修改,易于维护和易于扩展的干净,更好的代码非常重要。没有人喜欢在团队中处理由XYZ开发人员编写的一些凌乱的代码。如果您在代码库中留下一些凌乱的代码,您将受到其他开发人员的憎恨。因此,此技能是软件开发人员应具备的最重要的技能之一。它带有实践,耐心,查看其他开发人员的代码以及您沉迷于构建一些实际项目的时间。不幸的是,竞争性编程不能教您此技能。
您还需要精通设计模式,操作系统。计算机网络,分布式系统以及其他一些计算机科学的基本概念。软件开发可以在多个方面提高您的水平。因为您需要就产品需求或项目中的任务与经理或同事交谈,所以它可以提高您的沟通技巧。在CP中,只有您才能编写代码并提高评分。没有其他人的参与。
关于软件开发的最好的事情之一是,您可以使他人的生活更轻松,并且对人们的生活产生重大影响。看看您周围,有太多的应用程序使我们的生活更轻松。 Uber,Zomato,Swiggy和Ola对人们的生活产生了巨大影响。仅CP不可能完成这些事情。软件开发也为人们提供了自由职业的机会,这是很多人的又一个良好的收入来源。
那工作机会呢?
是的,我们需要谈论这个话题……归根结底,这全都与赚钱有关。
如果我们谈论初创公司,那么他们的要求是不同的。大多数时候,他们需要一个可以从头开始一切的开发人员。他们需要从头开始建立和构建所有内容。因此,他们在雇用时的要求是不同的。他们处于开发的初始阶段,因此产品的用户数量受到限制,因此有时不需要深入了解数据结构和算法。他们通常会雇用一些技术熟练的开发人员,他们从事某些项目,并且可以从第一天开始,几乎没有时间准备。
体面的编码背景足以满足这些初创公司的需求,但不仅如此,他们更喜欢那些已经具备与之合作的所有技术栈,编码方法,工具,库或框架方面的知识的人。他们更关心尽快为用户推出他们的产品。这些初创公司可能会在以后由于用户数量增加而开始注意到一些速度和可伸缩性问题时,需要具有竞争力的程序员。在这种情况下,使应用程序更快,更高效将是首选 为他们。
如果我们谈论大型科技巨头公司Google,Amazon,Microsoft,Apple,Facebook,Walmart等,那么这些公司的要求是不同的。他们在全球拥有大量用户,并且他们更加关心应用程序的效率和性能。他们需要一些具有丰富数据结构和算法知识的有竞争力的程序员。当然,有竞争力的程序员最适合他们,因为他们可以以更有效的方式思考和解决难题。一个有竞争力的程序员将能够选择正确的数据结构和算法来为他们完成工作。这些公司更多地关注代码的复杂性。因为其他所有事情都已经由专业人员来照顾。
结论
那么,开发人员可以在没有竞争性编程背景的情况下构建良好的软件,但是您是否认为,如果没有CP技能和对数据结构和算法的了解,他/她可以使应用程序更快,更高效,具有更好的时间和空间复杂性?当然不是……
关键是……如果您仅从事软件开发,则将缺少竞争性编程的一些优势,这些优势可能会帮助您构建优质的软件。另一方面,如果您只从事竞争性编程,那么您也很难适应软件开发的文化。
他们俩都需要彼此。所以两者都更好并且自助更好。你应该花时间 在竞争性程序设计中,以后您应该利用所获得的知识使自己成为一名优秀的开发人员。如果您是一名学生,则最好花一点时间在CP上以建立基础,但要动手实践一些真正的项目,即使它规模较小。对于经验丰富的开发人员,他们可以将这些编码挑战当作一种业余爱好,并作为其中的一个有趣部分。 他们的日常生活。就像打的健身房可以是某人的日常生活中保持健康的一部分,解决编码问题,也应该是开发者的生活的一部分。毕竟,这与您的大脑锻炼有关。
即使我们建议同时选择两者,您仍然可以选择一个,然后做自己喜欢做的事情。这完全取决于您的满意度,如果您只想专注于某一特定事物,那完全可以。这两个领域都有很多机会,如果您100%地奉献自己喜欢做的事情,您将获得足够的报酬。