Прежде чем начать сей вопль отчаяния, вызванный безумием этого мира, хотелось бы кратко сказать о себе?—?программист, руководитель программистов (нанимался и нанимал), значительный опыт разработки только на языке Perl.
Perl?—?это когда-то бывший популярным для веба, но ныне умирающий, язык. Умирающий вполне обоснованно, поэтому хотелось бы слезть с него на что-то массово востребованное (Java).
Сменить стек технологий?—?это не такая простая задача, проблема в том, что если у тебя в опыте работы не указан конкретный язык программирования, а то и конкретный фреймворк/библиотека, то ты считаешься неподходящим кандидатом.
Неважно какой у тебя опыт по качеству и количеству, нет разницы способен ты решать задачи?—?главное, чтобы у тебя в резюме был указан опыт работы с инструментами описанными в вакансии.
Т.к. ИТ сфера достаточно новая, то не всем понятно почему это полнейший идиотизм. Для понятной иллюстрации разберём в качестве примера столярные работы. Если вам нужен столяр для изготовления деревянного стола, то вы не будете в вакансии писать что-то вроде “опыт работы железными фальцгебелями с пластмассовыми ручками”. Не исключаю, что вы напишете: “требуется опыт изготовления столов”, это хоть как-то можно понять, но и это не обязательно. Разве у кого-то есть сомнения в том, что хороший столяр может изготовить стол?
Т.е. главная задача?—?найти хорошего столяра, а не столяра владеющего конкретным инструментом и не обязательно столяра выполнявшего аналогичные проекты. Хотя второе как раз может быть ценным, но в приложении к ИТ сфере тут есть определённые сложности?—?обычно требуется изготавливать что-то настолько редкое, что найти человека с таким опытом практически невозможно.
Пример со столяром это конечно лишь аналогия, он облегчает понимание, но не даёт полной картины. Например, выдвигать программистам требования к владению инструментами ещё более глупо чем к столярам, ведь у столяров набор инструментов изменяется предельно медленно, а у программистов инструменты изменяются с космической скоростью. Программирование подразумевает постоянно изучение нового?—?сегодня вы нанимаете человека для работы с одними технологиями, а завтра ему придётся использовать другие. Я хоть и не client-side разработчик, но хорошо помню, что в 2007 году на клиентской стороне популярными библиотеками были jQuery и ExtJS (как сегодня ReactJS и Angular), а в 2017, когда я выступал на конференции The Rolling Scopes #37. Gomel выяснилось что в большом зале всего несколько человек помнят такие названия. И так везде?—?все постоянно внедряют новые технологии и никого почему-то не смущает, что текущие сотрудники не имеют опыта с этими технологиями (а если технология достаточно новая, то может быть, что во всём мире нет людей с опыт работы с ними). Помимо этого можно сказать, что программисты, в отличии от столяров, занимаются сложными задачами в достаточно новой сфере человеческой деятельности, ещё почти нет накопленного и тиражируемого отраслевого опыта. Это столяр может взять учебник или справочник с огромным количеством чертежей различных столов или проконсультироваться у более опытного специалиста, а в ИТ сфере этого нет?—?даже в типовых задачах вроде разработки сайтов нет готовых решений, например популярные и давно существующие CMS нередко в новых версиях переделывают свою архитектуру в поисках хорошего и универсального решения. А если взять чуть менее типовой проект, то будет совсем печально.
Исходя из сказанного можно понять, что опыт работы в аналогичных проектах (в отличии от опыта с теми же инструментами) ценен. Оно и понятно?—?если человек работал в той же сфере, он знает предметную область (имеет в голове её модель), набил какие-то шишки и уже может делать лучше, чем делал в первый раз. Если не ошибаюсь, у Фредерика Брукса было утверждение, что программа становится хорошей, только после того как она переписана три раза, так вот, если вы нанимаете человека, который один раз уже написал, то вам остаётся всего два. Однако, как уже было сказано, найти человека с опытом в таких же проекта очень сложно и дорого. Подумайте сколько в мире людей создававших таск менеджеры (вроде Redmine)? Писавших биллинги хостинга? Создававших мессенджеры? Их опыт очень ценен если вы разрабатываете аналогичный проект, да вот только найти и нанять их предельно сложно по множеству причин.
Не знаю, точно не HR’ы, они играют как скажут. Может на самом деле всё нормально в этом мире, а я ненормальный.
Думайте хорошенько прежде чем сформулировать требования к кандидату. Ведь хороший программист должен уметь учиться, а значит способен освоить любые нужные вам технологии. А раз дело не в технологиях, то в чём? Очевидно, что он должен уметь программировать, решать алгоритмические задачи и это нужно проверять давая тестовое задание. Но надо делать это тестовое задание близким с реальной работе?—?если вы нанимаете системного программиста, то вполне допустимо дать ему задание требующее знания алгоритмов и т.п., чтобы проверить не только способность программировать, но и знания накопленных практик (в системном программировании как раз есть некий накопленный опыт, это старейшая часть отрасли, да и растёт корнями в более старой математике). А если вы берёте прикладного программиста, то вам надо проверить способность писать простой, ясный, читаемый код правильно решающий задачу и способность учиться и с высокой вероятностью вы получите нужного человека.
Perl?—?это когда-то бывший популярным для веба, но ныне умирающий, язык. Умирающий вполне обоснованно, поэтому хотелось бы слезть с него на что-то массово востребованное (Java).
Проблема
Сменить стек технологий?—?это не такая простая задача, проблема в том, что если у тебя в опыте работы не указан конкретный язык программирования, а то и конкретный фреймворк/библиотека, то ты считаешься неподходящим кандидатом.
Неважно какой у тебя опыт по качеству и количеству, нет разницы способен ты решать задачи?—?главное, чтобы у тебя в резюме был указан опыт работы с инструментами описанными в вакансии.
Т.к. ИТ сфера достаточно новая, то не всем понятно почему это полнейший идиотизм. Для понятной иллюстрации разберём в качестве примера столярные работы. Если вам нужен столяр для изготовления деревянного стола, то вы не будете в вакансии писать что-то вроде “опыт работы железными фальцгебелями с пластмассовыми ручками”. Не исключаю, что вы напишете: “требуется опыт изготовления столов”, это хоть как-то можно понять, но и это не обязательно. Разве у кого-то есть сомнения в том, что хороший столяр может изготовить стол?
Т.е. главная задача?—?найти хорошего столяра, а не столяра владеющего конкретным инструментом и не обязательно столяра выполнявшего аналогичные проекты. Хотя второе как раз может быть ценным, но в приложении к ИТ сфере тут есть определённые сложности?—?обычно требуется изготавливать что-то настолько редкое, что найти человека с таким опытом практически невозможно.
Пример со столяром это конечно лишь аналогия, он облегчает понимание, но не даёт полной картины. Например, выдвигать программистам требования к владению инструментами ещё более глупо чем к столярам, ведь у столяров набор инструментов изменяется предельно медленно, а у программистов инструменты изменяются с космической скоростью. Программирование подразумевает постоянно изучение нового?—?сегодня вы нанимаете человека для работы с одними технологиями, а завтра ему придётся использовать другие. Я хоть и не client-side разработчик, но хорошо помню, что в 2007 году на клиентской стороне популярными библиотеками были jQuery и ExtJS (как сегодня ReactJS и Angular), а в 2017, когда я выступал на конференции The Rolling Scopes #37. Gomel выяснилось что в большом зале всего несколько человек помнят такие названия. И так везде?—?все постоянно внедряют новые технологии и никого почему-то не смущает, что текущие сотрудники не имеют опыта с этими технологиями (а если технология достаточно новая, то может быть, что во всём мире нет людей с опыт работы с ними). Помимо этого можно сказать, что программисты, в отличии от столяров, занимаются сложными задачами в достаточно новой сфере человеческой деятельности, ещё почти нет накопленного и тиражируемого отраслевого опыта. Это столяр может взять учебник или справочник с огромным количеством чертежей различных столов или проконсультироваться у более опытного специалиста, а в ИТ сфере этого нет?—?даже в типовых задачах вроде разработки сайтов нет готовых решений, например популярные и давно существующие CMS нередко в новых версиях переделывают свою архитектуру в поисках хорошего и универсального решения. А если взять чуть менее типовой проект, то будет совсем печально.
Исходя из сказанного можно понять, что опыт работы в аналогичных проектах (в отличии от опыта с теми же инструментами) ценен. Оно и понятно?—?если человек работал в той же сфере, он знает предметную область (имеет в голове её модель), набил какие-то шишки и уже может делать лучше, чем делал в первый раз. Если не ошибаюсь, у Фредерика Брукса было утверждение, что программа становится хорошей, только после того как она переписана три раза, так вот, если вы нанимаете человека, который один раз уже написал, то вам остаётся всего два. Однако, как уже было сказано, найти человека с опытом в таких же проекта очень сложно и дорого. Подумайте сколько в мире людей создававших таск менеджеры (вроде Redmine)? Писавших биллинги хостинга? Создававших мессенджеры? Их опыт очень ценен если вы разрабатываете аналогичный проект, да вот только найти и нанять их предельно сложно по множеству причин.
Кто виноват?
Не знаю, точно не HR’ы, они играют как скажут. Может на самом деле всё нормально в этом мире, а я ненормальный.
Что делать?
Думайте хорошенько прежде чем сформулировать требования к кандидату. Ведь хороший программист должен уметь учиться, а значит способен освоить любые нужные вам технологии. А раз дело не в технологиях, то в чём? Очевидно, что он должен уметь программировать, решать алгоритмические задачи и это нужно проверять давая тестовое задание. Но надо делать это тестовое задание близким с реальной работе?—?если вы нанимаете системного программиста, то вполне допустимо дать ему задание требующее знания алгоритмов и т.п., чтобы проверить не только способность программировать, но и знания накопленных практик (в системном программировании как раз есть некий накопленный опыт, это старейшая часть отрасли, да и растёт корнями в более старой математике). А если вы берёте прикладного программиста, то вам надо проверить способность писать простой, ясный, читаемый код правильно решающий задачу и способность учиться и с высокой вероятностью вы получите нужного человека.