Почему многие разработчики страдают на LeetCode.
Хочу начать с вопроса: зачем тебе уметь решать алгоритмические задачи? Сомневаюсь, что тебе стало скучно и больше нечем заняться, и ты решил потратить кучу сил и времени на этот навык. Скорее всего, ты это делаешь с целью пройти фильтр в FANG. Или возможно, тебе внушили мысль, что без алгоритмов ты не программист? В целом неважно.
Итак, вот ты мидл или сеньор, за плечами несколько лет коммерческого опыта, но, заходя на LeetCode, берешь задачи уровня easy и ничего не можешь решить. И тут возникает мысль: «я что, тупой?»
Знакомо?
Я сам проходил через это. Многолетний опыт на реальных проектах не дал мне навык решать алгоритмы на LeetCode. Повседневные задачи редко связаны с написанием алгооптимизаций или велосипедированием структур данных. Обычно большую часть времени мы пишем бизнес-логику и чиним баги. Мозг привыкает решать прикладные задачи, а не абстрактные головоломки.
Я долгое время не любил алгозадачи. Именно потому что не умел их решать. Я читал книги, смотрел ютуб, читал статьи, и везде одно и то же: основная концепция сводилась к визуальному представлению и пониманию работы конкретных алгоритмов. Мне показывали красивые картинки бинарного дерева, но не давали универсальной отмычки для решения любых задач. А она есть. Это алгошаблоны.
Итак, основные шаблоны, которые нужно знать и уметь применять:
1. Два указателя:
• Быстрый и медленный указатель
• Движение друг к другу с разных концов
• Параллельный ход – каждому по указателю
2. Скользящее окно:
• Фиксированное окно
• Динамическое окно
3. Хеш-таблица:
• КВ-ВК: ключ-значение / значение-ключ
• Частотная карта и группировки
• Set для мгновенного поиска
4. Бинарный поиск:
• Поиск элемента в отсортированном массиве
5. Стек и очередь:
• Монотонный стек / монотонная очередь (поиск ближайшего большего/меньшего)
• Валидация скобочных последовательностей
6. Связанные списки:
• Разворот списка
• Слияние и разделение списков
7. Бинарные деревья:
• Обход в глубину DFS
• Обход в ширину BFS
Кто-то может возразить: «это не все паттерны, на собеседовании может попасться паттерн, которого здесь нет!».
– Да, может.
Но выучить абсолютно всё довольно ресурсоемко. И даже 100%-ное знание всех шаблонов не гарантирует успех на интервью. Каждый новый освоенный паттерн только увеличивает вероятность прохождения алгосекции на определенный процент.
Эта база покрывает 80% реальных задач на собеседованиях. Тратить месяцы на изучение экзотических алгоритмов ради оставшихся 20% — неэффективно. Вы станете «крутым решателем Лидкода», но эти знания почти никогда не пригодятся вам в реальном продакшене. Гораздо выгодней потратить силы на развитие навыка системного дизайна, особенно в эпоху ИИ, но это отдельная тема.
Хочу начать с вопроса: зачем тебе уметь решать алгоритмические задачи? Сомневаюсь, что тебе стало скучно и больше нечем заняться, и ты решил потратить кучу сил и времени на этот навык. Скорее всего, ты это делаешь с целью пройти фильтр в FANG. Или возможно, тебе внушили мысль, что без алгоритмов ты не программист? В целом неважно.
Итак, вот ты мидл или сеньор, за плечами несколько лет коммерческого опыта, но, заходя на LeetCode, берешь задачи уровня easy и ничего не можешь решить. И тут возникает мысль: «я что, тупой?»
Знакомо?
Я сам проходил через это. Многолетний опыт на реальных проектах не дал мне навык решать алгоритмы на LeetCode. Повседневные задачи редко связаны с написанием алгооптимизаций или велосипедированием структур данных. Обычно большую часть времени мы пишем бизнес-логику и чиним баги. Мозг привыкает решать прикладные задачи, а не абстрактные головоломки.
Я долгое время не любил алгозадачи. Именно потому что не умел их решать. Я читал книги, смотрел ютуб, читал статьи, и везде одно и то же: основная концепция сводилась к визуальному представлению и пониманию работы конкретных алгоритмов. Мне показывали красивые картинки бинарного дерева, но не давали универсальной отмычки для решения любых задач. А она есть. Это алгошаблоны.
Итак, основные шаблоны, которые нужно знать и уметь применять:
1. Два указателя:
• Быстрый и медленный указатель
• Движение друг к другу с разных концов
• Параллельный ход – каждому по указателю
2. Скользящее окно:
• Фиксированное окно
• Динамическое окно
3. Хеш-таблица:
• КВ-ВК: ключ-значение / значение-ключ
• Частотная карта и группировки
• Set для мгновенного поиска
4. Бинарный поиск:
• Поиск элемента в отсортированном массиве
5. Стек и очередь:
• Монотонный стек / монотонная очередь (поиск ближайшего большего/меньшего)
• Валидация скобочных последовательностей
6. Связанные списки:
• Разворот списка
• Слияние и разделение списков
7. Бинарные деревья:
• Обход в глубину DFS
• Обход в ширину BFS
Кто-то может возразить: «это не все паттерны, на собеседовании может попасться паттерн, которого здесь нет!».
– Да, может.
Но выучить абсолютно всё довольно ресурсоемко. И даже 100%-ное знание всех шаблонов не гарантирует успех на интервью. Каждый новый освоенный паттерн только увеличивает вероятность прохождения алгосекции на определенный процент.
Эта база покрывает 80% реальных задач на собеседованиях. Тратить месяцы на изучение экзотических алгоритмов ради оставшихся 20% — неэффективно. Вы станете «крутым решателем Лидкода», но эти знания почти никогда не пригодятся вам в реальном продакшене. Гораздо выгодней потратить силы на развитие навыка системного дизайна, особенно в эпоху ИИ, но это отдельная тема.
КАК ЭФФЕКТИВНО ОТКЛИКАТЬСЯ НА ВАКАНСИИ?!
Поиск работы – это воронка продаж. Сегодня уже нельзя просто выложить резюме и ждать, когда тебе напишет рекрутер. Нужна правильная стратегия откликов.
Этап 1: Массовые отклики.
Все HR-ы в унисон говорят, как это плохо и что так делать не нужно. Их аргументы продиктованы личными интересами, поэтому мы не будем на них ориентироваться, а будем преследовать свои цели.
Чтобы максимизировать воронку и получить как можно больше контактов с HR, нужно сделать 1000 откликов на профильные вакансии.
Это работает примерно по такой схеме:
- 1000 откликов
- 100–200 просмотров
- 5–15 звонков/скринингов
- 1–7 полноценных интервью
- 1–2 оффера
Как видишь, цифры скромные, и в зависимости от специализации (например, если ты фронтенд-разработчик) могут быть еще скромнее. Также этот метод выжигает все мусорные вакансии и разгоняет активность аккаунта.
Еще есть большая вероятность, что подходящие вакансии закончатся раньше, чем ты достигнешь отметки в 1000 откликов. Это не страшно, переходи к следующему этапу.
Этап 2: Точечные отклики.
На этом этапе в поиске будут появляться только свежие вакансии, на которые нужно откликнуться среди первых и попасть в топ выдачи.
Здесь главная цель - подогнать соответствие резюме под конкретную вакансию как можно ближе к 100%, чтобы попасть в топ выдачи у конкретного работодателя.
Реальность такова, что если соответствие ниже 80%, HR банально до тебя не дойдет. Даже если твое резюме условно 5-е по счету, первые 4 кандидата перед тобой могут закрыть вакансию, и ты будешь в пролете. Это как 2-я страница Гугла, вроде бы она существует, но кто на нее заходит? Борьба идет за первые 3 места в выдаче.
В следующем посте расскажу, как именно оптимизировать резюме, чтобы попадать в топы.
Поиск работы – это воронка продаж. Сегодня уже нельзя просто выложить резюме и ждать, когда тебе напишет рекрутер. Нужна правильная стратегия откликов.
Этап 1: Массовые отклики.
Все HR-ы в унисон говорят, как это плохо и что так делать не нужно. Их аргументы продиктованы личными интересами, поэтому мы не будем на них ориентироваться, а будем преследовать свои цели.
Чтобы максимизировать воронку и получить как можно больше контактов с HR, нужно сделать 1000 откликов на профильные вакансии.
Это работает примерно по такой схеме:
- 1000 откликов
- 100–200 просмотров
- 5–15 звонков/скринингов
- 1–7 полноценных интервью
- 1–2 оффера
Как видишь, цифры скромные, и в зависимости от специализации (например, если ты фронтенд-разработчик) могут быть еще скромнее. Также этот метод выжигает все мусорные вакансии и разгоняет активность аккаунта.
Еще есть большая вероятность, что подходящие вакансии закончатся раньше, чем ты достигнешь отметки в 1000 откликов. Это не страшно, переходи к следующему этапу.
Этап 2: Точечные отклики.
На этом этапе в поиске будут появляться только свежие вакансии, на которые нужно откликнуться среди первых и попасть в топ выдачи.
Здесь главная цель - подогнать соответствие резюме под конкретную вакансию как можно ближе к 100%, чтобы попасть в топ выдачи у конкретного работодателя.
Реальность такова, что если соответствие ниже 80%, HR банально до тебя не дойдет. Даже если твое резюме условно 5-е по счету, первые 4 кандидата перед тобой могут закрыть вакансию, и ты будешь в пролете. Это как 2-я страница Гугла, вроде бы она существует, но кто на нее заходит? Борьба идет за первые 3 места в выдаче.
В следующем посте расскажу, как именно оптимизировать резюме, чтобы попадать в топы.
Fallow – главная фишка IDEA теперь в VS Code и Neovim
Я долго работал в WebStorm и привык к ее фишкам: среда сразу подсвечивает неиспользуемые переменные, функции, дубликаты и т.д. Для меня это одна из ключевых причин использовать jetbrains IDEA.
Мне часто приходилось сталкивался с одной и той же болью. Заходишь в файл (особенно в слой утилит), а там висит куча неиспользуемого кода. Я не понимал: почему коллеги его не удаляют? А потом попробовал VS Code и как понял. Они просто его не видят! Их редактор не подсвечивает эти проблемы так, как это делает WebStorm.
Со временем WebStorm перестал устраивать меня по скорости и прожорливости к ресурсам. Я начал искать альтернативы и перешел на Neovim. Но из коробки в нем нет такой глубокой индексации (и не только ее, но это другая тема), потому что он использует тот же lsp сервер, что и VS Code. Какое-то время пришлось мириться с «слепой зоной», пока я не наткнулся на Fallow.
Что такое Fallow?
Fallow — это быстрая система анализа кода для TypeScript и JavaScript, написанная на Rust. В отличие от обычных линтеров, она не просто проверяет правила, а выстраивает карту связей всего проекта. Это позволяет находить скрытые архитектурные проблемы.
Что крутого умеет утилита:
Ищет «мертвый» код. Находит неиспользуемые файлы, экспорты, типы, члены классов/enum и лишние npm-зависимости.
Обнаруживает дубликаты. Через суффиксный детектор ищет повторы не только в TS/JS, но и в CSS-стилях.
Считает Health Score. Выводит оценку здоровья кодовой базы от 0 до 100 на основе когнитивной сложности и запутанности связей.
Проверяет архитектуру. Из коробки поддерживает валидацию паттернов Bulletproof, Layered, Hexagonal и Feature-Sliced Design.
Дополнительно инструмент поддерживает интеграцию с CI/CD, работу с AI-агентами и MCP.
Утилита ставится глобально:
Запустить полный аудит проекта и сразу подсветить дубликаты с мертвым кодом:
У Fallow есть плагины для VS Code и Neovim, которые возвращают привычный опыт работы для IDEA.
VS Code: ставите плагин и сразу видите подсветку прямо в открытых файлах.
Neovim: настраиваете fallow_lsp и подключаете плагин xeind/vallow.nvim. Вы получаете точно такой же UI, как в VS Code.
Для корректной работы нужно настроить конфигурационный файл (указать точки входа и исключения). Мой минимальный конфиг можно взять за основу:
Итог: мы получаем одну из лучших фишек экосистемы JetBrains, получив высокую скорость работы, возможность настроить правила для архитектуры (к примеру FSD) и удобный дашборд для мониторинга всего проекта.
Я долго работал в WebStorm и привык к ее фишкам: среда сразу подсвечивает неиспользуемые переменные, функции, дубликаты и т.д. Для меня это одна из ключевых причин использовать jetbrains IDEA.
Мне часто приходилось сталкивался с одной и той же болью. Заходишь в файл (особенно в слой утилит), а там висит куча неиспользуемого кода. Я не понимал: почему коллеги его не удаляют? А потом попробовал VS Code и как понял. Они просто его не видят! Их редактор не подсвечивает эти проблемы так, как это делает WebStorm.
Со временем WebStorm перестал устраивать меня по скорости и прожорливости к ресурсам. Я начал искать альтернативы и перешел на Neovim. Но из коробки в нем нет такой глубокой индексации (и не только ее, но это другая тема), потому что он использует тот же lsp сервер, что и VS Code. Какое-то время пришлось мириться с «слепой зоной», пока я не наткнулся на Fallow.
Что такое Fallow?
Fallow — это быстрая система анализа кода для TypeScript и JavaScript, написанная на Rust. В отличие от обычных линтеров, она не просто проверяет правила, а выстраивает карту связей всего проекта. Это позволяет находить скрытые архитектурные проблемы.
Что крутого умеет утилита:
Ищет «мертвый» код. Находит неиспользуемые файлы, экспорты, типы, члены классов/enum и лишние npm-зависимости.
Обнаруживает дубликаты. Через суффиксный детектор ищет повторы не только в TS/JS, но и в CSS-стилях.
Считает Health Score. Выводит оценку здоровья кодовой базы от 0 до 100 на основе когнитивной сложности и запутанности связей.
Проверяет архитектуру. Из коробки поддерживает валидацию паттернов Bulletproof, Layered, Hexagonal и Feature-Sliced Design.
Дополнительно инструмент поддерживает интеграцию с CI/CD, работу с AI-агентами и MCP.
Утилита ставится глобально:
npm install -g fallow
Запустить полный аудит проекта и сразу подсветить дубликаты с мертвым кодом:
fallow audit
У Fallow есть плагины для VS Code и Neovim, которые возвращают привычный опыт работы для IDEA.
VS Code: ставите плагин и сразу видите подсветку прямо в открытых файлах.
Neovim: настраиваете fallow_lsp и подключаете плагин xeind/vallow.nvim. Вы получаете точно такой же UI, как в VS Code.
Для корректной работы нужно настроить конфигурационный файл (указать точки входа и исключения). Мой минимальный конфиг можно взять за основу:
{
"$schema": "https://raw.githubusercontent.com/fallow-rs/fallow/main/schema.json",
"entry": [
"src/app/index.ts",
],
"ignoreExportsUsedInFile": true,
"ignoreExports": [
{
"file": "*/**/index.ts",
"exports": ["*"]
}
],
"ignorePatterns": ["**/*.test.ts", "dist/**", "node_modules/**"],
"boundaries": {
"severity": "error",
"preset": "feature-sliced"
}
}Итог: мы получаем одну из лучших фишек экосистемы JetBrains, получив высокую скорость работы, возможность настроить правила для архитектуры (к примеру FSD) и удобный дашборд для мониторинга всего проекта.
Visualstudio
Fallow - Visual Studio Marketplace
Extension for Visual Studio Code - Codebase intelligence for TypeScript and JavaScript. Real-time diagnostics for unused code, duplication, complexity hotspots, architecture drift, and design-system styling, with optional runtime evidence via Fallow Runtime.