У меня образовалась некоторая каша в голове, которую я хотел бы разложить по тарелочкам (и, в идеале, с пользой для себя переварить). Не уверен, правда, что смогу хорошо сформулировать вопросы.
(Лирическое вступление, которое можно не читать)
Вкратце перечислю, с чего именно началось (в хронологическом порядке).
1. Несколько лет назад на одном программерском форуме обсуждалась относительно простая учебная задача (не уверен, что правильно помню, что за задача, кажется, нужно было написать простенький парсер арифметических операций). Я написал свой вариант, который состоял из примерно 50 - 150 строчек (точнее не помню). Каково же было мое удивление, когда некто выложил решение той же задачи на Haskell, и оно состояло из 4 (четырех) строк! Сказать, что я был в шоке, это ничего не сказать.
2. Пару лет назад видел комментарий на Хабре о том, что теория категорий - это штука, полезная для программистов, любому может пригодиться (это все, что я помню о том комментарии, контекста не помню).
3. Недавно прочитал на том же Хабре статью про Haskell:
Говорят, Haskell — язык для гениев и академиков. Правда? Там тоже теория категорий упоминается.
Поискал по запросу "теория категорий в программировании". Из более-менее приличного на русском нашел цикл статей на том же Хабре:
https://habr.com/ru/post/246009/ (это вторая статья из цикла, всего их пять, чтение займет примерно полчаса, в первой - сплошная вода да философия, можно пропустить). В статье рассказывается, какие вещи из теории категорий реализованы в Haskell, с пояснениями, как то же самое выглядело бы на C++. Проблема в том, что я не знаю ни теорию категорий, ни Haskell, так что не всегда понятно, где заканчивается одно и начинается другое. И С++ я тоже не знаю, поэтому что вообще происходит, тоже не всегда понятно (проще сказать, что понятно: полностью понятен только пример с факториалом, пожалуй).
Посмотрел видео
https://www.youtube.com/watch?v=JMP6gI5mLHc (1 час, на английском, некто Эрик Мейер рассказывает java-программистам о том, какие из новых концепций в java пришли из теории категорий). Под конец, правда, тоже стало непонятно, потому что теорию категорий я все еще не знаю.
Еще я скачал учебник теории категорий, написанный
george66. Пара цитат оттуда:
Цитата:
Автор поставил целью написать учебник теории категорий, доступный мат.логикам и функциональным программистам, в котором не будет ни слова про гомотопии и гомологии.
Цитата:
Для чтения книги нужно шапочное знакомство с понятиями "группа", "свободная группа" и "гомоморфизм групп". Если читатель их не знает, советую сначала прочитать популярную книжку Александрова "Введение в теорию групп".
Если отсчитывать от уровня человека, полностью освоившего стандартную школьную программу - это единственное требование или понадобится что-то еще? Написано же "доступный мат.логикам", а я определенно не мат. логик.
Хотелось бы понять, как именно теория категорий помогает программированию. Позволяет взглянуть под другим углом на какие-то аспекты этой деятельности? Позволяет лучше понять какие-то концепции или предлагает свои? Есть ли там такие-то подходы, которые можно использовать везде, или нужна "поддержка" со стороны языка/компилятора (для чего и придумали Haskell)? Пока, к сожалению, не могу сформулировать вопрос четче, буду рад любым наводящим вопросам.
Еще хотелось бы порасспрашивать про Haskell, но из каши в голове складывается максимум "расскажите что-нибудь" или "ну и что там в Haskell с теорией категорий?", остальное пока не членораздельно. Надеюсь, в будущем доберусь и до него.