sonyps4.ru

Net программирование. Введение в Microsoft.NET для начинающих

ювелир 11 мая 2010 в 18:33

.NET для начинающих. Что такое среда.NET и как она работает?

  • Чулан *

Вопрос, освещённый в данной статье, будет полезен для понимания всей структуры программирования на.net в целом, независимо от языка. Будь то C#, Visual Basiс или J#. Статья ориентирована на начинающих программистов, только осваивающих программирование на.NET.

Что такое.NET?


.Net (читается как «дот нет») – это кросплатформенная среда выполнения приложений. Проще говоря – это то, что позволяет запускаться нашим приложениям в системе Microsoft Windows. Кросплатформенная – означает, что созданное приложение будет работать на всех процессорах и на всех операционных системах семейства Windows (за исключением самых ранних).
Более того! Те, кто уже имел дело с программированием, например, на С++, знает что под процессоры на разной платформе приходится «пересобирать» программы. Например программа, скомпилированная для x64 не будет корректно работать на x86, а программа, собранная для x86 не сможет полностью показать свой потенциал работы на x64 системе.
Тут нам на помощь приходит.Net framework.
.Net Framework – это набор уже скомпилированных библиотек, откуда берутся методы и функции для запуска и разработки приложений. В разработке, на деле, нам придётся просто вызвать уже готовую функцию для того чтобы она заработала. Большинство методов и функций, необходимых программисту, уже скомпилировано и лежит в.net framework внутри системы. И каждая библиотека с функциями лежит в двух вариантах – для x86 и для x64, так что о «пересборке» программы под разные платформы можно забыть! Созданная вами программа будет показывать свой полный потенциал на любой аппаратной («железе») и программной (операционной системе) платформе.

Как это всё работает?


Вспомним, что такое процесс компиляции – это перевод вашего кода, понятного человеку, в бинарный код, понятный компьютеру.

В программировании на.net компиляция и запуск приложений происходит следующим образом:
Код из любого языка преобразовывается в код, написанный на общем языке (Common intermediate language или CIL). Этот язык является языком низшего уровня, похожего по синтаксису на язык ассемблер.
После, этот код передаётся так называемой исполняющей среде (Common language runtime или CLR), которая берёт функции и методы из.net Framework
После этого конечный результат передаётся на процессор и выполняется программа.

CLR – это некая «виртуальная машина», которая собственно и управляет нашими приложениями, написанными для.net.
В ней есть такая занятная штука, как сборщик мусора (Garbage collector). Он подчищает всё ненужное, оставленное программой в оперативной памяти во время выполнения самой программы. То есть, если мы использовали, например, переменную всего один раз в программе, то после обращения к этой переменной, если она больше нигде не задействована – автоматический сборщик мусора её удаляет из оперативной памяти. Это абсолютно безопасно, а главное – это даёт огромный прирост в производительности масштабных и ресурсоёмких приложений. Это очень удобно, ведь в других языках, например в С++ чтобы достичь максимальной скорости работы приложения необходимо вручную удалять обьекты, а в этом случае нужно просчитать когда они не будут востребованы, чтобы их можно было безопасно удалить, чтобы не вызвать ошибку или крах программы.

Также такая схема сборки приложений очень удобна и тем, что происходит «компиляция на лету». То есть не компилируя программу, среда разработки может указать Вам на Ваши ошибки, а это заметно ускоряет процесс разработки.

Что же выделяет.net программирование среди всех?


Первое – это конечно-же относительная лёгкость освоения и работы с языками, так как большинство.Net языков – языки высшего уровня.
Быстрота выполнения конечных исполняемых файлов.
Приложения, написанные на.net сами чистят себя в оперативной памяти, благодаря автоматическому сборщику мусора.
Приложение нужно «собрать» всего один раз, и оно будет работать на всех платформах процессоров и операционных системах семейства Windows. В это же время приложение будет показывать весь свой потенциал скорости, который возможен на определённых процессорах.

Теги: .net, программирование, основы, теория

  • Разработка веб-сайтов
  • Уверен, что разработчики часто задаются вопросом, какие их профессиональные навыки компании ценят больше всего. К примеру, при смене работы, или когда внезапно обнаруживают, что работают в компании так давно, что окружающий мир, скорее всего, ушел далеко вперед.

    Этой публикацией я начинаю цикл аналитических статей по анализу необходимых и востребованных навыков для различных специализаций на российском и зарубежном IT-рынке.


    Как родилось это исследование?

    Участвуя в подборе как начинающих, так и опытных разработчиков, постепенно стал замечать, что многие соискатели не обладают основными необходимыми навыками. И речь не про специфику конкретной предметной области, а про основные знания разработки приложений на платформе.NET. Такие собеседования обычно завершаются обсуждением с коллегами за чашкой чая самых острых моментов собеседования кандидата. Но все же интереснее разобраться, почему разработчики не осваивают те или иные навыки, несмотря на достаточный стаж работы, и каким образом можно построить развитие на их месте?

    В каком направлении развиваться: какие навыки и как приобретать?

    Итак, представим себя на месте начинающего разработчика Васи. 2 года работы программистом позволили Василию узнать основы.NET Framework, научиться работать с SQL Server и даже почитать про устройство сборщика мусора. Базовые знания и навыки, позволяющие создавать.NET-приложения, на месте – чем не.NET-разработчик? Но периодически Василий думает, что пора бы уже двигаться дальше, не всегда же оставаться Junior-разработчиком. Как дальше расти? Какие есть варианты?

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

    Какие варианты есть у Васи?

    Вполне логично поискать информацию о том, какие навыки сейчас актуальны в IT и как их прокачать на каком-нибудь профильном Интернет-ресурсе. Что сразу приходит в голову: , RSDN , SQL.ru ? Но нет, эти ресурсы скорее расширяют наш кругозор, чем дают нам информацию о том, какие навыки сейчас востребованы. Есть и другие ресурсы, которые посвящены обучению навыкам, к примеру: Pluralsight и Coursera – если бы Вася точно знал, что он хочет изучить, эти ресурсы помогли бы ему. И, конечно, не стоит забывать про профессиональные конференции. Они также полезны как для расширения кругозора, так и развития конкретных навыков, но все равно не могут ответить на вопрос Василия: в каком направлении ему развиваться? Итого, мы имеем множество ресурсов, которые позволяют прокачать те или иные навыки, но, к сожалению, не дают ответа на вопросы: в каком русле развиваться и какой набор навыков развивать? Вспомните, как вы отвечали на эти вопросы: интуитивно?

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

    Востребованные навыки в вакансиях работодателей

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

    В наше время существует огромное количество публичных ресурсов, на которых работодатели размещают вакансии, обозначая требования к соискателям: конкретный перечень требуемых знаний и навыков. Так за чем же тогда дело встало? Нужно просто проанализировать эту базу и в результате у нас, по идее, будет ответ на наш вопрос. В качестве источника информации по вакансиям сразу же был выбран HeadHunter, как наиболее популярный ресурс для размещения вакансий IT-компаний. Мы ввели в поисковую строку запрос .net разработчик и увидели нескольких сотен результатов. В этот момент, честно говоря, наш пыл угас: объем ручного труда превысил степень нашего энтузиазма.

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

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

    Рейтинг востребованности навыков

    Выборка для анализа составила 300 актуальных вакансий. Из описания каждой вакансии был извлечен перечень требуемых навыков, и по каждому из полученных навыков была собрана следующая статистика:
    • Количество упоминаний навыка в анализируемых вакансиях, и, соответственно, процентное соотношение количества упоминаний навыка в вакансиях и общего количества рассмотренных вакансий. По сути, этот показатель и считается уровнем востребованности или популярности навыка.
    • Средний уровень заработной платы среди всех вакансий, в которых упоминался этот навык.
    Все полученные навыки сгруппированы в три категории: hard skills, soft skills и technology – чтобы не сравнивать навыки между этими категориями, так как это сравнение выглядело бы странным и бесполезным.

    Рейтинг технологий

    В технологиях с огромным отрывом побеждает ASP.NET MVC: требование владения данной технологией встречалось в 3 из 4-х вакансий. Мне, как бывшему desktop-разработчику, было откровением, что все технологии desktop UI проигрывают ASP.NET MVC в 6 раз, а в сумме WPF и Windows Forms проигрывают в 2,5 раза. Если верить статистике, судьба разработки настольных интерфейсов видится достаточно туманной.

    Отметил я еще один интересный факт: WPF и Windows Forms имеют одинаковый уровень востребованности – примерно 15%. Сначала я подумал, что это связано с переводом приложений с устаревающей технологии Windows Forms на WPF, но, оказалось, что данные навыки требовались в одних и тех же вакансиях только в 2% случаев, то есть одни компании до сих пор используют Windows Forms, а другие компании уже применяют WPF при разработке своих приложений.

    На втором месте по-прежнему остается «must have» навык работы с SQL Server и использования Transact-SQL в каждой второй вакансии. В трети вакансий требуется знание WCF, XML и XSLT. В каждой четвертой – LINQ. Ну, и завершает список – EF. У меня есть гипотеза о том, почему EF в нижней части списка, а SQL Server в верхней: рынок ORM до сих пор достаточно раздробленный – многие все еще продолжают собственные ORM писать, а также популярны альтернативные платформы с хорошей историей вроде NHibernate.

    Если смотреть на статистику по уровню заработной платы, то наиболее высокооплачиваемыми вакансиями являются те, в которых упоминаются HTML, CSS, AJAX, jQuery и JavaScript (иные платформы JavaScript упоминались в вакансиях, но редко, а потому не попали в топ-лист).

    Рейтинг профессиональных навыков

    По-прежнему у нас наиболее востребован навык объектно-ориентированного программирования. Владение ООП требуется в каждой четвертой вакансии.

    Меня немного удивило, что после навыка ООП сразу же идет навык анализа требований. Сомневаюсь, что работодатели подразумевают именно написание требований, скорее всего, от разработчика требуется активное участие в процессе анализа требований в том или ином виде. Тем не менее, видна тенденция того, что от разработчика требуют больше, чем просто написание кода.

    Стоит также заметить, что навык «архитектура высоконагруженных систем» прорывается уже в топ 10 навыков, что несомненно связано с существующей общеотраслевой тенденцией. При этом вакансии, в которых упоминается данный навык, в среднем имеют самый большой уровень заработной платы – 130 тыс. руб.

    Рейтинг общих компетенций

    Вряд ли для вас будет откровением, что среди soft skills самый популярный навык – это знание английского языка на уровне чтения технической документации. Этот навык требуется в каждой третьей вакансии.

    Второй по популярности навык – командная работа, который требуется в каждой четвертой вакансии. Конечно же, в топ 10 попали такие навыки как самостоятельность, ответственность и коммуникативные навыки. И завершает список навык «умения излагать свои мысли»: если верить статистике, то среди 25 разработчиков достаточно всего одного, который умеет правильно излагать свои мысли – остальным совсем не обязательно.

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

    Востребованный.NET-разработчик

    Так кто же он, востребованный и высокооплачиваемый.NET-разработчик, на которого нам стоит равняться?

    Судя по статистике, портрет такого разработчика следующий.

    Разработчик ASP.NET MVC, который «на ты» с SQL Server и Transact-SQL, владеющий стеком веб-технологий (HTML, CSS, JavaScript, AJAX и jQuery), умеющий создавать и использовать WCF-сервисы, ну, и конечно, умеющий преобразовывать данные в формате XML.

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

    Продолжение следует…

    В следующей статье я проведу аналогичный анализ по зарубежному рынку вакансий: какие навыки требуются от.NET-разработчика «за бугром»?

    Хочу услышать ваше мнение о том, по каким специализациям будет интересно увидеть подобную аналитику, и действительно ли данная статистика помогает нам найти ответ на вопрос, какие навыки нам необходимо развивать, или тема еще не закрыта?

    Только зарегистрированные пользователи могут участвовать в опросе. Войдите , пожалуйста.

    Программировать на языке C# без.NET Framework - это все равно что писать ручкой без чернил. Сколько ни води ею по бумаге, написать ничего не удастся.

    Так что же такое.NET Framework? Это платформа программирования, разработанная корпорацией Microsoft, и язык C# создавался специально для нее. Платформа.NET Framework состоит из двух частей.

    1. Во-первых, она содержит огромную библиотеку классов, которые можно вызывать из программ, созданных на C#. Такая возможность избавляет от необходимости писать все заново.
    2. Во-вторых, в ее состав входит среда выполнения, управляющая запуском и работой готовых программ (это происходит абсолютно незаметно для вас и не вызывает никаких затруднений).

    Итак, при написании программы на языке C# (или на любом другом языке.NET) наряду с созданием собственного кода используются классы, хранящиеся в библиотеке.

    Библиотека.NET framework содержит огромное количество классов, и некоторые из них настолько сложны, что мы даже не будем пытаться рассмотреть все сразу. Расскажем лишь о тех, которые, на наш взгляд, наиболее полезны для начинающих программистов. Со временем вы станете запоминать классы, которыми пользуетесь чаще, чем другими, и постепенно хорошо их освоите. Ведь когда часто берешь в библиотеке любимую книгу, то легко запоминаешь, на какой полке ее искать.

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

    Как изменять примеры программ и расширять их возможности

    Я слышу ваше возмущение: "Легко сказать: измени программу! Но откуда мне знать, в каком направлении двигаться? В приведенных примерах используются лишь некоторые методы и классы.NET Framework, но ведь их очень много! Как о них узнать?"

    Для этого есть несколько способов:

    • Просмотреть библиотеку классов.NET Framework SDK ( Software Development Kit – набор средств разработки), которая включена в справочную систему Visual C# Express.
    • Воспользоваться интеллектуальной подсказкой Visual C# Express. Как только вы введете в ее окошко имя пространства имен или класса и поставите точку, автоматически раскроется список всех доступных классов, методов, полей. Достаточно выбрать нужный элемент списка. Например, после ввода "Console." вы увидите список методов и других элементов класса Console.

    Подсказка работает и для методов. Если поставите открывающую скобку после имени метода, то увидите типы параметров, которые он может принимать. Зачастую в C# используются одноименные методы с различными наборами параметров - в таком случае список надо "прокручивать" (перемещаться по нему) вверх и вниз при помощи клавиш с изображенными на них стрелками. В следующем примере показано, что произойдет, если набрать Console.WriteLine(. Visual C# Express подскажет о существовании 19 различных способов вызова метода WriteLine. Мы прокрутили список вниз до 11-й позиции (см. рисунок ниже).

    Один из главных принципов.NET можно выразить так: "Изменяйте все, что хотите, используя любые средства". Платформа.NET - это совершенно новая модель для создания приложений для Windows. Перечислим кратко основные положения.NET.

    • Все возможности взаимодействия с существующим кодом. Двоичные компоненты СОМ отлично работают вместе с двоичными файлами.NET.
    • Полное и абсолютное межъязыковое взаимодействие. В отличие от классического СОМ, в.NET поддерживаются межъязыковое наследование, межъязыковая обработка исключений и межъязыковая отладка.
    • Общая среда выполнения для любых приложений.NET вне зависимости от того, на каких языках они были созданы. И что важно, для всех языков используется один и тот же набор встроенных типов данных.
    • Библиотека базовых классов, которая скрывает все сложности, связанные с использованием вызовов API, и предлагает законченную объектную модель для всех языков программирования, поддерживающих.NET.
    • О запутанных конструкциях СОМ можно забыть! Интерфейсы IClassFactory , IUnknown , код IDL и вариантные типы данных отсутствуют в программах.NET.
    • Действительное упрощение процесса развертывания приложения. В среде.NET не надо регистрировать типы в системном реестре. Более того, .NET позволяет разным версиям одного и того же модуля DLL мирно сосуществовать на одном компьютере.

    Достоинства

    1. Вся платформа.NET основана на единой объектно-ориентированной модели. Что это значит? Дело в том, что все сервисы, интерфейсы и объекты, которые платформа предоставляет разработчику объединены в единую иерархию классов. Другими словами, все, что может вам потребоваться при создании приложений под платформу.NET будет всегда у вас под рукой. Причем, все это сгруппировано очень удобно и интуитивно понятно.
    2. Приложение, написанное на любом.NET-совместимом языке является межплатформенным (в идеале). Почему в идеале? Дело в том, что приложение, написанное, скажем, на том же C#, не зависит от платформы, на которой будет выполняться, но зато зависит от наличия платформы.NET. Но согласитесь, что намного легче один раз портировать архитектуру.NET под какую либо систему, после чего без проблем запускать абсолютно любое.NET приложение. Но в настоящий момент платформа.NET портирована только на семейство операционных систем Windows , в том числе на мобильные системы MS Windows mobile.
    3. В состав платформы.NET входит т.н. "сборщик мусора", который освобождает ресурсы. Таким образом, приложения защищены от утечки памяти и от необходимости освобождать ресурсы. Это делает программирование более легким и более безопасным.
    4. Приложения.NET используют метаданные, что позволяет им не пользоваться системным реестром Windows.
    5. Любое.NET приложение является автономным, в том смысле, что не зависит от других программ, в частности от ОС. Установка приложения написанного на одном из.NET языках может быть произведена обычным копированием файлов (исключение составляет создание ярлыков в меня "Пуск" и др. местах).
    6. Приложения.NET используют безопасные типы, что повышает их надежность, совместимость и межплатформенность.
    7. Приложение, написанное на любом.NET языке взаимодействует с единой моделью обработки ошибок, что значительно упрощает этот нудный процесс.
    8. Приложения написанные на разных могут легко взаимодействовать. Например, серверная часть может быть написана на C#, а клиентская на Visual Basic.
    9. .NET приложения могут быть сертифицированы на безопасность. Это является особенность промежуточного кода, в который преобразуются все.NET приложения.
    10. Абсолютно все ошибки обрабатываются механизмом исключительных ситуаций. Это позволяет избежать разногласия, который иногда возникал при программировании под Win32.
    11. Повторное использование кода стало еще удобнее. Это связано с тем, что промежуточный язык MSIL не зависит от языка программирования. Например, вы можете написать программу на C#, а патч к ней писать уже, скажем, на J#.

    Недостатки

    У любого программного продукта есть свои недостатки, есть они и у платформы.NET. Их нужно тоже знать.

    1. Как это часто бывает, за удобство нужно платить скоростью, так и случилось с.NET. Приложения, написанные под платформу.NET работают медленнее, это факт. В некоторых случаях скорость может упасть на 15%, что иногда является неприемлемым (например, при создании 3D приложений, где бьются за каждый FPS). Задержки в выполнении связаны с промежуточным языком MSIL, ведь для того чтобы его скомпилировать в выполняемый файл тоже нужно время. Разумеется, что приложение компилируется не все сразу, а по частям, равномерно при работе программы.
    2. Не на любом языке можно создавать.NET приложения. Дело в том, что первоначально.NET "затачивался" под C/JAVA-подобные языки. Это породило некоторые трудности с созданием.NET компиляторов для других языков (особенно экзотических и узкоспециализированных). В результате этого некоторые функции пришлось решать нетривиальными способами, что отрицательно сказалось на производительности. Но постепенно данный недостаток сходит на нет, т.к. разработчики компиляторов поняли важность платформы.NET и стараются сделать для своих языков достойные инструменты.
    3. Необходимо наличие библиотеки FrameWork. Данный недостаток устранен с выходом Windows Vista, т.к. данная библиотека встроена в систему по умолчанию.

    Можно обратить внимание на то, что достоинств у.NET в сумме получилось больше, чем недостатков. Разумеется, это не является отражением реальности. Это говорит о хорошей маркетинговой кампании проведенной корпорацией Microsoft.



    Загрузка...