There is a huge pool of exceptional junior engineers 💬 Длинная дискуссия
Многие компании упускают огромный потенциал, отказываясь нанимать джуниор-инженеров, предпочитая только сеньоров. Это даёт конкурентное преимущество тем, кто готов инвестировать в молодые таланты: мотивированные джуниоры быстро обучаются с помощью ИИ, привносят свежие идеи и демонстрируют высокую лояльность. Например, Shopify планирует нанять 1000 стажёров, отмечая их энергию и влияние на команду.
Ключевые ошибки работодателей — устаревшие представления о длительном онбординге и интервью, сфокусированные на алгоритмах, а не на реальных навыках. Джуниоры, свободные от шаблонов, часто превосходят сеньоров в гибкости и скорости обучения. Чтобы найти лучших, стоит искать кандидатов вне традиционных каналов, например, среди тех, кто не прошёл в Y Combinator, но проявил инициативу.
Комментарии (278)
- Сложности найма джунов из-за заучивания LeetCode и использования ИИ в учебе, снижения страсти к профессии.
- Риски найма слабых джунов и необходимость эффективных фильтров для выявления талантов.
- Переизбыток выпускников CS на фоне сокращения числа вакансий для новичков.
- Важность реального опыта для джунов и конкуренции с ИИ.
- Разные подходы к оценке джунов: сложные задачи vs. простые, проверка мышления и сотрудничества.
Many hard LeetCode problems are easy constraint problems 🔥 Горячее 💬 Длинная дискуссия
Сложные LeetCode-задачи — простые задачи на ограничения
Интервьюер спросил: «Минимальное количество монет для сдачи 37¢ при номиналах [10, 9, 1]».
Жадный алгоритм даёт 10 монет, оптимум — 4. Ручное ДП сложно, а в MiniZinc — три строки:
int: total; array[int] of int: values = [10,9,1];
array[index_set(values)] of var 0..: coins;
constraint sum(c in index_set(coins)) (coins[c]*values[c]) == total;
solve minimize sum(coins);
Запускаем онлайн, получаем ответы за секунды.
Другие «сложные» задачи
-
Максимальная прибыль на акциях
Дано: цены за день.
Решение: купить до продать, максимизироватьprices[sell]-prices[buy].array[int] of int: prices; var int: buy; var int: sell; constraint sell > buy; solve maximize prices[sell]-prices[buy]; -
Три числа дают 0 в сумме
Нужно ли среди списка выбрать 3 числа со знаками ±1, чтобы сумма была 0?array[int] of int: nums; array[index_set(nums)] of var {-1,0,1}: coef; constraint sum(i in index_set(nums)) (nums[i]*coef[i]) = 0; constraint sum(i in index_set(nums)) (abs(coef[i])) = 3; solve satisfy; -
Самый большой прямоугольник в гистограмме
Ширина столбцов = 1, высоты заданы.array[int] of int: h; var 1..length(h): x; var 1..length(h): dx; var 1..max(h): y; constraint x+dx <= length(h); constraint forall(i in x..x+dx) (y <= h[i]); solve maximize (dx+1)*y;
Плюсы и минусы солверов
- + Код в 3–5 строк, добавление новых ограничений бесплатно.
- – Сложность работы непредсказуема, медленнее «идеального» алгоритма.
- – На собеседовании спросят «а сложность?» — ответа нет.
Вывод: если нужен рабочий код быстро — бери солвер; если нужна гарантированная скорость — пиши алгоритм вручную.
Комментарии (498)
- Кто-то предлагает решать «задачи на подбор монет» и прочие LeetCode-загадки не вручную, а вызывать готовый constraint-/SAT-/SMT-солвер — быстро и универсально.
- Интервьюеры возражают: «мы хотим увидеть, как ты сам пишешь алгоритм, а не вызываешь библиотеку; иначе как проверить сложность и масштабируемость?»
- Сторонники солверов отвечают: в продакшене важен рабочий результат, а не «олимпиадная остроумность»; к тому же солвер легко добавляет новые ограничения.
- Часть комментаторов считает, что LC-интервью вообще плохо предсказывают рабочие навыки и дискриминируют тех, кто не зубрит шаблоны.
- Итог: constraint-solvers — мощный инструмент, но на типовом собеседовании их использование чаще всего «вне правил», поэтому приходится писать ручное решение, даже если в реальной жизни ты бы просто вызвал OR-Tools.
An engineer's perspective on hiring 💬 Длинная дискуссия
Почему наём — боль
Компании теряют время: 9 раундов, охота за «трендовыми» разрабами, не могут отличить программиста от LLM. Кандидаты страдают: лучшие разрабы (Rust, Haskell) проваливают стресс-интервью, рекрутеры называют их «не-технарями», а потом пропадают на месяцы.
Каким должен быть хороший процесс
- Различать сеньора и маркетолога с ChatGPT.
- Применимо к работе: код, архитектура, ревью, документация.
- Долгосрочно: люди не взаимозаменяемы, уход дорого, специализация под стек выучивается за месяц.
- Экономно: инженерное время дорого.
- Уважительно: неуважение отпугивает лучших.
- Вкус: быстрое, но грязное решение — долгий долг команде; «клей» (поддержка коллег) множит продуктивность.
Почему популярные форматы не работают
-
Live-coding / LeetCode
Не различают, не про работу, уничтожают уважение и вкус, дорогие при многократных раундах. -
Take-home
Легко сгенерировать ChatGPT, неуважительны к времени кандидата, отпугивают сильных. -
Проектирование архитектуры
Лучше: ChatGPT не пройдёт, близко к реальной работе, можно оценить вкус и командное влияние.
Комментарии (171)
- Современные «интервью» больше похожи на серию экзаменов, чем на профессиональный разговор.
- Многие считают, что достаточно 1-2 коротких встреч или пробы через контракт «temp-to-perm», чтобы понять, подходит ли человек.
- Популярные live-coding и leetcode почти не отражают реальную работу и отбирают не тех специалистов.
- Лучше обсуждать реальные задачи, ревьюить существующий код или решать мелкий баг в паре — это ближе к ежедневным обязанностям.
- Кандидаты теряют время и энергию на домашние задания и 9-часовые циклы, поэтому всё чаще «интервьюируют» и сами компании.