Привет, Хабр. Хочу рассказать про «Конкурса красоты кода», который мы снова запускаем. Год назад мы его придумали, и идея народу зашла — больше 1000 человек прислали свои работы. Идея была в том, что есть несколько задач на выбор, и их надо решить в коде. Условий три: код должен работать, быть лаконичным и удобочитаемым.
Год пролетел, и мы решили повторить. Опять зовём всех поучаствовать — напиши такой код, которым будешь потом гордиться. Даже если ты не программист, победа может быть отличным стартом для карьеры (но, конечно, без гарантий).
Как всё устроено
Есть пять направлений, выбирай любое:
фронтенд;
бэкенд;
мобильная разработка;
DevOps;
ИИ.
В каждом направлении три номинации:
самый эффективный код;
самый лаконичный и понятный;
самый компактный.
И в каждой номинации будут по три призовых места, за которые полагается: iPhone 16, колонка SberBoom и приглашение на Highload++. В общем, аж 45 призовых мест. На лендинге всё подробно описано, как будут оценивать и за что награждать.
Что нового в этом году
На прошлом конкурсе мы кое в чём накосячили. Перечислять не буду, там всё очень подробно и в красках. Скажу лишь, что на этот раз замечания учли и сделали лучше:
на подачу заявок теперь полтора месяца;
жюри будет оценивать работы 10 дней, а не 2;
задачи готовили 20 экспертов, всё проверено;
финал и награждение будут на Highload++;
добавили номинации «Народное голосование» и спецприз от Highload++.
Ну и код победителей потом покажем.
Если сомневаешься, стоит ли участвовать, вот пример: один парень в прошлом году вообще не работал в IT, но после победы в конкурсе устроился в Сбер:
Когда я услышал про первый сезон конкурса, сразу подумал, что это мой шанс заявить о себе перед работодателями. Это было важно, потому что в 39 лет, будучи джуном без опыта, меня никто не хотел брать на работу. Резюме просто не проходило через фильтры HR-ов :)
Сложнее всего для меня было составить алгоритм, потому что задание было описано немного размыто, и его можно было интерпретировать по-разному. Я попытался предусмотреть все возможные варианты. Пока искал решение, параллельно освоил несколько новых технологий, что тоже оказалось полезным. И главное — я ещё раз убедился, что мечту никогда нельзя оставлять!
До конкурса я особо не заморачивался на «красоту» кода. Просто старался решать задачи на Leetcode и потом сравнивал свои решения с примерами. Но я считаю, что стремление писать красивый код нужно развивать, потому что с ним проще работать. Если ты можешь легко прочитать чужой код и сразу понять, что в нём происходит, ты сможешь его доработать или изменить без проблем.
Да, в первом сезоне я занял призовое место, но всё ещё не считаю, что пишу «красивый» код. Однако желание к этому стремиться меня очень мотивирует: развиваться, учиться у опытных программистов, общаться с ними. Их опыт не всегда найдёшь в интернете, так что живое общение — это просто супер. Можно, конечно, учиться самому, но это сложнее. Лучше найти наставника или команду, где будут внимательно проверять твой код. А план работы всегда один: декомпозиция задачи, алгоритм, реализация, тестирование, журналирование и документация. Чем проще и эффективнее — тем лучше. Есть даже шутка среди программистов, что лучший код — это тот, которого нет. Тогда точно нет багов, и поддерживать его не нужно :)
Некоторые скажут, что самый красивый код получается на функциональных языках. Я до них ещё не дошёл, пока пробовал только Java и Kotlin. Конечно, Kotlin короче и читабельнее, чем Java. Но в итоге всё зависит от самого программиста — хороший алгоритм будет выглядеть классно на любом языке. И грамотная документация сделает код ещё лучше.
Если будешь участвовать в новом сезоне, не сдавайся, даже если задачи покажутся сложными или непонятными. Решение придёт, главное — искать его.
Удачи!
Так что если хочешь попробовать — дерзай, вдруг и у тебя получится!
outlingo
В конкурсе Красивого Кода в номинациях "компактный код", "лаконичный код" и "понятный код" побеждает лэндинг конкурса размером в 23МБ в который включено 2МБ обфусцированного пожатого JavaScript.
P.S.: а 23МБ это примерно равно суммарному размеру doom1 + doom2