1576
Senior Backend Engineer, ex. TechLead tier-3 world cybercrime, ex. Senior Go в Ozon, ex. Ситидрайв, @thestrikem - автор канал
Надоело видеть, как разработчики становятся инфобизами про "Как вкатиться в IT и зарабатывать 300к".
Признаю, сам чуть не свернул в эту сторону, когда активно занимался медийностью, но потом, к счастью, выбрал правильный путь и не свернул на путь бесконечной продажи и ухода из промышленного программирования. Давайте я разоблачу it-инфобизнес
Почему, по моему мнению, так происходит? (внутрянка) + Гайд, как это сделать у себя в гараже
По сути - это самый простой способ вне найма заработать денег. Вот вам готовая стратегия успеха: снимаете бесплатные обучающие ролики, закупаете рекламу в телеграм каналах (посевы) на 150к, делаете какой-то свой продукт (менторство/курс/менторство+курс).
Как сделать курс? Берете и проводите ресерч открытых материалов, все это мерджите в своей интерпретации со своими лицом в курс и готово. Думаете авторы добавляют что-то свое сверхкрутое? Нет, все это уже точно есть в интернете, просто не всегда удается сразу найти - нужно потратить >1 минуты на поиск. Автор придумать что-то свое авторское - это как "авторские курсы английского" - взял, добавил себя - получил авторское. Ну просто такое невозможно, зачем автору, имея что-то оригинальное => имея особые компетенции, занимать инфобизнесом? Его на рынке за секунду с компетенциями такими раскупят. Так что просто взял, переделал под себя - готово, такое всегда и у всех было и будет). Итак, курс есть, рекламу закупили, привели всех в канал. Теперь начинаем прогревать, как это происходит: вкидываем технические посты, посты с "искренностью" и параллельно с ними посты с прогревом.
Как делать прогревы? На это есть даже эксперты, вот основные форматы, которые я видел: показываешь, как старательно ты делаешь курс и подбираешь материалы - чистый прогрев, чтобы ты вдохновился и отдал деньги (уровень low), рассказываешь про какую-то технологию (сложно или не понятно), а потом говоришь - на курсе разобрал подробно, вот ссылка (уровень low+), пишешь искренний пост, вызывая доверие, и в конце прогреваешь на курс (уровень mid - через эмоции продажа), просто наглый прогрев с "ВОТ ЩАС СКИДКА, 1 МЕСТО ОСТАЛОСЬ, БЫСТРЕЕ, БЫСТРЕЕ, ПОКУПАЙ!" или давление на слабости человека (силу воли, ответственность, что называется низменные желания обогатиться через IT) (уровень - high scum). И, что интересно, люди на это ведутся, важную мысль осознал: Курс покупают не за его качество, а за то, как про это качество рассказала и как прогрели, надавив на слабость и завладев доверием. Так что вы можете сделать любой курс и прогреть его, действуя по стратегиям выше, и вложить в рекламу, как писал выше - окупитесь.
Как строить продажи? Есть два типа получения трафика на свои прогревы - платный (рекламы в телеграм каналах и так далее, не очень выгодный), бесплатный - пилите бесплатны видос на ютуб и зазываете на курс (люди доверяют, думают, что вы искренне хотите помочь, но по факту - вы просто выстраиваете наиболее выгодную и доверительную воронку). Далее с этих воронок вы должны переманивать всех на основной ваш источник, где будете запускать поток постов с прогревом - чаще всего это телеграм каналы.
Рассрочки, кредиты, дроби и так далее? Обязательно всеми подключаются, вы не представляете, но большая часть людей почти у всех инфобизнесменов покупают курсы в кредит. И это я не придумал, я говорю статистику, потому что, как говорил ранее, частично причастен к этой теме, но потом решил пойти в другую сторону. В момент причастности я успел пообщаться с разного рода по крупности блогерами и EdTech организациями. Почему так? Еще раз повторюсь, люди покупают не курс, а то как он выглядит в качественно проделанных прогревах. В начале вы делаете прогревы один, а по росту продаж нанимаете целый штат людей: SMMщики, Reels-мейкеры, маркетологи и продажники - их главная цель улучшить представление курса в прогревах.
Всем привет! 🪿
Я вообще в последнее время не менторю ребят, поскольку по основной работе есть, чем заняться.
Но сейчас появилось желание немного поменторить ребят, итак, что я могу? ↗️
- провести мок-собес и понять ваш примерный уровень + составить индивидуальный план и скинуть материалы для изучения
- объяснить какую-нибудь тему, я хорош: в System Design, в многопоточности, в гошке и в базах данных
- составить вам карьерный план роста именно в вашем кейсе
Занятие длится один час - за него оплата фиксированна, обсуждаем в лс. 🟦
@thestrikem - пишите сюда
↗️ Куда двигаться из языка Go, чтобы повысить свои компетенции?
🦫Go на хайпе, но почему бы не добавить к классическому стэку аля микросервисы + колоночная + реляционная + брокер + Go что-то новое?
- Почему тебе надо стать лидом? Как это понять?
- Зачем вообще тебе раст?
- А вдруг нас ML заменит?
Об этом ниже
➡️ Куда же можно дальше двигаться? Как мне кажется, путей несколько:
- Rust - язык потихоньку хайпует, российского рынка по-прежнему еще, можно сказать, нет. Но на международном рынке на Rust написан блокчейн Solana => т.е. Solana + Rust + Go + все остальное из дефолтного стэка = вполне неплохой вариант. Таким образом можно повысить свою зарплату и, как мне кажется, решать более содержательные задачи
- В руководство - тут по настроению, многие хотят просто писать код и не брать на себя ответственность. Но даже если вы такой, то не спешите отбрасывать этот вариант. Рекомендую посмотреть пару топовых докладов с TeamleadConf, чтобы понять, как лиды думают - если это вас заинтересует, то может все-таки стоит подумать в эту сферу? Здесь по сути как в программирование - строишь системы, но на уровне выше => больше влияешь на продукт.
- ML - кого как, но меня, честно говоря, в глубине души немного напрягает рост нейронных моделей, способных писать код. Сейчас еще это в зачаточном состоянии, да и мы - гоферы - одни из самых сложнозаменяемых специалистов - все-таки сомневаюсь, что AI сможет по функциональным и нефункциональным требованиям, общаясь с бизнесом, сначала спроектировать высоконагруженную систему, а потом ее написать полностью, и в процессе принимать решения о итеративном улучшении. Но все равно, в будущем, я думаю, такой шанс есть, поэтому так или иначе все мы свитчнемся в ML
(мы сейчас рассматриваем только найм) Если есть что добавить - пишите, пообсуждаем!
Ставьте ❤️ - если было интересно
🔔 У меня недавно прошла трансляция (переходи смотреть, если не смотрел)
Что я успел разобрать?
- Полное решение LRU Cache
- Интересная задача, связанная с рассуждениями про построение клона Redis
- Задача на платежи и проблемы вокруг них
✨ Я обещал народу скинуть статьи, я сейчас прикреплю все, что помню, но если что-то забыл - пишите в комментарии, докину:
- Алгоритм консенсуса в leader election с визуализацией - https://raft.github.io/
- Про шардирование на достаточно углубленный уровень - https://habr.com/ru/companies/oleg-bunin/articles/313366/
- Достаточный уровень в рамках эффективного хэширования с вытеснением - https://habr.com/ru/companies/surfingbird/articles/306252/
➡️ Точно что-то забыл, или если даже я в видео не ссылался на какую-то статью, а вам просто интересно что-то еще узнать из баз данных или сисдиза, пишите - поделюсь накопленными материалами
👍 - полезная тема, давай еще
Хотя эта штука не только для тимлидов полезной будет) разработчики тоже могут почитать, ознакомиться, понять с другой стороны - как все работает, и если чет не так - прийти к своему тимлиду и высказать недовольство)
Читать полностью…
➡️ Итоговый вариант решения задачи с трансляции
package main
import (
"context"
"fmt"
"sync"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
genVals := func() <-chan <-chan interface{} {
out := make(chan (<-chan interface{}))
go func() {
defer close(out)
for i := 0; i < 300; i++ {
stream := make(chan interface{}, 1)
stream <- i
out <- stream
close(stream)
if i == 10 {
cancel()
}
}
}()
return out
}
var res []interface{}
for v := range bridge(ctx, genVals()) {
res = append(res, v)
}
fmt.Println(res)
}
func bridge(ctx context.Context, ins <-chan <-chan interface{}) <-chan interface{} {
out := make(chan interface{})
go func() {
wg := sync.WaitGroup{}
for {
select {
case <-ctx.Done():
wg.Wait()
close(out)
return
case c, ok := <-ins:
if !ok {
wg.Wait()
close(out)
return
}
wg.Add(1)
go func() {
defer wg.Done()
for num := range c {
select {
case <-ctx.Done():
return
default:
select {
case <-ctx.Done():
return
case outCh <- v:
}
}
}
}()
}
}
}()
return out
}
Чет говорил на трансляции про какой-то экспресс-курс, который мы делали с Эйч Навыки
🔥Посмотреть про него подробнее можно здесь
Запись трансляции сюда скину попозже) А пока оцените, как вам? Что понравилось, а что нет?
реакция ❤️ - было полезно, продолжай
Очередная взрывная трансляция по многопоточности в 💙
➡️ Как делать миграцию из канала каналов в один канал с контекстом? (усложненный вариант этой задачи)
➡️ Пишем свою структуру для оптимизации параллельных вычислений с учетом ошибок
💣 Многопоточность - интересная и сложная тема, которую часто спрашивают на собесах и менее часто, но все же на работе. Залетайте про нее смотреть сегодня в 18:00
Проведу ее я, конечно)
Смотреть на платформе Эйч или YouTube
🪿 Что такое MVCС? Кратко 🟦
Представьте: вы приходите в магазин, у вас есть полка с бананами и много покупателей, которые хотят купить бананы, как детерминировано организовать очередь за бананами?
Рассмотрим варианты:
1️⃣. Выстроить всех синхронно, каждый подходит по очереди - такое себе, слишком медленно
2️⃣. Построить параллельную вселенную для каждого покупателя, чтобы он мог выбрать подходящий банан с полки, после того, как человек выберет банан, нужно понять, не выбрал ли ранее кто-то его в других параллельных вселенных, если выбрал, то здесь нужно ставить менеджера, который будет определять, кому идет банан - наш вариант, это про MVCC
😜 А что за менеджер такой? Это механизмы уровней изоляции транзакций. Транзакция в этом случае - это проверить, что банан X есть на полке и взять этот банан с полки
😨 А зачем это надо? MVCC - это более оптимальный вариант реализации уровней изоляции транзакций при конкурентных операциях (необязательно параллельных, можно асинхронных)
Если понравилось, то ставь ❤️
Держите простую задачку выше, чтобы прийти в рабочее настроение, если вы еще вдруг не восстановились)
Читать полностью…
🔫 Возвращаемся к рабочему настроению потихоньку
☃️ Какие материалы можно почитать в этом году, чтобы повысить свой грейд?
- Прекрасная книга про канкаренси, в которой можно очень много узнать про планировщик, многотопочность и т.д. - гошка
- Крутая книжка про постгрю - помогает вгрузиться в базы данных и высокую производительность в них в целом - базы данных
- Статья о крутой книге про сисдиз интервью, если вы хотите расти выше мидла+ - сисдиз
- Курс по Kubernetes от Слерма (бесплатный), для Go-разработчиков там максимум знаний, которые только нужны. Более бессмысленно - инфра
- Мой авторский курс по собеседованиям - разбираем все задачи и вопросы с собеседований - практика собесов
🌻 Также, если вы еще не взяли за привычку, то рекомендую:
- В день решать одну задачу (или две) с литкода, можно одну медиум утром, а под вечер можно решить какую-нибудь легкую - алгоритмы и структуры данных (тут может помочь только такой вариант обучения)
- Будьте в теме новых технологий и подходов в хайлоаде, смотрите следующие каналы крутых конференций:
HighLoadChannel">Highload channel - интересно про хайлоад
GolangChannel">Golang channel - интересно про гошку
PodlodkaShow">Podlodka - просто интересно поговорить за айтишку
Чем больше из этого вы усвоите в новому году, тем жестче будет ваш взлет к 2026
Если было полезно, то сохраняйте себе и ставьте ❤️!
🥺 По результатам опроса ранее победил System Design - по нему будет ролик на моём ютуб канале и следующая трансляция в Эйч после Нового года
Читать полностью…
Всем привет!
Есть тут ребята, интересующиеся LangGraph, LangChain, MCP, Function calling и построением AI-агентов в целом? С радостью бы пообщался, сейчас пытаюсь во все это вникнуть, весьма заинтересовало
Взамен на помощь по этим штукам, могу как-то по Go что-нибудь подсказать, если будет интересно)
Пишите в лс - @thestrikem
➡️ Как быстро изучить второй язык - Rust?
- Зачем? Мне надо таски делать
Rust сейчас примерно на уровне с Go по росту, многие его изучают дополнительным языком. Для нас - бэкендеров - этот язык валиден для совсем хайлоудов (где уже ничего не помогает) - дискорд так ускорили - и для свитча в блокчейны - модная нынче тема с неплохой зарплатой. Вполне неплохой шанс начать перекладывать джсоны более элегантно и зарабатывать побольше денег, находясь в интересных или/и модных проектах. Или просто для интереса - как я)
Особенности:
- нет своего GC, как и в целом рантайма (асинхронный рантайм подтягивается отдельно либой)
- быстрый (но не всегда)
- в основном для системного программирования
Дисклеймер: я сам только изучаю его, поэтому если есть что дополнить - пишите в комментарии
Флоу:
- смотрим базовые уроки - кажется лучший автор, понятнее и более всеобъемлюще не нашел + ChatGPT
- параллельно с пунктом выше читаем доку - она простая и понятная
- смотрим первый примитивный проект на Rust - тут объяснение плохое, много воды, поэтому лучше сразу перейти в репозиторий и разбираться самому с ChatGPT (по моему мнению, для некоторых - иначе)
———— Далее криптовалютчикам
- идейно понимаем концепт блокчейна (кажется лучший вариант, понятнее не нашел) + ChatGPT
- Solana - к сожалению, читаем доку на английском и смотрим английские видосы (можно подрубить встроенный голосовой переводчик - есть в Яндекс Браузере, или подрубить экстеншеном)
- и кажется теперь у вас есть базовое осознание того, как писать смарт-контракты на Rust для блокчейна Solana
Ставьте ❤️ - если полезно
Разбавим этот хардовый контент мемом
Ставьте 👍 у кого жиза
Я поставил) Юзаю два мака - один на столе, другой у кровати для ранних созвонов
💣 Нашел самое лучшее объяснение блокчейна от опытного специалиста
Меня скоро вытеснит с рынка новая молодежь
https://www.youtube.com/watch?v=voEiPtoop_0
Есть тимлиды? Нашел для вас интересные материалы - роадмап для тимлида. Почитал - кажется, что весьма полезно.
💎 https://tlroadmap.io/guide.html
😡 Да как же работает select в Go, когда рандомно, а когда не очень?
В своей последней трансляции я допустил небольшую ошибку, давайте ее разберем, чтобы все понимали и больше никто не допускал такого
Разберем на примере:
Вот у нас есть такая ситуация
select {
case out <- v:
case <-ctx.Done():
return
} select {
case <-ctx.Done():
return
default:
out <- v
}
Читать полностью…
🪿 Что такое MVCС? Кратко 🟦 Методы реализации
Предыдущий пост выше
😡 А удобно ли нам каждый раз создавать параллельные вселенные? Зависит от ситуации. Копировать оригинальную вселенную - это надежный, понятный механизм, при котором мы тратим минимум вычислительных мощностей CPU, но на каждую транзакцию мы копируем целый блок данных. А если строка, которую мы меняем еще под индексом, к примеру, b-tree, то нам нужно копировать и менять целую ветку дерева
👾 А что если мы будем вести историю изменений, а не копировать каждый раз? Вместо изменения данных - информация об изменениях. Кажется, мы сильно экономим по памяти, но делаем чтение длиннее, поскольку нам придется делать какие-то вычисления и получать последнее актуальное состояние строки.
* Этот метод хорошо мэтчится с lsm-деревьями, о которых позже
☃️ Мы познакомились с вами с базовой идеей и идейными методами решения, далее поговорим о том, как это реализовано в PostgreSQL
Если понравилось и хочешь продолжения - ставь ❤️
☃️ Социальный опрос перед ликбезом
Слышали ли вы когда-нибудь про эффект bloat индексов и MVCC в постгре?
Пишите в комментариях)
🔔Как перекачать данные из одного канала в другой с контекстом в Go?
Разбираем условие задачки:
- Есть функция, сигнатура такая
, нужно с учетом контекста перекидывать данные из in в out. Функция продолжает работу, пока канал ins открыт и контекст не отменен
func orDone(ctx context.Context, in <-chan any, out chan<- any)
func orDone(ctx context.Context, in <-chan any, out chan<- any) {
go func() { // создаем горутину, чтобы перекладывать все асинхронно и не стопить основной флоу программы
defer close(out) // не забываем закрыть канал
for { // бесконечный цикл, который завершается при return
select {
case <-ctx.Done(): // в селекте прописываем два кейса: если настал кэнсел контекста - ретерним
return
case v, ok := <-in:
if !ok {
return
}
select { // тут мы тоже делаем селект, потому что если контекст закенселен на этой милисекунде, нам тоже не нужно пушить в канал что-то
case out <- v:
case <-ctx.Done():
return
}
}
}
}()
}
Давайте разрушать мифы!
Ставьте ❤️ те, кто не прогал в Новый год и его окрестности хотя бы в один день. Посмотрим, сколько нас таких😊
Автор этого канала ушел праздновать Новый год, ставьте ❤️ те, кто тоже сейчас уже не работает
Читать полностью…
🔥А вы знаете, как под капотом устроен кэнселлинг контекста в Go?
Сегодня подробно расскажу об этом и разберу одну из самых сложных задач по канкаренси, которая только мне встречалась. Также с вами разберем другие сложные задачи, которые могут встретиться по канкаренси на собеседованиях в Go
☃️ Я считаю, этот год должен вам запомниться полным познанием темы многопоточности, поэтому залетайте с вопросами на трансляцию сегодня, мы все разберем)
🎈 - ссылка на платформу Эйч, если ютуб не работает
📺 - ссылка на трансляцию в ютубе
❤️ - приду, потому что тема актуальна