Wednesday, December 25, 2013

Тенденции разработки прикладных программ на языке C#

Здравствуйте, уважаемые читатели моего блога. В этой статье описывается роль разработчика прикладного ПО  и реалии разработки этого самого ПО. А именно: речь пойдет о .Net разработчиках и том, что делает для таких разработчиков компания Microsoft. Последние несколько дней я занимаюсь подготовкой к сертификации MCSD: Windows Store Apps Using C#, с чем более детально можно ознакомиться здесь. В этом году я сделал большую ошибку в том, что не воспользовался возможностью пройти сертификацию за собственный счет, а понадеялся на бесплатную альтернативу, которая, соответственно, не удалась. Поэтому подготовка к сертификации, которую я потратил, изучая WPF, мне не очень то и пригодится, потому что кроме декларативного языка XAML, разработка по WPF и Windows Store App значительно отличается. Впрочем, я не считаю потерянным время, потраченное на изучение заковыристых вопросов по WPF (с которыми при разработке вряд ли когда-либо придется столкнуться), потому что благодаря этим знаниям наконец-то отважился завести свой блог и надеюсь, что этих знания станут вспомогательными для сдачи данной сертификации.
За описанием причины, почему статья не вышла ранее, я отклонился от основной темы. В данной статье речь пойдет о развитии языка C# и технологий, которые доступны на данный момент. В одном из блогов я прочитал знакомое высказывание в адрес языка C#, и хотелось бы процитировать несколько строк с этого блога, чтобы описать свои мысли по данному поводу.
«В последнее время я все чаще и чаще слышу от своих коллег о том, что язык C# двигается куда-то не туда. Новые возможности в нем появляются слишком быстро, мы тут, дескать, предыдущие еще не освоили, а бравые ребята из Редмонда успели новые навыдумывать, да еще и парадигмы новые к нему прикручивают. Фич в языке уже столько, что их ни в одну нормальную голову уже не впихнуть; мало того, что их много, так с некоторыми еще и без спецификации не разобраться. Да и вообще, какой-то второй С++ получается, осталось добавить undefined behavior в десяток мест спецификации и мы получим чудище, аналогичное детищу Страуступа.
И хотя во всех этих высказываниях некоторая доля правды все-таки есть, зачастую такие вопросы возникают из-за отсутствия в голове целостной картины и понимания того, чем является и чем не является язык C#, какие в нем существуют возможности и как они взаимодействуют с другими возможностями языка; какие существуют идиомы и типичные способы использования тех или иных языковых конструкций.» Источник
Пожалуй,  соглашусь и с высказыванием разработчиков по поводу языка, и с автором статьи. Мой переход на язык C# произошёл после знакомства с языком С++. Поэтому этот переход для меня был безболезненным, а благодаря простоте использования языка и его возможностям, последние три года я программирую в основном на C#. Хотя до сих пор просматриваю новости вокруг языка С++ и стараюсь хоть немного на нем писать, чтобы не забыть его, потому как этот язык мне очень нравится. На данный момент для разработки  доступен C# 5.0, и в  скором времени ребята с Microsoft обещают выпустить C# 6.0. О новых возможностях языка C# 6.0 Вы можете посмотреть в статье возможности C# 6.0. Давайте посмотрим на развитие языка в графиках, чтобы сложить картину в целом.
Рассмотрим, какие возможности появились в языке за это время.
Как видим, у языка C# за последние три года случились заметные изменения. С одной стороны, это не может не радовать, но с другой, мы имеем дело со столь частыми модификациями и выходами новых версий языка, что адаптироваться к новым технологиям становится все сложнее и сложнее. Уделяя каждый день самообучению, все равно остаётся чувство значительного отставания от развития языка. С современными технологиями знания одного языка недостаточно для того, чтобы быть успешным специалистом. Кроме языка, нужно знать множество различных технологий, в зависимости от сферы разработки. Вот что необходимо знать разработчику прикладных программ для того, чтобы соответствовать реалиям разработки программ на языке C#:
  • знание TDD/BDD;
  • паттерны проектирования;
  • работа с реляционными базами данных: ADO.NET, EF, BLToolkit, NHibernate;
  • умение работать с WCF;
  • знание одного из подходов для написания прикладных программ на базе Windows Forms/WPF/Windows Store App;
  • знание DI и IoC контейнеров.
  • знание методологий SCRUM, XP, RUP;
  • умение работать с многопоточностью.
Эти пункты сейчас встречаются чаще всего в списке требований к вакансиям. Разработчику, кроме знания языка, нужно оставаться в курсе постоянных изменений и улучшений, чтобы быть специалистом в своей области. В этом плане особенно жалко ребят, которые разрабатывают веб-приложения и которым нужно поддерживать IE ранних версий, начиная с версии 5/6. Им приходится с каждой версией делать заплатку в коде, потому что в Microsoft в этом плане не особо переживают о том, нормально ли будет работать обратная совместимость. Поскольку с последними фразами по поводу заплаток мне задали вопрос о том, зачем вообще поддерживать такие ранние версии IE, опишу данный момент подробнее. Если Вы веб разработчик и у Вас не стоит задача поддержки столь ранних версий IE, то Вам, в принципе, нечего особо заморачиваться по этому поводу, так как начиная с версии IE 8/9, компания Microsoft начинает понемногу приводить к общему виду нужный код. Но и там есть множество проблем. Но об этом лучше расскажет статья на habrahabr, в которой расписаны такие нюансы: Почему Microsoft Internet Explorer 11 — худшее, что могло случиться с нами. Думаю, после прочтения данной статьи вопросы сразу отпадут. Чтобы бросить свой камень в огород Microsoft, приведу пример кода для подписки на события в HTML для некоторых версий IE.
if (!_checkbox.addEventListener) {
    _checkbox.attachEvent("onclick", setCheckedValues);
}
else {
    _checkbox.addEventListener("click", setCheckedValues, false);
}
Думаю, данный код не нуждается в комментариях. 
Также хотелось бы отметить, что сериализация объектов в .NET Framework 2.0-4.0 – и .NET Framework 4.5 работает по-разному. То же самое наблюдается относительно работоспособности программ, написанных на .NET Framework 2.0 в ОСWindows 8 или Windows 8.1. Если у Вас некоторые части программы написаны на втором фреймворке, будьте готовы к тому, что в последних ОС они не заработают. Взглянем по рисункам на ситуацию на рынке разработки прикладных программ.
На рисунках не было упомянуто о разработке под мобильные телефоны и веб-разработку. Охарактеризуем кратко ситуацию в данной сфере. Разработка приложений под ОС Windows Phone ведётся для версии 8.0. Для версии Windows Phone 7.0 разработка находится в стадии поддержки, и где-то в начале 2014 года их поддержка будет прекращена. За последние 3 года компания Microsoft выпустила две ОС для мобильных телефонов. Первая версия Windows Phone 7 вышла 11 октября 2010 года, в России телефоны начали продаваться с 16 сентября 2011 года (источник). За время существования WP7 было официально выпущено два обновления 7.5 и 7.8.

На данный момент поддержка WP7 официально прекращена и перехода на версию WP8 не планируется. Об этом официально подтвердила компания Microsoft (источник). По сути, на рынки Украины и России компания Microsoft выделила времени чуть больше года для новой ОС и тут же ее сама похоронила. Будет не удивительно, если новая ОС будет выходить каждый год. Для веб-приложений ситуация также очень быстро развивается. Единственное отличие в том, что в основном в плане отображения дизайнерам больше всего приходится бороться с капризами IE. С выходом .NET Framework 4.5 сейчас доступна разработка веб-приложений на ASP. NET MVC5, а также Web API. В плане web-разработки политика Microsoft не настолько агрессивна, и за этот рынок можно бороться. Веб-разработчикам в этом плане повезло намного больше, чем разработчикам прикладных программ и программ под мобильные телефоны и планшеты. Сейчас компания Microsoft каждый год заполняет рынок новыми инновационными решениями, которые, естественно, нужно продать как можно дороже. Ранее политика Microsoft по этому поводу была менее агрессивна. Сейчас же компания диктует свои правила для рынка ПО. Выглядит это приблизительно так: «У Вас негде хранить свои данные? Берите наше облачное решение. За определенную сумму мы предоставим Вам облако в использование, где Вы сможете разворачивать Ваши приложения». Не очень многие повелись, вероятно, на такое столь "щедрое" предложение, так как есть много альтернатив. Поэтому Microsoft пошла на другой шаг. Для мобильных телефонов была разработана и анонсирована ОС Windows Phone 7, а также компания Microsoft предоставила свой магазин для продажи приложений, написанных Вами для Windows Phone. Плюс в том, что за продажу своих программ Вы не платите сразу деньги; по сути, данная компания с Вас денег не берет, она берет свой процент с продаж, что есть неплохим брокерским бизнесом. Сейчас появилась новая фишка, презентованная Microsoft, - Windows Store, в котором можно продавать свои приложения для Windows 8 (условия продажи такие же, как в Windows Phone Store). Согласно последней информации, планируется объединение магазинов для Windows Store App и WP8-приложений. "Теперь всего за 19$ вы сможете писать сразу туда и туда".

Итоги

В последнее время компания Microsoft выпускает все больше и больше новых и полезных инструментов для разработки ПО. Но при этом они создают разработчикам условия, при которых они не могут использовать эти возможности. Как только выйдет C# 6.0, компания Microsoft также выпустит новую студию, например, Visual Studio 2014, и новую ОС, например, Windows 9, в которой мы сможем использовать новые возможности языка, так как эта система будет полностью с поддержкой Windows Runtime или WinRT, и в которой не будет обратной совместимости со старыми версиями .NET Framework. И то, что мы сейчас разрабатываем, через полгода не будет иметь ценности и актуальности. Но если Вы выбрали дорогу .Net разработчика, Вам нужно с этим либо мирится, либо переходить на другой язык разработки ПО и на другую ОС. Такие сейчас условия, которые нам диктует Microsoft. Поэтому адаптируемся и становимся специалистами в данной области. 

No comments:

Post a Comment