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

В прошлом месяце я смог удовлетворить свою тягу к задачам программирования с помощью Эрика Уастла Пришествие кода.

Ежедневное решение задачи по программированию в течение почти месяца дало мне интересные уроки о себе и моем текущем языке программирования: Elixir.

Вот краткое изложение.

  • У вас будут хорошие дни. — Будут дни, когда ваш разум будет работать на полную катушку. Решения проблем будут казаться полностью сформированными перед вашим мысленным взором, и выполнение задач — это просто вопрос диктовки вашего воображаемого решения.
  • У вас будут плохие дни. – Будут и другие дни, когда ваш разум будет похож на клубок ржавых гвоздей, слипшихся в ведре с засохшим цементом. Решения будут приходить медленно, если вообще придут.
  • Большинство дней проходят где-то посередине. Важно избегать того, чтобы ваше предполагаемое состояние ума влияло на ваши решения и решимость. Когда я чувствовал, что у меня возникли проблемы, возвращение к основным принципам, казалось, всегда помогало проложить путь вперед.
  • Библиотека Stream Эликсира великолепна. — Решения Саши Юрича для первых нескольких дней Advent of Code вдохновили меня на изучение модуля Stream Эликсира. Я был настолько впечатлен модулем, что написал статью о генерировании последовательностей с потоками и решил решить множество адвент-задач с помощью генераторов на основе Stream.
  • Придерживайтесь основ. Я обнаружил, что при наброске решения проблемы первым делом я обратился к функциям, представленным в стандартных модулях, таких как Enum, List и Map. Однако, изучая решения других людей, я понял, что соблюдение основ рекурсии и сопоставления с образцом может привести к более элегантным, читабельным и производительным решениям.
  • Erlang поставляется со всем, включая кухонную раковину. — Несколько задач этого года привели меня к стандартным модулям, поставляемым с Erlang и доступным из Elixir. Такие модули, как :digraph, :digraph_utils, :gb_trees и :binary, невероятно полезны и игнорируют утилиты.
  • Вы не хотите разбивать пустые строки. Вам нужен список графем. — Используйте String.graphemes/1 вместо String.codepoints/1 или String.split(&1, ""), чтобы разбить строку на составляющие ее символы. Прочтите все о кодовых точках и кластерах графем для получения дополнительной информации.
  • "Расширенный" модификатор регулярного выражения Elixir помогает объяснить черную магию. — Регламенты часто являются выгребной ямой черной магии. Часто на понимание написанного регулярного выражения уходит столько же времени, если не больше, чем на его написание с нуля. К счастью, расширенный модификатор Elixir позволяет вам объяснить некоторую черную магию в ваших регулярных выражениях, разбивая их на несколько строк и чередуя комментарии.
  • Изучение чужих решений может преподать важные уроки. — Почти каждый языковой совет или метод, который я усвоил во время конкурса Advent of Code в этом году, был получен в результате изучения чужих решений после того, как я внедрил свое собственное. Чтение чужого кода, несомненно, самый мощный инструмент для улучшения собственного кода.

В этом году я получил массу удовольствия от испытаний Advent of Code. Я довольно много узнал об Эликсире и о себе. У меня даже появились хорошие друзья на канале #adventofcode группы Elixir Slack.

Обязательно повторю это в следующем году.

Если вы не участвовали в Advent of Code в этом году, еще не поздно! Перейдите ознакомьтесь с проблемами и, если вам интересно, ознакомьтесь с моими решениями на Github.

Первоначально опубликовано на сайте www.petecorey.com 1 января 2018 г.