Зачем и почему выбрал для изучения Datalog и Clojure

Статус: Росток ☘️ | Посажено: Нояб. 21, 2022 – Обновлено: Март 15, 2023

Решил очередной долгосрочный эксперимент над самим собой провести 😆 В данном случае, минимальный положительный результат гарантирован. Datalog с небольшими добавками Clojure точно понадобится в работе с Logseq.

Часть личной Базы знаний в него планирую перенести (один из pet-проектов), заодно будет резервным вариантом приложения для заметок и средством публикации.

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

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

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

Заход вообще пошёл с Datalog и уже потом захватило Clojure

  • Больше года использовал / тестировал приложения, которые построены с использованием Datalog. Сначала это был Roam Research, потом Logseq.
  • То, как они работают с запросами и данными — выглядит красиво. А для меня большое значение имеет внутренняя красота и продуманность инструмента.
  • Давно уже задумывался небольшой pet-проект: сделать нормально аннотированный каталог приложений, которые тестирую и отслеживаю. Сейчас все описания в виде заметок лежат у меня в RemNote, а сводные таблицы “скручиваю” в стороннем приложении. Новости по приложениям вообще вручную публикуются в разных местах (требует трудозатрат и синхронности) и никак не связаны с базой.
  • Вот и решил делать каталог именно в Logseq. Там можно сформировать структуру с metadata и табличными представлениями, потом опубликовать её в web. Заодно придётся полноценно разобраться с Datalog-запросами :0)
  • Потом ради интереса посмотрел БД, которые используют Datalog, наткнулся на Datalevin. Возникла мысль приспособить его для личных нужд как аналог SQLite. И пошло-поехало...
  • И там, и там Clojure напрямую задействован.

Базовые причины (зачем)

  • Классические языки программирования меня определенно не “втыкают”. Впрочем, предсказуемо, у меня склад характера сам по себе не предрасположен к регламентированной разработке на потоке. Профессиональный программист из меня точно не получится :0)
  • Раньше (2019 – 2021) время от времени использовал JS и Python под мелкие задачи: коды отслеживания для веб-аналитики поставить, отправку данных формы настроить, JSON по API забрать / разобрать / отправить дальше и т.п.
  • Но так, чтобы тот же Python органично врос в повседневные дела и превратился в «бытовой инструмент» — такого не было. Не “затягивает”.
  • При этом, какой-то инструмент для личных нужд всё-таки нужен, т.к. пул задач для автоматизации уже есть и в будущем их будет больше.
  • С профессиональной точки зрения, планирую дальше “прокачиваться” в сфере Data Engineering и там базовый язык программирования тоже понадобится.
  • Python так или иначе придётся использовать, но он требуется в ограниченном объёме знаний (ETL в AirFlow настраивать и т.п.). Пусть уж лучше будет вторым языком.

И так, почему всё-таки Clojure?

  • Сильное влияние оказала статья от Hexlet «Как устроен функциональный диалект Лиспа Clojure и почему использующие его программисты восхищаются им»:
    • Clojure, философия её автора и сообщества открывают глаза на то, что очень маленький набор базовых концепций полностью достаточен для решения огромного количества задач. [...] После знакомства с Clojure вы перестанете думать, что это — единственный возможный вариант, и станете искать более простые решения во всём. — Клишин Михаил.
    • Clojure позволяет работать с сутью решаемой проблемы, не отвлекаясь на «ритуалы». — Рыжиков Николай.
    • Мне это сразу Planfix и RemNote напомнило, которые в своё время по схожим причинам выбрал. У них тоже в основе идеологии лежит принцип «не плодить сущности и жёсткие правила».
  • Предназначение Clojure: Большие и сложные системы, которые при этом не должны ломаться.
    • Отсюда, шуточная причина: У меня хобби и дурная привычка как раз «глобальные системы» городить :0)
  • Современный диалект Лиспа, функциональная парадигма. Совершенно другой по идеологии язык по сравнению с традиционными языками разработки, которые массово используют. Может втянусь и влюблюсь... Если уж обычный Python не прельщает.
  • Есть мнение, что Clojure хорош как раз в качестве первого языка. Его просто учить людям, у которых нет профессионального опыта в программировании и голова пока не забита разными концепциями.
  • Применимость к предполагаемым профессиональным задачам:
    • Изучать Clojure как первый язык имеет смысл, только если ваша работа как-то будет связана с данными. — Клишин Михаил
    • Clojure лучше всего работает для финансового рынка, дата-аналитики, машинного обучения — сфер, где основной фокус делается на данных, которые нужно быстро обрабатывать. — Сотников Дмитрий.
  • Пускай и немного, но есть обучающие материалы на русском языке. Их достаточно, чтобы на базовом уровне освоить язык.

Logbook

22.12.20. Пару недель назад вышел хороший выпуск подкаста Clojure и дорога реальных дел от UfoStation. Сижу и погружаюсь в контекст (и самомотивируюсь заодно :0)

  • Гость выпуска — Николай Рыжиков, CTO в компании Health-Samurai (крутые ребята на рынке Healthcare), адепт языка Clojure и активный участник сообществ Clojure, Postgress.
  • В выпуске много интересного не только про Clojure:
    • По понятию «простота» и преимуществам Emacs / Vim при написании кода (а по сути и при работе с заметками) очень хорошо прошлись ➜ кусок с 00:36 по 01:05.
    • Концовку с 01:33 советую целиком послушать, если имеете отношение к IT в бизнесе ➜ Про «шедевры в IT» (clojure к ним относит) хорошо сказано. «Как мыслит владелец бизнеса выбирая технологию и инженера». И «стоит ли разработчику выбирать Clojure» (большинству проще идти в хайповый язык / технологии).
  • Детальный тайминг беседы и mp3-файл с записью размещён в Telegram-канале компании «Health Samurai».

Явно пошло ускорение событий, интересные материалы один за одним появляются:

23.03.13. Опубликовали на youtube выступление Николая Рыжикова «Данные, модели и Сlojure».

За две недели до этого у себя на странице в VK упоминал про Zen Doc, оригинальный семантический движок для создания wiki. Этот движок на самом деле является частью более обширного и интересного проекта zen-lang. В выступлении фактически раскрывается идея данного проекта:

💬 «Язык определяет мышление. Язык программирования является матрицей для формирования архитектуры. Николай расскажет о том, что вырастает из Clojure — получаются решения с DSL на данных и решения, гравитирующие к Model Driven Architecture.»

Доклад рассчитан на инженеров-разработчиков и архитекторов, поэтому в нём очень много специфики и кода :0)

Но в реальности, если интересуетесь темой knowledge management systems, data engineering или даже просто приложениями Logseq, Roam Research — можно услышать интересные для себя вещи. Модели и данные в этих сферах тоже стоят во главе угла.

23.03.14. В блоге Ивана Гришаева (автор книги «Clojure на производстве») опубликовали развёрнутую статью «Эта удивительная Clojure: что на ней разрабатывают, чем она отличается от других языков и подходит ли для входа в программирование».

Может оказаться полезна для тех, кто «ходит кругами» вокруг Clojure и не может решить, стоит ли тратить на него время или нет.