С чего начать изучение C# и .NET?

С чего начать изучение C#? Это достаточно распространенный вопрос среди новичков. Когда ты только начинаешь присматриваться к языкам программирования, изучать их возможности по различным описаниям в Сети, то особо не задумываешься над тем, что тебя ждёт дальше — когда ты начинаешь погружаться с головой в все эти переменные, классы, лямбда-выражения и прочие прелести языка программирования.

Но, допустим, что первое осознанное решение принято — вы твердо решили начать изучение C# и, в итоге, написать своё собственное приложение, которое уже есть у вас в голове вплоть до последней кнопочки и текстовой метки. Глаза горят, руки чешутся, но…вы открываете официальный сайт Microsoft и теряетесь в том объеме информации, который на вас вываливается. Оказывается, что мало знать C# как таковой, периодически, в примерах встречаются какие-то непонятные XAML, ASP.NET, MAUI, UWP, EF Core. И многие новички опускают руки или уходят в изучение других языков программирования где, опять же, на первый взгляд, всё просто и ясно.

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

Начните с основ C#

В любом деле всегда начинайте с основ. Когда вы учитесь читать, то вы не хватаетесь сразу «Войну и мир», а учите буквы и в этот момент ваш потолок — «Букварь». Также и с языками программирования: не старайтесь сразу начать изучение C# с разработки приложения под Android или web-приложения. Даже, если вам и удастся написать что-то отдаленно похожее на рабочее приложение, то, поверьте, через какое-то время вы поймете, что надо начинать всю разработку с нуля — приложение работает кое-как, разобраться в исходном коде практически нереально, а что и зачем вы сделали в 100500 строке файла с названием «NewModule.cs» — вообще непонятно.

При изучении основ C#, старайтесь полностью абстрагироваться от такого понятия, как пользовательский интерфейс. Не нужен он вам в этот момент. Даже, если сильно хочется — всё равно не нужен. Ваш потолок пользовательского интерфейса на данном этапе — это разноцветный текст в консоли. Такой подход к изучению языка программирования позволит вам сосредоточиться именно на языке — на различных конструкциях языка, на реализации тех или иных базовых алгоритмов с использованием языка и так далее. Набивайте руку — учитесь пользоваться возможностями языка, а не конкретной технологией.

Типовая ошибка новичков — качать из Сети методические пособия для студентов и учиться программировать по ним. Не стоит путать изучение основ программирования на C# с дисциплиной «Основы программирования на C#», например, в каком-нибудь институте легкой промышленности и пытаться изучать C# по методичкам для студентов. Там, в институте, курс рассчитывается на то, что студент, по окончании курса будет знать, что есть такая страшная штука как «рекурсия» и что числа Фибоначчи можно найти, используя циклы. Это их (студентов института легкой промышленности) потолок в рамках обучения их профессии совершенно не связанной с программированием. Их там пытаются обучить хотя бы мало мальски алгоритмическому мышлению. Поэтому в тех методичках могут сходу начинать «учить» с обработки событий и построения графического интерфейса с использованием кнопок и текстовых полей. Не трогайте те методички, даже, если они на первом месте в выдаче Яндекса и Google. Если сильно хочется «потрогать» — смотрите в раздел заданий для самостоятельного изучения. Если считаете, что на данном этапе вашего самостоятельного изучения C# вы можете решить предложенную задачку — попытайтесь решить. Если в задании есть что-то, что вам пока не известно, например, как добавить кнопку на форму и определить обработчик события — не пытайтесь бросаться в изучение .NET Framework (всё равно он вам вряд ли когда-то теперь уже пригодится). Для более подробного и детального изучения какого-либо момента, связанного с C#, читайте официальную документацию.

Выбор технологии

Вы молодец, вы изучили основы C#, не пугаетесь от слов «двусвязный список», «стек», знаете, что «куча» это не только про, например, песок и так далее. Теперь пришло время определиться со следующим направлением изучения C# и .NET. И здесь вам придётся ответить самому себе на ряд вопросов, ответ на которые приведет вас к следующему шагу — выбору технологии.

База данных или файл?

Первый вопрос: ваше приложение потребует хранения данных? Думаю, что в 99,9% случаев ответ будет положительным. Следовательно, нам необходимо задуматься над тем, как эти данные хранить — хватит ли вам для работы сейчас и в самом отдаленном будущем обычного файла, например, в JSON на пару сотен килобайт или же для работы вашего приложения вам потребуется задействовать базу данных в которой будут храниться большие объемы данных? 

Если для работы хватит обычных файлов, то можно переходить к следующему вопросу. Если же вам потребуется база данных, то в качестве следующего шага изучения C# и .NET стоит выбрать Entity Framework Core — библиотеку для доступа к различным базам данных. На мой взгляд, это наиболее простой и, в то же время, быстрый путь изучения работы с базами данных в .NET и C#.

Да, кто-то более опытный может сказать, что лучше начать и здесь с основ — изучить конкретную СУБД, научиться работать с базами данных, научиться вручную составлять запросы и так далее. Всё так. Но мы ищем путь изучения с минимальными затратами времени. А Entity Framework Core вполне себе стабильная и активно поддерживаемая библиотека, которая позволит начать использовать базы данных в приложении максимально быстро. Да и вряд ли при изучении EF Core возможно будет обойти стороной те же базовые вопросы связанные с работой реляционных баз данных. По мере изучения работы с этой библиотекой вы так или иначе будете параллельно вникать в вопросы, связанные с работой конкретной СУБД (SQLite, MySQL и т.д.).

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

Какой тип приложения выбрать?

Второй вопрос: какое приложение вы хотите разработать? Это будет приложение для работы в Сети, например, web-портал или это будет приложение для рабочего стола? Ответ на этот вопрос дает вам сразу несколько вариантов выбора. Смотрите.

Web-приложения

Вы определились с тем, что ваше приложение будет работать в Сети. Следовательно, ваш следующий шаг изучения C# и .NET — это платформа ASP.NET Core. Именно используя её, разрабатываются различные типы web-приложений. Для знакомства с ASP.NET Core можно начать в ASP.NET Core Minimal API — познакомьтесь с основными понятиями и зависимостями в ASP.NET Core, научитесь создавать и обрабатывать HTTP-запросы и, вполне возможно, что в итоге, вы сможете создать небольшое web-приложение с графическим интерфейсом, написанном на HTML.

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

Если вы планируете разрабатывать приложение с графическим интерфейсом, с множеством элементов управления, формами и так далее, то ваш следующий шаг — это либо ASP.NET Core MVC, либо Blazor. Что выбрать из этих двух направлений? Здесь можно сказать так: ASP.NET Core MVC — это, можно сказать, классика разработки web-приложений. Здесь вы можете разработать приложение с красивым графическим интерфейсом, системой авторизации и так далее. Но это приложение будет работать только в Сети. Преимуществом изучения ASP.NET Core MVC, на мой взгляд, является то, что в дальнейшем, если вам потребуется выделить из вашего приложения часть в качестве API для доступа к данным, то сделать это будет достаточно легко. Что касается Blazor, то это относительно новый фреймворк для разработки web-приложений и, как преимущество изучения Blazor, можно назвать то, что научившись работать с ним, вы сможете относительно легко переключиться на разработку кроссплатформенных приложений так как вам не потребуется дополнительно вникать в построение графического интерфейса.

Если же вашему приложению не требуется никакой графический интерфейс, например, вы планируете разработать REST API для передачи и обработки данных, то ваш путь — это ASP.NET Core Web API. Стоит отметить, что изучив вначале ASP.NET Core Web API, вы сможете достаточно легко переключиться на ASP.NET Core MVC и наоборот — оба этих фреймворка имеют очень много общих моментов. Если говорить очень упрощенно, то ASP.NET Core Web API — это ASP.NET Core MVC без графического интерфейса.

Приложения для рабочего стола и кроссплатформенные приложения

Это наиболее разветвленный путь изучения C# и .NET. И здесь вам так или иначе придется вникать в ещё один язык — язык разметки XAML. Без знания XAML на данный момент не пишется ни одно современное приложение с графическим интерфейсом на C#. Есть, конечно, еще и старый добрый .NET Framework, но этот фреймворк выбирать в качестве отправной точки в разработке приложений категорически не стоит так как .NET Framework более не поддерживается.

«Прелесть» изучения XAML заключается прежде всего в том, что практически под каждую технологию используется свой диалект XAML. Вроде бы и используется всё то же самое — те же свойства, атрибуты элементов, пространства имен, а различия есть и иногда такие, что складывается впечатление, что ты снова изучаешь этот язык с нуля. Поэтому, на этом этапе стоит немного отвлечься и попытаться вникнуть в самую суть, в основы XAML.

Снова задаем себе вопрос: вам будет достаточно работы приложения только в Windows? Если ответ положительный, то ваше направление обучения — это либо Windows Presentation Foundation (WPF), либо WinUI. Каждая из платформ имеет свою специфику, в том числе и в части XAML, однако принципиальным различием можно назвать следующее: приложения WinUI могут работать только на Windows не ниже 10-й версии.

Если вас интересуют кроссплатформенные приложения, то тут пока вариант один — это платформа .NET MAUI. Используя её вы сможете научиться разрабатывать приложения под Windows, MacOS, iOS и Android.

В любом случае, для того, чтобы научиться разрабатывать приложения с графическим интерфейсом, вам потребуется изучение XAML, работы конкретной операционной системы и, конечно же, основ C#.

Что ещё?

Здесь я постарался показать, на сколько это возможно, последовательный путь изучения C# и .NET. Но, на практике, вы столкнетесь с тем, что ваш путь в программировании будет совсем не линейным — вы будете постоянно возвращаться к предыдущим темам, параллельно изучать работу баз данных без каких-либо библиотек .NET, разбираться с различными архитектурами приложений и так далее.

В качестве основных материалов по работе с C# и .NET можно также посоветовать изучение таких вопросов как шаблоны (паттерны) проектирования и тестирование приложений.

Паттерны проектирования — это, по сути, правила дорожного движения в программировании. Не зная их, вы, возможно, сможете разработать приложение, которое будет работать и не вызывать отторжения и у пользователей, но поддерживать и развивать такое приложение будет не просто. Поэтому, не поленитесь, найдите свободное время и попытайтесь изучить паттерны проектирования, применив их на практике в C#.