Comments 20
Извините, не удержался
Скрытый текст

Мем успешно украден!
Постарался вложить в пост одну единственную мысль – теоркат открыл мне новый, интересный взгляд на вещи. Не новые способы навести шороху, чтобы просто было, не новую пачку красивых математических паттернов. Надеюсь, статья не выглядит так, как на картинке :D
Если есть возможность написать абсолютно плоский императивный код без математических изысков – я выберу этот вариант, поскольку любая технология / теория / идея не должны служить во вред.
(в сторону) Обычно, статьи о категориях сопровождаются красивыми коммутативными (и некоммутативными) диаграммами... ;-)
Без трехэтажных стрелочек на пол-экрана магия высшей математики сразу выветривается)
Высшую математику можно рассказывать и без красивых картинок, но иногда стоит почувствовать красоту построений. Например, как объяснить, что такое дифференциал? Да, можно накрутить всяких определений (содержащих символы и
). А можно, просто, на словах, сказать, что дифференциал (в данной точке) — это линейное отображение одного касательного пространства в другое касательное пространство. Для этого придётся определить, сначала, что такое касательное пространство (в точке). Я даже могу предположить, что линейное многообразие — это такое пространство, которое в каждой своей точке ведёт себя как линейное пространство, то есть — каждой точке линейного многообразия можно сопоставить линейное пространство, и никто не помешает нам считать это пространство касательным (в соответствующей точке). Таким образом, понятие дифференциала самым общим образом формулируется для линейных многообразий. А это значит, что нам нужно, чтобы, всего лишь, график функции был линейным многообразием. (Но, конечно же, я всё мог забыть. Но это можно проверить. Чем я и займусь на досуге.)
... Зато, какую красивую картинку можно нарисовать: векторочек тут, векторочик там, стрелочка отсюда — туда... Ля-по-та!! ;-)
Ну а продолжение где?
Теория насоздавала набор доказано корректных преобразований. Начальный уровень, вроде композиции функций, показан. А дальше нужно вводить те самые корректные преобразования. Тогда ряд относительно сложных алгоритмов будет выполняться стандартными библиотеками, которые скроют от разработчика внутреннюю сложность и одновременно будут корректно преобразовывать что там нам надо.
Правда есть минус - надо понимать эту самую скрытую сложность. То есть от неё не уйти. Но когда она сидит в мозге на уровне рефлексов, в повседневной работе общение с ней становится практически бесплатным. Соответственно, для нормальной работы сначала нужно потратить много времени на наработку рефлексов. Это как с десятипальцевым методом печати - быстро, но только потратив значитальное время на входе.
Вот в эту сторону надо было продолжать.
Спасибо за замечание!
Моей целью было не раскрыть читателю теорию, научить чему-то, рассказать о принципах, etc, а показать, что даже настолько маленькая единица, как композиция функций, может быть полезна для простого разработчика. Возможно эта маленькая деталь вызовет у читателя интерес к самостоятельному ресёрчу – для меня это более ценный результат, чем просто вложить что-то в голову.
Это моя дебютная статья, разведываю обстановку. В основном я пишу у себя в телеграме, там в том числе на практике демонстрирую прелести теорката. Продолжить в эту сторону определенно стоит, спасибо за верное направление!
Дальше обычно начинаются аппликативные функторы, оптики и линзы. На этом этапе энтузиазм у большинства практиков угасает, потому что профит в повседневном коде становится околонулевым. Чтобы реально применять такие вещи, нужен совсем другой стек вроде Haskell или Scala
Ну не сказал бы, аппликативы часто можно встретить, в валидациях к примеру. Из красивого – Ecto changesets
А так да, дальше монад ужастиков достаточно, чего только стоят (ко)алгебры и (ко)индукция...
Стек не проблема, если есть понимание. Да, он позволяет записывать мысли немного короче, это приятно, но в сравнении с сокращением, получаемым от использования приёмов работы с обобщением алгоритмической части, эти приятности уже не кажутся столь чарующими.
И во вторых, а кто говорил, что это надо большинству? Наоборот, программировать большинству вообще не надо. А то и так имеем кучу копрософта. Правда здесь проблема уже выходит за рамки програмирования.
В целом переход от повышенной наблюдаемой сложности к умеренной за счёт выявления специфических особенностей алгоритмов можно только приветствовать, независимо от сферы применения и не смотря на обилие людей никогда в жизни не сталкивающихся с потребностью что-то реализовывать с использованием хоть сколько-нибудь сложных алгоритмов.
В идеальном мире програмирование будет где-то на уровне высшей математики, про которую все мы знаем, что её почти никто в повседневных задачах не использует. Ну а попытка притянуть к програмированию теорию категорий как раз направлена в нужную сторону. Хотя, как и большинство попыток при использовании метода тыка, данная попытка отнюдь не блещет прекрасными результатами. Но без таких попыток прекрасных результатов не будет никогда.
Я не борцун с ИИ, но отрадно что в эту эпоху кто-то еще изучает такие на первый взгляд отвлеченные вещи как теорию категорий.
Опасность тут одна : через полгода изучения начинаешь видеть монады даже в обычном кухонном тостере)
Отличная статья!
Пока читал, в голове сразу всплыла бессмертная цитата Джеймса Айри:
«Монада — это просто моноид в категории эндофункторов, в чём проблема?»
Респект за материал)
Вы спросите что такое опердень...
"...Я несколько месяцев изучал теорию категорий..", а почему не булевую алгебру?
Не обижайтесь, не со зла. Просто применил эту алгебру к заголовку: много+месяцев+программист и ООП.
И приношу Вам свои искренние извинения за ранее написанных комментарий.
Я несколько месяцев изучал теорию категорий. Вот зачем она оказалась нужна мне как программисту