Путь

От BASIC до AI-агентов

Примерно раз в пять лет я заново осваивал ремесло: Pascal, C++ и OpenGL, Unity, Solidity, TypeScript, а теперь разработка с AI-агентами. Вот что я построил по дороге.

  1. 1994+ BASIC, Pascal и олимпиады
  2. 1994

    Первые программы на BASIC

    Начал программировать на BASIC на советском домашнем компьютере БК-0010, потом на QBasic на PC.

    BASICBK-0010QBasic
  3. 1996

    Pascal

    Перешёл на Pascal — язык всех олимпиад и моих первых настоящих игр.

    Pascal
  4. 1997

    Super Amik 📷 9

    Придумал платформер на бумаге, уровень за уровнем в школьной тетради: геймдизайн ещё до того, как появилась машина, на которой его можно сделать.

    Paper
  5. 1998

    Tank — мой первый доведённый до конца продукт

    Первая большая программа, которую я довёл от идеи до готовой игры: танковый бой на Паскале в текстовом режиме на сетке 80×50, с уровнями, оружием, меню и заставкой. Около тысячи строк, выросших с марта по май 1998 года до версии 1.60; осенью появился Tank 2 уже с графикой.

    Turbo PascalText mode
  6. 1999

    Space War

    Моя первая хорошая игра: дуэль двух корабликов, повороты через синусы и косинусы, до которых я дошёл сам, деформация корабля при таране, векторный редактор кораблей, десяток видов оружия, миссии и свои загрузчики BMP и WAV.

    PascalBGIVector graphics
  7. 1998–2001

    Игры DiVision

    Другие мои игры того времени, среди них Capture or Destroy.

    PascalFree PascalDelphi
  8. 2000

    Lamer-Killer: 3D без движка

    Шутер с видом сверху, который мы начинали с одноклассником, вырос в мой собственный программный 3D-рендер: без движка и без видеокарты, каждый пиксель считался на процессоре по формуле проекции, которую я вывел сам, — задолго до того, как узнал, как это сделано в Doom. Редактор хранил уровень как матрицу проходимости, а оптимизатор объединял длинные стены в один полигон.

    PascalSoftware rendering
  9. 2000

    Space War 2K: один движок — три игры 📷 4

    Вдохновившись тем, как устроены моды к Half-Life, я сделал один движок и один exe-файл, на котором работали три разные игры — бои кораблей, танчики с видом сверху в духе GTA и артиллерийская игра вроде Worms, — достаточно было подменить папку с ресурсами и правила в конфиге. В главном меню играло видео, отрендеренное в 3ds Max, — через мой собственный формат с дельтой кадров и свой загрузчик BMP, на Паскале, который видео не поддерживал вообще.

    PascalEngineVideo codec
  10. 2000

    Русский Паскаль

    Транслятор, позволявший писать на Паскале по-русски, — помощь тем, кто не знает английского. Ключевые слова брались из редактируемого словаря — так что подошёл бы любой язык; русские идентификаторы транслитерировались автоматически; << и >> заменяли begin и end, были макросы. Он встраивался в среду Borland Pascal горячей клавишей в меню Tools: Shift+F9 транслировал файл, компилировал его родным компилятором Borland и запускал. А маленькая резидентная программа подсвечивала русские ключевые слова прямо в редакторе Borland.

    PascalBorland Pascal
  11. 2001

    Doom RF 📷 2

    Сделал за две недели в подарок однокласснику на день рождения, потом почти год дорабатывал: 4 игрока за одним компьютером плюс 8 ботов на вейпоинтах, редактор уровней и трюк с переключением банков, чтобы рисовать 640×480 за пределами 64-килобайтного окна видеопамяти. В 2026 портировал на 64 бита и SDL2, добавил звук и выпустил как полноценный релиз.

    Borland PascalFree PascalSDL2
    Doom RF
  12. 2002

    Золото IOI

    От книг по алгоритмам и спонсорской группы Progmeistars — ко второму месту на Латвийской олимпиаде, Балтийской олимпиаде и золоту Международной олимпиады по информатике в Йонъине (Корея): 18-е место в абсолютном зачёте, одна из 23 золотых медалей (в протоколе — Andrejs Ivanovs, Латвия).

    AlgorithmsPascal
    Золото IOI
  13. 2002–2008

    Латвийский университет 📷 3

    Компьютерные науки в Латвийском университете: бакалавриат, затем магистратура. Бакалаврская работа «Моделирование механического движения в компьютерной графике» на моём Steel Engine вошла в десятку лучших из 125 работ конкурса e-Dimensija 2006, который проводили Microsoft Latvia и Министерство экономики.

    C++Numerical methods
    У доски: метод Фурье, Латвийский университет.

    У доски: метод Фурье, Латвийский университет.

  14. 2002–2006

    ACM ICPC

    Пять сезонов студенческого чемпионата ACM ICPC за Латвийский университет. В 2002 году первокурсниками — Александр Белов, Сергей Козлович и я, все трое с IOI 2002 — мы заняли 1-е место на отборе в университете, 6-е на четвертьфинале в Минске а на полуфинале Северо-Восточной Европы в Петербурге стали лучшей командой Прибалтики. Именно благодаря нашему выступлению на первом курсе университету разрешили отправлять на следующий четвертьфинал четыре команды вместо двух. Позже, командами BUGS-XP и затем BUGS.NET, мы заняли 3-е место на четвертьфинале 2004 года в Минске и 5-е — в 2005-м.

    AlgorithmsC++
    Наша команда Латвийского университета: Александр Белов, Сергей Козлович и я (справа).

    Наша команда Латвийского университета: Александр Белов, Сергей Козлович и я (справа).

  15. 2002

    Карты, демки и F(x) 📷 10

    Карты для Half-Life и Counter-Strike, программки, которые красиво что-то рендерят, и F(x) — построитель графиков функций с зумом и скроллом, написанный на Delphi.

    Delphi
  16. 2002–2011

    Преподавание в Progmeistars

    Девять лет преподавал программирование группам учеников в крупнейшей детской школе программирования Латвии; разработал новую учебную программу.

    Progmeistars, 2006: ученик проспорил учителю и расплатился на доске.

    Progmeistars, 2006: ученик проспорил учителю и расплатился на доске.

  17. 2003

    Свой курс по PHP

    Написал и вёл в Progmeistars собственный курс веб-программирования на PHP.

    PHPMySQL
  18. 2003

    IRC-баунсер

    IRCdaemon: IRC-прокси и баунсер на C++ на голом WinSock, без сетевых библиотек. IRC-клиент подключался к нему по паролю; когда ты уходил, он оставался в твоих каналах с away-сообщением. Несколько пользователей — у каждого свой ник, сервер и каналы, — права администратора и режим отладки, который писал весь трафик в лог.

    C++Borland C++ BuilderWinSockIRC
  19. 2003

    Турнир компьютерных программ

    Победил на 12-м Турнире компьютерных программ в Progmeistars (как Андрей Иванов), где программы играют друг против друга. Секрет — заранее посчитанная таблица на 16 миллионов позиций, упакованная в 2 МБ.

    PascalAlgorithms
  20. 2003–2004

    Testing Suite

    Вместе с Сергеем Козловичем и Александром Беловым, моими товарищами по команде ACM, мы сделали систему для проведения олимпиад по программированию. Сергей написал ядро-тестер: очередь решений, запуск программ участников под отдельным пользователем в chroot с ограничением времени, памяти и дочерних процессов, компиляторы C++ и Free Pascal. Александр написал плагины-чекеры. Я сделал веб-часть на PHP и MySQL: вход, отправка решений, результаты, вопросы жюри и настройки олимпиады — например, когда участники и гости могут видеть таблицу результатов.

    PHPMySQLC++Linux
  21. 2003–2007

    Сисадмин в Progmeistars 📷 2

    Параллельно с преподаванием был системным администратором школы: ставил и поддерживал Linux-серверы на Gentoo и учебные компьютеры учеников, вплоть до сборки собственных ядер.

    LinuxGentooNetworking
    Настраиваю ядро Linux 2.6 для школьного компьютера, октябрь 2005 года.

    Настраиваю ядро Linux 2.6 для школьного компьютера, октябрь 2005 года.

  22. 2004+ C++, OpenGL и свои движки
  23. 2004

    C++ и OpenGL: Chess 3D 📷 2

    Перешёл на C++ (с STL олимпиады решать намного проще) и на полноценное 3D. Первый проект на заказ — трёхмерные шахматы с bump mapping и картами отражений.

    C++OpenGL
  24. 2004–2006

    Physics 2D

    Курсовая, из которой выросла 3D-физика моей бакалаврской на Steel Engine: свой движок с физикой и полноценная игра на нём — вдохновлялся Elasto Mania и Half-Life 2. Курсовая 2005 года «Collision Detection» под руководством профессора Паулиса Ķikusts ставила цель: сотня твёрдых многоугольных тел в реальном времени, которые не проходят друг сквозь друга даже при низком FPS. В ней разобрано, как это делали игры, — ограничивающие прямоугольники в Doom и Mario, сетка-хеш в Warcraft, многоугольники в Quake и Havok, — и добавлены мои собственные методы: метод цилиндров, где движущееся и вращающееся тело в пространстве «2D плюс время» становится скрученным цилиндром, и столкновение внутри кванта времени находится точно, последовательный алгоритм определения коллизий и расчёт момента инерции произвольного многоугольника.

    C++STLOpenGL
    Из курсовой: звезда, которая движется и вращается, в пространстве «плоскость плюс время» превращается в скрученный цилиндр. Определение коллизий сводится к поиску пересечения таких цилиндров.

    Из курсовой: звезда, которая движется и вращается, в пространстве «плоскость плюс время» превращается в скрученный цилиндр. Определение коллизий сводится к поиску пересечения таких цилиндров.

  25. 2005

    Xray

    Демо на заказ на моём движке: рентгеновские лучи проходят через полупрозрачную кость.

    C++OpenGL
  26. 2005–2018

    muo.lv

    Частный сервер MuOnline, который я соосновал и запрограммировал: через несколько недель после запуска в 2006 году — 300–400 игроков онлайн. Всё вокруг игры сделал я: сайт на PHP с рынком игроков, рейтингами, аукционами, обменом вещами и квестами, SMS-платежи, экономика на кредитах, VIP-сервер, публичные бан-листы — плюс свой античит, серверный туннель, лаунчер с автообновлением и бот, который проводил ивенты в игре.

    PHPSQL
    muo.lv во времена Season 6: рейтинг персонажей и кто сейчас на сайте.

    muo.lv во времена Season 6: рейтинг персонажей и кто сейчас на сайте.

  27. 2006

    Steel Engine 📷 5

    Свой движок на C++: сцена описывается в конфигах, префабы с переопределяемыми параметрами — идея, которую потом сделал массовой Unity. Он же стал моей бакалаврской работой «Моделирование механического движения в компьютерной графике» (Латвийский университет, 2006, руководитель Dr. Паулис Ķikusts): отдельные графический и физический движки — объект только рассказывает, как он выглядит, а движок сам решает, как его рисовать; и физическая модель твёрдых тел, написанная с нуля, в 3D с шестью степенями свободы: метод цилиндров и последовательный алгоритм коллизий из моей 2D-курсовой, движение по заданным траекториям вместе со свободным движением, обработка столкновений по законам сохранения импульса и энергии, около сотни тел в реальном времени. Рецензент отметил, что движение в демо действительно подчиняется законам физики — чего нет во многих графических движках того времени. Исходники открыты.

    C++OpenGL
    Steel Engine
  28. 2006–2012

    whiteCryption

    Архитектор ПО в области white-box криптографии и защиты кода (RSA, ECC, SHA, AES). Спроектировал архитектуру v5, которая работает в продакшене уже около 15 лет, теперь в составе Zimperium.

    C++Cryptography
  29. 2008

    Labyrinth 📷 6

    Магистерская работа в Латвийском университете (2008, руководитель доц. Kārlis Freivalds): Steel Engine, выросший примерно до 30 000 строк на C++, и Labyrinth — сетевая гонка по сгенерированному лабиринту как его демонстрация. Я основал и вёл нашу команду DiVision и написал всё, кроме звука, который делал Андрей Мовляйко. Главное: попиксельное освещение на GLSL, где для каждой комбинации числа источников света и флагов материала шейдер компилируется один раз и кэшируется; теневые объёмы с Carmack’s reverse — выбраны вместо shadow mapping ради точных теней; алгоритм видимости для лабиринтов, после которого стал играбельным лабиринт 100×100 вместо 14×14, потому что число рисуемых объектов перестало зависеть от размера лабиринта; и сетевой протокол поверх библиотеки enet со своим методом синхронизации — penalty synchronization: тела разных игроков могут ненадолго пересечься, и силы расталкивают их.

    C++OpenGLGLSLNetworking
    Labyrinth
  30. 2010+ Unity и студия на 35 человек
  31. 2011

    Unity: Bastions

    Первая игра на Unity: две башни — строишь свою и обстреливаешь башню противника из пушек. Задумывалась как мультиплеер.

    UnityC#
  32. 2011

    Nunnery

    Двухдневный геймджем в лондонском хакерспейсе, где полно паяльников, роботов и серверов. Позвал меня Игорь — знакомый по университету, который работал в Sony, а теперь делал свои 2D-игры на собственном кросс-платформенном движке IGE, нацеленном в основном на приставки вроде PSP. Мы сделали две игры; в «Монашке» (Get Me to a Nunnery) — платформере про прыгающую монашку — я был основным программистом. Выбрал IGE, а не Unity, чтобы разобраться в движке для следующих игр, и ещё два дня дома рефакторил игру.

  33. 2012

    MyCountry в innoWate

    Два месяца в студии Game Insight на MyCountry — градостроителе с 5M+ установок в Google Play: исправлял баги и возвращал старые механики.

    C++Mobile
  34. 2012–2018

    MadSword 📷 4

    Соосновал игровую студию и вырастил её до 35 человек. Начинали Steam Defense за кухонным столом, нашли инвестора, потом перешли на игры на заказ для издателей: один переиспользуемый Unity-движок с редактором уровней и общим сервером дал 100+ игр и рескинов и тысячи уровней. Всего 160+ игр и 20M+ скачиваний, в основном через голландского издателя. Были и VR-игры.

    UnityC#Java
    MadSword
  35. 2013

    Global Game Jam: Tankraft

    Сетевая танковая битва, сделанная за выходные вдвоём с напарником: свой или выделенный сервер, два вида оружия, танки на физике. Сборки под Windows, macOS, Linux и браузер.

    UnityC#Networking
    Global Game Jam: Tankraft
  36. 2013

    Запуск Steam Defense

    Первый собственный релиз MadSword — на Kongregate, ВКонтакте и Одноклассниках: свой скриптинг сценариев, AI для скирмиша и PvP и BotWars — ночной стресс-тест с десятками тысяч юнитов, после которого игра за три недели перестала падать.

    UnityC#Networking
    Запуск Steam Defense
  37. 2015–2016

    Бесплатные воркшопы по геймдеву 📷 2

    Мы открывали офис MadSword для местного комьюнити — бесплатные вечерние воркшопы: как делаются игры на Unity и в Blender и какие нюансы мы узнали в продакшене — от риггинга персонажей до античита на Unity C#. Записи остались на YouTube.

    UnityC#Blender
    Я выступаю на воркшопе в офисе MadSword, декабрь 2015 года.

    Я выступаю на воркшопе в офисе MadSword, декабрь 2015 года.

  38. 2015–2020

    Zebrainy 📷 3

    Совладелец и технический директор компании, делающей развивающие игры для маленьких детей. Одно из приложений, Zebrainy ABCs, учит алфавиту: ребёнок перетаскивает светящиеся шарики, собирая из них букву, а потом попадает в нарисованный мир слов на эту букву — 26 букв, 26 миров.

    Unity
    Zebrainy ABCs: мир буквы A.

    Zebrainy ABCs: мир буквы A.

  39. 2017+ Web3 и real-time платформы
  40. 2017

    Decrypted Kitties 📷 4

    Игра в духе CryptoKitties, сделанная примерно за неделю и выпущенная в Google Play 31 декабря 2017 года под названием «Crypto Kitties Decrypted Simulator», — первый шаг в крипто-игры. Собираешь, скрещиваешь и продаёшь котов со своими генами, без кошелька и эфира.

    Unity
    Decrypted Kitties в Google Play, декабрь 2017.

    Decrypted Kitties в Google Play, декабрь 2017.

  41. 2017–2021

    Blockchain Cuties

    Писал контракты на Ethereum для других, потом соосновал Cuties и запустил её за четыре месяца (апрель 2018) — до того, как стандарт ERC-721 был окончательно принят. Персонажи и скрещивание — в блокчейне, предметы и бои — на сервере с одноразовыми подписями, которые проверяют контракты. Ethereum, затем EOS, TRON, NEO и Polygon — мультичейн-архитектура, которую позже расширили до 7 сетей. #1 на DappRadar; 2021: контракты governance-токена и IDO.

    SolidityNode.jsEOSTRON
    Blockchain CutiesBlockchain Cuties
  42. 2020–2024

    Dice Chess

    Шахматы в реальном времени с вариантом на кубиках — от идеи до запуска: ТЗ, архитектура, своя система тестирования шахматных позиций; нагрузочные тесты на 20 000 одновременных игроков.

    JavaVueTypeScriptMicroservices
    Dice Chess
  43. 2021–

    Roach Racing Club 📷 9

    Web3-гонки с нуля, которыми управляешь живым крипто-трейдингом: смарт-контракты, токеномика, свой WebGL-движок для живых заездов на 10 игроков, модель гонки, отбалансированная в моём симуляторе, и микросервисный бэкенд. В вебе и в Telegram.

    SolidityThree.jsTypeScript
    Roach Racing Club
  44. 2022–

    Fractional CTO

    Технический партнёр для фаундеров: разработка с фиксированным объёмом, ревью архитектуры и due diligence.

  45. 2025+ Разработка с AI-агентами
  46. 2025–2026

    Griddle Fun 📷 4

    Игра на живом графике криптовалюты: кликаешь в клетку сетки, в которую, по-твоему, придёт курс, и выигрываешь с коэффициентом этой клетки. Самое сложное — математика: рассчитать коэффициент каждой клетки. Её мы делали вдвоём с математиком: я ставил задачу, тестировал его результаты и возвращал, что не так, — параллельно писал саму игру. Симуляционное тестирование делал я сам: боты с разными стратегиями, жадными и не только, играют против выплат, пока коэффициенты не сойдутся. Прогон на 604 800 секундах курса (неделя) дал почти ровно ноль — ROI около 0,4%, как и задумывалось.

    Сетка: у каждой клетки впереди линии курса свой коэффициент.

    Сетка: у каждой клетки впереди линии курса свой коэффициент.

  47. 2026

    Воксельный мир за неделю 📷 4

    Свой «майнкрафт» на Unity, собранный примерно за неделю в феврале 2026 года с Claude Code: процедурный ландшафт с горами, реками и лесами, мир, разбитый на чанки, и редактирование кистью блоков — вплоть до посадки деревьев.

    UnityC#Claude Code
    Процедурный ландшафт: река, холмы и горы.

    Процедурный ландшафт: река, холмы и горы.

  48. 2026

    TaleCheck

    Статический анализ художественного текста, построенный в одиночку с Claude Code и параллельными агентами: ~2 300 коммитов меньше чем за три месяца, работает с платными пользователями.

    TypeScriptNestJSClaude CodeAnthropic API
    TaleCheckTaleCheck