Pull to refresh

Comments 25

Ещё до кучи можно Euler Project добавить. Я когда-то очень давно на нём LabVIEW скиллы прокачивал, когда к сертификационному экзамену готовился, типа

Но почему я решил написать статью на тему олимпиадного программирования и решения проблем? Как по мне, любому человеку важно постоянно тренировать свои навыки, будь то спортсмен или программист.

Я надеюсь, что вы отдаете себе отчет, что олимпиадное программирование тренирует навык олимпиадного программирования, а совсем не того, что нужно людям в работе.

В какой работе? Парню 15 лет, успеет ещё наработаться.

А вообще я сейчас подумал, в любой работе во все времена самый главный навык это выстраивать связи. Почему не проводятся олимпиады и хакатоны по налаживанию связей? Формат такой: за короткое время надо успеть установить контакт и втереться в доверие к определенному списку лиц. Кто к большему числу втёрся в доверие, тот и победил. Тем более, что теоретический материал по налаживанию связей есть и его в школе давно уже проходят. Методичка называется "Мертвые Души".

В какой работе?

В будущей. Если человек не планирует работать в индустрии разработки ПО - то и прекрасно. Я не против тренировок, я просто предпочитаю, когда люди понимаю, какой мускул они тренируют.

Да, я понимаю что вариант реализации той же сортировки пузырьком для олимпиады и для продакшена - разные.

В олимпиадах ты обычно пишешь, код с нуля, не соблюдая принципы (тот же DRY). И читать код, скорее всего, будешь только ты. А на работе, как я знаю, с твоим кодом придется работать разным людям, которые могут не все понять.

Спасибо за ваше мнение, всегда рад стараться :)

Сортировка пузырьком в проде обычно вообще не существует :)

И помимо чисто написания функций, должно быть понимание, куда именно её писать и как компоновать код.

Привел для примера)

Полностью с вами согласен

Тогда не очень понятно, зачем собственно смотреть на тот код в репе. Там уже есть кучка сомнительных вещей, типа кривого, но рабочего, применения того же argparse или та же копипаста с элементами, вместо массивов или вообще какой-нибудь csv.

Спасибо! Я совершенно забыл про CSV. Вы - официально герой. Насчет argparse, пожалуйста, расскажите, в чем его кривота?

Короткие аргументы предполагается всегда делать однобуквенными и что их можно комбинировать, если они являются флагами, как в случае с вашим режимом химика. Например:

tar -x -z -f ==> tar -xzf

длинные соотвественно пишутся из многабукв через два тире. Сначала думал, что явно расставлять дефисы тоже не надо, но дока разубедила. Но в среднем рекомендую почитать варианты приготовления.

DRY принцип в контексте спортивного программирования все же стоит применять в пределах одной задачи - часто за копипастой кроются баги и неожиданные просадки скорости. Захочется добавить какое-нибудь золото и получится фигня типа

'Au': Element('He', "2s^2p2^3d0", blabla...)
  ^____________^________

Пример, конечно утрирован, но идею передал. На олимпиадах на такое пофиг, разве что с отладкой тяжелее будет, а в рабочем программировании можно огрести некоторых проблем с этим связанных.

Человек, умеющий решать олимпиадные задачи, легко разберется и решит любые не олимпиадные задачи, каких, допустим, 99% беклога. А вот человек, не умеющий решать олимпиадные задачи, 1% олимпиадных в беклоге может и ниасилить.

Решит-то решит, вопрос в том, насколько это решение будет жизнеспособно от синтетического программиста, который 100% времени посвящал олимпиадным задачам

Чем олимпиадные задачи принципиально хуже неолимпиадных? Почему программист, выросший на них не может писать жизнеспособное решение для энтерпрайза?

Единственный косяк олимпиадников - это нечитаемый олимпиадный код - в смысле короткие имена переменных. Но это лечится буквально двумя неделями код-ревью.

А логичность, простота, краткость - это все в олимпиадных задачах тоже надо. Ведь код надо 1) напечатать 2) найти в нем ошибки 3) доработать.

И алгоритмическое мышление и умение анализировать задачу тоже помогают писать логичный и хорошо структурированный код, а эти навыки как раз олимпиадами и тренируются.

Я хоть и сам олимпиадник, но в целом не согласен, по опыту самые большие проблемы возникают не на каких сложных алгоритмических задачах (ну скажем из тех что встречались на практике сжатие данных на основе DAG, реализация succinct структур, оптимизация крипто алгоритмов), а из-за архитектуры, нарушение принципов solid (в частности single responsibility), просто организации большой кодовой базы, кривой обработки ошибок и пр, что потом порождает кучу саппортных ишуев и сложности в “раскуривании” и пр. Ну и как я заметил по опыту, сложную алгоритмическую задачу в принципе может решить любой программист, почитает нужную литературу, статьи, посмотрит реализации и в целом решит ну хороший олимпиадник может сделает это быстрее, но в целом для релизного цикла это не принципиально. А вот умение программировать что бы код не “умирал” от легаси и что бы с ним могли работать на протяжении 5-10 и более лет, совсем другой скил.

Ну и как я заметил по опыту, сложную алгоритмическую задачу в принципе может решить любой программист

Не согласен. Любой программист алгоритмическую задачу и не заметит вовсе. Посмотрите задачи на литкоде, или вспомните олимпиадные задачки: если там отбросить мишуру описания, то останется что-то вроде "сделайте то-то и то-то". И вот это задание можно буквально перевести в очень медленный, часто очень длинный и некрасивый код. Что "любой программист" и сделает. Особенно, если ему не поставлена задача это то-то сделать, а задача стоит фичу запилить и в виде "найдите в массиве 5 самых больших элементов" программист задачу формулирует сам у себя в голове.

Человек, умеющий решать олимпиадные задачи, легко разберется и решит любые не олимпиадные задачи

Может быть, что-то сейчас поменялось, но когда я в эту сторону смотрел, в олимпиадных задачах не смотрели на читаемость и поддерживаемость кода; напротив, в силу ограничения по времени ими жертвовали. А еще мне казалось, что в олимпиадах не дают задач на разработку распределенных систем, проектирование АПИ и поддержку легаси с минимальными побочными эффектами. Повторюсь, могу ошибаться. может все и поменялось.

А вот человек, не умеющий решать олимпиадные задачи, 1% олимпиадных в беклоге может и ниасилить.

Я вот честно признаюсь, я за свой достаточно продолжительный опыт не могу вспомнить в бэклоге ни одной олимпиадной задачи.

Да, как я слышал, сейчас важны soft skills чуть больше, чем hard skills. Надо работать с людьми

Так а это, как задачи-то решать?

То есть я увидел, что вы какие-то конкретные задачи решили, это да. Но как-то надеялся, что мы тут по какой-то категоризации задач пройдёмся, мол вот есть задачи на жадные алгоритмы, а есть на динамическое программирование и их различать надо так-то и сяк-то. А есть ещё задачи на рекурсию, они красивые, но с ними надо осторожнее обращаться. Или вот комбинаторные задачи - они больше про математику, но в смысле программирования надо иметь в виду то и это. В таком вот духе.

Опять всё самому делать.

Не опять, сил не хватило на одну большую статью, решил разбить ее на две части

Не совсем понимаю зачем нужна данная статья.

Во-первых заголовок в целом не соответствует большей части статьи, и больше похоже на пустышку, чтобы завлечь школьников в прогу, поясняя задания скорее для только изучающих программирование.

Во-вторых про само спортивное написано мало (как будто скопировали с ChatGPT), и я не вижу смысла, чтобы человек, который почти никак не плавает в этой теме писал бы статью про спорт прогу.

Особенно порадовало то, что вы только одну тему упомянули связанную с задачами (дп), хотя их раз в 30 больше.

"Любой спортивный программист выбрал бы нечитабельное решение за 1 строчку кода, чем такое же, но за две." это неправда, скорее просто стереотип. Он будет писать то, что удобнее. Иногда написаьь 10 строк значительно легче, чем 5.

"Постройте числовой треугольник из 12 рядов, по типу:"
Не уверен что простое задание Вы решили верно.

Недавно я победил в школьном туре олимпиады по информатике, а скоро иду на муниципальный этап.

Чувак, это не результат. К чему ты это написал?

Наука и инжинерные вычисления

Занавес.

Насчёт самой статьи... Советую выкладывать такое на ютуб или на пикабу. Я понимаю, что в солидарность к твоему возрасту эту статью не будут удалять или минусовать, но прошу, не надо засорять обучающий раздел хабра такого уровня контентом. "Мухи отдельно, котлеты отдельно". Надеюсь на понимание.

Я понимаю, но постоянно стремлюсь к улучшении качества статей. В любом случае, спасибо за отзыв.

Всегда была пассивным пользователем Хабра, но сейчас зарегистрировалась, чтобы оставить здесь комментарий.

Не по поводу самой статьи, но я просто в шоке с количества неприятных комментариев, мотивация которых мне абсолютно непонятна, как будто люди пытаются самоутвердиться вместо того, чтобы спокойно объяснить какие-то вещи и научить. Поэтому хочу сказать вам, что вы молодец, надеюсь, что вы пропустите негатив мимо себя и продолжите заниматься своими интересами. Желаю вам успехов и окружение, которое будет делиться своими знаниями с пониманием того, что все мы с чего-то начинаем....

Sign up to leave a comment.

Articles