Выбираю•IT помогает в выборе будущей профессии абитуриентам
и студентам, в развитии профессиональных навыков молодым специалистам,
в выборе дополнительных программ обучения и специальных курсов.

О портале Каталог профессий

Поиск по порталу

Программист C/C++

Языки программирования 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. Главная сложность – отобрать действительно подходящих кандидатов. И в этом плане Яндекс мало чем отличается от большинства крупных ИТ-компаний..

Подготовил Игорь Штомпель