Здравствуйте!
Сейчас я учусь в 10 классе и на следующий год планирую участвовать в олимпиадах по программированию(не всерос), т.к. узнал, что если стать призером, то получишь 100 баллов по ЕГЭ. Я понимаю, что пока что - это лишь сплошные мечты, но у меня есть +-год, чтобы ХОРОШО(надеюсь) подготовиться, и я готов этим заниматься. Первым же делом встал вопрос о языке. В будущем(дада мечты) хотелось бы поступить в вуз и выбрать направление(или просто профессию) Data Science, где как раз-таки и нужен Python(и R). Но в то же время я около месяца изучал C++ и он мне понравился, но бросил, т.к. не было мотивации.
И вот передо мной вопрос: какой язык изучать, чтобы использовать на олимпиадах Python или C++?
На Питон будет непривычно переходить с С++, да и сам Питон мне не очень нравится(на первый взгляд), но в то же время, если изучать С++ и в будущем выбирать Data Science, то он мне просто не нужен будет(я так думаю, если не прав, то прошу прощения). Также на Питоне быстрее пишется код, но он медленно работает, а С++ как раз-таки противоположность.
Уважаемые знатоки, с удовольствием хотелось бы выслушать ваши мнения и предложения. Заранее спасибо!
На олимпиадах от программирования требуется навыки на уровне джуниора. Там большее значение имеет знания решения различных алгоритмов, а не углубленное изучение языка программирования.
Поэтому на простом уровне и С++ и питон можно освоить быстро. Учи оба, пиши одно и тоже на обоих языках, получишь представление о разных подходах и возможностях.
Специализация нужна потом.
Лучше Python, потому что он объективно проще плюсов и позволит сконцентрироваться на решении задачи, а не на инструменте формализации решения. Это означает, что у вас будет больше времени на освоение типовых алгоритмов и структур данных.
Не для кого ни секрет, что так называемое спортивное программирование -- это про умение понять к какой категории относится задача, быстро увидеть паттерн и написать какой-то низкокачественный код, чтобы проходило тесты. Вот и всё.
Касательно скорости не волнуйтесь. В олимпиадных задачах большую роль будет играть сложность алгоритма. Если действительно будет необходимо, то потом почитаете про то как оптимизировать выполнение программы на пайтоне с точки зрения языка программирования.
С реальным практическими задачами, где C++ будет выгоднее выбрать с точки зрения скорости работы программы и объёма потребления ресурсов, вы, вероятно ближайшие лет 10 не столкнётесь, если столкнётесь вообще.
В плане DS/ML (и прочих модных штук в этой области), Python однозначно более широко используется, чем C++. Ну всякое вроде R.
Если у него нету никакого опыта, лучше выбрать С++, ибо многие задачи можно решить тупым перебором, а у пайтона с этим большие проблемы. Просто не уложится во время.
На самом деле, время перебора там будет более-менее одинаково. Конечно от случая зависит и от многих параметров. Но если там не создаются и не удаляются объекты постоянно (т.е. GC не задействован), то просто время обхода коллекций вряд ли будет сильно различаться.
То что пайтон часто используется с DS/ML - это правда. Но код на пайтоне редко выходит в продакшн. У многих фреймворков ML/DL есть интерфейсы на С++. И если разработка алгоритма предполагает его использование вне датацентра с мощными мейнфреймами, то пайтон - плохой выбор.
Ну, на самом деле ядро как раз-таки и написано обычно на C++/C (с примесями СUDA, если на GPU). Это легко проверить, если вы посмотрите на чём реализовано ядро многих инструментов для анализа данных и машинного обучения. А вот на чём там написаны обвязки уже не так важно, чем проще, тем лучше. Это не узкое место в производительности.
И я конечно не эксперт в машинном обучении, но насколько мне известно, большую часть машинного времени занимает анализ данных и обучение модели. То есть, когда это сделано, затраты по компьютерным ресурсам уже не такие большие. Помимо этого, стоит отметить, что многие услуги предоставляются по SaaS, так что мощность терминала не так уж и важна.
По своему скромному опыту решению задач на codeforces, скажу что если вы в пайтоне сделали вложенный цикл - то это гарантированно выход за установленное время. На С++ все более толерантно даже при большей вложенности - компилируемый язык как-никак.
Ну вложенный цикл чаще всего предполагает квадратичное время выполнение, что само по себе плохо. Так-то и Пайтон может быть компилируемым, что там делает codeforces мне неведомо.
В любом случае, перечитайте мой первый ответ. Смысл в том, что мы обсуждаем не тот класс задач, где C++ будет предпочтительнее использовать из-за "скорости".
Но как я писал выше питон используют для набросков (построения тестовых моделей), в продакшн - в основном выходят алгоритмы С++.
Первый раз слышу, о каких конкретно алгоритмах идёт речь?