Полгода я вылизывал каждую лекцию, каждое задание, чтобы ты мог изучить Go без воды, с нуля и с фокусом на реальные задачи.
⠀
— быстро и системно освоить Go
— без воды, устаревших туториалов и "постоянно что-то гуглить"
— научиться писать реальные сервисы и пройти собес
⠀
Обновляется постоянно. Не как статьи или книги — он будет жить вместе с языком.
⠀
— Лаконичные уроки + практика
— Пошаговая структура от азов до настоящих API и тестов
— Бесплатные модули для ознакомления
— Постоянные обновления под новые версии Go и best practices
⠀
По промокоду UTOPIA до 15 мая.
Итоговая цена — 5179₽ вместо 7399₽
(И да, ты получаешь доступ навсегда, с обновлениями)
⠀
⠀
Если есть вопросы — пиши, помогу разобраться.
Go — это просто, когда тебя ведут по делу.
⠀
P.S. Это не просто курс. Это путь, который я сам когда-то прошёл. И теперь передаю его тебе — в концентрированной, работающей и честной форме.
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍25🔥19❤7🤔2🏆2🗿2👎1
Go 1.24+ и фиксация инструментов: наконец-то по-человечески
Я тут узнал отличную новость: теперь оказывается можно нормально фиксировать dev-инструменты — прямо в
Например, если ты используешь
Это добавит в
И дальше можно:
Всё! Теперь:
— Версия
— Команда
— Можно забыть про
А раньше что?
Костыли:
—
—
— магия в README, которую никто не читал
Теперь всё по-взрослому, понятно и воспроизводимо.
Go продолжает радовать!🙌
Я тут узнал отличную новость: теперь оказывается можно нормально фиксировать dev-инструменты — прямо в
go.mod, без костылей.Например, если ты используешь
oapi-codegen (а ты точно его используешь, если генерируешь сервер/клиента из OpenAPI v3, ведь так?)):go get -tool github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen@latest
Это добавит в
go.mod строку:tool github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen
И дальше можно:
go install tool
//go:generate go tool oapi-codegen -config cfg.yaml ../../api.yaml
Всё! Теперь:
— Версия
oapi-codegen зафиксирована— Команда
go install tool установит его любому разработчику— Можно забыть про
tools.go и ручное go installА раньше что?
Костыли:
—
tools.go с анонимными импортами (import _ )—
makefile с GOBIN=./bin go install и GOBIN=./bin go generate — магия в README, которую никто не читал
Теперь всё по-взрослому, понятно и воспроизводимо.
Go продолжает радовать!
Please open Telegram to view this post
VIEW IN TELEGRAM
ИЗЯЩНАЯ РАБОТА С ОШИБКАМИ В GO, ИЛИ КАК ИХ СРАВНИВАТЬ
Обычное
❓ Как работает
Когда ты используешь
Под капотом
❓ А что делает
Иногда нужно не просто узнать, была ли ошибка определённого типа, но и получить доступ к её полям. Например:
Ты можешь доставать полезные данные из ошибки, если она реализует нужный тип. Это особенно удобно, когда у тебя есть логика, завязанная на тип ошибки (например, логирование по коду, трассировка и т.д.).
❓ Как кастомизировать сравнение — метод
Ты даже можешь сам определить, когда твоя ошибка считается «равной» другой. Для этого нужно реализовать метод
Теперь, даже если сообщения об ошибках разные, но коды совпадают —
❓ Когда и где это реально нужно (примеры из практики)
— В библиотеках: ты возвращаешь ошибки вроде
— В сервисах: API может возвращать ошибки с кодами, а внутри тебе удобно описывать их кастомными типами — и потом ловить их по
— В middleware: например, хочешь логировать всё, кроме
— В gRPC/HTTP-хендлерах: удобно классифицировать ошибки и автоматически подставлять нужный статус код в ответе
— В CLI-инструментах: логика выхода с кодами ошибок может зависеть от типа ошибки, а не только от текста
Если ты до сих пор сравниваешь ошибки через
Больше примеров работы с ошибками даю в бесплатном уроке на своем курсе Go!
P.S. все еще действует промокод на скидку 30% -
Обычное
err == myErr в Go работает не всегда так, как ты ожидаешь. Особенно если ты оборачиваешь ошибку через fmt.Errorf("context: %w", err). В таких случаях Go предоставляет более мощные инструменты — errors.Is и errors.As.errors.IsКогда ты используешь
%w в fmt.Errorf (врапинг ошибки), ты как бы упаковываешь одну ошибку внутрь другой, добавляя контекст. errors.Is умеет разворачивать такие обёртки и проверять, есть ли внутри нужная ошибка:var ErrNotFound = errors.New("not found")
err := fmt.Errorf("ошибка в поиске: %w", ErrNotFound)
if errors.Is(err, ErrNotFound) {
fmt.Println("Ничего не найдено")
}Под капотом
errors.Is делает так: если ошибка обёрнута через %w, она вызывает Unwrap() и идёт по цепочке, пока не найдёт нужную. Если ты просто сравнишь err == ErrNotFound, то получишь false, потому что это уже не тот же объект — он обёрнут.errors.AsИногда нужно не просто узнать, была ли ошибка определённого типа, но и получить доступ к её полям. Например:
type MyError struct {
Code int
Msg string
}
func (e *MyError) Error() string {
return fmt.Sprintf("code: %d, msg: %s", e.Code, e.Msg)
}
err := &MyError{Code: 499, Msg: "custom"}
var myErr *MyError
if errors.As(err, &myErr) {
fmt.Println("У нас ошибка кода", myErr.Code)
}Ты можешь доставать полезные данные из ошибки, если она реализует нужный тип. Это особенно удобно, когда у тебя есть логика, завязанная на тип ошибки (например, логирование по коду, трассировка и т.д.).
Is()Ты даже можешь сам определить, когда твоя ошибка считается «равной» другой. Для этого нужно реализовать метод
Is(target error) в своей реализации:type HttpError struct {
Code int
Msg string
}
func (e *HttpError) Error() string {
return fmt.Sprintf("HTTP %d: %s", e.Code, e.Msg)
}
func (e *HttpError) Is(target error) bool {
t, ok := target.(*HttpError)
return ok && e.Code == t.Code
}Теперь, даже если сообщения об ошибках разные, но коды совпадают —
errors.Is вернёт true:var Err404 = &HttpError{Code: 404}
err := fmt.Errorf("обёрнутая ошибка: %w", &HttpError{Code: 404, Msg: "page not found"})
if errors.Is(err, Err404) {
fmt.Println("Обнаружена 404")
}— В библиотеках: ты возвращаешь ошибки вроде
ErrInvalidConfig или ErrNotConnected, и хочешь, чтобы пользователи могли их отловить независимо от контекста— В сервисах: API может возвращать ошибки с кодами, а внутри тебе удобно описывать их кастомными типами — и потом ловить их по
errors.Is— В middleware: например, хочешь логировать всё, кроме
ErrUnauthorized — тогда errors.Is(err, ErrUnauthorized) спасёт от лишнего шума— В gRPC/HTTP-хендлерах: удобно классифицировать ошибки и автоматически подставлять нужный статус код в ответе
— В CLI-инструментах: логика выхода с кодами ошибок может зависеть от типа ошибки, а не только от текста
Если ты до сих пор сравниваешь ошибки через
==, самое время освоить errors.Is и errors.As. Это делает твой код гибким, читаемым и гораздо ближе к надёжной архитектуре. Go даёт тебе все инструменты — просто используй их.Больше примеров работы с ошибками даю в бесплатном уроке на своем курсе Go!
P.S. все еще действует промокод на скидку 30% -
FEINPlease open Telegram to view this post
VIEW IN TELEGRAM
👍12❤7⚡3👏2🔥1
Всё о разработке | Леонид Ченский pinned «Всем привет! Меня зовут Леонид Ченский, и я решил начать вести свой канал, посвященный разным темам из жизни разработчика. Расскажу немного о себе: ➡️ мне 25 лет ➡️ закончил университет им.Баумана, факультет Информационного Управления с красным дипломом … »
В середине 2000-х инженеры Google — Роб Пайк, Кен Томпсон, Роберт Грисмер — писали миллионы строк на C++ и Java.
Они строили распределённые системы, писали под высокие нагрузки, но с каждым годом сталкивались с одними и теми же болями:
—
—
—
— Код расползался, его невозможно было читать, а уж тем более — быстро понимать
Роб Пайк прямо говорил:
Мы были недовольны масштабируемостью программирования — не систем, а команд.
Именно тогда в Google всерьёз задумываются о новом языке.
Что они хотели от него?
– минимальный синтаксис
– быстрый компилятор
– простую конкурентность
– читаемость на первом месте
– минимум магии и синтаксического сахара
Go не должен быть «умным». Он должен быть понятным.
Не как игрушка.
А как ответ на очень конкретную боль — в реальной разработке, с реальными дедлайнами, в самых нагруженных системах мира.
Пару цитат от создателей:
🗣 Rob Pike:
"Go was born out of frustration with existing languages.
"C++ compilation times were killing us. We’d make a small change and wait forever."
"Go is not about innovation. It’s about making the right compromises."
— Go at Google (2012)
"I can’t tell you how many times I’ve had to dig through 5 layers of indirection in Java just to understand what a function does."
— Google Tech Talk (2012)
🗣 Robert Griesemer (V8, Go):
"It was time to ask: what do we actually need? Go is the result of that question."
"Languages that grew organically became too complex. We wanted to reset the baseline."
— Go Proverbs Talk (2015)
Постепенно Go стал вытеснять Python в инфраструктуре, Perl в автоматизации, Java в микросервисах. Сегодня Go — основа k8s, Docker, Prometheus, Etcd и тысяч продакшн-сервисов в Google, Meta, Uber, Netflix и т.д.
Go придумали, чтобы писать быстро, читать легко и меньше страдать (я бы сказала начать наконец-то получать удовольствие от процесса разработки).
И это работает!
Просто открой Go-код — и всё поймёшь.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤5💯2🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Ставь 🔥 , если так было и ❤️, если не закомо)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18❤7🤣3💯2
Обработка ошибок в Go остаётся прежней — и это прекрасно.
Недавняя статья от команды Go напомнила:
остаётся основным способом обработки ошибок. Несмотря на десятки предложений, язык не уходит в магию, а сохраняет простоту и читаемость. И слава богу!
От себя добавлю: мне близка такая идеология. Ещё в C++ я впервые почувствовал радость, когда увидел
— вместо try/catch можно было просто передавать ошибку по ссылке:
P.S. Подробно о работе с ошибками рассказываю в бесплатном уроке на своем курсе Go!
Недавняя статья от команды Go напомнила:
if err != nil
остаётся основным способом обработки ошибок. Несмотря на десятки предложений, язык не уходит в магию, а сохраняет простоту и читаемость. И слава богу!
От себя добавлю: мне близка такая идеология. Ещё в C++ я впервые почувствовал радость, когда увидел
boost::error_code
— вместо try/catch можно было просто передавать ошибку по ссылке:
boost::system::error_code ec;
do_something(ec);
if (ec) {
// обработка ошибки
}
Никаких исключений, никакой ловли в неожиданных местах — всё явно и под контролем. Go взял эту идею и довёл до максимальной чистоты. Удобно, прозрачно, по делу.P.S. Подробно о работе с ошибками рассказываю в бесплатном уроке на своем курсе Go!
👍9🔥6🆒3👎1 1
🔥 На этой неделе было жарко — и не только из-за погоды.
Мне досталась задача с категорией «что это вообще такое?» — реализовать аутентификацию в БД через JWT. Да-да, не в backend-приложении, а прямо в базу данных.
⠀
На первый взгляд — странная идея. На второй — всё ещё странная. Но раз надо, значит, разберёмся.
Первая остановка — знакомство с CQL и SASL. Сначала всё выглядело как очередная боль с патчами в движок БД. Но потом пришлагениальная здравая мысль: «А может, не будем трогать исходники БД, а обойдёмся встроенным механизмом
⠀
Почему бы и нет. Чтобы быстро проверить гипотезу, накидал мини-сервер на Python, который выступает в роли PAM-скрипта. Почему Python? Потому что
не надо компилировать,
править и деплоить, когда нужно ковыряться в auth flow прямо на тачке, скорость важнее всего.
На бумаге всё работало. В реальности — нет.
Документация уверяла, что всё ок. Но мы же с вами знаем: лучшая документация — это исходный код.
⠀
Погружаюсь в C++ код БД — и, неожиданно, кайфую.
Там тебе и
Увы, выяснилось, что в моей версии БД нужного функционала просто нет — поддержка
Собираем образ с нужной версией. Через ONE HOUR LATER я вспоминаю, почему не скучаю по C++: сборка проекта — это медитация, но против воли.
⠀
Обновил базу. Начинается весёлый блок под названием «танцы с бубном вокруг
Теперь самое интересное: пробуем отправить JWT. И… ничего! Ошибка! Даже не ошибка — тишина. В логах — пусто. Скрипт даже не вызвался.
⠀
Значит, где-то на пути client → DB → saslauthd → pam → мой скрипт
что-то сломалось. Подозрение на длину токена.
Лезу в код БД — там всё ок, длина пароля кодируется 2 байтами, ограничений на буфер жестких нет, можно пихать токены хоть длиной 65536. Лезу глубже — в исходники saslauthd (да-да, снова та самая документация).
И вот он, убийца надежды:
Ладно, значит, пишем свой
Снова Python, снова быстрая проверка. И... ура! Всё работает!
Теперь можно коннектиться к БД с JWT в 2025 году. Без хаков, без патчей. Просто красиво.
Осталось дело за малым: переписать всё на Go, для скорости, стабильности идушевного спокойствия перформанса. Но это уже не сегодня…
Итого, за неделю удалось потрогать Python и Go, вспомнить C и С++, поперекладывать байтики и доказать работоспособность идеи.
А у вас как неделя прошла? Были задачки на стыке "невозможно" и "ну попробуем"?
Мне досталась задача с категорией «что это вообще такое?» — реализовать аутентификацию в БД через JWT. Да-да, не в backend-приложении, а прямо в базу данных.
⠀
На первый взгляд — странная идея. На второй — всё ещё странная. Но раз надо, значит, разберёмся.
Первая остановка — знакомство с CQL и SASL. Сначала всё выглядело как очередная боль с патчами в движок БД. Но потом пришла
saslauthd + pam?»⠀
Почему бы и нет. Чтобы быстро проверить гипотезу, накидал мини-сервер на Python, который выступает в роли PAM-скрипта. Почему Python? Потому что
не надо компилировать,
править и деплоить, когда нужно ковыряться в auth flow прямо на тачке, скорость важнее всего.
На бумаге всё работало. В реальности — нет.
Документация уверяла, что всё ок. Но мы же с вами знаем: лучшая документация — это исходный код.
⠀
Погружаюсь в C++ код БД — и, неожиданно, кайфую.
Там тебе и
coroutines, и lambda, и futures, и promises, и iterators. Весь код на C++23 как он есть. После Go, где всё прямолинейно, минималистично и «пресно», это было как попасть в пряничный домик. Уровень сахара подскочил до предельного уровня, частота пульса подскочила. Еще пару дней придется отходить…Увы, выяснилось, что в моей версии БД нужного функционала просто нет — поддержка
saslauthd появилась позже.Собираем образ с нужной версией. Через ONE HOUR LATER я вспоминаю, почему не скучаю по C++: сборка проекта — это медитация, но против воли.
⠀
Обновил базу. Начинается весёлый блок под названием «танцы с бубном вокруг
saslauthd и pam». Попытка номер ∞, и наконец — успех. Скрипт принимает тестовый admin/admin — можно жить!Теперь самое интересное: пробуем отправить JWT. И… ничего! Ошибка! Даже не ошибка — тишина. В логах — пусто. Скрипт даже не вызвался.
⠀
Значит, где-то на пути client → DB → saslauthd → pam → мой скрипт
что-то сломалось. Подозрение на длину токена.
Лезу в код БД — там всё ок, длина пароля кодируется 2 байтами, ограничений на буфер жестких нет, можно пихать токены хоть длиной 65536. Лезу глубже — в исходники saslauthd (да-да, снова та самая документация).
И вот он, убийца надежды:
#define MAX_BUF_LEN 256
🙃 Да, кто ж в 2000-х думал, что кто-то будет пихать в пароль пару килобайт JSONа. Протокол может, а реализация — нет.Ладно, значит, пишем свой
saslauthd.Снова Python, снова быстрая проверка. И... ура! Всё работает!
Теперь можно коннектиться к БД с JWT в 2025 году. Без хаков, без патчей. Просто красиво.
Осталось дело за малым: переписать всё на Go, для скорости, стабильности и
Итого, за неделю удалось потрогать Python и Go, вспомнить C и С++, поперекладывать байтики и доказать работоспособность идеи.
А у вас как неделя прошла? Были задачки на стыке "невозможно" и "ну попробуем"?
2👍21❤4🆒3 1
Ozon Tech Community Platform Meetup
20 июня | 19:00 | Москва и онлайн
Команда платформы Ozon раскроет в красках с чем сталкивается и какие решения внедрили!
Регистрация — занимайте себе место заранее.
20 июня | 19:00 | Москва и онлайн
Команда платформы Ozon раскроет в красках с чем сталкивается и какие решения внедрили!
Регистрация — занимайте себе место заранее.
🔥4❤2🆒2⚡1 1
В Go 1.25 подъедет синтаксический сахар для WaitGroup. Это, конечно, здорово, однако такое уже давно реализовано в библиотеке github.com/sourcegraph/conc. Могли бы добавить больше конструкций...
В своих проектах охотно использую conc, а вы?
В своих проектах охотно использую conc, а вы?
🔥10💔3👍2🆒2 1
В продолжение к предыдущему посту...
в Go 1.25
- появится новый пакет
- json/v2 - "быстрее, выше, сильнее"
-
- Новый эксперементальный сборщик мусора
Больше деталий можно найти в гайде тут
в Go 1.25
- появится новый пакет
synctest для удобного тестирования concurrency кода (реально долгожданная вещь)- json/v2 - "быстрее, выше, сильнее"
-
GOMAXPROCS теперь корректно работает в контейнерах- Новый эксперементальный сборщик мусора
Green Tea (обещает работать лучше при аллокации маленьких объектов в большом количестве) Больше деталий можно найти в гайде тут
antonz.org
JSON evolution in Go: from v1 to v2
Reviewing the key changes in json/v2.
👍8❤3
В этом году Ozon снова делает большую инженерную конференцию E-CODE. На этот раз я член программного комитета секции Backend и объявляю сбор заявок📲
Если вы — миддл+ и глубоко копаете в Go, C# или Java, нам есть о чём поговорить.
🔍 Что мы ищем:
— Хардкорные доклады (пару настоящих мясных штук)
— Практические и универсальные темы, понятные всем из бэкенда
👂 Что особенно хочется услышать в этом году:
👩💻 Go
— Внутрянка Go, сети оптимизации и новые фичи языка, которые принесли пользу
— Архитектура больших приложений
— Как писать масштабируемый Go-код
— Нативные решения (не коробки)
— Работа с БД: что используете, как, зачем, полехные лайфхаки и workaround
👩💻 C#
— Архитектура, паттерны, практики — с оглядкой на реальный опыт
— И тоже — глубже, чем поверхностная обёртка SDK
👩💻 Java
— Без Spring'а, пожалуйста (ничего личного)
— Теория языковых фич
— Сборщики мусора и внутренняя кухня JVM
👩💻 Универсальное (для всех языков):
— Алгебраические типы данных
— Отказоустойчивость: гарантии доставки и обработки
— Архитектурные подходы, применимые в любой стеке
Если вы давно хотели рассказать что-то сложное, важное, нетиповое — самое время.
🔗 Подать доклад можно по ссылке
Если вы — миддл+ и глубоко копаете в Go, C# или Java, нам есть о чём поговорить.
— Хардкорные доклады (пару настоящих мясных штук)
— Практические и универсальные темы, понятные всем из бэкенда
— Внутрянка Go, сети оптимизации и новые фичи языка, которые принесли пользу
— Архитектура больших приложений
— Как писать масштабируемый Go-код
— Нативные решения (не коробки)
— Работа с БД: что используете, как, зачем, полехные лайфхаки и workaround
— Архитектура, паттерны, практики — с оглядкой на реальный опыт
— И тоже — глубже, чем поверхностная обёртка SDK
— Без Spring'а, пожалуйста (ничего личного)
— Теория языковых фич
— Сборщики мусора и внутренняя кухня JVM
— Алгебраические типы данных
— Отказоустойчивость: гарантии доставки и обработки
— Архитектурные подходы, применимые в любой стеке
Если вы давно хотели рассказать что-то сложное, важное, нетиповое — самое время.
Please open Telegram to view this post
VIEW IN TELEGRAM
E-CODE 2025 — IT-конференция от Ozon Tech // 13 и 14 сентября // Москва и онлайн
Инфраструктура и DevOps, С# и Go, iOS и Android, машинное обучение, тестирование, менеджмент, приглашенные гости.
1❤8🔥7👍4 2
BACKEND-МИТАП В МОСКВЕ
Сентябрь обещает быть жарким по митапам и конференциям😅
Приглашаю вас на мощный митап для backend-разработчиков!
Я буду одним из спикеров и поделюсь полезными инсайтами. Ждём всех, кто хочет прокачать свои навыки, обменяться опытом и завести крутые знакомства в IT.
📆 Когда: 20 сентября
📍 Где: Москва, Лофт-пространство «Весна»
Спартаковский переулок 2с1, подъезд №7
5 минут от м. Красносельская
7 минут от м. Бауманская
📋Программа
15:00 – 15:30 – Общий сбор
15:30 – 15:50 – Нетворкинг - разделимся на группы, пообщаемся и заведем новые знакомства
15:50 – 16:30 – Игорь Панасюк (Senior в Яндекс)
«Особенности и ловушки модели памяти в Go: тайны синхронизации»
16:30 – 17:10 – Леонид Ченский (TeamLead в OzonTech)
«Пишем микросервисы на Go как в BigTech, с нуля»
17:10 – 17:30 – Перерыв на фуршет
17:30 – 18:10 – Александр Алексеев (CTO в BigTech)
«Зачем и как изучать алгоритмы»
18:10 – 18:50 – Владимир Балун (ex-TeamLead в Яндекс)
«Как пройти System Design интервью: взгляд со стороны интервьювера и кандидата»
18:50 – 19:00 – Завершение контентной части, фотосесия
19:00 – 20:00 – Фуршет и нетворкинг на площадке
20:00 - Afterparty: по желанию едем в бар неподалеку и продолжаем общение в неформальной обстановке
🎁 Подарки за лучшие вопросы:
— книги по backend разработке от спикеров
— сертификаты на бесплатное обучение на любом из курсов школы
— бесплатные mock-собеседования в it-interview.io
— скидки на обучение в нашей школе
❗️Билеты еще не в продаже, но уже доступна предзапись. В зале до 200 мест, поэтому оставляйте заявку, чтобы не упустить возможность. Бронирование бесплатное и не обвязывает к покупке.
➡️ Заполнить анкету предзаписи
Сентябрь обещает быть жарким по митапам и конференциям
Приглашаю вас на мощный митап для backend-разработчиков!
Я буду одним из спикеров и поделюсь полезными инсайтами. Ждём всех, кто хочет прокачать свои навыки, обменяться опытом и завести крутые знакомства в IT.
Спартаковский переулок 2с1, подъезд №7
5 минут от м. Красносельская
7 минут от м. Бауманская
📋Программа
15:00 – 15:30 – Общий сбор
15:30 – 15:50 – Нетворкинг - разделимся на группы, пообщаемся и заведем новые знакомства
15:50 – 16:30 – Игорь Панасюк (Senior в Яндекс)
«Особенности и ловушки модели памяти в Go: тайны синхронизации»
16:30 – 17:10 – Леонид Ченский (TeamLead в OzonTech)
«Пишем микросервисы на Go как в BigTech, с нуля»
17:10 – 17:30 – Перерыв на фуршет
17:30 – 18:10 – Александр Алексеев (CTO в BigTech)
«Зачем и как изучать алгоритмы»
18:10 – 18:50 – Владимир Балун (ex-TeamLead в Яндекс)
«Как пройти System Design интервью: взгляд со стороны интервьювера и кандидата»
18:50 – 19:00 – Завершение контентной части, фотосесия
19:00 – 20:00 – Фуршет и нетворкинг на площадке
20:00 - Afterparty: по желанию едем в бар неподалеку и продолжаем общение в неформальной обстановке
— книги по backend разработке от спикеров
— сертификаты на бесплатное обучение на любом из курсов школы
— бесплатные mock-собеседования в it-interview.io
— скидки на обучение в нашей школе
❗️Билеты еще не в продаже, но уже доступна предзапись. В зале до 200 мест, поэтому оставляйте заявку, чтобы не упустить возможность. Бронирование бесплатное и не обвязывает к покупке.
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥6 4❤3 3 3👍2
ПРИГЛАШАЮ НА E-CODE
Осталось чуть более месяца до конференции E-Code от Ozon Tech.
Я приглашаю вас на секцию Backend, которая состоится 13 сентября.
Отобрали лучшие доклады для вас: доклады будут как на тему Go, C#, Java , так и на общие темы.
Также будет много других секций на любой вкус😉
Успейте зарегистрироваться и до встречи!
Осталось чуть более месяца до конференции E-Code от Ozon Tech.
Я приглашаю вас на секцию Backend, которая состоится 13 сентября.
Отобрали лучшие доклады для вас: доклады будут как на тему Go, C#, Java , так и на общие темы.
Также будет много других секций на любой вкус
Успейте зарегистрироваться и до встречи!
Please open Telegram to view this post
VIEW IN TELEGRAM
E-CODE 2025 — IT-конференция от Ozon Tech // 13 и 14 сентября // Москва и онлайн
Инфраструктура и DevOps, С# и Go, iOS и Android, машинное обучение, тестирование, менеджмент, приглашенные гости.
🔥7🆒5👍4