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