Вчера я купил билет на конференцию LambdaDays 2020 и понял, что до сих пор не разместил в своем блоге итоги мероприятия этого года. Так что этот пост в блоге немного запоздал (конференция состоялась в феврале), но эй, лучше поздно, чем никогда 😉.

Вам может быть интересно, что делал парень с Android на конференции, которая почти не имеет ничего общего с программированием мобильных приложений. За несколько месяцев до мероприятия я сказал коллеге за чашкой кофе, что давно не был ни на одной конференции и немного скучаю по этому опыту, но в то же время мне не хочется идти на типичный Android мероприятие и просмотр двух докладов «Kotlin Coroutines 101» и доклада «Еще одна вариация Model-View-Something». Он порекомендовал мне LambdaDays, и я решил попробовать.

Вот краткое резюме и мои комментарии к презентациям, которые я посетил.

Переговоры

День 1 Основной доклад: F# Code I Love

Краткий обзор истории и языковых возможностей F#. Основные выводы:

  • Бесточечный стиль программирования, т. е. попытка сделать все одной цепочкой вызовов, скорее следует назвать бесцельным стилем. Самовольное использование локальных vals может улучшить читабельность. Это то, что я вижу и в кодовых базах Kotlin, где люди перебарщивают с методами stdlib, такими как let/run/apply.
  • Существует библиотека пользовательского интерфейса для F# под названием Elmish, которая, как следует из названия, копирует архитектуру языка Elm. Это шаблон, который я очень хочу опробовать для наших мобильных приложений.
  • Ключевой возможностью языка, обеспечивающей хорошее моделирование предметной области, является поддержка типов Union. Я лично был свидетелем того, что в IG Kotlin sealed classes был находкой. Единственное, чего нам не хватает, так это истинных типов Union, которые можно определить без изменения составляющих типов, т.е. написав что-то вроде type ID = String | Long | MyFancyIdClass.

Использование интуиции разработчиков для создания эффективных тестов на основе свойств

Для меня это был лучший доклад конференции. Без дальнейших описаний и выводов — просто смотрите видео!

Программирование в логике

Разговор о Прологе 101. Я ничего не знал о Прологе, поэтому он был мне весьма интересен, особенно концепция двунаправленных вычислений. В обычных языках программирования, если у вас есть функция, которая объединяет два списка, это выглядит так:

fun <T> concat(list1: List<T>, list2: List<T>): List<T>

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

В Прологе объявление выглядит так:

append(?List1, ?List2, ?Result)

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

Преодоление разрыва: философия библиотечного дизайна

Расскажите о создании библиотек Elixir, реализующих функции других языков. Ведущий рассказал о трех принципах:

  • Независимость — портируемая функция не должна требовать значительных изменений в окружающем коде. Пример: типы union, которые десахаризированы в обычные классы Elixir, но обеспечивают дополнительную безопасность типов за счет линтинга.
  • Этос — перенесенная функция должна четко соответствовать основному языку. Пример: добавление поддержки исключений для операторов канала Elixir
  • Полнота — фича должна быть портирована на 100%. Пример: язык APL, есть синергия между всеми операторами, портирование только 50% из них не даст хороших результатов.

Разговор был немного хаотичным, и она попыталась втиснуть приведенные выше принципы в ту же структуру, что и законы робототехники Азимова (вы должны следовать закону, если вы не нарушаете один из предыдущих законов), что сделало изложение еще более неловким. Тем не менее, интересный разговор.

Примечание: язык APL

Это сумасшедший язык, о котором я узнал некоторое время назад. Например, так выглядит функция Игра жизни Конвея (видео с объяснением):

логическое лямбда-исчисление; или, Парень с топором Тайбэя

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

Погружение в деревья Меркла

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

Как вы уже могли догадаться, эта структура данных обеспечивает работу BitTorrent 😉.

Неплохой доклад, за исключением той части, когда спикер минут 15 показывал, как функционально построить дерево.

Теория типов на практике

Ход мыслей парня был таким:

  • «Я хочу обеспечить безопасность типов в своих сценариях Terraform»
  • Изучите предыдущую работу в этой области, найдите некоторые решения
  • "Здорово! Я создам свой собственный язык и расскажу об основах теории типов!»

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

Основной доклад, день 2: Переосмысление разработки блокчейн-контрактов

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

Анонс Бродвея

Отличный разговор о конвейерах данных и новом фреймворке Elixir для обработки всего этого. Отличное объяснение таких понятий, как обратное давление или подтверждение обработки данных в сочетании с корректным завершением работы.

Эффективная инженерия данных с использованием типов более высокого типа

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

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

Мечтают ли парсеры об электрогитарах?

Я не могу найти нужных слов, чтобы описать, насколько потрясающим был этот разговор! Парень вживую писал простое приложение Elm, одновременно демонстрируя подход Elm к регулярным выражениям (tl;dr: не делайте этого, вместо этого напишите парсер). Второй лучший доклад конференции.

CodeKlavier CKalculator: калькулятор лямбда-исчисления для фортепиано

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

Анализ потока в реальном времени в функциональном реактивном программировании

F# версия доклада «Объявление о Бродвее». Если у вас мало времени, я бы порекомендовал посмотреть это другое выступление.

Пути не пройдены

Вот два доклада, которые я сам не посещал, но мне их потом рекомендовали коллеги:

Резюме

Это был фурор 💥!

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

Мне также понравился социальный аспект этой конференции, также известный как «нетворкинг». Обычно, когда я слышу этот термин, я так сильно закатываю глаза, что следующие пять минут мне приходится смотреть в затылок. Однако на этот раз я увидел так много знакомых лиц, которых не видел уже давно, и я наслаждался беседами в вестибюле так же, как и лучшими речами.

Я определенно с нетерпением жду следующего события!