Программист C/C++
Мы задали несколько вопросов представителям компаний о том, какие они предъявляют требования к соискателям, которые претендуют на позиции, требующие знания С/C++
1. Какими знаниями и навыками должен обладать программист С/C++?
2. Каков инструментарий программиста C/C++?
3. Каковы требования компании к уровню образования потенциальных сотрудников?
4. Какие требования предъявляются к опыту работы?
5. Есть ли особые требования, которые обусловлены спецификой деятельности компании?
Михаил Сеньков, руководитель команды ReSharper-С++
1. В команде ReSharper-C++ требования к программистам на С++ следующие:
- Для нас главное, чтобы программист понимал концепцию нашего продукта: куда движется продукт, какие фичи будут востребованы в нем, как дол-жна выглядеть та или иная фича и т.д., мог принимать дизайнерские решения по поводу их работы самос-тоятельно. А так как мы занимаемся поддержкой С++ в ReSharper, все они так или иначе связаны с С++.
- Специфика нашей команды еще и в том, что специалист должен хорошо знать язык С++, ориентироваться в стандарте С++, в том, какой смысл несет то или иное правило в языке. Для этого требуется некоторая общая грамотность в языках программирования, да и в программировании в общем. Например, знание истории С++ (как С++ эволюционировал) – плюс. Знание какого-нибудь функционального языка – еще один плюс.
- Мы постоянно ведем неравный бой с тем, что наш ReSharper-C++ тормозит на больших, а иногда и на средних проектах. Это влияет на все уровни абстракции нашего кода – от дизайна высокоуровневых компонент до реализации маленьких вспомогательных функций. Это вынуждает нас придумывать иногда очень изощренные алгоритмы. В общем, сообразительность и знание алгоритмов и структур данных обязательны.
- Желательны, но не обязательны знания в теории трансляции. Хорошо, если программист разбирается в грамматиках, системах типов, алгоритмах на графах. Но если нет, то он быстро этим овладеет в нужных для работы объемах.
2. Мы программируем на С++/СLI, который компилируется в .NET-сборки. Инструментарий соответственно у нас .NET-ный. IDE: Visual Studio, профайлеры: dotTrace и .Net Memory Profiler. Планируем начать использовать собственный же продукт, как только поддержим в нем C++/CLI. Хотелось бы использовать какие-нибудь анализаторы кода вроде PVS-Studio или CppCheck, но они не работают с С++/CLI. Еще мы используем общие инструменты, а именно VCS Mercurial, баг-трекер YouTrack и build server TeamCity.
Думаю, что для программистов на чистом C++ инструментарий опять же зависит от их области и платформы. Для разработчика под embedded Linux и для quantitative-разработчика под Windows специфичные для С++ инструменты не особо пересекаются.
3. Знание С++, знание его стандарта, понимание мотивации в его правилах, все это требует достаточного опыта.
Кроме того, опыт в технологии X помогает представить, какие фичи пользователи X ждут от нашего продукта. Так что здорово, что в нашей команде подобрались люди с опытом в разных областях и технологиях. Тем не менее никаких конкретных требований к опыту у нас нет.
Мария Митина, HR-менеджер, компания Parallels
1. Обязательным является, безусловно, отличное знание этого языка программирования, без каких-либо скидок на «я его быстро выучу».
Есть дополнительные технические требования к навыкам и знаниям разработчиков, но они зависят от того, на какой проект и какое направление работы кандидат претендует. Например, в одной из своих вакансий по разработке облачного продукта мы сейчас ищем в соискателе знание SQL, Python, Perl, опыт работы с хостинговыми продуктами и т.д.
В некоторых кроссплатформенных проектах может потребоваться опыт разработки многопоточных приложений, создания GUI-приложений и т.д. Но не менее важны для нас желание изучать и разрабатывать, аналитические способности, ответственность, самостоятельность, активность, нацеленность на результат, работа в команде.
3. В основном требуются люди со статусом бакалавра, магистра или инженера в области разработки программного обеспечения и информационных технологий, но на некоторых вакансиях опыт работы от пяти лет вполне заменяет наличие такого специализированного высшего образования.
4. У нас практически не встречаются вакансии уровня Junior developer, поэтому на вакансиях уровня Senior developer минимальный опыт работы обычно от трех лет, плюс обязательный опыт работы программирования под используемые в каждом конкретном проекте операционные системы (например, Linux, Windows, MacOS) или мобильные платформы – от двух лет.
5. Наверное, из нетехнических требований – это приличный (хотя бы приличный письменный) английский, потому что компания международная. Из технических – поскольку многие из наших проектов кроссплатформенные, то это умение работать с разными ОС или мобильными платформами.
Анатолий Орлов, заместитель руководителя направления поисковых сервисов, компания Яндекс
1. Для программиста C/C++ обязательно знание основных алгоритмов и структур данных. Наверняка немногие из тех, кто проводит собеседования, наизусть помнят, как вращать красно-черное дерево. Но, чтобы знать ограничения контейнеров вашего любимого языка и уметь выбирать правильные, необходимо понимать, как они устроены.
Разработчик на C/C++ должен уметь написать программу размером в 200 строк так, чтобы она не упала на старте и на итерациях отладки выполняла поставленную задачу. На этих этапах будет видно, понимает ли программист то, что делает.
2. У нас нет требований к инструментарию. В Яндексе своя среда сборки и deployment. Ее все равно придется изучить. Она более-менее прячет тонкости операционных систем, поэтому требования к ОС есть только у совсем «системных вакансий».
Нам все равно, в чем вы набираете код. Если вы привыкли писать в Visual Studio, вам дадут ноут или машину с виндой и лицензию. Если привыкли писать в XCode, вам дадут Mac. Если в какой-то экзотике – говорите, что вам нужно, и у вас это будет.
3. Требования к образованию обычно путают с требованием наличия диплома. Диплом у нас совсем не требуется, а вот знания и навыки из первого пункта почему-то диплом не гарантирует. Поэтому мы их про-веряем.
Есть огромное количество людей, которые при отличном резюме и «опыте» не могут написать работающий код, и есть некоторое количество кандидатов, резюме которых навевает тоску, а сами люди при этом – стоящие профессионалы. Поэтому, чтобы действительно хорошо оце-нить возможности разработчика, без прямого общения не обойтись.
Иногда, чтобы понять, что кандидат не подходит, достаточно десяти минут. Если человека ставят в тупик базовые вопросы о синтаксисе языка, на котором он, по его утверждению, писал несколько лет, дальнейший разговор смысла не имеет.
Именно поэтому чаще всего первый этап серии собеседований в Яндексе обычно проводится через Skype. Отказать человеку, который добирался до офиса час по пробкам, на пятой минуте собеседования – нехорошо с точки зрения вежливости, а еще два часа его мучить, зная, что скорее всего не возьмешь, – с точки зрения этики. Соответственно удаленное интервью позволяет сэкономить время и нервы обеим сторонам.
С вопросами о синтаксисе главное – не перестараться, намеренно пытаясь подловить на каком-нибудь малоизвестном факте. Есть языки программирования с очень длинной и непростой историей, у которых примерно половина их возможностей – это какие-то исторически сложившиеся сложные и ненужные костыли. К таким, например, относится и наш любимый C++. Если вы не разработчик компилятора C++, почти всегда можно найти что-то, чего вы в языке не знаете. Просто непонятно, зачем это могло бы вам понадобиться.
Мы обычно используем заранее подготовленные тесты по языку, в которые входит 10-15 вопросов на знание синтаксиса, возможностей языка, принципов управления памятью и т.д. Чаще всего для успешного прохождения ответов на все вопросы не требуется, достаточно 70-80%. Да и вообще сам тест – это скорее не тест, а набор тем, на которые нужно поговорить.
Нас интересует не сам ответ (мы его и так знаем), а то, почему кандидат его выбрал.
4. Формальных почти никаких. Если вы сами научились хорошо программировать, приходите. Есть много примеров, когда люди без опыта программируют лучше, чем люди с опытом. Тем не менее есть достаточно заметная корреляция: сильные люди часто приходят из сильных компаний, и до Яндекса они занимались чем-то клевым.
5. Главная сложность – отобрать действительно подходящих кандидатов. И в этом плане Яндекс мало чем отличается от большинства крупных ИТ-компаний..
Подготовил Игорь Штомпель