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

Status: Росток ☘️ | Planted: Nov. 07, 2022 − Last tended: Nov. 21, 2022

Решил очередной эксперимент над самим собой провести 😆

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

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

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

С 1 декабря стартую эксперимент :0) Через 2-3 месяца подведу первые результаты: что интересного / полезного из этого получилось.

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

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

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

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

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

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

Запасные варианты, в случае отрицательных результатов эксперимента 🤣

  • Знание Datalog в связке с LogSeq так и так со мной останется. Тут рисков пока не вижу. Применимость заранее определена.
  • А вот если с Clojure не получится “подружиться”, то уже сложнее. Скорее всего, поначалу придётся “откатываться” обратно к Python.
  • Потом уже думу думать :0) Как вариант, есть ещё язык R, в DE и в работе с данными он достаточно популярен.