CV и Контакты

Александр Гранин

Увлеченный программист, спикер, исследователь, писатель.

Автор книги Functional Design and Architecture (Second Edition)

У меня более десяти лет опыта в разработке ПО и широкий бэкграунд. Мое призвание — это язык Haskell и функциональное программирование. Еще я известный С++ разработчик. Я делаю доклады на ведущие С++ конференции о ФП в этом языке, исследую новые подходы и разрабатываю showcase-проекты. Также знаю надостаточном уровне C# и Python. Я пишу технические статьи и участвую в Open Source; я автор книги «Functional Design and Architecture» и многих статей на тему дизайна и архитектуры в функциональном программировании.

CV и портфолио:
Контакты:

Старший разработчик / Тимлид / Консультант

Опыт работы: более 10 лет

Языки: Haskell, PureScript, C++, Python, C#.

Специализация: Backend, DSLs, Functional Programming, Object-Oriented Programming, Desktop, Software Design and Architecture, Research, Multithreading and Concurrency, Testing, Databases, Algorithms, Web

Технологии: STM, FRP, Design Patterns, STL, Boost, DSL/eDSL, SOLID, Databases, XML, JSON, SQL, NoSQL, RESTful, .NET, monads, TH, type-level, Free/freer, Effect systems, Unit / Functional / Integration / etc. testing, Regex

Фреймворки и системы: WPF, Qt, Node.JS, RabbitMQ, Postgres, SQL Server, RocksDB, Sqlite


Опыт работы

Enecuum HK Limited

Team Lead (Haskell)
(08/2018 — 12/2018)

Разработка блокчейн Enecuum: дизайн и архитектура проекта, исследования, имплементация и тестирование технологий блокчейн, техническая документация

Ведение проекта, менеджмент, таск-трекинг, внешние коммуникации, постановка, анализ и декомпозиция задач, управление командой.

В ходе работы я создал open-source фреймворк Node Framework для написания распределенных приложений и алгоритмов блокчейн.

⏺ Фреймворк: Enecuum Node Framework
⏺ Статья: Building network actors with Enecuum Node Framework
⏺ Технологии: Haskell, STM (Software Transactional Memory), Design Patterns, eDSLs, SOLID, JSON, NoSQL, TH, type-level, Free/freer, Effect systems, Multithreading and Concurrency, Testing


Restaumatic

Senior Developer (Haskell, PureScript)
(11/2017 — 08/2018)

Разработка сервисов для ресторанов (заказ и доставка, меню, веб-сайты)

Haskell, PureScript


Juspay

Senior Developer (Haskell, PureScript)
(06/2017 — 11/2017)

1. Дизайн и имплементация фреймворка PureScript Presto для финансовой системы с мобильным, десктопным и web ui. Фреймворк позволил перевести разработку с динамического JavaScript на надежный статически типизированный PureScript и упростил код. На нем написана пара десятков мобильных приложений, обслуживающих миллионы пользователей. Фреймворк выложен в open-source.

2. Дизайн и имплементация системы распределенных полнофункциональных сериализуемых workflows возможностью паузы в любой момент, запуска на другой ноде, работы с дочерними workflow, «горячей» заменой кода.

PureScript Presto
⏺ Технологии: PureScript, Node.JS, RabbitMQ, Free monads, Effect systems, Design patterns


2GIS

Ведущий разработчик (C++, Python)
(04/16 — 06/17)

— Разработка систем поиска по справочнику и геоданным
— Тестирование поискового движка
— Исследования алгоритмов ранжирования результатов поиска
— Командное и межкомандное взаимодействие
— Сбор и уточнение требований

Технологии: C++, XML, STL, Boost, Python


Kaspersky Lab

Разработчик (C++, C#)
(05/12 — 04/16)

— Исследования в области защиты данных (DLP)
— Разработка алгоритмов и компонентов DLP
— Разработка внутренних инструментов
— Разработка прототипов
— Разработка правил классификации документов
— Проектирование, разработка архитектуры компонентов
— Тестирование, профайлинг, улучшение существующего ПО

Технологии: C++, XML, STL, Boost, C#, WPF, .NET, SOLID, GRASP, SQL, SQL Server, Regex, Testing, Profiling


Проекты

PureScript Presto

PureScript Presto — это фреймворк для написания мобильных и web-приложений с UI. В компании Juspay его использовали для создания финансовых приложений, а PureScript был выбран как статически типизированный язык, дающий гарантии. Вся разработка компании была переведена на PureScript, а фреймворк Presto помог им реализовать несколько приложений, которыми пользуются миллионы людей.

Node Framework

Node Framework — это фреймворк для написания сложных приложений на Haskell. Вот такие фичи поддерживаются из коробки:

  • Безопасное конкурентное состояние (STM-based)
  • Key-value БД
  • Логгирование
  • Работа с сетью (TCP, UDP, JSON-RPC)
  • Работа с файловой системой
  • Random & Crypto
  • Многопоточность в виде процессов
  • Работа с конкурентным графом любого вида
  • Менеджмент конфигов
  • Интерактивный CLI
  • Client / Server side

Также с фреймворком прилагается:

  • Четкая архитектура приложения
  • Несколько сложных нод-примеров в составе фреймворка
  • Тестовая среда

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

Библиотеки STM для Haskell и С++ на Free-монадах

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

Мне удалось реализоввать STM на Free-монадах в качестве примера: как на Haskell, так и на C++. В библиотеке на С++ пришлось изобрести способ реализации сначала самой Free-монады, а затем и функциональности STM поверх. Впоследствии я даже смог сделать два движка в виде Free и Church-encoded Free монад, где второй движок (Church-encoded) показал значительно большую производительность. При этом логика осталась прежней.