Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Этой теме уже десятки лет — как собеседовать и почему, нужно ли знать алгоритмы программисту или нет, и так далее.
И вот, в очередной статье говорится, что сеньоров бесят задачи на разработке. И в комментариях многие — к моему удивлению — пишут, что на собеседованиях не готовы вообще писать ни строчки кода.
Кажется, проблема лежит глубже, и все смешалось в кучу.
Тут можно очень много говорить, но в целом, вопрос в определениях. Люди рассуждают о собеседованиях, не задав уточняющие вопросы (как на собеседовании — к задачам).
Во-первых, какие бывают области разработки ПО? Вспомним миры Джоэла Спольски. Уже это будет давать разные требования к собеседованиям.
Во-вторых, что за компания? Стартап, big tech, галера, веб-студия, интернет-магазин, или контора с IT-отделом, где основной бизнес — другой?
В-третьих, что такое сеньор? В комментариях к посту верно отметили, что в сеньора смешивают все — архитекторов, ведущих программистов, узкоспециализированных специалистов и так далее.
Далее, какие цели и какого собеседования? Бывают собеседования для поточного набора, бывают поиски звезд, бывают поиски людей с конкретными навыками работы и опытом в технологии, и так далее.
И, конечно, не стоит забывать про культуру. Знаете, в музыке или в науке есть особое разделение на «своих» и «остальных». Типа, есть у тебя образование профильное и стандартный путь, или нет (в музыке это выражается в обучении более 10-15 лет: ДМШ — училище — консерватория, к примеру). И мне, имеющему опыт без музыкального образования выступления на сцене с профессиональными музыкантами, хорошо знакомы вопросы «ты что заканчивал / у кого учился», которые выделяют своих от остальных.
Программисты получают образование в области CS. Нередко многие из них проходят отбор через олимпиады, где решают специализированные задачи. Учат тонну матана и разных других дисциплин — в том числе уже набившие оскомину структуры данных и алгоритмы.
Думаю, немалая часть противостояния лежит в том, что часть программистов имеют профильное образование и считают тру программистами тех, кто прошел схожий с ними путь. А другая часть — самоучки (вспомним знаменитое «Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.»).
И это не изменится, пока будут как минимум два крупных источника прихода в профессию и два представления о том, кто такой программист и что он обязан уметь.
В общем-то, если принять вышеописанное во внимание, то все становится на свои места.
Если в компании Гугл есть культура людей, которые впитали с вуза, что программист — это человек со знанием алгоритмов и структур данных, то они таким образом и построят набор.
Считайте, как поступление в вуз — все сдают математику и физику, готовятся к экзаменам (и потом успешно забывают к концу учебы — тут, правда, замечу, что поступал до ЕГЭ и у нас в каждый вуз были свои типовые задачи и по ним готовились отдельно). Возможно, за этим есть A/B тесты бизнес-подхода к набору, где алгоритмы наиболее эффективно определяют качества человека (способен ли тупо физически выучить все, может ли думать так, как думают будущие коллеги), который будет успешен в компании.
Если в компании АльфаБетаГамма (название выдумано) работают с Джавой и нужно знание нюансов всего стэка, то будет разумнее спрашивать пет-проекты или нюансы по технологии, ибо нужен будет опыт.
При этом, если зарплата хорошая и поток большой нубов из-за большой суммы — да, поставят на входе задачи типа «напишите пузырек», чтобы не тратить время (собеседование — минимум полдня — подготовка + созвон + вернуться обратно в рабочий режим) на тех, кто решил попытать удачи (на Хабре уже была статья про «войти в айти», и не одна).
Если же в компанию ДельтаДзета (название тоже выдумано) берут по рекомендации архитектора на серьезную должность, то с ним пообщаются по профессии, с уважением, и не будут задрачивать на дебильных задачах.
Однако, если в вышеописанных случаях происходит то, что всегда происходит — человеческий фактор типа внутренней политики — то либо усталый программер на силой навязанном ему собеседовании будет валить кандидатов, либо будет валить потенциальных конкурентов, либо что-то еще.
Я по образованию — инженер-робототехник, и у меня были некоторые курсы, которые есть у программистов, но далеко не все. И изначально всегда относился со скепсисом к алгоритмам, ибо первая реакция, когда кто-то пишет, кто не читавший Кнута не есть программист, негативная.
Со временем, изменил свое отношение, и считаю, что это как школа. Ты тупо впитываешь знания, полученные лучшими умами за прошлые десятилетия. Чтобы понять, и если потом нужно будет — быстро нагуглить или написать самому. Стал испытывать удовольствие, когда прорешал N задач на Codewars, и прочитав на русском + проработав упражнения отличной книги «Питон и алгоритмы» (всем рекомендую, есть еще на английском).
Поднимается самооценка, когда в общении с коллегами знаешь такие термины. Плюс ощутимо развивается мозг, который познает новое. После этого даже взялся за два пет-проекта (на Джанго и node.js), возможно, выложу на Хабре и в опен-сорс, как доведу код до смотрибельного состояния, чтобы в комментариях не сильно распекали.
Ну и конечно, если вы хотите работать над реально крутыми задачами или с крутыми языками, то нужно не забывать про матрицу компетентности программиста.
Рано или поздно, начинается граница, для которой нужно иметь некий запас знаний и навыков (например, в играх — математику, работу с графами, памятью, рекурсией и тд; в data science, как хорошо недавно писали — линейную алгебру, статистику + системы аналитики), которые придется освоить.
И лучше сделать это по кайфу и размеренно, в рамках собственного развития, чем, как пишут, насильно и имея два набора знаний — для работы и для собеседований.
И вот, в очередной статье говорится, что сеньоров бесят задачи на разработке. И в комментариях многие — к моему удивлению — пишут, что на собеседованиях не готовы вообще писать ни строчки кода.
Кажется, проблема лежит глубже, и все смешалось в кучу.
О многомерности вопроса собеседований
Тут можно очень много говорить, но в целом, вопрос в определениях. Люди рассуждают о собеседованиях, не задав уточняющие вопросы (как на собеседовании — к задачам).
Во-первых, какие бывают области разработки ПО? Вспомним миры Джоэла Спольски. Уже это будет давать разные требования к собеседованиям.
Во-вторых, что за компания? Стартап, big tech, галера, веб-студия, интернет-магазин, или контора с IT-отделом, где основной бизнес — другой?
В-третьих, что такое сеньор? В комментариях к посту верно отметили, что в сеньора смешивают все — архитекторов, ведущих программистов, узкоспециализированных специалистов и так далее.
Далее, какие цели и какого собеседования? Бывают собеседования для поточного набора, бывают поиски звезд, бывают поиски людей с конкретными навыками работы и опытом в технологии, и так далее.
О роли пути в профессию
И, конечно, не стоит забывать про культуру. Знаете, в музыке или в науке есть особое разделение на «своих» и «остальных». Типа, есть у тебя образование профильное и стандартный путь, или нет (в музыке это выражается в обучении более 10-15 лет: ДМШ — училище — консерватория, к примеру). И мне, имеющему опыт без музыкального образования выступления на сцене с профессиональными музыкантами, хорошо знакомы вопросы «ты что заканчивал / у кого учился», которые выделяют своих от остальных.
Программисты получают образование в области CS. Нередко многие из них проходят отбор через олимпиады, где решают специализированные задачи. Учат тонну матана и разных других дисциплин — в том числе уже набившие оскомину структуры данных и алгоритмы.
Думаю, немалая часть противостояния лежит в том, что часть программистов имеют профильное образование и считают тру программистами тех, кто прошел схожий с ними путь. А другая часть — самоучки (вспомним знаменитое «Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.»).
И это не изменится, пока будут как минимум два крупных источника прихода в профессию и два представления о том, кто такой программист и что он обязан уметь.
Какие предварительные выводы?
В общем-то, если принять вышеописанное во внимание, то все становится на свои места.
Если в компании Гугл есть культура людей, которые впитали с вуза, что программист — это человек со знанием алгоритмов и структур данных, то они таким образом и построят набор.
Считайте, как поступление в вуз — все сдают математику и физику, готовятся к экзаменам (и потом успешно забывают к концу учебы — тут, правда, замечу, что поступал до ЕГЭ и у нас в каждый вуз были свои типовые задачи и по ним готовились отдельно). Возможно, за этим есть A/B тесты бизнес-подхода к набору, где алгоритмы наиболее эффективно определяют качества человека (способен ли тупо физически выучить все, может ли думать так, как думают будущие коллеги), который будет успешен в компании.
Если в компании АльфаБетаГамма (название выдумано) работают с Джавой и нужно знание нюансов всего стэка, то будет разумнее спрашивать пет-проекты или нюансы по технологии, ибо нужен будет опыт.
При этом, если зарплата хорошая и поток большой нубов из-за большой суммы — да, поставят на входе задачи типа «напишите пузырек», чтобы не тратить время (собеседование — минимум полдня — подготовка + созвон + вернуться обратно в рабочий режим) на тех, кто решил попытать удачи (на Хабре уже была статья про «войти в айти», и не одна).
Если же в компанию ДельтаДзета (название тоже выдумано) берут по рекомендации архитектора на серьезную должность, то с ним пообщаются по профессии, с уважением, и не будут задрачивать на дебильных задачах.
Однако, если в вышеописанных случаях происходит то, что всегда происходит — человеческий фактор типа внутренней политики — то либо усталый программер на силой навязанном ему собеседовании будет валить кандидатов, либо будет валить потенциальных конкурентов, либо что-то еще.
Немного о пользе алгоритмов
Я по образованию — инженер-робототехник, и у меня были некоторые курсы, которые есть у программистов, но далеко не все. И изначально всегда относился со скепсисом к алгоритмам, ибо первая реакция, когда кто-то пишет, кто не читавший Кнута не есть программист, негативная.
Со временем, изменил свое отношение, и считаю, что это как школа. Ты тупо впитываешь знания, полученные лучшими умами за прошлые десятилетия. Чтобы понять, и если потом нужно будет — быстро нагуглить или написать самому. Стал испытывать удовольствие, когда прорешал N задач на Codewars, и прочитав на русском + проработав упражнения отличной книги «Питон и алгоритмы» (всем рекомендую, есть еще на английском).
Поднимается самооценка, когда в общении с коллегами знаешь такие термины. Плюс ощутимо развивается мозг, который познает новое. После этого даже взялся за два пет-проекта (на Джанго и node.js), возможно, выложу на Хабре и в опен-сорс, как доведу код до смотрибельного состояния, чтобы в комментариях не сильно распекали.
Ну и конечно, если вы хотите работать над реально крутыми задачами или с крутыми языками, то нужно не забывать про матрицу компетентности программиста.
Рано или поздно, начинается граница, для которой нужно иметь некий запас знаний и навыков (например, в играх — математику, работу с графами, памятью, рекурсией и тд; в data science, как хорошо недавно писали — линейную алгебру, статистику + системы аналитики), которые придется освоить.
И лучше сделать это по кайфу и размеренно, в рамках собственного развития, чем, как пишут, насильно и имея два набора знаний — для работы и для собеседований.