Как стать автором
Обновить
23.06

Функциональное программирование *

От Lisp до Haskell

Сначала показывать
Порог рейтинга
Уровень сложности

Клиентский код

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров15K

Привет, Хабр!

Вот варюсь я в этом айти уже долгое время. Почитываю Хабр, ищу работу, работаю, потом снова ищу работу. Посмотрел разные компании изнутри, крупные и не очень. Сходил за свою жизнь на 25+ собеседований, еще до времен удаленки и на на ней.

Я честно, не знаю как в других профессиях, но в программировании, как мне кажется, собеседования — это чистая лотерея. Мое видение этого возможно подтверждает рынок труда — накрути себе опыта побольше, примени нейросеть, расскажи красиво о себе и вот работа (зарплата) мечты уже твоя. Следствием этого — по 300 отзывов на вакансию. Но, к слову, вакансии эти висят месяцами. Ты просто попадаешь в огромную кучу кандидатов, которых работодатель хочет отсеять и выбрать лучшего из вас. По каким критериям (по всем кроме трудовой книжки) вас будут сортировать одному Нео известно. Так‑же имел личный опыт, когда я отвечал полностью на все вопросы в течение часа. Получив оценку своим знаниям на 5+, заветную работу (зарплату) мечты я так и не получил.

Читать далее

Новости

Вам не нужна Чистая архитектура. Скорее всего

Уровень сложностиСредний
Время на прочтение22 мин
Количество просмотров14K

Сейчас среди Java/Kotlin команд распространено применение Чистой (ака Гексагональной, ака Луковой — Clean, Hexagonal, Onion) архитектуры для разработки бакэндов прикладных приложений (да и Android‑приложений тоже). Однако это семейство архитектур в контексте прикладной разработки зачастую не даёт никаких преимуществ, а только привносит лишние церемонии и тем самым замедляет её.

В этом посте я подробно разбираю, почему, на мой взгляд Чистая архитектура не является лучшим выбором по умолчанию для прикладных приложений, и кратко рассказываю об альтернативной архитектуре (спойлер: Промышленная функциональная архитектура), которую использую в качестве дефолтной последние 3 года и пока что доволен.

Но перед тем как перейти к Чистой архитектуре, сначала надо разобрать принцип инверсии зависимостей (Dependency Inversion Principle, DIP).

Читать далее

Как и почему эффекты помогают писать хороший код

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров6.5K

В этой статье я рассказываю об эффектах. Несмотря на то, что эффект – понятие столь же простое, как обычная функция, для меня оказалось не так просто найти подходящее объяснение, но, я его нашел.

Вы узнаете, в чем заключается идея использования эффектов и чем они отличаются от классических функций. Я делюсь своим опытом разработчика и показываю примеры кода с использованием эффектов. Вероятно вы найдете для себя что-то интересное.

Если вы никогда не слышали об эффектах или термине "побочный эффект", рекомендую ознакомиться с этой темой для повышения вашего профессионального уровня и технического кругозора!

Читать об эффектах

Ранняя изоляция компонент vs прагматизм: когда жёсткие границы компонент убивают гибкость и скорость разработки

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров893

Стремление к изоляции компонент (DDD, «чистая» архитектура, микросервисы), особенно на старте проекта, часто приводит к усложнению проектирования, реализации и последующих изменений.

Ключевые идеи:

1. Monolith first, FP first, flexible boundaries.

2. Изоляция компонент имеет минусы, используйте кардинальную изоляцию только при явных требованиях (масштаб, независимые команды).

3. Рефакторинг по боли: Вводите абстракции, когда изменения становятся дороже их внедрения.

Вывод: Архитектура должна решать проблемы, а не создавать их.

Читать далее

Истории

Как работать с ошибками правильно и сделать удобным AWS SDK JS

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров486

Эта статья станет интересной не только специалистам по TypeScript, но и всем разработчикам, ищущим лучшие практики работы с ошибками в современном программировании.

Вы узнаете, почему традиционный подход к работе с ошибками может тормозить разработку и как правильное разделение ожидаемых ошибок и критических дефектов значительно упрощает жизнь.

Я подробно описываю, как моя реализация решает сложности AWS SDK и делает его использование более надежным.

Буду рад узнать ваш подход к работе с ошибками, пишите в комментарии. Спасибо!

Читать далее

Откуда взялась хвостовая рекурсия и когда ожидается ее реализация в новом стандарте языка Си. Рекурсия VS Iteration

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров2.6K

Я надеюсь что это неожиданное название заставит вас обратить внимание на эту статью, но самое главное на что я надеюсь что прочитав эту статью вы уже не сможете так просто игнорировать факты.

Когда я учился программированию меня учили что рекурсия это плохо и нельзя надеятся что компилятор сможет заменить написанную тобой рекурсию на итеративный процесс. В какой то степени нас учили искать способ замены рекурсии итеративным алгоритмом. На сколько я понимаю замена рекурсии итеративным алгоритмом это одна из базовых задач программирования. Здорово когда она уже решена в компиляторе (в интерпретаторе) и в языке таком как диалект LISP-а который используется для примеров в книге известной под абревиатурой SICP, но в любом случае не помешает знание о том как эта задача решается. Как минимум это поможет вам лучше понимать работу компилятора и эффективнее его использовать.

Читать далее

Каррируем React-компоненты: функциональные паттерны на фронтенде

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров5.5K

Современный React все больше соответствует идеалам функционального программирования.

Ежедневно мы пользуемся подходами из мира ФП, зачастую даже не подозревая об этом.

Эти паттерны плотно укоренились в сознании фронтенд-разработчиков, делая наш код значительно чище, читаемее и предсказуемее.

В этой статье мы применим один из функциональных паттернов в React приложении и посмотрим что из этого выйдет.

Читать далее

1. Проектирование с помощью типов: Введение

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров2.5K

Перевод цикла Скотта Влащина о том, как типы помогают проектировать программы. Первая глава, она же введение, посвящена тому, как делать дизайн прозрачнее и при этом улучшить корректность.

Читать далее

Я: экстремально композиционный язык программирования

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров12K

Честно говоря, я не планировал создавать свой язык, это случилось само собой. Ещё со времен моего знакомства с программированием, больше всего меня волновала именно сложность, присущая любой предметной области и способы борьбы с оной. Чтобы найти такие ответы, которыми смогут воспользоваться и другие люди, я потратил около 10 лет.

Читать далее

Прагматичное функциональное программирование в Java

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров2K

Прагматичное функциональное программирование в Java при помощи монады XResult<T>, которая сочетает в себе свойства Optional<T>, Result<T> и Either<L,R>

Читать далее ...

Nix в пилюлях

Время на прочтение1 мин
Количество просмотров1.3K

Завершён перевод книги Люка Бруно «Nix в пилюлях».
Для удобства читателей, собрал ссылки на все двадцать глав в одной публикации — здесь.

Читать далее

20. Nix в пилюлях: Основные зависимости и хуки

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров434

Финальная глава! Люка Бруно рассказывает о секретном оружии Nix — хуках. Их используют, когда больше ничего не помогает, в частности, для кросс-компиляции.

Читать далее

19. Nix в пилюлях: Основы stdenv

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров382

Эта глава посвящена деривации stdenv, благодаря которой собирается большинство пакетов из репозитория nixpkgs. Она поддерживает инструментарий GCC, GNU make, autotools и другие распространённые системы сборки.

Читать далее

Ближайшие события

25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань
20 – 22 июня
Летняя айти-тусовка Summer Merge
Ульяновская область

18. Nix в пилюлях: Пути хранения Nix

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров438

Для того, чтобы различать пакеты разных версий, Nix хранит их в каталогах с именами, которые содержат хеш. В главе 18 мы разберёмся, как вычисляется этот хеш для файлов, каталогов и tar-архивов.

Читать далее

17. Nix в пилюлях: Переопределение пакетов nixpkgs

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров313

Знакомимся с интересным трюком, который позволяет функциональному языку Nix делать то, то, что в императивных пакетных менеджерах делается с пол-пинка.
У них там, правда, dependency hell, а в Nix всё чинно и благородно.

Читать далее

16. Nix в пилюлях: Параметры nixpkgs

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров608

Вы начинаете сборку вашего пакета не на пустом месте. Репозиторий nixpkgs, куда входит ваш пакет, при запуске скрипта сборки передаёт ему параметры. В этой главе мы поговорим о двух основных параметрах: system и config.

Читать далее

Импортозамещение SCADA: опыт перевода крупного производства на отечественную платформу

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров6.5K

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

Летом 2023 года к к нам обратилось предприятие химической промышленности крупного Российского холдинга. На нем  много лет использовалась SCADA-система Wonderware InTouch. Из-за санкционных наложений, иностранный вендор расторг контракт на обслуживание и техподдержку. Более того, была предпринята попытка удаленно остановить производство путем отключения серверов SCADA. Последствия удалось минимизировать, изолировав промышленную сеть, однако функционал системы снизился на треть, а ее развитие и масштабирование оказалось невозможным. Нам было необходимо решить следующие проблемы:

1.     Отсутствие возможности обслуживания данной системы. Ввиду того, что данную SCADA систему разрабатывала и обслуживала иностранная компания, после начала СВО все контракты по обслуживанию и технической поддержке были расторгнуты. 

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

Читать далее

15. Nix в пилюлях: Поисковые пути Nix

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров1.1K

В Nix для поиска дериваций используется переменная окружения NIX_PATH. Она похожа на PATH, но есть и важные отличия. Разбираемся с тем, как устроен репозиторий nixpkgs.

Читать далее

14. Nix в пилюлях: Паттерн проектирования override (переопределение)

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров1K

Продолжаем изучать паттерны проектирования, используемые при создании пакетов в Nix. В этой пилюле разберёмся с паттерном override (переопределение).

Читать далее

Фундаментальная математика — теория всего в IT и не только. Теория типов и формализация в Coq

Время на прочтение38 мин
Количество просмотров13K

У нас есть 3 "теории всего" - научная картина мира (все сводится к законам физики), информатика (все сводится к битам) и фундамент математики (все сводится к логике). Именно фундамент математики представляет особый интерес, так как он является фундаментом для двух других фундаментов и имеет глубокий философский смысл. Последние 2 года я сильно им увлекся и проделал довольно большую работу по углубленному изучению теории типов (Calculus of Constructions), и готов поделиться результатами, а также рассказать о девяти направлениях, где можно применить это на практике. Очень многое получилось лучше, чем я планировал. Изначально перспективы были не очень понятными, и поэтому я не рассказывал друзьям и коллегам про мою работу в этом направлении и называл это «Секретный Проект». Но теперь, когда многое прояснилось и получилось, можно поделиться успехом. Собственно, в этой статье я расскажу вам не только про сам фундамент математики, а еще его связь с ежедневной работой программиста, а также с Computer Science/Data Science и AI/ML. Я вам нарисую большую и красивую картину, на которой все понятно и логически следует из маленького набора правил выведений типов (11 штук) и аксиом теории множеств (9 штук).

У нас есть 3 фундамента математики — теория множеств (удобна для человека), теория типов (удобна для компьютера) и теория категорий (не знаю, зачем она вообще нужна). Они примерно одинаковой мощности и одну можно выразить внутри другой. Особый интерс представляет именно теория типов, тк ее довольно легко можно запрограммировать внутри компьютера и использовать как строгий фундамент для других теорий, который не дает совершить ошибку и проверяет каждое ваше действие.

Читать далее
1
23 ...

Вклад авторов