Мне бы хотелось написать, что я думаю про следующий диалог в комментариях к этому посту:
Horuka: а по вашей логике олимпиады для студентов не нужны?
gurovic: не просто не нужны - они вредны, губительны и иногда смертельны в смысле содержательной деятельности человека в дальнейшем.
Сразу оговорюсь: я знаком с олимпиадами не понаслышке, поэтому мое экстремальное мнение не произрастает из дремучести. Еще замечу, что речь будет идти в основном об ACM ICPC.
Так вот. В студенческих олимпиадах имеет смысл участвовать только в одном из двух случаев:
- вы получаете удовольствие от решения задач,
- вы чувствуете, что можете добиться больших успехов (выиграть финал, например), и получаете от этого удовольствие.
Да-да, именно более осмысленному.
Во-первых, студенческие олимпиады не научат вас программировать. Начав работать над серьезным проектом, вы с удивлением обнаружите, что умение быстро писать лапшу на 300 строчек скорее вредно нежели полезно.
Во-вторых, студенческие олимпиады не научат вас алгоритмам. Более того, олимпиадные задачи имеют лишь очень-очень слабое отношение как к теоретической, так и к "практической" computer science.
В комментариях, из которых взят диалог, проскальзывает мысль, что из победителей олимпиад часто получаются годные инженеры для серьезных контор (см. Google). Но по-моему здесь перепутана причина со следствием. Победитель ACM ICPC попадает в Google не потому, что он играл в олимпиады и чему-то научился, а потому что он уже пришел в олимпиады с головой на плечах (бывают редкие исключения, но они и правда очень редки). Это примерно как из утверждения "наличие миллиарда долларов сильно коррелирует с наличием яхты" сделать вывод, что если купить яхту, то станешь миллиардером.
Ну, и напоследок скажу, что даже те алгоритмы, которые используются в олимпиадах, изучаются олимпиадниками лишь постольку-поскольку. Правильно писать алгоритм Дейкстры и искать отрицательный цикл в графе я научился отнюдь не при подготовке к олимпиадам.