选择一个不仅对计算机科学来说是一个令人困惑的问题,对于成长中的经验丰富的开发人员来说也是一个艰难的选择。今天,我们将详细讨论这个话题,并试图解决这个困惑。在给出任何意见之前,让我们先看看一些在大型科技巨头工作的工程师的意见。微软工程师SatendraVerma表示,“虽然它可以提高你的技能,但一个优秀的软件工程师所需要的远远超过竞争性编程所能提供的。竞争性编程并不是成为一名优秀软件工程师的必要条件。”但如果我们谈论另一方面,很多工程师也同意参加竞争性编程可以帮助他们获得工作机会并成为一名软件工程师。这不是一回事吗?如果不是,为什么公司在招聘软件工程师职位时优先考虑竞聘程序员。CompetitiveProgramming做CP的最大优势是它让你的生活更轻松,破解编码面试对你来说是小菜一碟。即使你是一个优秀的软件开发人员,但不是一个有竞争力的程序员,你仍然可能在面试中被拒绝。CP使您成为在软件开发中非常重要的问题解决者。一个好的问题解决者可以轻松地承担一些具有挑战性和复杂性的项目。当您处理大型项目时,将问题分解为更小的单元并单独解决每个问题以使项目对用户有用非常重要。他们可以将问题分解成更小的部分,轻松地在脑海中想象出解决方案,并将它们转换成几乎没有错误的代码。这种能力在软件开发中是非常需要的。好的程序员也能写出正确的代码,不会犯很多错误,这是它的另一个优点。假设您正在从事一个大型项目,您需要通过传输数据块来处理大型数据库。在这里读取和写入将是一个耗时的过程,并且会降低应用程序的性能。要提高应用程序的性能并节省大量资源,您需要编写高效的代码。您可以增加代码中函数的时间复杂度,并且可以通过将最常用的数据存储在缓存中来减少读取调用。进行有竞争力的编程可以帮助您在最佳时间找到最佳解决方案。软件开发我们已经讨论了CP的优点,但是现在我们将讨论CP的另一面,这是软件开发无法比拟的。喜欢CP的人通常不喜欢软件开发。原因是在大多数情况下,他们将不得不使用一些库、框架或一些工具来构建已经实现功能的实际软件。在这些情况下,他们找不到竞争编程技能集的用例。作为一个有竞争力的程序员,如果你认为软件开发就是在百度上或者借助一些在线社区寻找解决方案,那你就错了。成为开发人员是一段漫长的旅程。这需要时间。它需要一种编码和开发事物的文化。您需要自己决定要使用哪种工具、库或框架来解决您的问题(例如,何时使用MongoDB,何时使用MySQL或何时使用Elastic搜索)。最好的工程师是那些足够聪明,可以使用最合适的工具来解决特定问题的人。软件开发人员还要处理系统复杂性、可扩展性问题,并通过一些技术(例如:缓存机制)来处理应用程序性能问题。在软件开发中,大部分时间你在团队中工作,你的代码不仅仅是你的代码(相互竞争的程序员往往是他们的主人)。因此,在软件开发中编写易于阅读、易于修改、易于维护和易于扩展的干净且更好的代码非常重要。没有人喜欢在一个团队中处理一些由XYZ开发人员编写的混乱代码。如果你在你的代码库中留下一些乱七八糟的代码,你会被其他开发者讨厌。因此,这项技能是软件开发人员应该具备的最重要的技能之一。不幸的是,竞争性编程无法教会你这项技能。你还需要擅长设计模式、操作系统。计算机网络、分布式系统和计算机科学的一些其他基本概念。软件开发可以通过多种方式提高您的水平。它可以提高您的沟通技巧,因为您需要与经理或同事讨论项目中的产品要求或任务。在CP中,只有您可以编码和升级。没有其他人参与。关于软件开发的最好的事情之一就是你可以让其他人的生活更轻松,你可以使人们的生活发生很大的变化。环顾四周,有许多应用程序可以让我们的生活更轻松。美团、微信、支付宝等对人们的生活产生了巨大的影响。这些事情光靠CP是做不到的。软件开发还为人们提供了自由职业的机会,这对许多人来说是另一个很好的收入来源。工作机会呢?是的,我们需要谈谈这一点,归根结底,一切都是为了赚钱。如果我们谈论初创公司,他们的要求是不同的。大多数时候,他们需要一个可以从头开始一切的开发人员。他们需要从头开始构建和构建一切。因此,他们在招聘时的要求是不同的。它们处于开发的初始阶段,因此产品的用户数量有限,因此有时不需要对数据结构和算法有深入的了解。他们通常会雇用少数从事某些项目的熟练开发人员,并且可以从第一天开始,几乎没有时间准备。如果我们谈论大型科技巨头谷歌、百度、亚马逊等,这些公司的要求是不同的。他们在全球拥有大量用户,他们更关心应用程序的效率和性能。他们需要一些精通数据结构和算法的有能力的程序员。当然,有竞争力的程序员最适合他们,因为他们可以更有效地思考和解决难题。称职的程序员将能够选择正确的数据结构和算法来完成任务。这些公司更关注代码的复杂性。结论好吧,开发人员可以在没有竞争性编程背景的情况下构建优秀的软件,但是您认为如果没有CP技能以及数据结构和算法的知识,他/她可以使应用程序更快、更高效、具有更好的时间和空间复杂度吗?当然不是。关键是,如果您只从事软件开发,那么您将错过竞争性编程的一些优势,这些优势可能会帮助您构建出色的软件。另一方面,如果你只是做有竞争力的编程,你也很难融入软件开发的文化。他们都需要对方。所以最好两者兼得,尽管我们建议两者都选择,但您仍然可以选择一个并做自己喜欢的事情。这完全取决于您的选择,如果您只想专注于一件事,那完全没问题。这两个领域都有很多机会,如果你将100%投入到你喜欢做的事情中,你就会得到足够的报酬。
