Схема авторизации достаточно простая: 1. Запрашиваем логин и контактную информацию номер телефона или почта 2. Формируем код 3. На основе того что ввели и сгенерировали формируем JWT токен, в claims кладем логин, контакты, hmac кода из сообщения, и таймштамп со временем возможности следующей отправки (для ограничения количества отправок) 4. Отправляем код 5. В UI форма переключается на шаг с вводом кода и ожидаем ввода 6. Извлекаем claims из куки, на основе введенного кода формируем hmac и сравниваем его с тем, что в токене в куках 7. Если все совпадает, то регистрируем пользователя и выдаем пару JWT токенов для аутентификации и обновления токена.
Со входом в аккаунт такая же система, но нужен только login.
Примерно так это выглядит на момент написания поста
Форма регистрации
Форма ввода кода
Код для входа (пока сделан в логах)
После входа в профиль
На момент написания статьи коды авторизации отображались в логах. Это временное решение пока не настроено smtp и сервисы для отправки.
Возможно для авторизации я сделаю немного другую стратегию, чтобы пользователи вводили только логин и TOTP-код (код базированный на времени, как в google authenticator). Это позволит сэкономить на отправке SMS-кодов (которые не бесплатны в отличие от email и TOTP).
Ок, далее хочу выстроить спецификации в swagger. Наброски того как и что делать уже в блокноте. Что нам нужно делать: - Общую доску - Доски пользователей и профиль (короче говоря, перенимаем у инсты паттерн, где контент идет сразу после блока с информацией профиля) - Авторизацию и регистрацию
Дополнительно заложим возможность делать запросы и отвечать на них (принимать/отклонять)
Сначала я хочу описать общие части спецификации вручную для того, чтобы выстроить эндпоинты в интуитивно понятной структуре, а затем через ассистента выделить их этого общие ответы, дополнить блоки secure, tag, response и другие элементы, с которыми ИИ справится лучше человека.
- Что не позвал? - Да я откуда знал что у тебя эта игра вообще есть?
С этого началась вся эта история. Идея была проста, когда я планирую во что-то поиграть надо все рассказывать. Подумал, может сделать объявления? Подумано - сделано. Через час я сижу с листком бумаги, открытым вики-редактором (своя база знаний на сетевом хранилище, прикиньте). Мусорка уже наполовину заполнена бумажками с идеями (уж слишком мало ограничений для небольшого приложения). Часа в два ночи уже имел согласованный с самим собой функционал (ну это с перерывами на 3 часа попить чай, естественно). Следующий шаг - спецификации API и детальное проектирование процессов.
короче, думал, какой бы крутой пет проект написать, чтобы глубже изучить go, решил запилить свою in-memory базу данных (qrrot).
я пошел по хардкору: написал свой парсер с нуля, который не ест память и работает на скоростях в наносекунды
но самое веселое - это киллер-фича. прикрутил туда ии-ассистента. теперь можно не писать сухие sql-запросы, а просто человеческим языком накатать: «удали ивана, если ему меньше 30».
ии сам делает цикл:
лезет в базу, смотрит данные
думает, что с ними делать
возвращает результат
чтобы ии случайно не грохнул весь продакшн, добавил «защиту от восстания машин»: если база видит опасную команду (удаление, изменение), она выводит ascii-рамку и ждет подтверждения «y/n».
конечно, это не конкурент редису (пока что), есть свои косяки с памятью и блокировками, но для пет-проекта за две недели получилось бодро.
если кому интересно посмотреть, как это выглядит под капотом или просто поугарать, как ии управляет данными - оцените проект на гитхаб. буду рад любой критике и советам от коллег по цеху.
Всем привет. Меня зовут Валера, я go-разработчик. В какой-то момент своей карьеры(а об этом я напишу в конце статьи, что бы не выглядело рекламой или пиаром по мере чтения) я решил, что хочу сделать свой луа-движок. Да не просто движок, а со свистелками-перделками да узконаправленный. Выбор пал на пошаговые игры. И нет, я сейчас не про jagged alliance(хотя и оно тоже будет реализуемо) а про целый пласт игр, которые суммарно я назову event-oriented games. В этот список я готов внести: Все настольные игры Все устные игры(мафия, элиас и иже с ними) Все пошаговые стратегии(Disciples, че бы нет) Все тактические пошаговые игры(а вот и Jagged Alliance)
И все они имеют одно большое сходство - для любого события работает схема action -> state. Для любого. Для меня, как для разработчика это большой плюс, потому что для меня это облегчает работу. Никаких хитроумных predictive алгоритмов, никаких дельта расчетов, ничего, что заставит нагружать и без того не самую мощную Lua VM лишними расчетами.
Поэтому я делаю свой первый блин(и нет, это точно не будет комом). Если честно, то писать страшновато, но мой тех. директор убедил, что писать статьи - полезно, что лучше полная панамка, чем пустая.
Для бэкенда я выбрал обвязку go + gopher-lua(есть и другие варианты, но с этой работать намного привычнее в виду моей профессиональной деятельности) а для фронта скорее выбор без выбора. phaser + fengari. Они отлично сочетаются друг с другом, не ощущаю больших проблем в создании api бриджей между визуальным движком и луа.
Главное меню. Да, пока скудный логотип и попсовый слоган, но всё ещё впереди
Что уже сделано: 1) Выбрано название для платформы. Braca - хотелось иметь легкую отсылку к Бракаде из одной популярной игры) 2)Готовы базовый бэкенд+фронтенд 3) Реализованы мультиплеерные шахматы + пошаговая игра собственной разработки 4) Есть минималистичный фронт с необходимыми для закрытых тестов штуками 5) Функционал игровых комнат, команды, режим наблюдателя 6) Чат-каналы 7) Базовые lua-модули: ui, chat 8) Большая дока по луа, которая несёт пользу моему единомышленнику Ромычу
Сейчас как понасоздаём команд, ух!
Что в планах: 1) Удобный интерфейс для публикации своих игр и lua-модулей(git-like, естественно:)) 2) Статистика для луа-разработчиков 3) Сервис ачивок 4) Кастомизация интерфейса комнаты для луа-разработчика(то есть разработчик буквально сможет переопределять, как должна выглядеть веб-морда до запуска игры)
Пока не готов раскрывать технические детали проекта, но могу однозначно сказать, что уделяю особое внимание безопасности: луа-разработчик НЕ СМОЖЕТ повесить сервер кривым кодом, НЕ СМОЖЕТ достать какие-то данные, которые ему не предназначены, НЕ СМОЖЕТ заставить игроков выполнять свои вычисления за их счет.
Можно принять игру. А можно и не принять.
Немножко моей первой игры. Цель банальна - рассекретить и уничтожить базу врага, при этом защитив свою.
А теперь о профессиональной деятельности. Начну издалека. 18 лет назад я мечтал, что вот я вырасту и как буду делать игры. Жизнь оказалась прозаичнее. Несколько лет отработал в wb на go, затем решил уйти в сторону геймдева. И ровно в этот момент мы с Pixel Quest нашли друг-друга. Я и сейчас тут, делаю отличный продукт. И в это же время получаю огромное количество экспы, т.к. пиксель находится в окологеймдеве. У нас тут, знаете ли, свой реалтайм луа-движок используется.
Рынок ИТ стал сложнее: спрос на начинающих специалистов падает, растет роль ИИ. Но войти в профессию по-прежнему реально, если выбрать востребованное направление и развивать практические навыки. Разбираемся, какой язык программирования изучать новичку, на примере Python, C++ и Go.
Чем интересен Python
Python удерживает первенство в рейтинге популярности языков программирования TIOBE. На апрель 2026 года его доля — 20,97%. Список составляют на основе данных о количестве запросов в поисковиках: чем чаще пользователи ищут язык, тем он выше в рейтинге. Из этого следует, что Python — самый востребованный в мире, как и год назад.
Почему стоит изучать
Одна из главных причин — простота. У языка лаконичный синтаксис, его легче читать, а значит, и проще освоить. Благодаря этой особенности Python ценится в больших командах, где нужно погружаться в код, написанный другим сотрудником.
Кроме того, вокруг Python собралось большое и весьма дружелюбное сообщество, которое помогает новичкам. Опытные разрабы создали множество библиотек, так что можно пользоваться готовыми решениями и не тратить время на кодинг с нуля.
Где применяют
Универсальность Python позволяет использовать его повсюду: в веб-разработке, автоматизации и тестировании, машинном обучении. Python помогает проводить научные исследования, рисовать анимационные фильмы, анализировать большие данные, разрабатывать новые приложения и улучшать существующие.
Зарплаты
В апреле 2026 года медианная зарплата разрабов начального уровня, по данным «Хабр Карьеры», составила 126 000 рублей. Программисты среднего звена получают порядка 223 000 рублей, а зарплата руководителей команд разработки достигает отметки в 427 000 рублей.
Вывод:
Python — подходящий язык для старта благодаря простому синтаксису и обширным библиотекам;
его применяют во многих сферах и отраслях, поэтому у разработчика всегда будут интересные задачи;
Python используют в обучении нейросетей и работе с большими данными, а это ключевые направления в ИТ на сегодняшний день.
Освоить популярный язык программирования поможет курс Яндекс Практикума «Python-разработчик». Вас ждут реальные задачи, много практики, советы от экспертов и работа с нейросетями. К концу занятий у вас будет готовое портфолио, способное впечатлить будущего работодателя. Начните обучение с бесплатной пробной части.
Кто и почему пишет на C++
Если сравнивать с Python, С++ может показаться громоздким, неповоротливым и слишком сложным. Однако именно его многие программисты считают фундаментальным и практически обязательным для изучения. В каком-то роде, С++ — это база, разобравшись в которой можно работать в самых разных сферах: от геймдева до космоса.
Почему стоит изучать
С++ — мощный и эффективный язык. Его создали как расширение языка C, которое отличалось от своего прародителя дополнительными возможностями, например, шаблонами.
У C++ огромная кодовая база, и он может компилироваться для разных платформ. Это делает его «универсальным солдатом», на котором можно написать практически что угодно. И чем сложнее задача, тем вероятнее, что решать ее будут с помощью C++. За это язык до сих пор ценят и уважают: он появился еще в 1980-х, но в рейтинге TIOBE до сих пор держится в лидерах.
Где применяют
На C++ пишут операционные системы, консольные утилиты, игровые движки, в частности, Unreal Engine. Благодаря C++ бесперебойно работают многие высоконагруженные мобильные приложения и банковские сервисы, быстро запускаются онлайн-игры с огромным числом пользователей, функционируют поисковые системы и онлайн-карты. Чем бы ни хотел заниматься разработчик — создавать беспилотные автомобили или с нуля писать программы-антивирусы — C++ точно пригодится.
Зарплаты
По данным «Хабр Карьеры» за апрель 2026-го, медианная зарплата разработчиков на C++ — 283 000 рублей. Разлет между новичками и опытными специалистами, как и следовало ожидать, велик. Программист с базовыми знаниями и навыками зарабатывает около 120 000 рублей, разрабы с большой экспертизой могут претендовать на 358 000 рублей. Зарплата руководителей направления достигает 444 000 рублей.
Вывод:
C++ — фундаментальный язык, который позволяет работать практически в любой сфере;
он подойдет для тех, кто хочет создавать более сложные продукты и сервисы, писать критически важное ПО, которое будет работать даже при высоких нагрузках;
C++ — нелегкий для изучения язык, у него сложный синтаксис, в котором новичок может не раз запутаться, но, судя по зарплатам, игра того стоит.
Благодаря продуманной структуре курса «Разработчик C++» за девять месяцев вы научитесь писать код, разберетесь в стандартной библиотеке, освоите работу с нейросетями и создадите настоящие сервисы для своего портфолио.
В чем особенности Go
Go или Golang — один из самых молодых языков программирования. Компания Google презентовала его в 2009 году как инструмент для создания сетевых и серверных приложений. И хотя Go пока знаком не всем, у него есть немало поклонников.
Почему стоит изучать
Главная особенность Go — в его минимализме. Этот язык был создан для того, чтобы даже неопытные программисты могли писать надежный код и решать поставленные задачи. Он объединяет скорость C-подобных языков, и легкость разработки, характерную для Python.
Благодаря строгости и простому синтаксису изучать Go легко. С языком поставляется много готовых инструментов, и почти для каждой задачи есть стандартные библиотеки. Программы, написанные на Go, отличаются надежностью и высокой производительностью.
Где применяют
Go — нишевой язык. Лучше всего показывает себя в разработке парсеров, сложных вычислительных систем, многопоточных приложений. Используется в первую очередь в бэкенде.
Зарплаты
Медианная зарплата в апреле 2026, по данным «Хабр Карьеры», составляет 341 000 рублей. При этом новички получают 148 000, программисты среднего уровня — 283 000, опытные эксперты — порядка 400 000. А руководителям платят впечатляющие 505 000 рублей.
Вывод:
благодаря своей простоте Go обеспечивает относительно легкий вход в профессию, что ценно для тех, кто хочет быстрее обучиться и начать работать;
с языком поставляется много готовых инструментов и библиотек, поэтому разработка на Go — приятный и легкий процесс;
зарплаты держатся на высоком уровне, но и вакансий гораздо меньше, чем для разработчиков на Python или C++.
Стать специалистом поможет курс Практикума «Go‑разработчик с нуля». За восемь месяцев вы освоите все необходимые инструменты, включая ИИ, сможете заниматься на тренажере для непрерывной практики, а к концу обучения завершите 10 реальных проектов.
Так что же выбрать
Опасения по поводу смены профессии понятны. Конкуренция на рынке выросла, работодатели стали внимательнее относиться к найму начинающих специалистов, а развитие ИИ изменило часть привычных процессов. Из-за этого вход в новую сферу стал сложнее, чем несколько лет назад.
Но сложно — не значит невозможно. Компании по-прежнему ищут людей, которые умеют решать задачи, быстро учатся и владеют актуальными инструментами. Поэтому ключевым становится не просто выбор языка программирования, а выбор траектории: чему учиться, как нарабатывать практику, какие проекты добавлять в портфолио и как выходить на рынок труда.
Python, C++ и Go — востребованные языки. У каждого свои задачи, сферы применения и карьерные сценарии. Если выбрать то, что вам действительно интересно, и двигаться последовательно, шанс перейти в новую профессию вполне реален.
Чтобы принять решение было проще, можно начать с бесплатных вводных частей курсов Яндекс Практикума. Они помогут понять специфику направления, попробовать первые задачи и оценить, насколько вам подходит новая роль еще до старта полноценного обучения. Все учебные программы регулярно обновляются и включают модули по работе с ИИ-инструментами.
* Планировщик Go (*M:N scheduler*) автоматически распределяет горутины по ОС‑потокам (`m` → `n`, где `m` — ОС‑потоки, `n` — горутины).
* «Магия» скрыта: разработчик пишет `go func()`, и система сама управляет переключением, миграцией и балансировкой.
2. **Асинхронность в Rust**
* Нет встроенных горутин.
* Основа — *future* (значения, которые могут быть вычислены позже).
* `async`/`await` — синтаксический сахар для создания `Future`.
* Исполнение требует *executor* (планировщика), который предоставляется внешними библиотеками (например, `tokio`, `async-std`).
* Корутины *stackless*: сохраняют только локальные переменные и точку приостановки, не имеют собственного стека.
### Почему это не «zero‑cost» в полном смысле
Фраза *zero‑cost абстракции* в контексте Rust означает, что абстракции не добавляют **необязательных** накладных расходов *по сравнению с ручным кодом*. Но:
* **Асинхронный код** всё равно имеет издержки:
* Таблица состояний (`enum` с вариантами для каждого `.await`).
* Вызовы `poll()` и управление задачами в executor‑е.
* Переключения контекста между задачами (хоть и дешевле, чем ОС‑потоки).
* **Executor** (например, `tokio`) реализует свой планировщик, пулы потоков, механизмы пробуждения — это «магия», аналогичная Go, но явно подключаемая.
### Почему нет «1000 бесплатных горутин» в Rust
1. **Философия языка**
* Rust ставит во главу угла *явность* и *контроль*. Разработчик должен сам выбрать:
* Какой executor использовать (`tokio`, `smol`, `async-std`).
* Сколько потоков выделять.
* Как обрабатывать IO (epoll/kqueue/IOCP).
* Это даёт гибкость, но требует больше кода.
2. **Отсутствие встроенного рантайма**
* В Go рантайм — часть языка. В Rust его нет (кроме минимально необходимого для работы с памятью).
* Асинхронность — «надстройка» через библиотеки, а не ядро языка.
3. **Модель памяти и безопасность**
* Go допускает гонки данных (хотя инструменты вроде `go vet` помогают).
* Rust требует доказательства безопасности через `Send`/`Sync`, что усложняет реализацию планировщиков.
### Вывод
* **Go**: «Магия» встроена, простота использования, но меньше контроля.
* **Rust**: Явность и гибкость, но необходимость вручную выбирать и настраивать инструменты.
Желание иметь «zero‑cost 1000 async‑вызовов» понятно, но в реальности любая абстракция для параллелизма имеет издержки. Rust даёт инструменты для минимизации этих издержек, но не скрывает их полностью — это компромисс между мощностью и прозрачностью.
Короче, ситуация: Go хвалят за простоту, но за неё же и ненавидят. Rust — сложный, но даёт абсолютный контроль.
🚩 3 причины, почему Rust уделывает Go:
1. Память без GC. В Go есть сборщик мусора. В Rust его нет. Кратно меньше жрёт RAM, предсказуемая скорость — никаких «фризов». Хочешь под 200 микросекунд уложиться? Только Rust.
2. Типы — огонь. Option и Result заставляют обрабатывать ошибки на этапе компиляции. В Go ты тупо забываешь проверить err != nil и ловишь панику на проде. В Rust — «скомпилировалось? Значит работает».
3. Никакой магии. Go прячет рантайм и планировщик горутин. Ты не шаришь, что там под капотом. Rust даёт тебе zero-cost абстракции — код выглядит высокоуровнево, а выполняется на уровне чистого C++.
👉 Go — для быстрого старта и простых API.
👉 Rust — когда нужна максимальная производительность, надёжность и тебя не бесит компилятор (спойлер: он тебя любит и страхует).
Хочешь въехать в Rust без боли?
У меня есть канал, где разжёвываю с нуля: Rust & Beyond на ю1тубе
Там и уроки, и как я на Solana копаюсь, и даже сравниваю Rust с PHP/Go. Заходи, будет больно, но интересно! 🚀