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