Функциональное программирование и ООП часто рассматриваются как две абсолютно разные парадигмы разработки программного обеспечения. Казалось бы, эти парадигмы очень далеки друг от друга: в классическом ООП мы имеем дело с объектами, которые определяют состояние системы в текущий момент времени. В ходе работы программы объекты обмениваются сообщениями, изменяя при этом своё состояние. Когда речь заходит о ФП, понятие состояния вообще неприменимо, вместо этого имеем дело с “чистым” преобразованием данных при помощи функций.
[Read More]Галопом по ФП - Монады
Долгое время я очень боялся писать хоть что-то про монады, в силу ряда причин:
- Это сложное понятие из теории категорий
- Про это уже было множество статей, роликов заметок и т.д. и едва ли я скажу что-то новое.
- Все эти объяснения, по крайней пере сами по себе, практически не дали мне никакого внятного понимания.
Да, видимо есть что-то в монадах, что мешает объяснить их по простому, хотя бы для начального понимания. При этом попытки объяснить часто начинаются вообще с разных подходов, нам говорят:
[Read More]IoC контейнеры и Python
При изучении OOП на Python, Inversion of Control (IoC) является одной важных тем, понимание которой позволяет писать хороший ООП код. IoC это еще один из принципов, который выражает идею о том, что объекты не должны зависеть от конкретной реализации. Если внутри класса создаётся конкретный экземпляр другого, то это явная зависимость – теперь поведение класса зависит от этого объекта, и его корректирование требует явного вмешательства в внутреннее устройство класса. Это наружение классического ООП подхода - “программировать на уровне интерфейсов, а не реализации”. Принцип IoC звучит очень обобщенно, при этом гораздо чаще говоря IoC подразумевается Dependency Injection (DI) – классическое решение описанной выше проблемы.
[Read More]Знакомство с Ассемблером
Отвлечёмся ненадолго от функционального программирования.
Какой самый низкий уровень, куда может “спуститься” программист?
В современном мире у ассеблера остаётся место для использования - обратный инжиниринг, точечная оптимизация в системном программировании (элементы операционных систем, драйвера и т.д.), хакинг. Также это самый базовый уровень, на котором большинство программистов могут взаимодействовать с компьютером.
[Read More]Галопом по ФП - Моноиды
Абсолютно must-watch доклад по функциональному программированию от Скотта Влашина, владельца замечательного сайта F# for Fun and Profit, и автора многих важных книг по функцональному программированию, вроде # Domain Modeling Made Functional (увы, еще не читал).
[Read More]Значение значений
Ковыраяя различные ресурсы, посвещённые языку OCaml наткнулся на ролик с выступлением Ричарда Хикки, создателя функционального языка Clojure. Это выступление, на мой взгляд, концетрированная выжимка той критики, которую любители функционального программирования обычно подвергают мейнстрим.
[Read More]Выучить второй язык программирования
В определенный момент времени ты понимаешь, что владеть единственным языком программирования становится недостаточно, и приходит осознание, что приша пора добавить что-то в свой репертуар.
Остановился на Elixir - функциональный язык для разработки параллельных систем на основе виртуальной машины Erlang
.
Подходит для того, чем сейчас занимаюсь, из всей функциональщины хоть сколько нибудь популярный (ладно, еще Scala
есть)
и это тема в целом интересна.
Distrobox как инструмент разработчика
Distrobox - это opensource проект, по сути - большой набор shell-скриптов, который при помощи выбранного бэкэнда (docker, podman, с недавних пор еще lilipod) позволяет запускать контейнеры популярных Линукс дистрибутивов. При этом мы получаем доступ к всему диапазону программных пакетов конкретного дистрибутива, и сам контейнер близко интегрируются с нашей основной системой, позволяя легко пользоваться приложениями внутри контейнера.
[Read More]Nix Os
Nix - это в первую очередь пакетный менеджер, концепция которого строится вокруг декларативного подхода к управлению пакетами. кому интересна теория, можно почитать здесь. На текущий момент репозиторий языка занимает первое место по количеству доступных пакетов, обогнав даже знаменитый AUR.
[Read More]Нам всё еще нужны циклы?
Несмотря на то, что раньше в университетах было принято обучать людей CS начиная с какого-нибудь ФП и Лиспа, большинство людей сегодня начинают знакомство с программированием с императивного стиля. Представлять программу, как установленный набор последовательно выполняемых инструкций, это наиболее базовый и понятный новичку подход к тому, чтобы заставить компьютер что-то делать.
[Read More]