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

Портал издательского дома "ПОЛОЖЕВЕЦ и ПАРТНЕРЫ"
---------------------------------------------------------------------------------
Выбираю•IT помогает в выборе будущей профессии абитуриентам
и студентам, в развитии профессиональных навыков молодым специалистам,
в выборе дополнительных программ обучения и специальных курсов.

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

Программист на C#

Язык программирования C# используется для создания настольных приложений для операционной системы Windows и в портировании приложений на Linux.

Мы попросили представителей компаний рассказать о знаниях, навыках, опыте, актуальных для программиста на C# сегодня.

1. Программист на C#: какими знаниями и навыками он должен обладать?

2. Инструментарий программиста на C#?

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

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

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

Тимур Гарифзянов, руководитель команды Windows Phone, лондонский офис Badoo

1. Я не могу говорить за всех программистов, расскажу на примере нашей команды.

Программист С# должен писать код быстро, читаемо и производительно. Важно, чтобы он понимал, чем хорошая архитектура отличается от плохой. И почему иногда идеальная архитектура – это не идеальное решение.

Мы работаем с Windows Phone и UWP. Нам важно, чтобы программист понимал стандартную библиотеку Silverlight. Кроме этого, мы используем набор контролов Telerik. UI – это важнейшая часть нашего приложения, поэтому важно знать, как сделать красиво, но и не потерять в производительности. Программисту С#, безусловно, необходимо разбираться в инструментах (их я описал в пункте 2), так как это помогает при решении задач.

2. Мы используем: Visual Studio 2015 – для разработки, Blend – для верстки дизайна, Xaml Spy – для случаев, когда у нас есть проблемы, которые невозможно понять, и Resharper, потому что на данный момент это must have для разработчика .NET/C#.

В компании мы используем: Git – для хранения кода, TeamCity – для CI, Atlassian JIRA – для управления задачами.

3. В целом образование значения не имеет, но в каждой команде – свои правила. Есть отделы, в которых наличие профильного диплома на собеседовании играет важную роль (например, команда Платформы).

Но в нашей команде Windows Phone мы не предъявляем требований к диплому. Нам важно, чтобы человек понимал и умел использовать технологии. Постоянно занимался самообразованием, интересовался конференциями. Мы со своей стороны стараемся это поддерживать: оплачиваем участие, выделяем для этого время.

4. Нам важно, чтобы человек был в курсе последних изменений в языке и технологиях, интересовался трендами. Но при это имел глубокие познание в основах C# и .NET. Мы в Badoo часто экспериментируем, поэтому человек должен уметь подстраиваться под динамику наших процессов, быструю разработку и запуски фич.

5. Нам важно, чтобы человек знал про потоки (UI thread, Composition thread, ThreadPool), оптимизацию контролов, MVVM. Умел работать с памятью. Кроме технических знаний, нам важно, чтобы человек был гибким в команде, но умел одновременно думать о качестве решения и запускать новые фичи в сжатые сроки.

И очень важно: если человек привык работать неспешно, закрывая одну задачу долгое время, то это не про нас. Мы любим стартаперский дух и стараемся принимать в команду таких же, как мы.

Виктор Теренюк, директор департамента разработки АО «РТ Лабс»

1. Программист на C# должен быть прежде всего хорошим разработчиком. Знать основные подходы к разработке приложений, понимать архитектурные шаблоны и методологии проектирования, владеть базовыми алгоритмами, которые применяются при создании прикладного программного обеспечения. Эти знания являются безусловным базисом. После проектирования кода возникает потребность в его реализации, и тут уже знания разработчика должны опираться на понимание программных платформ и фреймворков, таких как .NET, Mono, различных ORM и применяемых шаблонов разработки.

2. Инструментарий разработчика может быть любой – это прерогатива выбора конкретного специалиста. При этом нужно иметь в виду, что при работе над большим проектом, в котором участвует географически распределенная команда, подобный подход может тормозить ее взаимодействие. В большинстве проектов используется MS VisualStudio как интегрированная среда разработки, Microsoft TFS – для управления задачами разработки и тестирования в проекте, ReSharper – для оптимизации кода, MS Test manager (MTM) и иногда TestLink – для создания и прогона тестовых сценариев и контроля качества разработки.

3. Требования к образованию сотрудника стандартные – профильное высшее образование. Однако при выборе специалиста для нас более важно знание стека разработки .NET, понимание архитектуры SQL и noSQL БД.

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

5. Специфических требований при наборе мы не предъявляем. В процессе работы разработчику потребуется познакомиться с терминологией ГОСТ 34 и 19, с системами и средствами информационной безопасности, распределенной разработкой и контролем качества программных приложений. Однако, как показывает опыт, это не вызывает проблем у квалифицированных разработчиков ПО.

Александр Гусенко, руководитель отдела разработки направления «Здравоохранение» ИТ-компании «Нетрика»

1. Совокупность знаний и навыков диктует специализация разработчика. Это могут быть знание MVC для фронтенда или WCF для бэкенда, но, разумеется, у программистов должны быть развиты ключевые компетенции C# и серьезные навыки OOP, OOD и DDD.

Для нашей компании также крайне важно следующее:

  • уверенное знание XSD/XML, XPath/XQuery, JSON;
  • владение EntityFramework (6,7) и MicroORM Dapper;
  • знание PL/pgSQL, T-SQL.

2. Visual Studio 2015, ReSharper, pgAdmin, SQL Server Management Studio.

3. Общая технологическая подкованность и знание жизненных циклов ПО, понимание и опыт разработки приложений Enterprise-уровня, понимание и опыт Continuos Integration, симпатии к микросервисной архитектуре и любовь к Agile.

4. В нашей компании два основных требования: глубокое знание C# и опыт разработки клиент-серверных приложений.

5. Специфика нашей компании – оказание услуг в сфере информатизации госсектора. Нашим программистам также часто приходится иметь дело с .NET Core, ASP.NET Core; WCF SOAP; MSMQ (Microsoft Message Queuing), RabbitMQ или аналогичные решения; WebAPI, NancyFX.

Андрей Кузекин, руководитель группы разработки ГК InfoWatch

1. Современный успешный С#-программист – это «универсальный» технический специалист, умеющий решать сложные ИТ-задачи. Естественно, он должен хорошо владеть синтаксисом языка С# и следить за его развитием. Язык С# и платформа .NET Framework активно развиваются, появляется возможность выразить простой строчкой сложную идею.

Кроме этого, нужно владеть различными методиками и подходами к проектированию программ, поэтому объектное ориентированное программирование, а также паттерны проектирования являются частью арсенала современного разработчика.

Важная область деятельности современного С#-программиста – работа с базами данных. Хороший разработчик должен быть знаком с современными СУБД и принципами их работы, а отличный разработчик должен разбираться в тонкостях эффективного программирования под конкретную СУБД. Ну, и последний важный навык – это умение разбирать и сопровождать «чужой» код. Современные проекты длятся несколько лет, реализуют их целые команды, поэтому каждый столкнется с «не своим» кодом. Уметь понять и развить чужой код, т.е. чужую идею, – важный навык современного разработчика.

2. Для C#-программиста самым важным инструментом является Microsoft Visual Studio, и этим инструментом он должен владеть в совершенстве. Эта среда позволяет реализовать весь цикл разработки на С# – от проектирования с использованием UML-схем до поддержки модульного тестирования (Unit Test). Правильное применение возможностей данной среды – залог надежной работы С#-программы. Второй важный инструмент – это ReSharper, он позволяет поддерживать кодовую базу в состоянии готовности к сопровождению командой разработчиков. В-третьих, не нужно забывать и о средствах работы с базами данных: их эффективное использование позволяет создавать «быстрые» C#-программы. Средства профилирования работы баз данных позволяют разработчику находить и анализировать «узкие» места в работе БД. В InfoWatch мы используем MS SQL Management Studio, pgBadger, а также AWR-отчеты Oracle.

3. При приеме на работу новых С#-программистов мы отдаем предпочтение выпускникам технических вузов. Решение современных ИТ-задач требует определенного способа мышления, у кандидата должны быть развиты как аналитические способности, так и навыки реализации сложных систем.

4. Опыт важен для кандидатов, претендующих на руководящие позиции. Такие люди обязаны знать язык программирования и платформу, уметь писать и развивать высоконагруженные системы. Старшие специалисты должны уметь «формализовывать» задачи. Кроме этого, у них должен быть опыт использования современных инструментов разработки.

Для кандидатов-стажеров важно в первую очередь желание развиваться. При этом, конечно, они должны владеть базовыми навыками и понимать, для чего вообще нужны СУБД. Основное, на что мы в InfoWatch обращаем внимание при приеме на работу,– это знания, умения и навыки кандидата, а также его специализация – что именно разрабатывал: интерфейс, бизнес-логику и т.п. Если опыта работы у кандидата мало или нет совсем, трудоустроиться в InfoWatch ему помогут упоминание в резюме профессиональных дисциплин, названия курсовых и дипломных работ с указанием применяемых технологий.

5. Создаваемый нами продукт InfoWatch Traffic Monitor относится к классу Enterprise-решений. Т.е. программа должна работать в режиме «24х7»: 24 часа в сутки, 7 дней в неделю, выдерживая нагрузку от тысячи клиентов. Написание подобных программ требует определенной «дисциплины» программирования, должны использоваться только надежные, проверенные и эффективные методы. Соответственно, разработчик должен знать эти методы и уметь применять их на практике. Кроме того, InfoWatch работает в области информационной безопасности (ИБ), поэтому разрабатываемая программа должна уметь противостоять информационным атакам. Это тоже требует наличия определенных навыков программирования. В нашем случае важно разбираться в криптографии и современных криптографических протоколах, а также быть знакомым с типовыми атаками на C#-код и платформу .NET.

Ольга Неприкова, старший HR-менеджер группы компаний РЕЛЭКС

1. Конечно, это уверенное владение языком C# и технологией .NET, пригодится знание ASP.NET MVC, Azure, Xamarin, WinForms, WPF, желателен опыт работы с БД с использованием ORM (например, Entity Framework) или ADO.NET. Не лишним будет понимание наиболее часто применяемых паттернов проектирования, принципов SOLID, DRY, KISS, также будет плюсом опыт использования модульного тестирования (nUnit, xUnit, MsUnit) и TDD. Более детальные требования определяются конкретным проектом, в который требуется специалист.

2. MS Visual Studio, системы контроля версий – SVN, GIT, TFS, например. Голову тоже желательно включать. Мы ждем от сотрудника умения управлять своим временем и сосредоточенности на работе.

3. При поиске сотрудника мы, конечно, обращаем внимание на наличие диплома. Однако немаловажное значение имеет вуз, который закончил или заканчивает кандидат. Например, если мы говорим о Воронеже, то первое место в нашем регионе заслуженно занимают ВГУ и факультеты ПММ и ФКН. Хотя у нас есть талантливые сотрудники и из других вузов с других факультетов. Например, наша практика показывает, что из выпускников физического факультета ВГУ получаются креативные программисты. Как видите, наличие профильного диплома не всегда является определяющим фактором.

4. Опыт имеет огромное значение. Теоретические знания, которые можно почерпнуть из книг или курсов, не заменят практического опыта, который человек получает во время работы над реальным проектом. Поэтому необходимы знания не только технологий, языков и инструментов, но и платформ, предметной области, которые можно получить только с опытом. Тем не менее мы постоянно берем на работу начинающих специалистов, даже студентов, потому что понимаем, что можем дать им этот необходимый опыт и со временем вырастить ценных специалистов. В нашей компании есть много примеров того, как специалист пришел на позицию Junior и вырос до руководителя.

5. У нас нет каких-либо специфических требований. Бывает, что для зарубежных проектов требования к одному и тому же специалисту отличаются, при этом у американских заказчиков одни потребности, а у европейских – другие. Но в целом наши требования не отличаются от остальных компаний в нашей сфере. Отдельно стоит отметить так называемые Soft Skills: умение работать в команде, находить общий язык с коллегами, заказчиками, желание развиваться и осваивать новые технологии, языки и инструменты.

Максим Шияновский, заместитель генерального директора по разработке, Positive Technologies

1. Разработчик на C# должен в первую очередь достаточно глубоко понимать архитектуру .NET Framework. Кроме того, он, безусловно, должен обладать пакетом знаний, стандартным для индустрии разработки, – знать и уметь применять паттерны ООП (потому что это язык общения разработчиков), владеть принципами solid, иметь опыт работы с различными современными системами хранения данных и понимать область их применения, понимать релизный цикл продукта и знать Git-Flow. Как любой разработчик, он также должен иметь навыки тестирования своего кода и уметь автоматизировать процесс своей работы.

2. Прежде всего Microsoft Visual Studio – для C#-разработчика в этой части альтернатив практически нет. Это основной инструмент. ReSharper – если чего-то нет в студии, то вы найдете это здесь. Обязательно один из профайлеров – либо студийный, либо ReSharper. WinDbg будет весьма полезен при решении сложных проблем.

Ну и, конечно, в арсенале должны быть системы контроля версий и управления требованиями – здесь не важно, какие именно, – перестроиться можно быстро, – но важно понимание принципов.

3. Обычно мы требуем высшее образование, но нельзя сказать, что требование железно-обязательное. Тем не менее статистически более успешны кандидаты с высшим профильным образованием.

4. NET-технология объемная, и для успешного ее освоения необходимо три – пять лет практической работы. Специфических требований обычно нет, но от претендентов требуется изрядное упорство, для того чтобы эти объемные знания не были мертвым грузом.

5. Специфика нашей компании в том, что продукты, как правило, работают при высокой нагрузке и к ним предъявляются требования по высокой доступности. Это накладывает определенный отпечаток – мы приветствуем понимание трендов, знание смежных технологий. Например, Hadoop.

Есть также специфика с платформой – мы портируем код некоторых наших сервисов на .NET Core и запускаем их на Linux. Сейчас эта технология находится в самом начале своего развития. И последнее, наверное, – это умение использовать сторонние модули, анализировать их сильные и слабые стороны.

Артем Бухонов, разработчик в командах ReSharper и Rider в JetBrainsппы компаний РЕЛЭКС

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

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

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

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

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

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

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

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

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

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

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

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

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


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

 
Проект Издательского дома "Положевец и Партнеры"

По вопросам партнерства обращайтесь по электронной почте chooseit@samag.ru

Телефон: +7 499 277-12-45