Найти в Дзене
Кладезь опыта

План курса по изучению C# или как не сбиться с пути

«Цели — это марафон, а не спринт» — цитата из книги Джона Эйкаффа «Закончи то, что начал. Как доводить дела до конца». В начале любого большого дела, стоит помнить то, что быстрый результат, как правило, достигается в незначительных делах. Освоение новых навыков это довольно сложный и долгий путь, а для его прохождения нужно знать методики которые помогут наиболее эффективно использовать силы и время. Именно грамотное распределение сил и времени напрямую влияет на достижение результата. По этому еще до начала прохождения курса советую прочесть книгу «Думай как математик» Б.Окали. Пусть вас не смущает название, в книге описаны методики подходов к изучению материалов и принцип работы мозга человека. В своем вступительном видео я упомянул параллельное изучение Английского языка, для этого советую воспользоваться самоучителем «Английский шаг за шагом полный курс». «Совершенный код» С.Макконел. Книги в программировании принято делить на две категории: нестареющая классика
Оглавление

«Цели — это марафон, а не спринт» — цитата из книги Джона Эйкаффа «Закончи то, что начал. Как доводить дела до конца».

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

Именно грамотное распределение сил и времени напрямую влияет на достижение результата. По этому еще до начала прохождения курса советую прочесть книгу «Думай как математик» Б.Окали. Пусть вас не смущает название, в книге описаны методики подходов к изучению материалов и принцип работы мозга человека.

-2

В своем вступительном видео я упомянул параллельное изучение Английского языка, для этого советую воспользоваться самоучителем «Английский шаг за шагом полный курс».

-3

«Совершенный код» С.Макконел.

-4

Книги в программировании принято делить на две категории: нестареющая классика - БАЗА; книгу еще пишут, а она уже устарела. Все выше перечисленные книги можно будет читать долго.

Хронология изучаемых тем (выстроена в соответствии со взглядами автора)

Основы программирования на C#

Структура программы
Переменные и константы
Литералы
Типы данных
Консольный ввод-вывод
Арифметические операции
Поразрядные операции
Операции присваивания
Преобразования базовых типов данных
Условные выражения
Конструкция if..else и тернарная операция
Циклы
Массивы
Задачи с массивами
Методы
Параметры методов
Возвращение значения и оператор return
Передача параметров по ссылке и значению. Выходные параметры
Массив параметров и ключевое слово params
Рекурсивные функции
Локальные функции
Конструкция switch
Перечисления enum
Классы, структуры и пространства имен
Классы и объекты
Конструкторы, инициализаторы и деконструкторы
Класс Program и метод Main. Программы верхнего уровня
Структуры
Типы значений и ссылочные типы
Область видимости (контекст) переменных
Пространства имен
Глобальные пространства имен
Подключение пространств имен по умолчанию
Создание библиотеки классов в Visual Studio
Создание библиотеки классов с помощью .NET CLI
Модификаторы доступа
Свойства
Перегрузка методов
Статические члены и модификатор static
Установка пакетов Nuget
Константы, поля и структуры для чтения
Null и ссылочные типы
Null и значимые типы
Проверка на null, операторы ?. и ??

Коллекции

Список List<T>
Двухсвязный список
LinkedList<T>
Очередь Queue<T>
Стек Stack<T>
Словарь Dictionary<T, V>
Класс ObservableCollection
Интерфейсы IEnumerable и IEnumerator
Итераторы и оператор yield
Класс Array и массивы
Span
Индексы и диапазоны

Работа со строками

Строки и класс System.String
Операции со строками
Форматирование и интерполяция строк
Класс StringBuilder
Регулярные выражения

Работа с датами и временем

Структура DateTime
Форматирование дат и времени
DateOnly и TimeOnly

Дополнительные классы и структуры .NET

Отложенная инициализация и тип Lazy
Математические вычисления и класс Math
Преобразование типов и класс Convert

Работа с файловой системой

Работа с дисками
Работа с каталогами
Работа с файлами. Классы File и FileInfo
FileStream. Чтение и запись файла
Чтение и запись текстовых файлов. StreamReader и StreamWriter
Бинарные файлы. BinaryWriter и BinaryReader
Архивация и сжатие файлов

Работа с JSON

Сериализация в JSON. JsonSerializer

Работа с XML

XML-Документы
Работа с XML с помощью System.Xml
Изменение XML-документа
XPath
Linq to Xml. Создание Xml-документа
Выборка элементов в LINQ to XML
Изменение документа в LINQ to XML
Сериализация в XML. XmlSerializer

Объектно-ориентированное программирование

Наследование
Преобразование типов
Виртуальные методы и свойства
Скрытие методов и свойств
Различие переопределения и скрытия методов
Абстрактные классы
Класс System.Object и его методы
Обобщенные типы
Ограничения обобщений
Наследование обобщенных типов

Обработка исключений

Конструкция try..catch..finally
Блок catch и фильтры исключений
Типы исключений. Класс Exception
Генерация исключения и оператор throw
Создание классов исключений
Поиск блока catch при обработке исключений
Делегаты, события и лямбды
Делегаты
Применение делегатов
Анонимные методы
Лямбды
События
Ковариантность и контравариантность делегатов
Делегаты Action, Predicate и Func
Замыкания

LINQ

Основы LINQ
Проекция данных
Фильтрация коллекции
Сортировка
Объединение, пересечение и разность коллекций
Агрегатные операции
Получение части коллекции
Группировка
Соединение коллекций
Проверка наличия и получение элементов
Отложенное и немедленное выполнение LINQ
Делегаты в запросах LINQ

Интерфейсы

Определение интерфейсов
Применение интерфейсов
Явная реализация интерфейсов
Реализация интерфейсов в базовых и производных классах
Наследование интерфейсов
Интерфейсы в обобщениях
Копирование объектов. Интерфейс ICloneable
Сортировка объектов. Интерфейс IComparable
Ковариантность и контравариантность обобщенных интерфейсов

Дополнительные возможности ООП в C#

Определение операторов
Перегрузка операций преобразования типов
Индексаторы
Переменные-ссылки и возвращение ссылки
Методы расширения
Частичные классы, методы и свойства
Анонимные типы
Кортежи
Records
ref-структуры

Pattern matching

Паттерн типов
Паттерн свойств
Паттерны кортежей
Позиционный паттерн
Реляционный и логический паттерны
Паттерны списков

Многопоточность

Введение в многопоточность. Класс Thread
Создание потоков. Делегат ThreadStart
Потоки с параметрами и ParameterizedThreadStart
Синхронизация потоков
Мониторы
Класс Lock и синхронизация
Класс AutoResetEvent
Мьютексы
Семафоры

Параллельное программирование и библиотека TPL

Задачи и класс Task
Работа с классом Task
Задачи продолжения
Класс Parallel
Отмена задач и параллельных операций. CancellationToken

Aсинхронное программирование

Асинхронные методы, async и await
Возвращение результата из асинхронного метода
Последовательное и параллельное выполнение. Task.WhenAll и Task.WhenAny
Обработка ошибок в асинхронных методах
Асинхронные стримы

Parallel LINQ

Введение в Parallel LINQ. Метод AsParallel
Метод AsOrdered
Обработка ошибок и отмена параллельных операции

Рефлексия

Введение в рефлексию. Класс System.Type
Применение рефлексии и исследование типов
Исследование методов и конструкторов с помощью рефлексии
Исследование полей и свойств с помощью рефлексии
Динамическая загрузка сборок и позднее связывание
Атрибуты в .NET

Dynamic Language Runtime

DLR в C#. Ключевое слово dynamic
DynamicObject и ExpandoObject
Использование IronPython в .NET

Сборка мусора, управление памятью и указатели

Сборщик мусора в C#
Финализируемые объекты. Метод Dispose
Конструкция using
Указатели
Указатели на структуры, члены классов и массивы

Процессы и домены приложения

Процессы
Домены приложений
AssemblyLoadContext и динамическая загрузка и выгрузка сборок

Публикация приложения

Native AOT

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

*Данная статья освещает последовательность изучения материалов (хронология выхода видео) и является дополнением к основным материалам, ее содержание может меняться.