Задать вопрос

Примененима ли теория категорий в повседневном программировании?

Я программирую на Scala и очень часто использую монады. И практическая польза от них понятна и огромна. Option(Maybe) избавляет от проблем с null-ями, Either позволяет элегантно обрабатывать ошибки, Future позволяет писать асинхронный код просто, List дает удобно работать со списками. И так далее. То есть практическая польза проста для понимания. Я много раз натыкался на статьи по теории категорий и прочитал их, наверное, несколько десятков. Но так и не понял, какую практическую пользу можно получить от категорий, если ты не занимаешься доказательством теорем.

Можете дать ссылку на статьи, просто объясняющие это, или привести короткий пример практического применения теории категорий?
  • Вопрос задан
  • 2646 просмотров
Подписаться 10 Оценить Комментировать
Решения вопроса 1
Простое объяснение ТК для программистов от Эрика Мейера:
Category Theory is the Mathematicians' interpretation of interface-based design.

Для скалистов, как для «более умных», Эрик некоторые примеры интерпретирует отдельно :)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Rou1997
@Rou1997
Теоремы тут ни при чем, это слово из математической терминологии просто синоним слова "абстракция", а без абстракции в программировании, строго говоря, не написать даже Hello World, а есть и случаи где действительно существует проблема, для которой нет готового решения и которую нельзя решить "тотальным" анализом поскольку это займет много времени и денег, в таком случае программисту приходится регулировать свой зачастую основной тип мышления - анализ - и применять абстракцию исследуя проблему на таком уровне, на каком стоит.

или привести короткий пример практического применения теории категорий?

Ну например реализация надежного канала связи на TCP, чтобы "раскопать" всю реализацию протокола нужны месяцы и много денег, не считая ума которого тоже многим не хватает, поэтому применяется абстракция, вот и пример, но что вам это даст, если у вас нет своих нормальных задач (а судя по вопросу их у вас не бывает в принципе) то вы же не пойдете взамен реализовывать пример моей задачи.
Ответ написан
Комментировать
denisftw
@denisftw
Ну, самый очевидный пример - это использование готовых абстракций из ТК для интеграции некоторого кода с другими библиотеками или разных библиотек друг с другом. Я об этом немного более подробно пишу тут:

appliedscala.com/blog/2016/fp-in-java8-kotlin-scala

Если нужен конкретный пример, то вот возьмите, например, библиотеку Monix. Эта библиотека помимо всего прочего предагает такой тип как Task - что-то вроде Future, но "ленивый". Если некий код работает с Future'ми, то запихать в него Task конечно можно, но это потребует дополнительных усилий. А вот если этот код работает с type class'ом Monad (например в редакции от Cats), то проблем не будет никаких, так как и для Future и для Task можно найти/написать самому соответствующий инстанс. Здесь на самом деле используется не ТК в чистом виде, а сочетание category theory + type classes, но в Scala они всегда идут вместе.
Ответ написан
Комментировать
@potan
Функциональный программист
Пользу дает категорный образ мышления. Например, категорное описание наследование делает очевидным отличие виртуального наследования от не виртуального в C++.
Еще ТК пытаются применять в системной инженерии, но на сколько успешно судить не берусь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы