Это сезон хорошего настроения для тех, кто празднует Рождество, но тем более, если вы разработчик программного обеспечения. Декабрь знаменует собой Пришествие кода (AoC), глобальную задачу, созданную Эриком Вастлом в 2015 году.

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

Были ли вы непослушными или милыми, мы делимся уроками и опытом команды с AoC. Присоединяйтесь к нам в этой веселой поездке по программированию.

Итак, что такое появление кода?

По словам Эрика Уастла, Advent of Code — это адвент-календарь с небольшими головоломками по программированию для различных наборов навыков и уровней навыков, которые можно решить на любом языке программирования, который вам нравится. Люди используют их в качестве состязания на скорость, подготовки к собеседованию, корпоративного обучения, курсовой работы в университете, практических задач или для того, чтобы бросить вызов друг другу. В соответствии со своим названием мероприятие проводится в первые 25 дней декабря, и каждый день основатель AoC запускает новую задачу на сайте мероприятия.

«Однако в 2019 году конкурентоспособность возросла. Мы начали просыпаться рано, чтобы иметь возможность заняться проблемами, как только они появятся, а в Португалии это происходит в 5 утра».
Элдер Маркес, ведущий инженер-программист

Хелдер принял вызов в 2017 году самостоятельно, а в следующем году вместе с некоторыми из своих коллег-инженеров из OutSystems создал частную таблицу лидеров. «Однако в 2019 году конкурентоспособность возросла. Мы начали просыпаться рано, чтобы иметь возможность приступить к задачам, как только они будут выпущены — что в Португалии в 5 утра — чтобы получить больше очков в таблице лидеров», — говорит ведущий инженер-программист.

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

И хотя пандемия могла повлиять на то, как мы общаемся, она не помешала команде принять участие в рождественском состязании. Ситуация с удаленной работой только увеличила количество участников AoC: в 2020 году не менее 12 человек задержались на целых 15 дней челленджа. В том же году разработчик/архитектор Full-Stack BI Педро Мораис поделился серией постов о том, как он решил каждую проблему с помощью Microsoft Power BI, а Мигель Вентура написал статью о своих уроках 2020 года.

Почему вы должны участвовать

Элдер Маркес отвечает: «Я большой сторонник участия в AoC, даже если люди работают в своем собственном темпе, а не конкурируют с другими. Для меня это похоже на время, которое бегуны проводят в тренажерном зале, наращивая мышечную массу и выносливость. Упражнения в AoC могут быть не теми, которые мы решаем изо дня в день, но они помогают нам сохранять острый ум и улучшать наши навыки решения проблем».

«В условиях пандемии общение с коллегами, также работающими над AoC, — это здорово и отличный способ общаться с людьми, с которыми вы не так часто видитеся, как раньше»
Клаудиа Фрутуозо, старший специалист по программному обеспечению. Инженер

Ведущий инженер-программист Луиза Лоренсу соглашается: «Пока что в каждом издании я узнаю что-то новое, в основном математические теоремы, которые помогают эффективно решать проблемы, а также освежаю свои знания по некоторым темам».

Хотя головоломки AoC не обязательно являются теми, с которыми вы сталкиваетесь в своей повседневной работе по разработке программного обеспечения, Луиза считает, что самое главное, независимо от того, являетесь ли вы разработчиком или выполняете любую другую роль, — это мышление, направленное на решение проблем. «Именно поэтому я рекомендую всем, кто любит решать проблемы, присоединиться к AoC! Попробуйте, возможно, вы будете приятно удивлены :)”

По словам Клаудии Фрутуозо, старшего инженера-программиста, лучшая часть AoC — это совершенствование навыков программирования и изучение новых языков, но есть и более человеческая сторона. «Изучение языка программирования — это не просто изучение синтаксиса, вам нужно применить его на практике, чтобы действительно выучить. И поскольку многие люди выполняют одно и то же упражнение, вы также можете увидеть чужие примеры и поучиться у них. Я определенно рекомендую это. В условиях пандемии общение с коллегами, также работающими над AoC, — это здорово и отличный способ общаться с людьми, которых вы не видите так часто, как раньше», — сказала она.

Как и у Элдера и Клаудии, AoC также предоставил возможность Пауло Феррейре, ведущему инженеру-программисту, отточить свои навыки работы с Python. Работая в OutSystems, Пауло программирует в основном на C# и TypeScript, но также имеет дело с некоторыми автоматизациями Python.

По его собственным словам, AoC был прекрасной возможностью углубить свои знания. «Каждый день я сталкивался с проблемами, пытаясь использовать больше функций Python в своем коде, а также сравнивая свои окончательные решения с решениями моих коллег в Slack или просматривая их репозитории GitHub. Задания были интересными — на некоторые я потратил слишком много времени — и очень разнообразными, но самым интересным аспектом было увидеть разные способы решения одной и той же задачи с использованием одного или разных языков программирования. У нас был кто-то, кто использовал F#, а кто-то использовал OutSystems».

Диого Пауло, также ведущий инженер-программист, является одним из тех, кто использует OutSystems для решения проблем Advent. «Я решил бросить себе вызов и решить эти проблемы, используя язык, в котором есть только операторы if, циклы и списки. Теоретически этого было бы достаточно, чтобы решить все проблемы, но компьютерная память и время были жесткой проверкой реальности, которая мешала мне решать некоторые из более сложных и крупных задач».

Вопросы у камина

Теперь, когда наша команда поделилась своими основными уроками AoC, мы задали им пару вопросов об их опыте участия в этом праздничном испытании.

Как вы попали в Advent of Code?

Клаудия Фрутуозо: Впервые я приняла участие в AoC в 2017 году. Я была в декретном отпуске и выполняла упражнения, пока мои дети-близнецы спали. Мне, как специалисту по решению проблем, было любопытно принять вызов, и это была возможность применить на практике мускулы Python.

До прихода в OutSystems я работал в консалтинговой компании. К сожалению, в то время я застрял с использованием старых технологий в проекте, который находился в режиме обслуживания, и делать было особо нечего. Я чувствовал, что отстаю во всех крутых технических штучках вокруг меня. Друг предложил мне изучить Python. Изучение чего-то нового, особенно популярного языка программирования, помогло мне восстановить связь с миром технологий. Python стал языком, который я использую для изучения новых вещей. Я использовал его для онлайн-курса по алгоритмам, а также для AoC.

"Моя цель состояла в том, чтобы проверить, могу ли я еще что-то кодировать, поскольку моя работа была связана не с разработкой новых функций, а с анализом кода и устранением неполадок"
Луиза Лоуренсо, ведущий инженер-программист

Луиза Лоренсу: Когда я училась в колледже, я нашла веб-сайт с задачами для соревнований по программированию. Я начал решать некоторые из них для развлечения (используя C) и вскоре увлекся программированием для решения проблем (т. е. короткими программами для решения проблемы, а не полноценными программами для реализации некоторых спецификаций). Я также обнаружил, что мне это не нравилось; моя статистика на этом сайте ужасна. Когда я присоединился к OutSystems в 2017 году, я заметил, что один из моих товарищей по команде обсуждает проблему программирования с другим коллегой, и именно так я узнал о мероприятии AoC. Я присоединился только в следующем году, в выпуске 2018 года, но я не особо вкладывался в это и получил всего 18 звезд. Моя цель состояла в том, чтобы проверить, могу ли я все еще что-то кодировать, поскольку моя работа заключалась не в разработке новых функций, а в большей степени в анализе кода и устранении неполадок. В следующем году все стало серьезно. Я начал решать задачи в 5 утра (как раз тогда, когда их разблокировали), потому что это совпадало со временем, когда я вставал (да, я знаю!). Это каким-то образом спровоцировало других людей, которые тоже начали просыпаться в 5 утра, чтобы решить эти проблемы.

Пауло Феррейра: Я впервые услышал об AoC в 2019 году, когда группа коллег провела декабрь в действительно мотивированном и соревновательном настроении, начав день (и обеденное время!) с решения проблем, обсуждения подходов и поддержания своих оценок на должном уровне. -дата на одной из наших досок. В то время мне это показалось любопытным, но я не присоединился к этому сумасшествию.

Перенесемся в 2020 год; Я слышал, как та же группа снова говорила об этом во время подготовки, приглашая других присоединиться к их недавно созданному каналу в Slack (времена Covid, меры Covid!). В то время я пытался вернуться к программированию в качестве хобби, а не только для работы, поэтому это пробудило во мне интерес.

В этом году я использую нишевый язык, который тем временем меня заинтересовал, «Меркурий. Будет интересно посмотреть, как он сравнится с прошлым годом».
Пауло Феррейра, ведущий инженер-программист

Диого Пауло: Думаю, все началось утром 2018 года (или, возможно, 2017 года), когда я пришел в OutSystems. Я являюсь частью группы ранних пташек, людей, которые любят начинать работать пораньше. Я подошел к своему столу, и двое коллег обсуждали, как решить задачу из «Маленького помощника Санты». Я знаю, что люди в OutSystems умеют творчески придумывать имена (это одна из самых сложных вещей в компьютерных науках), но я никогда не встречал в нашем коде класс или свойство «Маленький помощник Санты». Мне стало любопытно, и я спросил их, что это такое. Они сказали мне, что обсуждают решение сегодняшней проблемы AoC. Я решил проверить, что это такое. Глядя на проблемы, в голову пришла мысль: «А можно ли решить это с помощью визуального языка OutSystems?»

Какой язык вы используете для решения задач?

Клаудия Фрутуозо: Python. Мне нравится язык, и обычно у меня не так много возможностей практиковать его на работе, как и много времени, чтобы использовать его вне работы. Появление кода — это время года, когда я могу использовать Python.

Луиза Лоуренсо: Я выбрала Python с самого начала, потому что уже использовала его для простых задач и наслаждалась его простотой. Он также имеет несколько мощных математических или даже компьютерных библиотек, которые упрощают любой подход к решению проблемы. Каждый год я нахожу новую библиотеку и стараюсь использовать ее хотя бы в одной задаче. Если есть возможность, я стараюсь узнать что-то новое в Python.

Пауло Феррейра: В этом году я использую нишевый язык, который тем временем меня заинтересовал, Меркурий. Будет интересно посмотреть, как он будет сравниваться с прошлым годом.

«Я никогда не мог решить все 25 задач с помощью OutSystems, и мне нравится думать, что это из-за физических ограничений, таких как пространство и время. Я знаю, что это плохое оправдание, но позвольте мне с этим жить, хорошо?»
Диого Пауло, ведущий инженер-программист

Вы когда-нибудь выполняли вызов?

Элдер Маркес: Я решил все головоломки еще в 2019 и 2020 годах. В 2018 году я тоже был очень близок к этому, но 15-й день был трудным для решения.

Клаудия Фрутуозо: Я так и не прошла весь 25-дневный челлендж. Самое близкое, что у меня было, было в прошлом году, когда я сделал 18,5 дней :P

Луиза Лоуренсо: Пока я получила 50 звезд только один раз — это было в 2020 году во время пандемии. Это было тяжело, но я думаю, что пребывание дома немного помогло (любопытно, что в том году я начал в 5:30 утра из-за активности, которая у меня была в 5 утра). Кроме того, некоторые более сложные задачи запускались по выходным, когда у меня было больше времени их обдумать.

Диого Пауло: Я никогда не мог решить все 25 задач с помощью OutSystems, и мне нравится думать, что это из-за физических ограничений, таких как пространство и время. Я знаю, что это плохое оправдание, но позволь мне жить с этим, хорошо?

Читы, секреты, советы?

Элдер Маркес: В дополнение к каналу Slack, который у нас есть на OutSystems, где мы обсуждаем решения и подкалываем друг друга, чтобы повысить конкурентоспособность, я также просматриваю специальную страницу Reddit. Это отличный способ изучить новые подходы к решению проблем и найти других людей с очень оригинальными идеями.

Клаудия Фрутуозо: Я не смотрю на кодовые решения, если я уже не нашел решение. Я предпочитаю оставить это нерешенным, может быть, я смогу вернуться к нему позже. Но если я застряну или не до конца пойму проблему, я проверю Reddit или канал Slack и посмотрю, смогу ли я получить подсказку, чтобы разблокировать меня. Я не думаю, что это обман.

Луиза Лоренсу: Я обычно проверяю ветки AoC Reddit на наличие альтернативных подходов после того, как закончу, или прошу помощи, когда застреваю в своем решении или не могу интерпретировать проблему (иногда описания могут быть очень загадочными). Я избегаю спойлеров, как чумы, но сабреддит осторожно использует теги спойлеров, чтобы люди могли безопасно перемещаться по ним.

Каким решением вы особенно гордитесь?

Клаудия Фрутуозо: В 2017 году была одна проблема; это включало в себя навигацию по шестнадцатеричной сетке, и я был особенно доволен своим решением, потому что для его достижения потребовалось немало работы. В последние годы я использовал аналогичные стратегии, но для обычных квадратных сеток. Разобраться, запрограммировать и заставить работать было очень приятно.

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

Что вам в нем больше всего нравится?

Луиза Лоренсу: Когда люди начали просыпаться в 5 утра, чтобы решить проблемы, мы стали более конкурентоспособными в AoC, но это всегда казалось и остается очень дружелюбным и непринужденным! Мы всегда подталкиваем и пытаемся разблокировать друг друга, не портя веселья, уклоняясь от нашего кода или обсуждая идеи. Это круто, потому что в конечном итоге вы находите альтернативные подходы к проблеме и узнаете больше, чем сами! Когда мы создали Slack-канал для мероприятия, все стало еще лучше: те, кто более небрежно увлекался AoC, также могли участвовать в этих обсуждениях и присоединяться к веселью без какого-либо давления со стороны конкурентов. Вы можете соревноваться, если хотите, или вы можете делать это в своем собственном темпе, если вам это подходит. Единственное правило – веселиться и получать удовольствие от мероприятия!

Первоначально опубликовано на https://www.outsystems.com.