Не совсем наверное секреты, но с моей колокольни (опыт работы около 15 лет в компаниях разного размера, от 5 человек до огромных IT-корпораций, разные роли: разрабочик, архитектор, техлид, тимлид):
0. Про поиск в интернете. В начале карьеры соотношение "о, а я знаю как это запрограммировать" к "надо бы посмотреть, может кто уже спрашивал такое на stackoverflow" где-то примерно 20% к 80%. Где-то к 5-6 годам опыта оно инвертируется (80% понятно, 20% надо искать в интернете) и уже стабилизируется на этом уровне.
0.0. Да, даже сейчас каждый день я ищу решение в интернете не менее 5 раз в день (если я занимаюсь кодингом). И это нормально.
0.1. Регулярно (в среднем раза два в год) решение, которое я нахожу в форумах, было написано или мной, или моим шефом.
0.2. Сейчас модно использовать всякие Github Copilot или ChatGPT -- они позволяют быстро получить код, который работает на 90%. Оставшие 10% скрывают такие хитрые баги, что порой легче переписывать весь код самому, чем понять где там в коде что-то несрабатывает. Но в целом для быстрого прототипирования -- отличная вещь!
1. Самый ценный программист -- это не тот, который может решить любую задачу, а тот, на которого можно положиться, а это значит, что.
1.0. Его не нужно спрашивать каждый день-два о статусе. Он работает автономно, и если с чем-то затык на больше чем Х часов, то сначала он обратится к коллеге, а потом к менеджеру/тимлиду (или другому старшему товарищу).
1.1. То есть на момент его обращения за помощью, на задачу им порачено не больше Х + 1-2 часа (то есть время не сильно упущено). Х разный и зависит от проекта и команды. У меня с моим нынешним шефом это порядка 1 часа. В среднем я обращаюсь к нему один-два раза за неделю с небольшими вопросами.
2. Самый важный не-технический навык для программиста это умение печатать вслепую. Не обязательно шпарить очень быстро, достаточно просто успевать за мыслью. Моя средняя скорость где-то 350-400 символов в минуту, это примерно как быстро я думаю. По моему опыту это самый "быстро-окупаемый" навык и чем серьезнее компания и профессионал, тем меньше процент тех, кто этого не умеет.
3. В больших корпорациях (по крайней мере где я работаю сейчас), зарплата менеджера не выше заплаты индивидуального программиста того же уровня, то есть за эту работу не доплачивают. Но по мере роста уровня, получить повышение на новый уровень становится в разы легче, если ты менеджер, так как чем выше уровень тем меньше нужны специалисты-индивидуалисты, а всё больше требуется руководство командой или даже командами.
4. Про интервью. На собеседовании обычно интервьюер заинтересован в том, чтобы кандидат прошёл его успешно. Просто потому, что если кандидат заваливает интервью, то ему же часто придётся интервьюировать другого (а это опять потеря времени). Поэтому я всегда стараюсь максимально помочь кандидатам, тяну до последнего, если интервью не впритык, могу потратить и на час больше (если вижу потенциал).
4.0. У меня есть набор из 4-5 проверенных задач на разные технологии и темы, которые я выбираю в зависимости от кандидата. Я регулярно мониторю похожие задачи на популярных сайтах, и если вдруг задача появляется на Leetcode или где-то еще, просто меняю её (пока было один раз за 7 лет проведения интервью).
4.1. Перед тем как задачь новую (ранее мною в интервью не используемоую) задачу кандидатам в первый раз, я тестирую её на двух-трёх коллегах, с разными уровнями и опытом, чтобы понять как её будут решать люди, что видят её в первый раз. Тут же я определяю для каждой задачи "минимум", который должен выполнить кандидат (скажем поймать 2-3 таких вот особых случая, или сделать такие проверки, решение должно иметь не больше чем определенную сложность).
4.2. Для алгоритмических задач у меня есть готовые решения на 3-4 популярных языках в интервью (в моём случае -- C#, Java, Python и JavaScript), в которые я смотрю пока кандидат решает, чтобы давать ему подсказки. Это связано с тем, что если по работе ты какой-то язык долго не используешь, то забываются детали кода решения (алгоритм обычно у них у всех одинаков, но код оптимизирован под конкретный язык).
4.3. Требования к решению разные и зависят от уровня требуемого на позицию. Для стажёра бывает достаточно решения просто "в лоб", для более высоких позиций уже нужно найти решение с лучшей сложностью. Обычно я подкидиваю кандидатам тесты, которые им помогают понять узкие места их решений.
4.4. В случае очных интервью, кандидат всё пишет на доске маркером. Синтаксис (в разумных пределах) тут совсем не важен. Язык тоже. Главное -- показать как ты мыслишь. Многие почему-то считают, что написать код маркером на доске намного сложнее, чем напечатать его в редакторе. На самом деле всё абсолютно наоборот!! Когда человек пишет код на доске, он не ожидает, что код запустится или даже скомпилируется. А в редакторе (мы используем codility) есть кнопка "запустить". И очень часто код не компирилируется просто по техническим причинам (например, кандидат забыл добавить нужную библиотеку) -- любой продвинутый редактор это исправит, а онлайновые в интервью это не умеют. Ну и кандидат конечно когда видит ошибку, начинает бледнеть, тушуется и приходится ему помогать -- это, бывает, смущает еще сильнее.
4.5. По итогам каждого интервью (даже просто скрининга) составляется подробный отчёт (около 2-3 страниц печатного текста). Там есть всё: краткий протокол, обязательно код кандидата и его оценка интервьюером, может быть какие-то советы другим интервьюерам на что обратить внимание (если собеседований несколько). Его видят рекруитеры и менеджеры, у которых открыта эта позиция. Мы не имеем права ничего об этом рассказывать, но рекруитеры иногда дают обобщённых фидбек кандидатам. Я сам, если кого-то тащил и не смог вытащить или уже на грани, обычно даю пару-тройку советов, что стоило бы подтянуть.
4.6. Один из ключевых принципов интервью -- это чтобы у кандидата, даже если он не получит оффер, осталось позитивное впечатение о компании и о процессе. Поэтому зачастую в какой-то момент, когда я уже понимаю, что "не вытянет", я начинаю помогать более активно (давать более прямые подсказки, из серии "а не лягушка ли это?") или писать куски кода, где случился ступор, за кандидата. Кандидат может при этом подумать, что он очень хорошо прошёл интервью, но на самом деле просто не хотелось его очень жёстко "опрокидывать". В конце концов интервью это как лотерея, многое зависит и от удачи. Пусть хорошие кандидаты приходят к нам снова!
5. В какой-то момент деньги перестают быть мотивирующим фактором (мотивирует их отсутствие). Поэтому приходится искать другие мотиваторы. Чаще всего это интересные задачи, что-то новое, на переднем крае прогресса (нейросети, IaC, трансформеры и прочее).
Постарался оставить только то, что немного подходит под понятие "секрет", остальное (более рутинное) опубликую отдельным постом.
Читайте также.