Каким должен быть разработчик C++?

Михаил Сеньков, руководитель команды ReSharper-С++ в компании JetBrains.

Какими знаниями и навыками должен обладать программист C++?

Для нас главное, чтобы программист понимал концепцию нашего продукта: куда движется продукт, какие фичи будут востребованы в нем, как дол-жна выглядеть та или иная фича и т.д., мог принимать дизайнерские решения по поводу их работы самос-тоятельно. А так как мы занимаемся поддержкой С++ в ReSharper, все они так или иначе связаны с С++.
Специфика нашей команды еще и в том, что специалист должен хорошо знать язык С++, ориентироваться в стандарте С++, в том, какой смысл несет то или иное правило в языке. Для этого требуется некоторая общая грамотность в языках программирования, да и в программировании в общем. Например, знание истории С++ (как С++ эволюционировал) – плюс. Знание какого-нибудь функционального языка – еще один плюс.

Мы постоянно ведем неравный бой с тем, что наш ReSharper-C++ тормозит на больших, а иногда и на средних проектах. Это влияет на все уровни абстракции нашего кода – от дизайна высокоуровневых компонент до реализации маленьких вспомогательных функций. Это вынуждает нас придумывать иногда очень изощренные алгоритмы. В общем, сообразительность и знание алгоритмов и структур данных обязательны.
Желательны, но не обязательны знания в теории трансляции. Хорошо, если программист разбирается в грамматиках, системах типов, алгоритмах на графах. Но если нет, то он быстро этим овладеет в нужных для работы объемах.

Каков инструментарий программиста C/C++?

Мы программируем на С++/С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 и для программиста в области финансов под Windows специфичные для С++ инструменты не особо пересекаются.

Каковы требования компании к уровню образования потенциальных сотрудников?

Знание С++, знание его стандарта, понимание мотивации в его правилах, все это требует достаточного опыта. Кроме того, опыт в технологии X помогает представить, какие фичи пользователи X ждут от нашего продукта. Так что здорово, что в нашей команде подобрались люди с опытом в разных областях и технологиях. Тем не менее никаких конкретных требований к опыту у нас нет.

Полная версия интервью опубликована на портале Системный администратор.