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

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

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

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

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

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

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

В общем не забивайте голову, и не думайте, что есть некое тайное знание, которого вы пока не понимаете, а когда поймете, то ваш код станет в сто раз эффективнее. И поменьше слушайте 20-летних ораторов уровня /pr , которые вам рассказывают про "нормальные" и "ненормальные" задачи, потому что сами такие ораторы либо сидят без работы, либо заняты вполне себе императивным крудошлепством, поскольу к тем редким местам, где функциональщина сложнее map/grep иногда бывает полезна(но отнюдь не необходима), их не допускают.
Ответ написан
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++.
Еще ТК пытаются применять в системной инженерии, но на сколько успешно судить не берусь.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
20 мая 2019, в 17:23
3000 руб./за проект
20 мая 2019, в 15:59
300 руб./за проект
20 мая 2019, в 15:24
1300 руб./в час