Каким должен быть .NET-разработчик?

Артем Бухонов, разработчик в командах ReSharper и Rider в JetBrains

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

Думаю, что язык программирования в данном вопросе можно вообще опустить. Хороший разработчик (неважно, на каком языке он пишет) в первую очередь должен иметь общую «программистскую» культуру: иметь хорошее представление об основных алгоритмах и структурах данных, достаточно хорошо понимать, какие из них используются в реализациях стандартных библиотек, уметь находить простые и оптимальные решения задач, анализировать свои и чужие решения и т.д. Очень важный скилл – писать красивый и понятный код, ведь ваш код будете читать не только вы. Более того, кодовая база в наших проектах постоянно подвергается рефакторингу и улучшению, и плохое качество этого кода будет сильно замедлять этот процесс. Следующее немаловажное умение – читать и понимать чужой код, и довольно часто этот код не из наших проектов и даже не на C#/Java. Крупные продукты JetBrains, такие как ReSharper, IDEA, обеспечивают поддержку множества технологий, с которыми работает огромное количество программистов по всему миру. В большинстве случаев, чтобы сделать действительно качественную поддержку конкретной технологии/фреймворка, необходимо изучить ее устройство изнутри, самый верный способ это сделать – читать исходный код. Бывают случаи, когда фреймворк не опенсорсный, тогда приходится изворачиваться еще больше – исследовать библиотеки с помощью декомпилятора.

Если разработчик умеет писать многопоточный код и, самое главное, потом действительно понимает, как он работает, это будет огромным плюсом в его списке навыков. Я встречал много ситуаций, когда плохо написанный многопоточный код становился источником серьезных проблем, на отладку которых уходила уйма времени.

Что касается непосредственно разработки на .NET: разработчик должен хорошо знать сам язык C#, уверенно пользоваться стандартной библиотекой, уметь писать тесты с использованием какого-либо тестового фреймворка (xUnit/nUnit). Большим плюсом будет знание особенностей тех или иных конструкций C# с точки зрения производительности: например, понимать, во что компилируется linq, yield, async/await, представлять, в каких случаях произойдет boxing, который может привести к memory traffic, и т.д.

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

Лидирующая IDE для .NET-разработки – это, несомненно, Visual Studio. Конечно же, любому разработчику на .NET я посоветую установить ReSharper, который сильно упрощает как написание, так и исследование кода и библиотек, у которых отсутствуют исходники (благодаря встроенному в ReSharper декомпилятору). ReSharper избавляет разработчика от множества рутинных операций, позволяя больше сосредоточиться на самой задаче. Есть и продукты-аналоги, такие как CodeRush, JustCode, тут уж кому что больше нравится.

В последнее время набирают популярность альтернативные IDE: VS Code, Xamarin Studio и, конечно же, новая среда разработки от нас – Rider, уже доступная для любого желающего в рамках Early Access Program.

Ни один проект, даже если это хобби-проект одного разработчика, не обходится без системы контроля версий. Абсолютное численное преимущество за Git – можно сказать, он стал стандартом в нынешнее время. Для своих проектов я использую Mercurial.

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

Формальных требований к образованию у нас нет. Важны реальные знания и умения соискателя.

Какие требования предъявляются к опыту работы?

На должность Junior-разработчика может претендовать студент старших курсов. JetBrains достаточно активно сотрудничает с университетами, предлагая программы практик и стажировок. Немало нынешних сотрудников попали в компанию как раз таким образом.

Если говорить об уровнях выше, Middle, Senior, то здесь я не возьмусь озвучить какой-либо конкретный стаж и не думаю, что он является сильно весомым фактором. Многое зависит от самого человека, от проекта и от команды.

Есть ли специфические требования, которые обусловлены спецификой деятельности компании?

Требований скорее всего нет – талантливый разработчик сможет разобраться, в общем-то, в любой технологии, даже если он раньше не слышал о ней. Есть набор знаний и умений, которые дадут преимущество при прохождении собеседования.

JetBrains занимается разработкой кроссплатформенных IDE с огромным количеством фич, поэтому нам требуются знания из многих областей: хорошо разбираетесь в компиляторах – плюс, детально знаете устройство систем контроля версий – плюс, имеете опыт написания кроссплатформенного кода под MS.NET и Mono – плюс, и т.д. Все подобные скиллы с большой вероятностью пригодятся в наших проектах, и тому есть много примеров.

Помимо этого, у нас есть большой интерес рассматривать кандидатов даже из областей, никак не связанных с разработкой IDE. Объяснение этому следующее: большое количество фич, которые мы разрабатываем в тех или иных продуктах, нам не удается обкатать самим в полной мере просто потому, что мы не используем их при разработке своих продуктов. Например, разработчик, имеющий очень хороший опыт разработки игр на Unity, будет сильно полезен в проекте Rider, т.к. будет иметь лучшее видение поддержки Unity в нашей IDE, чем те, кто этим никогда не занимались.

Большим плюсом будет опыт разработки плагинов для какого-либо из наших продуктов.

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