📜  竞争性编程–神话和吹毛求疵的事实(1)

📅  最后修改于: 2023-12-03 14:56:38.220000             🧑  作者: Mango

竞争性编程 – 神话和吹毛求疵的事实

竞争性编程(Competitive Programming)是指参赛者在一定时间内,利用编程技巧解决一系列按照难度分级的算法问题,并通过比赛或评测系统进行测试,最终取得高分的竞技活动。在现今的编程教育中,竞争性编程是一种备受推崇的学习方式,其中不乏集训营、讲座、竞赛、oj等。

竞争性编程的神话

竞争性编程被许多程序员看作是提高算法能力和编程水平的最佳方式,有着无限的可能性和前途。以下是竞争性编程的几个神话:

竞争性编程可以提高算法能力

竞争性编程强调算法能力。很多人认为通过参加竞赛可以更好地锻炼自己的算法能力,比如对贪心、动态规划、图论、博弈等算法的理解能力。然而,算法能力的提高并不全然依赖于竞赛;合适的学习方法,实际类问题的训练以及对算法的深入理解才是保证算法能力提高的关键。

竞争性编程可以提高编程水平

竞争性编程是一种极限条件下的编程方式,参赛者需要在紧张的时间内写出正确且高效的代码。相比于平常写的代码,这需要参赛者有更强的编写代码的能力和价值观。然而,要提高编程能力,不仅仅需要考虑正确、高效的代码,区位测试、易于维护及可扩展性等诸多方面都需要关注。

竞争性编程可以拓宽知识视野

竞赛题目涵盖不同的领域,使用不同的算法和数据结构;可以拓宽参赛者的知识视野。但是,参赛者必须在短时间内理解和掌握这些问题和术语,同时解决问题。这在许多情况下并不是建立深入开发和实际应用的广泛基础知识所积累的。

竞争性编程的吹毛求疵事实

如上文所述,竞争性编程看似拥有很多优点,但其在实际应用中存在不少吹毛求疵的问题。

威胁健康

刻意限制时间有很明显的负面影响。在快节奏的竞争性编程中,过度使用咖啡因和坐的时间很长,会对身体健康产生不良影响。此外,长期参赛者也可能会因压力过大引起的情绪反应情感崩溃,或导致心理疾病的患病率提高。

忽视实际开发

竞争性编程降低了许多与程序开发相关的问题,以追求高分数。在短时间内写出能够通过评测系统的代码既是当下的是不错表现,但很多的代码在实际应用中没有太多的价值。解决实际问题最终取决于实际环境,其中还包括实际的前沿开发技术、业务需求等。

高维护成本

随着时间的推移,早期默认并没有过多考虑代码的易读性、可维护性,而只是为了满足竞争性编程的目标。在竞争性编程的代码库中,找到一个合适的代码、阅读注释、伪代码可能会有 困难。这些问题仍需要开发人员继续优化和改进。

结论

尽管竞争性编程有利于对算法和编程技能的训练,但它并不是建立全部技能和价值观的主要方式。这里有一个建议:将竞争性编程与实际应用相结合:在某些情况下,增长算法和编程技能的好方法是开发实际应用程序,并且由尽可能的测试以确保其质量。