Всё о разработке | Леонид Ченский
694 subscribers
97 photos
8 videos
4 files
83 links
Рассказываю об актуальных проблемах, с которыми сталкивался в своей работе. Делюсь полезными материалами, курсами, статьями и просто своими мыслями.

GitHub: https://github.com/moguchev
Linkedin: www.linkedin.com/in/leoscode
Download Telegram
Настало время подвести итоги уходящего 2025 года…

И так в этом году я:
— НЕ набрал 1000 подписчиков в канале
— НЕ завел свой youtube канал
— НЕ запустил 3 курса как планировал
— НЕ стал unit лидом
— НЕ жму 100-ку, хотя весь год хожу в зал
— НЕ прочитал 12 книг
— НЕ выступил ни на одной конференции
— Ушел из Balun.Course
— НЕ увеличил капитал своей подушки безопасности

С точки зрения реализации этот год совсем не продуктивный.

Однако, за этот год я:
— провел зимовки в теплых странах как и мечтал еще со школы
— встретил новый год на море и провожаю его также на море
— посетил 7 РАЗНЫХ стран (мой рекорд): был в самой посещаемой стране в восточной Азии — Японии, а также в самых не туристических странах юго-восточной Азии — Лаос и Мьянма.
— увидел гору Фудзи без единого облачка с ее фирменной снежной вершиной
— был на концерте Travis Scott, о котором мечтал уже лет 10. Так еще и Kanye West был секретным гостем!
— прокатился на Nissan R34 по ночному Токио как в Форсаже 3
— летал на парамоторе среди гор в Лаосе
— остановился в отеле InterContinental (мечта после просмотра Джона Уика в 15 лет)
— Сфотографировался у башен Петронас в Куала-Лумпуре
— Был в городе, напоминающий Cyber Pank — Гуанчжоу
— кормил оленей в Наре и был на чайной церемонии в традиционной одежде в Киото

Пожалуй, это был первый год в моей жизни, когда я не работал в режиме 24/7 7 дней в неделю, не бежал куда-то как хомяк в колесе… Я понял, что «успешный успех» и размеренный образ жизни с путешествиями — вещи не совместимые. Однако, в жизни нужны перерывы между «спринтами» и кажется 2025 год был одним из таких.

Хочу искренне поблагодарить вас, мои подписчики, за ваши комментарии, реакции и обсуждения в постах, для меня это важно.

Поздравляю Вас с наступающим Новым годом!

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

С Новым Годом 🍾 🎆 🎄 🎁
🔥32❤‍🔥8🎉74👍2😍1💔1
Немного мыслей про performance review.

Amazon потребовала от сотрудников указывать в перформанс-ревью конкретные «достижения» на рабочем месте: минимум — три.

Мне казалось, что на западе уже давно смотрят на результаты и достижения сотрудников...

Однако у такого подхода есть обратная сторона: если руководство/бизнес не представило возможность для свершения тех самых достижений (наняли 20 сотрудников для подкраски одной кнопки, а больше целей у компании на квартал не было), то даже при всех стараниях, драках за задачи, можно так и не заработать медалей в копилку.

Некоторые скажут, что сильный сотрудник сам найдет задачи, улучшения и точки роста в компании. Частично они будут правы, но будем честны, таких людей единицы (даже среди руководителей таких тяжело найти).

Сейчас читаю Александра Фридмана и у него есть цитата, которая отражает всю суть работы в больших компаниях:
попав в лидирующую компанию мирового уровня и получив доступ к многочисленным приятным бонусам, вы теперь должны «крутить педали», иначе работодатель быстро с вами распрощается


Если учесть, что сейчас по всему миру кризис и компании массово сокращают сотрудников, то теперь нужно не просто «крутить педали», а еще и успевать жонглировать на одноколесном велосипеде. 2026 год скорее всего отсеит многих слабых разработчиков и рынок IT перезагрузится. А пока стоит инвестировать в свои hard и soft skills и стараться как никогда, ведь конкуренция на рынке растет.
🤔9👍3🔥2
Всё о разработке | Леонид Ченский
Год уже подходит к концу и нужно быстрее завершить все незаконченные дела. Как раз одно из таких дел — опубликовать статью на habr посвященную JWT и протоколам авторизации. Я еще летом написал драфт, но только сейчас дошли до нее руки. Статья — это туториал…
Как и обещал, вышла вторая часть статьи, посвященная протоколам авторизации! В ней на практике разобрал такие протоколы как JWKS, OAuth2.0 и OIDC.

После выхода первой части, мне пришлось полностью переписать вторую, так как я не мог себе позволить, чтобы вторая часть оказалось хуже первой... В итоге вторая часть вышла чуть объемнее)

P.S. Оставляю ссылку на репозиторий, чтобы со всем этим добром можно было поиграться вживую.

Приятного чтения📖
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍5👏31
⌨️ «вайбкодинг-вайбкодинг-вайбкодинг»

В последнее время из каждого угла слышно о «вайбкодинге» и о том, как любой может легко создать приложение или сайт с нуля.

Меня особенно удивляет, когда о вайбкодинге начинают говорить люди, не имеющего никакого опыта разработки. Они яростно пытаются всем продемонстрировать, что они на гребне волны инноваций (я уже молчу о том, что некоторые из них продают курсы как делать также).

Давайте будем говорить начистоту, если бы разработка ПО была бы таким легким делом, не требовалось бы столько разработчиков на рынке, а их зарплаты не были бы такими какие они есть.

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

Нейронки как и люди — имеют некоторые ограничения: и те, и те по природе ленивы в какой-то степени, также у всех есть «предел размера памяти контекста».

Это значит что, чтобы навайбкодить приложение, которое бы по качеству и объему кодовой базы было такое же, как настоящее Enterprise решение, потребуется не один ИИ агент на компьютере. Для такой задачи потребуется огромная команда из тысячи ИИ агентов, которые между собой будут постоянно коммуницировать, должны быть агенты координаторы, архитекторы, валидаторы и интеграторы (все прям как сейчас у людей в больших компаниях:)). В общем, чтобы вайбкодинг смог заметить разработчиков, нужно обзавестись огромными вычислительными мощностями, которых у человечества пока нет.

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

На мой взгляд ИИ позволяет оптимизировать и ускорить работу инженеров, а также расширить горизонт возможностей. Я думаю, что нейронки приведут к тому, что сильные инженеры и разработчики (имеющий реальный опыт) станут еще более продвинутыми и ценными на рынке, а вот джунам и людям без опыта наврятли получится сильно прокачаться, ведь таких как они будет много, а задач уже не будет… Получается, что порог входа в IT вырастет, а дефицита кадров больше не будет.

А что вы думаете о вайбкодинге?
Please open Telegram to view this post
VIEW IN TELEGRAM
💯15🔥10🤔2
Я из того типа людей, которые могут иметь одни и те же обои на компьютере годами (и да, они мне не надоедают!)

Прошлые мои обои красовались на моем и рабочем ноутбуках 5 лет подряд, КАРЛ!

Сегодня настало время их сменить. Однако теперь новые обои — моя собственная работа! От этого вдвойне приятнее.

⬇️Ниже делюсь ими с вами. ⬇️

Пусть и вас радуют.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍533😱1
5 ошибок из-за которых не получают оффер

Всем доброго времени суток!

Мне недавно пришлось искать стажера в свою команду. Последний раз стажера нанимал года 3 назад. В этот раз осталось противоречивое впечатление. Казалось бы: рынок найма сейчас на низах, вакансий мало, людей много, конкуренция среди кандидатов большая. Такие условия должны привести к повышению качества hard-skills и уровню подготовки (привет инфляция навыков). Но, к сожалению, многие ведут себя так, как лет 5 назад, когда при дефиците кадров брали всех подряд без разбора.

Я выделил 5 распространенных ошибок кандидатов уровня inter/junior/middle, из-за которых их не взяли.

Универсальное CV.

Кандидат отправляет одно и тоже резюме на разные вакансии не адаптируя его (например у него написано, что есть опыт Java разработки, однако подается он на go-разработку или на тестировщика. А в резюме про это ни слова!). В 2026 году 90% откликов и резюме в больших компаниях проходят отбор сначала через ML. Несовпадение резюме и отклика на вакансию уменьшают шанс рассмотрения кандидата. Но даже после прохождения ML отбора, если правильно не расставить акценты и не выделить ключевые достижения/навыки/технологии/фреймворки, интересующие нанимающего менеджер, резюме будет просто проигнорировано.

Медленный коддинг и незнание синтаксиса языка.

В 2026 году требования к стажерам/джунам более жесткие чем 5 лет назад: никто не собирается учить писать код. Этому учат в университете, на курсах, или самостоятельно. Придти на собеседование по python и не знать как объявить класс или придти на go разработку и не суметь дождаться ответа из горутины — red flag, после которого дальше разговаривать не будут. Сейчас надо владеть языком программирования и уметь на нем писать код быстро! Если не хватает практики — ищите ее сами: leetcode, opensource, pet проекты, … Набивайте руку!

Не подготовиться к собеседованию.

Понятно, что нельзя быть готовым ко всему, но как правило вопросы на собеседование вытекают из описания вакансии и технологий, с которыми придется работать. Пару видео на ютубе и статей закрывают 80% вопросов. Однако кандидаты пытаются выехать «на харизме».

Несистемный подход.

Что я имею ввиду — собеседование это не экзамен в университете. Интервьюеру не так важен правильный ответ, как увидеть ход мыслей кандидата, подход к решению задачи/вопроса, увидеть как он справляется. Лучше проговаривать в слух мысли, чем молчать и потом давать отрывистые несвязанные ответы. Если у кандидата в голове каша, то и решения будут примерно такие же.

Наконец моя «любимая рубрика» — фродеры.

Я честно не знаю, что у этих людей в голове, и на что они рассчитывают. Может быть они себе представляют это как идеальный план как всех провести, но на практике это выглядит просто ужасно… Когда кандидат выдает ответ из нейронки, а потом не может его объяснить… Мало того, что они отнимают время на интервью, так еще и подрывают свою репутацию навсегда! Компания вносит таких людей в черный список (да-да, есть такие списки), и, скорее всего, в будущем HR даже не будут разговаривать с ними. А с учетом того, что Big Tech компаний в России не так уж и много, податься потом будет некуда…

Несмотря на непростое время, сейчас хорошему кандидату с должным уровнем подготовки попасть в IT не труднее чем 5 лет назад. Главное будьте честными:)
9💯9🔥3🤡3👍21👀1
Я предлагаю на законодательном уровне запретить баги в коде.
Глядишь, оторвемся в технологическом процессе от других стран, и отечественное ПО станет лучшем в мире!
💯22😁54🤣2😢1
🚀 Запуск второго курса на Stepik!

Решил, что в моем курсе по Go тема gRPC недостаточно подробно раскрыта, так как эта тема довольно большая. Сделал отдельный курс, посвященный исключительно gRPC и Protobuf. В него лег мой личный опыт работы с gRPC на протяжении 5 лет.

К тому же, как оказалось, многие Go-разработчки все еще обходят gRPC стороной со словами: "Ой там сложно все и непонятно с этим protoc... Я лучше на REST API Gin сервер подниму". Постарался разрушить миф о сложности работы с gRPC и снизить порог входа. Курс будет полезен тем, кто еще не работал с gRPC, а также тем, кто уже с ним работает, но чувствует, что не выжимает из него максимум.

🎁 СТАРТОВАЯ СКИДКА -43% по промокоду SPRING2026.

Модули про Protobuf бесплатные!

🔗 Переходи по ссылке
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👍83🏆1
💙Вчера исполнилось ровно 5 лет как я работаю в Ozon Tech.

За это время столько всего произошло: встретил множество интересных людей, некоторых из них уже нет в Ozon, а некоторые в других командах/отделах. А я с ностальгией вспоминаю, как мы собирались в баре и обсуждали разные истории из нашей повседневной работы, как затаскивали проекты, которые казались «невозможными».

При мне Ozon кратно вырос и многое что поменялось внутри. Жаль я не смог придти еще на пару годиков раньше😅

Это были невероятно долгие и насыщенные 5 лет с одной стороны, и при этом они как-будто пролетели незаметно…

В самом начале я был уверен, что не задержусь в Ozon более чем на 2 года, а теперь я не знаю, а где может быть лучше..?

Некоторые скажут, что 5 лет не много: вот мол люди по 20-30 лет на одном заводе работали… Но мне кажется, что в современных реалиях это много.

А вы сколько уже работаете в текущей компании?

P.S. фото сделано ровно 5 лет назад после первого рабочего дня в офисе
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18🎉7🆒3👍2
Protobuf & Edition

После долгих лет стабильности proto3 protobuf наконец-то сменил парадигму и перешёл на Edition — набор настраиваемых фич. Теперь новые возможности можно добавлять эволюционно, не ломая обратную совместимость. А это значит, что теперь начнут активно появляться новые фичи protobuf (я на это надеюсь).

Edition 2023 — это просто разделение фичей proto2 и proto3 с возможностью настройки их глобально или локально (для конкретного сообщения/поля).

А вот Edition 2024 уже приносит несколько важных изменений:

- field_presence — настраиваемая модель поведения, позволяет контролировать, было ли поле действительно задано или нет (теперь optional не нужны получается); (с 2023 уже работает)

- enforce_naming_style — позволяет валидировать имена полей, сообщений и перечислений в .proto-схемах по единому стилю: код даже не сгенерируется, если названия не по канону (теперь не получится игнорировать линтеры);

- default_symbol_visibility — задаёт видимость сообщений/перечислений, позволяя точнее контролировать, что именно экспортируется наружу, а что остаётся внутренней деталью схемы; Капец какая нужная фича в больших API!

- Opaque API в Go — сгенерированные protobuf-сообщения перестают быть «раскрытыми» структурами с публичными полями и превращаются в более закрытый API. Opaque API отвязывает код пользователя от внутреннего устройства сгенерированного кода. А это значит, что protobuf runtime и protogen могут дальше развиваться, оптимизировать все подряд, не ломая при этом пользовательский код (и они уже это сделали).

Звучит все здорово, но для внедрения в production меня останавливают две вещи:

1. Руками править сотни proto файлов — занятие неблагодарное. Парни из Google обещали сделать утилиту для миграции на edition — prototiller, но её так и нет :) AI в целом с нормальным промтом справляется, но хотелось бы официальной утилиты.
2. Для работы с proto в production я использую Buf, который все еще не поддерживает edition 2024. Парни там обещают скоро добавить поддержку, но официальной даты релиза нет…

Локально я с этим поигрался, жду впервую очередь поддержку в Buf. Уже сейчас можно мигрировать на edition 2023, сохранив обратную совместимость (добиться того же поведения, что и в proto2/proto3 и подготовится к переходу на 2024).
🔥53👍3🆒2
🌍 Мир становится многополярным, а это значит, что надо становиться многоканальным.

Я очень трепетно отношусь к своем каналу, честно. Каждый пост здесь — это частичка моей души и вдохновения. На поток такое тяжело поставить...

Мне бы очень не хотелось потерять своих дорогих подписчиков, если вдруг ИНТЕРНЕТ все же станет ИНТРАНЕТОМ 😐.

В общем, я завел канал в... 🥁

💙 https://vk.com/leoscode

Подписывайтесь, будем на связи!
Please open Telegram to view this post
VIEW IN TELEGRAM
14😢6🤡5🔥3🆒2👍1😁1👨‍💻1
НАПИСАНИЕ HIGHLOAD СЕРВИСОВ ОСТАВЛЯЕТ СЛЕД...

2 года я проектировал сервисы на Go, которые должны были держать 200k+ RPS и иметь время ответа менее 50ms в 99p.

При таких условиях недостаточно написать просто рабочий код, он должен быть потреблять как можно меньше ресурсов. В общем, вырабатывается привычка экономить «каждый байт и аллокацию».

На другом проекте (не highload) как-то раз мне попадает на код ревью MR. В глаза сразу бросается стандартное преобразование слайса байт в строку:
str := string(bytes)


Я сразу пишу в комментариях: «тут можно сделать дешевое преобразование через unsafe»
Разработчик отвечает: «а как это сделать и зачем?»

И тут я понял сразу 2 вещи:

Во-первых далеко не все Go-разработчики работали с unsafe (оно и понятно, не все разрабатывают highload-решения).
Во-вторых, разработчик задал верный вопрос: «Зачем?». Действительно, преждевременные оптимизации скорее мешают, чем помогают. Тем более в сервисе с 1-5 rps…

В общем, свою привычку "оптимизировать все сразу" я отбросил. Но мне все не давало покоя, что какие-то хаки остаются скрытыми от публичных глаз…

Поделюсь одним из неочевидных здесь 👉

В Go на каждую аллокацию в куче вызывается функция mallocgc, которая имеет определенную скрытую от наших глаз логику. Когда в одном цикле мы выделяем 1000+ объектов, overhead от mallocgc становится заметным...

type MyStruct struct {
someFields [64]byte
Value bool
}

func simpleAllocate(n int) []*MyStruct {
result := make([]*MyStruct, 0, n)
for range n {
result = append(result, &MyStruct{Value: true})
}
return result
}

BenchmarkAllocate/100/Simple-10           655094        1872 ns/op      8896 B/op       101 allocs/op
BenchmarkAllocate/1000/Simple-10 67028 18604 ns/op 88192 B/op 1001 allocs/op
BenchmarkAllocate/10000/Simple-10 5565 201100 ns/op 881925 B/op 10001 allocs/op
BenchmarkAllocate/100000/Simple-10 526 2377439 ns/op 8802821 B/op 100001 allocs/op

Мы имеем издержки при аллокации на каждой итерации! Как это можно оптимизировать? Идея стара как мира — вынести из цикла:
func hackAllocate(n int) []*MyStruct {
var (
result = make([]*MyStruct, n)
resultV = make([]MyStruct, n)
)

for i := range n {
resultV[i].Value = true
result[i] = &resultV[i]
}
return result
}

Да, это кажется на первый взгляд контр-интуитивно, однако мы аллоцируем сразу нужное нам количество структур с помощью слайса, а далее просто сохраняем ссылки на них.
BenchmarkAllocate/100/Hack-10          1657069         754.9 ns/op      7424 B/op         2 allocs/op
BenchmarkAllocate/1000/Hack-10 162456 7304 ns/op 73728 B/op 2 allocs/op
BenchmarkAllocate/10000/Hack-10 17347 70141 ns/op 737284 B/op 2 allocs/op
BenchmarkAllocate/100000/Hack-10 1492 763791 ns/op 7307279 B/op 2 allocs/op


Итого: мы можем получить выигрыш в скорости до 3 раз! Тут нет никакой магии, просто сделать одну большую аллокацию проще чем много маленьких.

Хорошо, а есть более прозрачный способ решить проблему с множеством аллокаций? Да, начиная с версии Go 1.20 появились арены (но все еще как экспериментальная фича):
func arenaAllocate(mem *arena.Arena, n int) []*MyStruct {
result := arena.MakeSlice[*MyStruct](mem, n, n)
for i := range n {
s := arena.New[MyStruct](mem)
s.Value = true
result[i] = s
}
return result
}

Арены правда убирают аллокации и облегчают жизнь GC, однако по скорости работы они уступают...
BenchmarkAllocate/10000/Simple-10           6948            161145 ns/op          881920 B/op      10001 allocs/op
BenchmarkAllocate/10000/Hack-10 27702 43448 ns/op 737280 B/op 2 allocs/op
BenchmarkAllocate/10000/Arena-10 4921 219361 ns/op 729991 B/op 2 allocs/op

В итоге такой Hack-аллокатор даже без unsafe дает буст...

P.S. Про unsafe рассказываю на курсе в своем бесплатном уроке
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥63🆒1
Наблюдая год за всей этой историей с AI агентами в разработке понял, что прогресс слишком быстрый и виден на лицо.

Забавный факт из моих наблюдений на работе: Senior+ разработчики, использующие AI агенты в работе выходят на сверх продуктивный уровень генерируя тонны хорошего кода и готовых решений, на которые раньше могли уйти месяцы.

При этом продуктивность разработчиков уровня Junior/Middle использующие AI не изменилась, а вот качество решений как будто хуже, если бы они сами писали… (не говорю что у всех так, но как есть).

Выходит, что AI агенты это именно инструмент. И в руках профессионалов оно генерирует огромный “value”🙂

Решил, что пора тоже втягиваться и начать все это дело изучать. Буду переодически делиться тем, что узнал и использую для обучения.

Сегодняшняя попытка зарегистрировать аккаунт в Claude провалилась об верификацию по номеру телефона… У меня есть зарубежные номера, но они все не подходят. Проблема не у меня одного (issue свежий). Навайбкодили получается 😐

Пока что штудирую документацию Claude. Из того что вынес:
- как и у всех LLM — большой контекст проблема. Нужно держать его как можно меньше, используя разные «хаки» с инструкциями, файлами, скилами.
- Claude довольно умная, чтобы самостоятельно решать задачи. Главное — четко и кратко сформулировать цель и дать необходимый контекст и критерии для самостоятельной проверки решения.

В общем, к Claude надо относиться как к новому разработчику в команде и делегировать ему, используя документации и регламенты.

Пошел дальше читать документацию…
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥95👍3🆒21
Мой первый удачный опыт вайбкодинга Agent Driven Development

Пока возился с активацией аккаунта Claude, вспомнил, что у меня есть подписка ChatGPT, и решил пока потестировать Codex на реальной задаче.

Взял go-ycsb: нужно было разделить адаптеры для Scylla и Cassandra и обновить драйверы до последних версий (точнее перейти на новые, но не суть). Эту задачу я уже делал сам — потратил около часа, включая погружение в проект. Потом стало интересно: а как с этим справится Codex?

Решил не мелочиться и начать с режима планирования. Сначала попросил его собрать Architecture.md, чтобы модель поняла структуру проекта. Потом, скорее для учебных целей, добавил ещё SKILL brainstorming. И тут был первый приятный сюрприз: нейронка начала задавать очень хорошие уточняющие вопросы, о которых я сам на старте даже не подумал.

Да, для такой простой задачи это уже был overengineering. Но как первый опыт — очень ценный.

Что понравилось больше всего: Codex не ограничился только кодом. Он поправил документацию, сохранил совместимость API, ничего не сломал, прогнал всё в Docker и ещё написал тесты. И вот тут стало особенно интересно, потому что мой собственный вариант был слабее: я не сохранил обратную совместимость и не обновил документацию с интеграционными тестами.

В итоге на всё ушло около полутора часов в спокойном режиме. Если честно сравнивать результаты, то я справился примерно 60-80%, а Codex на все 100% по полноте выполнения задачи.

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

Кстати, у нас в команде мы уже договорились прогонять ревью через AI и сейчас тестируем разные open-source модели. Нейронки правда бывают более дотошными и внимательными, чем человек, особенно в рутинных проверках. Нас они уже несколько раз выручали.

На следующей неделе буду тестировать Claude (все-таки у нее больше комьюнити и прикольных фич).

Кто уже гуру вайбкодинга, поделитесь своими успешными (и не очень) кейсами.
6🔥5🆒4👍3