Максим Карась | Golang ментор
6.72K subscribers
116 photos
2 videos
36 links
Блог Go разработчика и ментора
Для связи @karasmx | про обучение - https://socium.fun/
Download Telegram
Последний месяц убил на то, как докрутить обучение 🤔

Я не из тех, кто увидел новую фишку в ютубе и на следующий день внедряет в свой продукт. Это всегда длинные циклы наблюдения, сбора фидбека, рефлексии

И за последние месяцы накопилось много изменений, о которых хочу рассказать:

Пет-проект перед выходом на работу

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

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


Своя платформа

Ноушен умер. Проблемы с доступами, VPN, формы через жопу

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


Автоматизация моков

Бот подбирает лучшие слоты и пары учеников, автоматически создает встречи, кидает в календарь, напоминает, присылает ссылку, после мока собирает анонимный фидбек

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


Бесплатные автоотклики

Запилил интерфейс для автооткликов и автоподнятия резюме. Работает, несмотря на то, что красный сайт закрыл API. Чтобы ребята не тратили 2 тысячи на сервисы, которые просто рассылают отклики


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

Один из основополощающих тейков: нужно быть достойным работы и вывозить ее, а не куда-то залететь, списать и быть уволенным

Это максимально дизреспект
Please open Telegram to view this post
VIEW IN TELEGRAM
4314
Менти купила первую квартиру 🍻🍻

На обучение она заходила еще на 3 курсе, изучала джаву, коммерческого опыта вообще не было

Получила оффер на 370к и сейчас работает на Go

Думайте, пацаны
Please open Telegram to view this post
VIEW IN TELEGRAM
24723
Офферы продолжают идти: 350к чистыми за 2 месяца подготовки

Расскажу об одном из учеников - синьор фронтендер из финтеха, 23 года. Пришел с запросом перекатиться в Go как на вторую работу

За 2 месяца: спринты, резюме, выход на рынок. ~8 собесов, 2 технички -> оффер

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

Kind reminder: весна на носу, рынок "просыпается". Кто готовится сейчас заберет офферы в марте-апреле 😘
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
318
Записал гайд по планировщику в Go

Его спрашивают на каждом втором собесе, а народ частенько теряется и не понимает, как он устроен

https://youtu.be/HkgaoUeMjqQ
https://youtu.be/HkgaoUeMjqQ
https://youtu.be/HkgaoUeMjqQ

P.S. собрана самая мякотка, не нужно читать десятки статей, смотреть видос на 2ч, все тут. А в ближайшем посте со 2 частью добавим еще ГЛУБИНЫ
287
Планировщик Go: все что нужно знать на собесе (ч.2)

Первую часть читать тут

В прошлый раз разобрали GMP, очереди, work stealing, syscalls. Сегодня самое мясо: вытеснение и GOMAXPROCS в 2026

Кооперативный vs вытесняющий планировщик

ОС вытесняет потоки когда хочет, ей похуй на твои желания. Go рантайм исторически был ближе к кооперативности: горутина сама уступала управление в "безопасных точках"

До Go 1.14 переключение происходило когда горутина:
→ Блокировалась (канал, мьютекс, таймер, I/O)
→ Делала явный yield через runtime.Gosched()
→ Попадала в safe point на входе в функцию

И вот тут была ЖИРНАЯ проблема: tight loop без вызовов функций мог держать P бесконечно, голодая все остальные горутины и даже мешая сборщику мусора. Представь: одна горутина крутится в цикле и весь планировщик стоит колом

Красота, правда? xD

Когда я работал в МТС Облако и писал балансировщик, я по рофлу запускал эксперимент на Go 1.13 с горутинами, которые крутились в циклах обработки пакетов. На Go 1.13 латенси скакало как бешеное. Обновились на 1.14+ и стало сильно лучше


Что изменилось в Go 1.14

"Goroutines are now asynchronously preemptible"

Переводим на человеческий: горутины теперь можно вытеснить принудительно. Tight loops без вызовов больше не дедлочат планировщик и не задерживают GC

Как это работает: есть рантайм-тред sysmon, который мониторит горутины выполняющиеся дольше ~10ms. Он кидает сигнал SIGURG, обработчик модифицирует стек и переводит выполнение в preemption-хендлер. По сути рантайм говорит горутине "все, хватит, дай другим поработать"

Побочка (часто прилетает как follow-up на собесе): из-за асинхронного вытеснения программам может прилетать больше сигналов, и "медленные" syscalls чаще возвращают EINTR. Если не ретраишь - получаешь баги на ровном месте


GOMAXPROCS в 2026

GOMAXPROCS управляет количеством P, а значит максимальным числом потоков одновременно выполняющих Go-код

НО ВНИМАНИЕ. Вот, что большинство не знает и на чем горят на собесах

Начиная с Go 1.25 рантайм на Linux учитывает cgroup CPU bandwidth limit. Это значит что в Kubernetes GOMAXPROCS по дефолту ставится на минимум между NumCPU и CPU limit контейнера. Плюс рантайм может обновлять значение на лету если лимиты меняются

Раньше для этого все тащили uber-go/automaxprocs. Теперь это из коробки. НАКОНЕЦ-ТО блять, сколько лет ждали


Важная деталь: автоповедение отключается если вы явно задали GOMAXPROCS через env или вызвали runtime.GOMAXPROCS в коде. Имейте в виду

В комментах оставил пару примеров вопрос-ответ
176
Максим Карась | Golang ментор
Офферы продолжают идти: 350к чистыми за 2 месяца подготовки Расскажу об одном из учеников - синьор фронтендер из финтеха, 23 года. Пришел с запросом перекатиться в Go как на вторую работу За 2 месяца: спринты, резюме, выход на рынок. ~8 собесов, 2 технички…
Получается, это уже под 40 трудоустроенных 😊

Пока не самая красивая циферка. Не 100, не 200, не "тысячи выпускников" скиллкоробки. Но даже эти 40 ребят - это показатель того, что метод рабочий

Я изначально строил менторство на одной идее: не нужно 3-4 месяца учиться, чтобы потом еще 4 месяца тратить на трудоустройство

Полгода-год жизни на то, чтобы может быть получить оффер? Нахуй так жить. Поэтому все заточено на скорость работы и точечные материалы

Делюсь, как это работает:

→ 4 спринта: основы, ООП, многопоточность, SQL + Kafka + Redis + Docker + k8s. Собрал материалы и практику в спринтах из того, что в работе и на собесах на мидла/сеньора спрашивают, все лишнее обрезал.

В идеале все спринты проходятся за месяц, чтобы максимально быстро выходить на рынок

→ После спринтов - мок-собесы. Провожу их не я, а другой го-разработчик. Специально, чтобы ты сидел перед незнакомым человеком и чувствовал тот самый дискомфорт, как на реальном собесе. А не расслабленно болтал с ментором, который уже знает все твои проебы

Менти подтвердили, что такие моки оказались полезнее

→ Резюме я оформляю полностью сам за ученика. Я сажусь и делаю так, чтобы даже человек без коммерческого опыта выглядел уверенным мидлом, релевантным для рынка. Экономит время нам обоим и результат в разы лучше 🍻🍻

Самопрезентацию оформляем по моим гайдам, с которыми я сам получал офферы в Тинькофф, Авито, Яндекс и тд

→ На этапе собесов мы все жестко выдрочили. 300+ записей реальных собесов из крупных компаний, на случай запроса трудовой - есть свои схемки)) ИИ-анализ собесов тоже есть


И самое главное - на обучении, кроме мок-собесов, нет никаких бадди, кураторов, посредников. Я сам отвечаю в чатах, в личке, остаюсь на связи по любым вопросам

Даже на испыталке я никуда не деваюсь, потому что получить оффер это полдела, его еще вывезти надо

Средний результат: оффер за 3 месяца, вилка 300-420к на руки

НО. Я не буду тут сидеть и рассказывать, что все идеально. Есть вещи, которые хочу докрутить. Хочу довести до того, чтобы ребята стабильнее получали офферы за 2 месяца, а не за 3

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

С каждым месяцем становится лучше, но до идеала еще есть, куда расти ☀️
Please open Telegram to view this post
VIEW IN TELEGRAM
3411
Ну что, погнали поговорим, как бы я учил гошку в 2026

За последний год я трудоустроил почти 40 человек в Go. Почти целый класс в школе. И знаете, что я увидел за это время?

Одни и те же грабли, на которые наступают все подряд, месяцами буксуют и потом пишут мне "ну видимо айти не мое" 😔

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

Этап 0: пойми, где ты вообще находишься (пару дней)

Знаешь что такое переменная, цикл, функция? Работал с терминалом? Гит трогал? Если на все это ответ "нет", то потрать 2-4 недели на основы программирования на любом языке


Этап 1: основы Go (2-4 недели)

Tour of Go от начала до конца. ГЛАВНОЕ ПРАВИЛО: не читать, а писать. Открыл тему — сразу код. Типы, структуры, интерфейсы, горутины, каналы. Решай задачи на Codewars, чтобы набить руку

Книги на этом этапе это ТРАТА ВРЕМЕНИ. Пока ты героически прочитаешь 300 страниц, ты забудешь первые 100


Этап 2: бекенд-стек (3-6 недель)

HTTP-сервер на стандартной библиотеке, потом chi/gin/echo. PostgreSQL через pgx/sqlx. REST API: CRUD, мидлвары, валидация, обработка ошибок. Docker, docker-compose. Базовый Git-воркфлоу


Этап 3: продвинутые темы (4-6 недель)

Конкурентность глубже: паттерны (fan-in/fan-out, worker pool, pipeline), context, sync-примитивы. Kafka/RabbitMQ/NATS. gRPC + Protobuf. Redis. Тестирование: unit, integration, моки, testcontainers. Observability: логи, метрики, трейсы


Этап 4: подготовка к собесам (2-4 недели)

Алгоритмы и структуры данных на базовом уровне. System Design. Глубокое знание Go: планировщик (GMP), GC, memory model. Моковые собеседования с фидбеком. 2-3 резюме с оптимизацией под ATS


Этап 5: выход на рынок

Не ждать идеальной готовности. Ее НЕ БУДЕТ НИКОГДА. Каждый фейл разбирать, фиксировать, идти дальше

Адаптируйте опыт под вакансию, убирайте нерелевант, "ООО Ромашка" меняйте на понятное "E-commerce платформа". 200 откликов в день это база, сидеть и ждать ответа на 10 это стратегия мертвеца. И убедитесь, что ваш телеграм указан в разделе "о себе", потому что умные рекрутеры давно пишут туда напрямую


Когда нужен ментор, а когда можно самому?

Базу учишь сам. Синтаксис, концепции, Tour of Go, первые программки. Вся информация бесплатна, нужна только дисциплина

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


В 2026 выигрывает не тот, кто прочитал больше всех видосов по Go, а тот кто системно ебашит. 2-3 резюме под разные вакансии, массовые отклики каждый день, десятки собесов, разбор каждого фейла
Please open Telegram to view this post
VIEW IN TELEGRAM
409
5 ошибок с gRPC, которые к хуям уронят прод

gRPC на бумаге выглядит просто: написал .proto, сгенерил код, вызвал метод. А потом в 3 ночи звонит алерт - один медленный сервис положил всю цепочку из-за одной забытой строчки

Разберем кейсы, которые я видел, что допускали в проде:

1. Нет дедлайна - запрос живет вечно

По дефолту deadline в gRPC = бесконечность. Один медленный downstream → запросы копятся → горутины растут → OOM

Сервис обогащает данные из базы, передает в логистику. Логистика зависла - исходящие соединения повисли, fd исчерпаны. Через пару минут все мертво. Фиксится одной строчкой


// запрос живет вечно
resp, err := client.GetUser(context.Background(), req)

//
ctx, cancel := context.WithTimeout(ctx, 2*time.Second)
defer cancel()
resp, err := client.GetUser(ctx, req)


И второй уровень: дедлайн есть на входе, но теряется при context.Background() в downstream (не рофлю, такое реально видел). Пробрасывайте ctx

2. Весь трафик на одну поду

gRPC юзает HTTP/2 - одно TCP-соединение, внутри мультиплекс. K8s ClusterIP - L4, распределяет соединения, не запросы

5 реплик. Одна на 100% CPU, четыре - по нулям. Клиент подключился к одной поде и все запросы мультиплексируются внутри одного HTTP/2 соединения. Балансировщик больше не участвует


// Headless service + round_robin
conn, err := grpc.NewClient(
"dns:///my-service.ns.svc.cluster.local:50051",
grpc.WithDefaultServiceConfig(
`{"loadBalancingPolicy":"round_robin"}`),
)


3. Стрим не закрыт - 1500 горутин из ниоткуда

Bidirectional streaming требует явного закрытия. Без CloseSend() сервер висит в stream.Recv() навсегда

Память растет линейно, рестарт помогает на час. pprof: 1500 горутин на stream.Recv(). Клиент отправляет данные и уходит без CloseSend(). Каждый стрим = горутина + 30KB. Итого ~46MB утечка


// отправил и ушел — сервер висит
stream, _ := client.BidiStream(ctx)
for _, msg := range messages {
stream.Send(msg)
}

//
for _, msg := range messages {
stream.Send(msg)
}
stream.CloseSend()
for {
resp, err := stream.Recv()
if err == io.EOF { break }
}


4. GracefulStop зависает навсегда

GracefulStop() ждет закрытия ВСЕХ TCP-соединений. Клиент игнорирует GOAWAY и сервер висит вечно

Деплой. SIGTERM → GracefulStop() → 30 сек тишины → K8s шлет SIGKILL → in-flight запросы обрываются. Мобильный клиент держал HTTP/2 и игнорировал GOAWAY


// может зависнуть навсегда
server.GracefulStop()

// таймаут + fallback
stopped := make(chan struct{})
go func() {
server.GracefulStop()
close(stopped)
}()
select {
case <-stopped:
case <-time.After(25 * time.Second):
server.Stop()
}


5. Ретраи без идемпотентности - дубли в проде

UNAVAILABLE ≠ "запрос не дошел" - он мог выполниться. Retry CreateOrder = два заказа

Пятница. Сервис рестартует. 200 клиентов ретраят по 5 раз без бэкоффа - 1000 rps на стартующий сервис. Падает снова. Цикл. В понедельник саппорт разгребает 47 дублей 🚬


// retry storm
for i := 0; i < 5; i++ {
resp, err = client.CreateOrder(ctx, req)
if err == nil { break }
}


Фикс: встроенный retry с backoff через WithDefaultServiceConfig (retryPolicy + exponential backoff). Но только для идемпотентных методов (GetOrder - да, CreateOrder - нет). Для мутирующих - idempotency key на сервере

———

Навалите фидбека насколько вам понятно происходящее? А то читают ребята с разным уровнем и нужен ли дополнительный пост-разбор на пальцах всех элементов...

Не задушил ли вас непонятными exponentional backoff, clusterip, l4, l7, стримингами
Please open Telegram to view this post
VIEW IN TELEGRAM
306
Реальная история, как мы выбили 1 лям рублей (3 оклада) на испытательном сроке

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

А теперь представь, что ты можешь забрать 1–3 оклада. На зарплате 300–350к это потенциально 1кк живых денег, которые ты мог забрать, но не забрал, потому что не знал, что так можно 😔

Так вот, можно

За последний год у меня два кейса, когда учеников пытались выкинуть с испыталки. Расскажу один из них:

Чел прошел 5 этапов собеса с конкурсом 50 человек на место. Крупная компания, название которой все точно знают

А через полтора месяца тимлид начал доебываться до перформанса. То код не такой, то задачи не так декомпозируешь, то не чувствуется проактивность

И в один прекрасный день HR вызывает на звонок и таким эмпатичным голосочком говорит: «Мы видим, что не складывается, давай расстанемся по-хорошему, подпиши по собственному» 🚬


И ВОТ ТУТ САМОЕ ВАЖНОЕ. То, что ты сделаешь в следующие 10 минут, решит все. Либо ты подписываешь и уходишь бесплатно, либо уходишь с к на карте

Ученик не подписал и написал мне

Мы подняли все мерж-реквесты, код-ревью, задачи в Jira, переписки с тимлидом. Привлекли внешнего сеньора, который не имеет отношения ни к компании, ни к нам, для независимой оценки кода 🕵️‍♂️

Вывод простой: претензии оказались надуманные. Задачи закрыты в срок, качество кода подтверждено. Тимлид просто решил, что «не его человек», и начал выдавливать. Классика

Собрали все это в доказательную базу, подключили юриста по трудовым спорам и предложили компании соглашение. Компания посчитала, прикинула и решила, что 3 оклада дешевле суда. Подписали и получили деньги

А через пару месяцев этот же человек получил оффер на 400к в компании того же уровня. Проблема была не в нем. Проблема была в токсичном лиде


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

Ты оформлен по ТК с первого дня. Испытательный срок не является пробным периодом без прав 🤡

Чтобы тебя уволить на ИС, работодатель обязан предупредить за 3 дня и указать конкретные причины

Что делать, если тебя вызвали на разговор:

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

→ Пока у тебя есть доступы, фиксируй все: скриншоты переписок, задачи, мерж-реквесты, код-ревью. Завтра доступы могут обрубить и ты останешься ни с чем

→ Найди юриста по трудовым спорам. Это 3–5к за консультацию, некоторые работают за процент от результата

→ Предложи компании соглашение на 2–3 оклада. Для них это дешевле суда


И да, «уволим по статье» это просто пугалка. За одно взыскание уволить нельзя, каждое сгорает через год

При любом увольнении тебе обязаны выплатить зарплату за отработанные дни и компенсацию за неиспользованный отпуск

А кому интересно узнать больше тех.инфы и поработать до оффера в Go, то welcome на менторство
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
408
Как я создавал курс по AI для разработчиков

Нейронки я начал юзать с конца 2023, когда GPT только вышел в открытую бету. Никаких агентов, тулов, MCP. Просто чат, код на выходе и все. И даже в таком виде я понял, что это пиздец какая штука

Спустя год, когда появились первые ученики, сразу начал делиться наработками. Параллельно жестко мониторил тренды: десятки тг-каналов, твиттер, сабреддиты, написал себе анализатор новостей. Жил в этой теме 24/7 🌪

С ребятами, которые помогали мне с организацией курса по ИИ, мы были знакомы давно. Я делал часть их программы курса по Go, выступал с лекциями

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

Ну ладно, подумал я, можно попробовать:

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


А теперь то, что меня реально удивило

Уровень у студентов был дико разный. Один из пяти плотно работал с AI. Остальные четверо думали, что нейронки максимум могут json в структуру перевести

И вот тут до меня дошла одна важная штука. Разница в опыте с AI - это ровно как в программировании. Один чувак сидит с нейронками 8 часов в день, другой полчаса. Умножь на год. Первый чувствует модель, понимает, что автоматизировать и как выжать максимум

У второго до сих пор ощущение, что это полезный чатик. И пропасть между ними каждый месяц только растет


Что стало меняться в работе?

Навык переводить бизнес-задачу в код руками скоро перестанет стоить денег

Ценность уже сейчас сдвигается: понимать что нужно сделать, дать четкий контекст, выбрать архитектуру, проверить результат

Именно поэтому на менторстве я сам записываю гайды по работе с нейронками: как ресерчить, как дебажить, как ускорить груминг, как генерить код. Все из моей практики работы


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

В комментариях оставил пару отзывов и отсюда вопрос: хотите от меня контент по этой теме или он всех заебал?
Please open Telegram to view this post
VIEW IN TELEGRAM
235
System Design за 30 минут

Давайте поговорим про больную тему. На собесах по Go очень часто есть секция по System Design 🤟

И знаете, что? Именно на ней валятся ребята, которые по хардам отвечают на 9 из 10. Человек знает, как устроен планировщик горутин, может с закрытыми глазами расписать как работает GC, а потом садится на SD и начинается цирк

Поэтому я собрал сюда все, что тебе нужно знать, если собес поставили уже на завтра:

1) Сбор требований (5 мин)

Самая частая ошибка, и я бы даже сказал, самая тупая ошибка. Человек услышал задачу и сразу побежал квадратики чертить

Сначала задай вопросы, как будто разговариваешь с продуктом

Функциональные: "юзер должен мочь..." - выбери ТОП-3, не больше. Длинный список - минус, не плюс. Интервьюер оценивает умение приоритизировать

Нефункциональные: доступность vs консистентность, конкретные требования по задержке, масштаб. Не "система быстрая", а "поиск < 500ms при 10K RPS"

Оценку нагрузки - скипни, если числа не влияют на дизайн. Считать QPS чтобы сказать "ну, много" - пустая трата времени


2) Ключевые сущности (2 мин)

Быстро выписал сущности. Проектируем Twitter? User, Tweet, Follow

Не полная схема БД - она появится позже, когда поймешь, что хранишь


3) Контракт / API (5 мин)

Дефолт - это REST. Не выдумывай GraphQL без причины, умоляю

Каждый второй на собесе пытается блеснуть модным словом, а потом не может объяснить, к чему это


POST /v1/tweets {text: string}
GET /v1/tweets/:id -> Tweet
GET /v1/feed -> Tweet[]

User id берешь из auth токена, не из body. Ресурсы во множественном числе


4) Высокоуровневая архитектура (10-15 мин)

Вот тут основная работа. Идешь по API, один эндпоинт за другим, рисуешь сервисы, БД, кеши, очереди

И вот тебе главное правило, запомни его нахуй навсегда: НЕ УСЛОЖНЯЙ РАНЬШЕ ВРЕМЕНИ. Увидел место для кеша - отметил голосом и пошел дальше. Сначала рабочая система, потом оптимизации

Когда доходишь до БД, фиксируй только неочевидные колонки. Что у User есть name и email - интервьюер и без тебя знает, не трать на это время


5) Глубокое погружение (10 мин)

А вот тут ты показываешь глубину:

— нефункциональные требования - как система их выполняет?
— узкие места - где упадет при нагрузке?
— граничные случаи - что если компонент X сдохнет?

Для синьоров: ведешь этот блок сам, не ждешь вопросов


Топ-5 задач которые спрашивают чаще всего:

1. URL Shortener (bit.ly) - классика на разогрев
2. Rate Limiter - token bucket, sliding window
3. Chat/Messenger (WhatsApp) - WebSocket, рассылка
4. News Feed (Twitter/VK) - рассылка при записи vs при чтении
5. File Storage (Dropbox) - чанкинг, дедупликация, S3

Если прям горит и ты не знаешь ни одну - разбери хотя бы URL Shortener и Rate Limiter

📹 Видео для закрепления:

https://youtu.be/o7Gmdv1W0XA - обсуждение главы кабанчика про сокращатель
https://youtu.be/78i0nPnV-cs - публичный собес по сокращателю
Please open Telegram to view this post
VIEW IN TELEGRAM
2264
Почему я теряю около 800к-1млн в месяц

Каждый месяц мне падают заявки на менторство и я отказываю примерно каждому третьему, если не каждому второму 👮

Если посчитать на салфетке - это около миллиона рублей, которые я просто не забираю. Добровольно и осознанно

Казалось бы, бери всех, стань ебанутым миллионером и никто ничего не скажет

Но у меня все еще индивидуальное менторство. Я не вышел из операционки, нет десятков помощников. Мне самому с этими людьми взаимодействовать, решать проблемы, отвечать на вопросы

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

Кому отказываю?

Не беру ребят с розовыми очками и нулевой личной ответственностью. Бывает, насмотрелись ютуберов, их на что-то прогрели, сформировалась картинка, которая вообще не соответствует действительности. Ожидают, что ментор дотащит, допинает и доведет до оффера на 400к за два собеса ⌚️

В трудоустройстве в первую очередь должен быть заинтересован ТЫ. Я помогаю пройти путь эффективнее и проще

Не беру тех, у кого объективно не хватает базы. Условно, человек нажимал кнопочки в QA, базовые алгоритмы видел краем глаза - с такой точкой старта шанс дойти до оффера минимальный

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


Что будет, если перестану отказывать?

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

Нет смысла набирать людей, которых не трудоустрою. Это плохо для продукта. А лучшая реклама - когда довольные ученики рекомендуют друг другу. Самое дешевое и самое рабочее


Как будет дальше?


Пока хочу сохранить индивидуальный формат. Лучше потеряю стабильный миллион в месяц, но получу в будущем куда больше за счет качества и результатов. Буду работать с людьми, с которыми реально кайфово

А от этого и ребят, кто нормально устроится, будет больше
Please open Telegram to view this post
VIEW IN TELEGRAM
23314
Middle Go Roadmap - все, что нужно знать в 2026 году, чтобы найти работу

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

https://youtu.be/slTp6q3Tfi4
https://youtu.be/slTp6q3Tfi4
https://youtu.be/slTp6q3Tfi4

Приятного просмотра ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
377
Ученик получил оффер на 700к рублей 😮

Многие могли видеть пост у Антона Назарова, где он раздавал призы за лучший оффер

Так вот, третье место там занял мой менти Гриша. В рамках менторства в прошлом году он получил оффер в Go на 370к с удаленкой по всему миру, не имея коммерческого опыта

А недавно как раз получил оффер на 8к$ в месяц. Просто вдумайтесь в эту цифру 🛌

Думаю записать с ним небольшой подкаст, позадавать вопросы - что конкретно делал, как дошел до оффера, что на собесе спрашивали

Что думаете, нужно это? Какие темы хотели бы, чтобы мы раскрыли?

Накидайте в комментах 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
8218
Как выбить себе +600к в год и не обосраться на переговорах?

Щас расскажу про вещь, которую почему-то до сих пор не делает большинство разрабов

Когда человеку кидают оффер, он что делает? 🤔

Правильно - максимально быстро соглашается, лишь бы взяли

Но его проблема в том, что первая цифра в оффере - это почти никогда не максимум. Компания уже потратила время на собесы, калибровку, согласования

Вопрос сменился с "нанимать ли?" на "какие условия закроют кандидата?" и в этот момент у тебя максимальная переговорная сила

Не так давно мы с учеником выбили +50к на переговорах:

→ Менти получил оффер в крупный маркетплейс на ~350к gross

→ Параллельно пришел оффер в другую компанию на 320к

И тут начинается самое интересное

→ Мы взяли этот оффер на 320к, подрисовали сумму до 370к и показываем маркетплейсу как конкурирующее предложение:

“Сильно склоняюсь в вашу сторону, но есть другие офферы, можно ли чуть пересмотреть компенсацию, чтобы было ближе?”


Итог? подняли до 400к gross. Плюс 50к в месяц за одно сообщение

Но и это еще не все

Параллельно вышли на вторую работу за 320к и лутаем суммарно ~720к gross

Как это выглядит на практике:

Шаг 1 - получаешь оффер, не принимаешь на звонке. Даже если сумма выше ожиданий. Говоришь: "интересное предложение, но не готов подписать прямо сейчас, подожду ответов от остальных компаний"

Шаг 2 - берешь паузу на 1-2 дня. За это время формулируешь встречное предложение

Шаг 3 - пишешь конкретное сообщение с цифрами:

"Привет! Ситуация: есть предложения в [компания А] и [компания Б] на 350к и 370к на руки. Мне очень понравилась команда и проект, и более близкое соответствие другим офферам очень сильно укрепило бы мое решение в пользу вас"


Что торговать кроме оклада? 🤲

По окладу не всегда готовы будут подвинуться, но есть куча вещей, которые компании отдают легче:

- sign-on бонус (разовая выплата при выходе)
- ранний пересмотр зарплаты через 3 месяца вместо года
- полная удаленка вместо гибрида
- ДМС, техника, конференции
- квартальные премии


Так что переставайте трястись при первом же оффере и сразу принимать его. Всегда старайтесь выбивать хотя бы +20-30к к офферу - это базовый минимум
Please open Telegram to view this post
VIEW IN TELEGRAM
307
Мок-собеседование Middle Go-разработчика: что спрашивают в Avito и Ozon 😮

Записали мок-собес с выпускником, который в прошлом году получил оффер на 350к

Все вопросы я вытащил из реальных собесов в Ozon и Avito на вилку 300-350к + разобрали одну задачу

*СМОТРЕТЬ МОК*
*СМОТРЕТЬ МОК*
*СМОТРЕТЬ МОК*
Please open Telegram to view this post
VIEW IN TELEGRAM
297
Graceful Shutdown: казалось бы, 3 строчки кода...

За полгода я посмотрел десятки сервисов. Код учеников на испыталке, пет-проекты, пару раз звали на консультацию разобрать «непонятный баг»

И вот что интересно: graceful shutdown - это буквально самая простая тема. Сервис при остановке не обрубает все на ходу, а сначала доделывает текущие запросы, закрывает соединения к базе, и потом выключается. Нейросеть объяснит за 2 абзаца

Но именно тут я нахожу одни и те же грабли

1) log.Fatal() и мертвые defer

Ученик вышел на работу, первая неделя. Дали написать новый сервис по бойлерплейту, он все красиво сделал: подключил БД, написал defer db.Close(). Локально работает, тесты зеленые, человек счастлив

Через неделю лид прилетает: «у тебя коннекты к Postgres не закрываются, пул забит»

Садимся разбирать, а в коде стоит log.Fatal(). Штука выглядит безобидно, но внутри вызывает os.Exit(1). Это мгновенная смерть процесса. Все defer просто не успевают выполниться



// defer db.Close() не сработает
func main() {
db := connectDB()
defer db.Close()
if err := run(); err != nil {
log.Fatal(err) // os.Exit(1), defer мертв
}
}

//
if err := run(); err != nil {
log.Println(err)
db.Close()
os.Exit(1)
}


Локально это незаметно: процесс умирает быстро, ОС подчищает. А вот на проде твои shutdown-хуки, flush метрик, ack сообщений в очереди... ничего не выполнится. Сервис просто обрубается на полуслове

2) Деплой = ошибки у пользователей

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

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


Фикс - одна строчка:


lifecycle:
preStop:
exec:
command: ["sleep", "5"]


Сервис спит 5 секунд, балансировщик за это время убирает его из списка, и только потом начинается реальное выключение

3) Закрыл базу раньше, чем доделал работу

Было такое, что на консультации чувак показывал логи: sql: database is closed. Сигнал ловит, shutdown вызывает. Но порядок выключения неправильный

У него сервис принимает HTTP-запросы, плюс фоновый воркер читает сообщения из очереди и пишет в базу. При выключении он закрыл базу, а воркер еще не доделал. Воркер пытается записать, а соединения уже нет. Данные потеряны

Правило простое - выключай в обратном порядке от того, как запускал:

→ Перестань принимать новые запросы
→ Дождись пока воркеры доделают текущее
→ Закрой кеши
→ Базу последней

Если базу подключил первой, выключаешь последней


4) Сервис завис при выключении

Деплой, сервис начал выключаться и... тишина. Через 30 секунд Kubernetes убивает его принудительно, все текущие запросы обрываются

Проблема: graceful shutdown ждет пока ВСЕ соединения закроются. Один единственный клиент держит коннект и сервис ждет бесконечно


Для HTTP:


// зависнет если контекст без таймаута
srv.Shutdown(context.Background())

// ждем 25 секунд, потом принудительно
ctx, cancel := context.WithTimeout(ctx, 25*time.Second)
defer cancel()
if err := srv.Shutdown(ctx); err != nil {
srv.Close()
}


Вот такая "простая" тема, которую никогда не разбирают дальше чем… нууу сигнал слушаешь, делаешь cancel контекст - это весь паттерн 🤪
Please open Telegram to view this post
VIEW IN TELEGRAM
4612
Пришла полугодовая премия в 800к

Одна из плюшек работы в найме. Приятно, не буду врать

Но прикол в том, что найм для меня давно не основной доход. И за все это время я ни разу не бросил работу разработчиком. Хотя мог бы, финансово это давно не обязательно

И вот, что меня реально триггерит. В последнее время все чаще вижу челов, которые когда-то работали разрабами, потом ушли полностью в менторство, набрали учеников и обучают по старым схемам. Это для меня вообще пиздец 😐

Зачем я остаюсь в найме?

Потому что ментор без актуальной инфы - это по сути пересказчик ютуба. А я хочу давать людям то, что реально работает прямо сейчас

Когда ты в найме, ты видишь, как меняется рынок изнутри. Что требуют от разрабов, как меняются условия, что теряет актуальность. Какие паттерны применяются, какие инструменты внедряются

Возможно и есть какой-то другой способ сохранять актуальность, но пока я его не нашел...

Плюс постоянно слежу за обновлениями в ИИ и внедряю их в свою работу. И все рабочие связки передаю ученикам

А инфа в айти устаревает каждые полгода. Поэтому считаю, что ментор обязан быть практиком, иначе неизбежно начинает давать учить всякой херне 💩

P.S. скоро кстати выйдет интервью с учеником, который получил оффер на 700к, уже в монтаже
Please open Telegram to view this post
VIEW IN TELEGRAM
4613