vitaliy-gordonvitaliy-gordon

Виталий Гордон

Fullstack Developer · Бэкенд · Фронтенд · Ведущий (Lead)
От 240 000 ₽ · Не ищу работу
Возраст: 33 года
Опыт работы: 15 лет и 1 месяц
Регистрация: 08.07.2008
Последний визит: 3 месяца назад
Местоположение: Россия, Москва
Профессиональные навыки: Node.js · JavaScript · Blockchain · Веб-разработка · Vanilla.js · ReactJS · MongoDB · Ethereum · Typescript · Redux
Войдите, чтобы посмотреть контакты пользователя

Обо мне

Пишу код с 12 лет, работаю в индустрии с 18-и (14+ лет опыт), за это время основывал свои стартапы и работал по найму в командах. Нахожу общий язык с людьми, не обламываюсь инициативно браться за любую работу, какая понадобится для успеха проекта.

Эксперт в JavaScript с многолетним опытом – писал свои ООП-фреймворки и бандлеры ещё во времена ES5. Активно использую все возможности современного ES6+ (async/await, async generators, Proxy, Symbol и т.п.), знаю как язык устроен «под капотом», писал свои транспиляторы.

Хорошо разбираюсь в низкоуровневых API браузера (DOM, Canvas, SVG, WebGL), делал разнообразные WYSIWYG-редакторы и компоненты со сложными анимациями. Есть хорошее понимание современного React (Hooks), Redux, TypeScript. Большой опыт HTML/CSS вёрстки, нередко приходилось заниматься UI/UX проектированием.

Использую Node с самых ранних версий, писал высоконагруженные системы (биржевых роботов), есть опыт оптимизации кода и написания своих модулей на C++. Имеется продолжительный опыт использования MongoDB, есть также понимание SQL.

Последние несколько лет активно использую Python для анализа данных (Pandas и т.п.), написал на последнем месте работы фреймворк на базе IPython Notebooks для быстрого построения внутренних админок, аналитики и автоматической генерации отчетности.

Есть обширная экспертиза в области криптотехнологий (криптовалюты, смарт-контракты) и биржевой торговли, последние годы работы связаны с этой областью.

В бекграунде есть C/C++, Java (Android), Objective-C — раньше занимался мобильной разработкой, но сейчас это не основная компетенция. Раньше также занимался 2D/3D графикой, с тех пор осталось хорошее понимание сопутствующих алгоритмов и математики.

Люблю функциональное программирование, всегда рад изучать новые технологии и подходы к разработке.

Легко учусь новому и умею «с нуля» разрабатывать сложные программные продукты. Неплохо говорю на английском. Есть опыт работы в международных командах и опыт создания и продвижения крупных open-source проектов (CCXT).

Автор многих высококачественных open-source модулей, использующихся в сотнях GitHub-проектов, в т.ч. и в популярных с десятками тысяч звёзд (напр. в ccxtGrafana, pnpm).

👉https://github.com/xpl

Резюме in Englishhttps://www.linkedin.com/in/xpl/

Блог: https://medium.com/@xpl
Telegram: https://t.me/v_gordon
Почта: rocket.mind@gmail.com

Участие в профессиональных сообществах

Опыт работы

  • 1709 Co. — частный фонд специализирующийся на алгоритмическом трейдинге (Cayman Islands)
    Москва
    Co-Founder & Chief Architect
    Май 2018 — По настоящее время (2 года и 9 месяцев)
    • Разработал первоначальный MVP (в 3-х месячный срок)

    • Руководил запуском и дальнейшей разработкой продукта 
      (в составе команды из ещё 2 разработчиков — со-основателей)

    • Продукт, созданный мной, это:

      Высокочастотная торговая система — робот + инфраструктура
      — Работает автоматически, непрерывно и круглосуточно
      — Взаимодействует с 20+ криптовалютными биржами по всему миру
      — Совершает десятки сделок в секунду
      — Одновременно оперирует 10+ валютными парами
      — Гибкая и быстрая разработка — не жертвуя надежностью
      — За 2 года — ни одной аварии с невозвратной потерей денег/данных

      В рамках моей деятельности я активно занимался как исследовательскими задачами и проектированием — так и непосредственной реализацией ключевых компонентов продукта  написав бóльшую часть кода в его нынешнем виде.

      Подробнее о том, что было сделано:

    • Слой глубокой абстракции разнородных биржевых API (Node)

      Интеграция и унификация 20+ разных API бирж (WebSocket + REST)
      — Интеграция децентрализованных бирж, Ethereum-контрактов (Web3)
      — Эмуляция отсутствующих функций API у отдельных бирж

      — Минимизация latency, оптимизация узких мест и потребления памяти
      — Параллелизация запросов через разные IP,  для обхода DDoS-защиты
      — Извлечение апдейтов из 2-5 разнородных источников одновременно
      — Мультиплексирование и гармонизация входящих потоков данных 
      — Эксплуатация индивидуальных особенностей бирж («хаки», трюки)

       Абстракция от асинхронности сети / бирж
      — Решается проблема с многозадачностью и разделяемыми ресурсами
      — Это достигается моделированием биржи «на шаг вперёд»
      — Совершаемые операции изменяют состояние модели немедленно
      — Используется мат. модель реальной биржи (matching algorithm, fees)
      — Учёт общих ресурсов (балансы, ликвидность) предотвращает конфликты
      Исполняющий процесс реализует запланированное состояние
      Обновляющий процесс сверяет приходящее из сети с ожидаемым
      — Несостоятельные версии отбрасываются эвристическим фильтром
      — Решается проблема с API бирж, посылающими неактуальные данные
      — Результат — радикальное упрощение прикладного кода:

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

      Абстракция от ненадёжности сети / бирж
      — Распознавание всевозможных сбоев и порчи целостности данных
      — Проактивная детекция сбоев (периодические пробные операции с API)
      — Отличение транспортных сбоев от логических
      — Менеджмент повторных попыток — для разрешения транспортных сбоев
      — Адаптивный throttling запросов, с учётом характера и частоты отказов
      — Непрерывная real-time оценка текущего качества работы биржи:

           … оценка достоверности синхронизированного состояния,
           … оценка работоспособности размещения/снятия ордеров,
           … оценка возможности без доп. задержек обновлять статусы ордеров
           … с учетом всего этого — безопасно ли делать taker- и maker-ордеры

      — Абстракция от специфичного для биржи представления сумм

      — Учёт всевозможных схем комиссий и бонусов
      — Учёт ограничений репрезентации чисел (точность)

    • Мультибиржевой торговый движок, сочетающий множество стратегий

      — Комбинирование всех бирж в единый супер-пул ликвидности
      — Одновременное исполнение всех имеющихся стратегий
      — Арбитраж, клонирование ликвидности, маркет-мейкинг
      — Возможность ребалансинга портфолио по наиболее выгодным ценам
      — Вычисление рисков из истории сделок и истории отказов API бирж
      — Оценка возможностей и принятие решений о сделках в real-time
      — Адаптивный throttling расчётов для недопущения буферизации I/O 
      — Детекция и коррекция последствий ошибочно совершённых сделок
      — Гибкая приостановка отдельных операций при штатных сбоях бирж
      — Автоматическое восстановление после крэшей (принцип "let it fail")
      — Многослойный контроль недопущения крупных убытков
      — Аварийная остановка в ситуациях, требующих ручного вмешательства

    • Юнит-, интеграционное, performance, fuzz- тестирование

      Test-driven development подход (Mocha, Chai)
      — Юнит-тесты для нетривиальных/критичных базовых функций
      — Тест-система для интеграций API реальных бирж

       Эмулятор биржи (matching engine + API) для интеграционных тестов
      — Имитация особенностей поведения и сбоев реальных бирж
      — Работа как в качестве embedded либы, так и отдельного WS-сервера

      — Тесты торговых стратегий — воспроизводимые пошаговые сценарии
      — Тестируется вся система целиком (с эмуляцией реальных бирж)
      — Применение оригинального flow control паттерна в hi-level коде...

          ... с режимом пошагового выполнения (через async-генераторы)
          ... позволяет писать воспроизводимые сценарии в тестах
          ... и тестировать нетривиальные аспекты торговых стратегий

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

      — Полноценный симулятор рынка для fuzz-тестирования
      — Имитирует хаос рынка в «ускоренной перемотке»
      — Быстро выявляет дефекты, не видные в заскриптованных тестах

      — Набор бенчмарков для замеров скорости менеджмента ордеров
      — Спец. instrumenting для замеров задержек логики в production-среде

    • Построение инфраструктуры: экономия, безопасность, надежность

      AWS + Git + Node + Python + MongoDB + Jupyter + Docker
      — Изоляция доступа с помощью файрволлов и политик безопасности
      — Интеграция 2FA HW-ключей (Yubikey) для доп. защиты SSH и крит. API
      — Оптимизация под дешёвые EC2 instances для экономии расходов
      — Без ресурсоёмких оркестраторов и брокеров сообщений
      — Реализация принципов loose coupling"let it fail" + graceful degradation
      — Сервисы спроектированы работать даже при отказе других сервисов

    • Легковесный адаптер для failsafe записи в MongoDB

       — Простой синхронный API – fire & forget
       — Пишет в in-memory журнал, персистится на диск
       — Периодически записывается в БД батчем, через BulkWrite API
       — Это даёт высокую скорость записи и низкую нагрузку на CPU
       — Pending записи не теряются (и не задваиваются) при крэшах
       — Записи не теряются при продолжительной недоступности БД / сети
       — Используется сервисами для записи логов, метрик, событий

    • Система оперативного оповещения о проблемах в компонентах системы

      — Даёт внятный фидбек при частых штатных отказах чего угодно
      — Микросервис для мониторинга issues (Mongo/JS + Python API)
      — Активные issues отображаются в Slack (самоудаляясь при снятии)
      — Простой fire&forget API для встраивания в прикладной код
      — «Канареечный» режим — срабатывание при отсутствии обновлений
      — Результат: видим в Slack лишь то, что важно прямо сейчас
      — Нет мусора из бесконечных однообразных лент маловажных событий
      — Всего $1 расходов в месяц и всего несколько сотен строк кода

    • Система быстрой разработки Python-приложений

      — За основу взята среда Jupyter (обычно применяемая в data science)
      — Внедрён подход — совместная интерактивная разработка в облаке
      — Упростили процессы — нет нужды воспроизводить среду локально
      — Минус трафик, плюс security — dev-доступ к БД изолирован в облаке
      — Выстроено окружение: набор плагинов + свой фреймворк и загрузчики
      — Получили интерактивные блокноты IPython «на стероидах», умеющие:

          … общаться с другими компонентами инфраструктуры через спец. API
          … выводить "ad-hoc" UI-виджеты и графику в REPL манере
          … заменять наколенные CLI-утилиты для ежедневных сервисных задач
          … переиспользоваться в качестве модулей и инлайн-макросов
          … запускаться как приложения – для админок и интерактивных отчётов
          … работать как фоновые задачи/сервисы (в качестве back-end)
          … сигнализировать персоналу о проблемах c помощью issues API
          … синхронизироваться в общий монорепозиторий кода в Git

    • Непрерывная синхронизация и анализ истории событий

      — Абстракция механизмов пагинации в historical data API бирж
       Агрегация и унификация разнородных данных о счетах и транзакциях
      — Конвейеры для инкрементального обсчёта 50+ Гб данных в MongoDВ
      — Непрерывный аудит (сверка) балансов и истории сделок/транзакций
      — Выявление пробелов и несоответствий в синхронизированных данных
      — Полуавтоматическое восстановление целостности с ручным контролем
      — Расчёт программ лояльности, приобретений и трат бонусных очков
      — Уведомления о расхождениях ожидаемых комиссий с реальными
      — Классификация типов сделок с помощью метаданных + эмпирически
      — Генерация отчетности о прибылях и убытках по разным направлениям
      — Визуализация, интерактив (IPythonMatplotlibBokeh, Vega)
      — Анализ эффективности деятельности торговых алгоритмов
      — Анализ убытков: отделение факторов рынка от дефектов алгоритмов
      — Анализ прибылей и рисков с детализацией до отдельного аккаунта
      — Оптимизация аллокации капитала по биржевым аккаунтам и валютам

    • Автоматизация управления 150+ аккаунтами на 20 биржах

      — Безопасное хранение паролей, ключей и иных данных аккаунтов
      — API и GUI для безопасного редактирования чувствительной информации
      — API и GUI для взаимодействия с историей правок (поверх Git)
      — API и GUI для быстрого переводов средств между аккаунтами
      — Подключение Puppeteer для автоматизации действий через веб-UI
      — Обход защиты бирж (взлом CAPTCHA, обход детекции автоматизации)
      — Автоматизация email-подтверждений от бирж
      — Автоматизация 2FA-процедур для авторизации на биржах и операций
      — Расчет комиссий и лимитов налагаемых при выводах и вводах денег
      — Сопоставление истории бирж для выявления межаккаунтных переводов
      — Автоматическая и ручная маркировка переводов метаинформацией
      — Оповещения о неопознанных транзакциях
      — Шифрование резервных копий репозитория

    • Генерация ежегодной налоговой отчётности

      — Расчёт налогооблагаемой прибыли методами FIFO и LIFO
      — Учёт специфики налогового законодательства США
      — Учёт специфики криптовалютной среды (e.g. airdrops)

    • А также...

      — Ведение внутреннего wiki, in English
      — Документирование инструментов и процессов
      — Документирование архитектуры и алгоритмов
      — Ежедневная коммуникация с англоговорящими стейкхолдерами
  • CCXT — CryptoCurrency eXchange Trading Library
    Москва
    Co-founder / Core Contributor
    Март 2016 — Май 2019 (3 года и 3 месяца)

    Участие в создании популярной (12k звёзд на GitHub) мультиязычной open-source библиотеки для торговли на 120+ крипто-биржах.

    — Ключевые архитектурные решения
    — Разработка алгоритмов
    — Обкатка на реальных торговых системах в production
    — DevOps (CI/CD пайплайн, мультиязыковые тесты)
    — Копирайтинг (документация, промо-материалы, SEO)
    — Разработка «Программы Сертификации» бирж
    — Разработка бизнес-предложений (реклама, интеграции)

    👉https://ccxt.trade

  • Мы — небольшая компания неплохих людей с большими планами и тенденцией к превращению в среднюю компанию с гигантскими планами.
    Москва · От 10 до 100 сотрудников
  • PK Management (President Kids)
    Москва
    Ведущий разработчик
    Май 2014 — Январь 2015 (9 месяцев)

    Разработка системы внутренней автоматизации деятельности модельного агентства:

    — JS / Node.js / MongoDB / HTML / CSS
    — Проектирование UI/UX
    — Разработка моделей данных
    — SPA интерфейс (динамический роутинг, реалтайм обновление данных без перезагрузки страницы)

    А также дизайн и разработка «продающего» сайта:

    https://youtu.be/lrCIYQQNfsw

    — Виртуализация скроллинга, no pagination
    — Динамическая подгрузка фото/видео
    — WYSIWYG редактор для блога с drag&drop
    — Интерактивные анимации

  • Производство и монтаж рекламного оборудования
    Москва · От 100 до 1000 сотрудников
    Старший разработчик / Ведущий разработчик
    Январь 2010 — Май 2014 (4 года и 5 месяцев)

    — Мобильные приложения (iOS / Android / Windows Phone)
    — POI терминалы для выставок (C++ / Qt / HTML5 / CSS / JS)
    — Front end веб разработка
    — Проектирование UI/UX
    — ERP-система для внутреннего использования (ExtJS)

    Проекты: burningheads.ru/portfolio

  • RealityGirl.ru (интернет-реалити-шоу, ныне прекратило деятельность)
    Москва
    Frontend разработчик
    Октябрь 2008 — Май 2009 (8 месяцев)

    — Интеграция вёрстки с серверным кодом
    — Программирование интерактивных элементов страницы
    — Разработка административных интерфейсов
    — Разработка WYSIWYG редактора для блогов

  • Интерактивный Образ (iimage)
    Москва
    Ведущий разработчик
    Апрель 2008 — Сентябрь 2009 (1 год и 6 месяцев)

    В сверхсжатые сроки (3-4 мес.) разработка многопользовательского симулятора-тренажера ГИМС для подготовки судоводителей маломерных судов:

    — Высокоуровневая логика (Quest3D)
    — Биндинг физики (C++ / PhysX)
    — Моделирование реалистичной физики судна
    — Сетевой слой (синхронизация состояния)
    — Шейдеры погодных эффектов, смена времени суток
    — Система виджетов для UI
    — WYSIWYG редактор миссий
    — Система ролей пользователей (учитель, ученик)
    — Поддержка устройств ввода
    — Мультимониторный рендеринг

    https://youtu.be/k1Mxrxgv9nQ


    А также:

    — Разработка 3D геоинформационной системы (C++ / Direct3D)
    — Разработка и поддержка сайта компании (Python / Django)

  • Picamatic.com (продан, ныне нефункц.)
    Москва
    Со-основатель / Frontend Engineer
    Март 2008 — Июль 2008 (5 месяцев)

    Разработка популярного хостинга картинок с инновационным one-click / drag&drop интерфейсом. Один из первых в мире хостингов с AJAX загрузкой без Flash-вставок и без регистрации.

    https://ru.wikipedia.org/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Picamatic-screenshot.png

    http://wikireality.ru/wiki/Picamatic

    https://www.pcmagazine.ru/columns/detail.php?ID=31605

    http://habrahabr.ru/post/22198/

  • Многокино
    Москва
    Flash/Flex программист
    Март 2008 — Апрель 2008 (2 месяца)

    Дизайн и реализация клиентского интерфейса и админки для POS-терминала продажи DVD фильмов.

  • ООО ИТЛ
    Москва
    Программист (3D графика)
    Август 2005 — Май 2008 (2 года и 10 месяцев)

    Разработка виртуального тура по Московскому Кремлю и Алмазному Фонду России.

    — Разработка 3D движка (C++ / Direct3D / HLSL)
    — Разработка системы UI
    — Система рендеринга текста для арабского и китайского языков
    — Toolchain для художников (интеграция с 3D Studio Max и т.п.)
    — Система скриптов/плагинов для движка (C++/CLI, C#, .NET)

Высшее образование

  • МГУПИ

    Московский государственный университет приборостроения и информатики
    Прикладная математика
    Сентябрь 2004 — Июнь 2005 (9 месяцев)

    Ушел с первого курса работать в стартап :)