День открытых дверей по курсу «C# Developer. Professional» 20.02.2020 в 20:00 | OTUS
Запланируйте обучение с выгодой в Otus!
-15% на все курсы до 20.11 Забрать скидку! →
Выбрать курс
Проходил 20 февраля 2020 года в 20:00

День открытых дверей
Всё о курсе «Разработчик C#»

День открытых дверей онлайн

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

Запись

О курсе

C# Developer. Professional
85 000 ₽ 72 250 ₽
6 месяцев
Начало 28 ноября

Вы сможете разрабатывать на C# сложные клиент-серверные приложения, используя паттерны проектирования и возможности CLR (многопоточность, асинхронность, рефлексия, сериализация) и LINQ.

Навыки, которые вы освоите, позволят претендовать на позиции уровня начинающего Senior / крепкого Middle. Вы узнаете во что разворачиваются различные конструкции и их представления в промежуточном языке (IL). Поработаете с SQL и NoSQL базами данных, кэшированием, Unit-тестами, CI/CD и другими …

Программа курса
Модуль 1
Архитектура проекта и Базы данных
Модуль 2
Многопоточность и шаблоны проектирования
Модуль 3
Клиент-серверная архитектура и микросервисы
Модуль 4
С# Advanced
Модуль 5
Процессы и подходы
Модуль 6
Проектная работа
Архитектура проекта и Базы данных
В этом модуле вы узнаете как граммотно выстраивать архитектуру проекта и в рамках трёх занятий научитесь эффективному взаимодействию как с SQL, так и NoSQL базами данных.
Знакомство, рассказ о формате Scrum, краткий обзор курса // ДЗ
познакомиться.
28 ноября, 20:00 — 21:30
Лектор: Алексей Ягур
Домашние задания: 1
ДЗ
Знакомимся с командой и гит репозиторием. Для всех:
0) Написать результат прохождения теста https://testograd.com/test/test-belbina-komandnye-roli/ или любого другого онлайн теста Белбина на определение своей командной роли.
1) Зарегистрироваться на Гитлабе/Гитхабе/Azure Devops/etc. и сделать коммит в общий проект, при сдаче ДЗ необходимо приложить ссылку на коммит в репозитории;
Если присоединились к курсу после первого занятия, то нужно написать в telegram-канал потока о том, что начали заниматься на курсе после первого занятия и хотели бы присоединиться к scrum-команде, можно продублировать сообщение руководителю программы Алексею Ягур (@Alex_Yagur), он с радостью поможет найти подходящую команду.
2) Написать “о себе” в закрытой группе команды, при сдаче ДЗ также приложить скриншот сообщения в TG;
3) Написать три способа траты баллов, помимо озвученных на уроке.

Для SCRUM-мастеров:
4) Выбрать название для команды;
5) Создать закрытый чат команды в telegram и добавить ссылку-инвайт в него в таблицу команды;
6) Создать репозиторий для проекта;
7) Выбрать проект для команды;
8) Создать доски задач: беклог, в работе, сделано;
9) Наполнить верхнеуровневый беклог.
Архитектура проекта
формировать архитектуру приложения;
разделять код на слои и звенья;
принимать более взвешенные решения о структуре проекта.
5 декабря, 20:00 — 21:30
Лектор: Elena Сычева
Базы данных: организация работы с потоками данных
объяснить основы работы с базами данных.
10 декабря, 20:00 — 21:30
Лектор: Elena Сычева
Базы данных: реляционные базы и работа с ними // ДЗ
научиться работать с реляционными базами данных.
12 декабря, 20:00 — 21:30
Лектор: Антон Герасименко
Домашние задания: 1
ДЗ
Создание виртуальной базы данных магазина в PostgreSQL. Спроектируйте и создайте структуру базы данных для виртуального магазина, следуя этому плану:

1. Таблица "Products" (Продукты):

- ProductID (Основной ключ)
- ProductName (Название продукта)
- Description (Описание)
- Price (Цена)
- QuantityInStock (Количество на складе)




2. Таблица "Users" (Пользователи):

- UserID (Основной ключ)
- UserName (Имя пользователя)
- Email (Электронная почта)
- RegistrationDate (Дата регистрации)




3. Таблица "Orders" (Заказы):

- OrderID (Основной ключ)
- UserID (Внешний ключ)
- OrderDate (Дата заказа)
- Status (Статус)




4. Таблица "OrderDetails" (Детали заказа):

- OrderDetailID (Основной ключ)
- OrderID (Внешний ключ)
- ProductID (Внешний ключ)
- Quantity (Количество)
- TotalCost (Общая стоимость)




5. Установление связей:

- Связь между "Users" и "Orders"
- Связь между "Orders" и "OrderDetails"
- Связь между "Products" и "OrderDetails"




6. SQL запросы:

- Добавление нового продукта
- Обновление цены продукта
- Выбор всех заказов определенного пользователя
- Расчет общей стоимости заказа
- Подсчет количества товаров на складе
- Получение 5 самых дорогих товаров
- Список товаров с низким запасом (менее 5 штук)
Базы данных: Entity Framework Core
научиться взаимодействовать с базой данных при помощи фреймворка EF Core.
17 декабря, 20:00 — 21:30
Лектор: Роман Приходько
Базы данных: NoSQL базы и их особенности
- понять, как выбирать между реляционными и NoSQL СУБД в своих проектах;
- уметь проектировать оптимальную для хранения в NoSQL СУБД модель данных;
- освоить базовые приемы работы с одной из NoSQL СУБД: Redis, MongoDb, или Cassandra(по выбору преподавателя)
19 декабря, 20:00 — 21:30
Лектор: Михаил Дмитриев
Ретроспектива и планирование
24 декабря, 20:00 — 21:30
Лектор: Павел Нилов
Многопоточность и шаблоны проектирования
После этого модуля вы сможете писать быстрый многопоточный и эффективный асинхронный код, обмениваться данными между разными приложениями, а также познакомитесь с порождающими, структурными и поведенческими шаблонами проектирования.
Введение в параллелизм в .NET. Отличия процесса, потока, домена и таска // ДЗ
дать описание разным примитивам параллелизма для лучшего понимания их назначения и отличий;
получить примеры практического использования инструментов параллелизма на практической задаче.
26 декабря, 20:00 — 21:30
Лектор: Александр Усманов
Домашние задания: 1
ДЗ
Task: Параллельное считывание файлов. 1. Прочитать 3 файла параллельно и вычислить количество пробелов в них (через `Task`).
2. Написать функцию, принимающую в качестве аргумента путь к папке. Из этой папки параллельно прочитать все файлы и вычислить количество пробелов в них.
3. Замерьте время выполнения кода (класс `Stopwatch`).




* 7 баллов: за выполненное 1-е задание
* +2 балла: за выполненное 2-е задание
* +1 балл: за выполненное 3-е задание
* Минимальное количество баллов: 7
Асинхронные операции
писать асинхронный код.
9 января, 20:00 — 21:30
Лектор: Роман Приходько
Магические слова async / await
изучить механизм, скрытый под ключевыми словами async/await;
научиться правильному использованию этих ключевых слов.
14 января, 20:00 — 21:30
Лектор: Михаил Дмитриев
Синхронизация доступа к общему ресурсу
познакомиться с примитивными и гибридными средствами управления доступа к общим ресурсам;
рассмотреть дополнительные инструменты для упрощения организации многопоточной работы;
применить полученные знания в практическом занятии.
16 января, 20:00 — 21:30
Лектор: Михаил Дмитриев
Взаимодействие потоков
познакомиться с примитивами управления потоков;
понять в каких моментах использовать эти примитивы;
применить примитивы на практике.
21 января, 20:00 — 21:30
Лектор: Антон Герасименко
Внутрипроцессное взаимодействие // ДЗ
применять потоки, задачи, Parallel LINQ;
распараллеливать расчёты для ускорения вычислений;
оценивать целесообразность применения механизмов;
параллельной обработки данных.
23 января, 20:00 — 21:30
Лектор: Виктор Дзицкий
Домашние задания: 1
ДЗ
Многопоточный проект. 1. Напишите вычисление суммы элементов массива интов:

- Обычное
- Параллельное (для реализации использовать Thread, например List)
- Параллельное с помощью LINQ


2. Замерьте время выполнения для 100 000, 1 000 000 и 10 000 000

3. Укажите в таблице результаты замеров, указав:

- Окружение (характеристики компьютера и ОС)
- Время выполнения последовательного вычисления
- Время выполнения параллельного вычисления
- Время выполнения LINQ


Пришлите в чат с преподавателем помимо ссылки на репозиторий номера своих строк в таблице.
Межпроцессное взаимодействие
изучить способы взаимодействия процессов/программ друг с другом.
28 января, 20:00 — 21:30
Лектор: Александр Усманов
Порождающие шаблоны проектирования // ДЗ
объяснить назначение изученных шаблонов проектирования;
применять их в своих проектах.
30 января, 20:00 — 21:30
Лектор: Михаил Дмитриев
Домашние задания: 1
ДЗ
Реализуем паттерн "Прототип". 0. Придумать и создать 3-4 класса, которые как минимум дважды наследуются и написать краткое описание текстом.
1. Создать свой дженерик интерфейс IMyCloneable для реализации шаблона "Прототип".
2. Сделать возможность клонирования объекта для каждого из этих классов, используя вызовы родительских конструкторов.
3. Составить тесты или написать программу для демонстрации функции клонирования.
4. Добавить к каждому классу реализацию стандартного интерфейса ICloneable и реализовать его функционал через уже созданные методы.
5. Написать вывод: какие преимущества и недостатки у каждого из интерфейсов: IMyCloneable и ICloneable.
Структурные шаблоны проектирования
объяснить назначение изученных шаблонов проектирования и применять их в своих проектах.
4 февраля, 20:00 — 21:30
Лектор: Роман Приходько
Поведенческие шаблоны проектирования
объяснить назначение изученных шаблонов проектирования и применять их в своих проектах.
6 февраля, 20:00 — 21:30
Лектор: Михаил Дмитриев
Ретроспектива и планирование
уверенно участвовать в ретроспективах;
планировать объём работ на будущее.
11 февраля, 20:00 — 21:30
Лектор: Антон Герасименко
Клиент-серверная архитектура и микросервисы
Здесь вы разберётесь с тем, как выстроить правильную архитектуру проекта, чем авторизация отличается от аутентификации, какие бывают паттерны корпоративных приложений и зачем их использовать. Также, вам наверняка пригодится понимание таких аббревиатур как WCF, ASMX, REST, SOLID и CI/CD.
Интеграция приложений
сформулировать основные причины интеграции корпоративных систем и способы их интеграции;
сформулировать какой способ взаимодействия предпочтителен для различных типов задач и в чем причина популярности микросервисов.
13 февраля, 20:00 — 21:30
Лектор: Elena Сычева
Принципы SOLID // ДЗ
изучить значение каждой буквы акронима;
узнать как применять эти принципы на практике.
18 февраля, 20:00 — 21:30
Лектор: Виктор Дзицкий
Домашние задания: 1
ДЗ
Демонстрация SOLID принципов. На примере реализации игры «Угадай число» продемонстрировать практическое применение SOLID принципов.
Программа рандомно генерирует число, пользователь должен угадать это число. При каждом вводе числа программа пишет больше или меньше отгадываемого. Кол-во попыток отгадывания и диапазон чисел должен задаваться из настроек.
В отчёте написать, что именно сделано по каждому принципу.
Приложить ссылку на проект и написать, сколько времени ушло на выполнение задачи.
Брокеры сообщений
разобраться в сходствах и отличиях четырёх наиболее популярных брокеров сообщений;
научиться писать код, получающий сообщения из очереди.
20 февраля, 20:00 — 21:30
Лектор: Роман Приходько
CI/CD
разобраться в принципах CI/CD;
понимать как организовать правильный CI/CD;
сформулировать основные инструменты для CI и CD, их отличия;
настроить собственный CI/CD.
25 февраля, 20:00 — 21:30
Лектор: Александр Новиков
Ретроспектива и планирование
уверенно участвовать в ретроспективах;
планировать объём работ на будущее.
27 февраля, 20:00 — 21:30
Лектор: Павел Нилов
С# Advanced
В этом модуле вы научитесь правильно использовать такие мощные инструменты языка как рефлексия, атрибуты, исключения, дженерики, делегаты и события. Также, разберёмся в том, как внутри и снаружи работает Сборщик мусора, как писать и использовать финализаторы. Напоследок, рассмотрим дополнительные возможности языка и возможности, добавленные в последних версиях.
Отражение (Reflection) // ДЗ
обрабатывать экземпляры разных или неизвестных заранее классов;
создавать универсальные тесты;
писать свои компоненты.
11 марта, 20:00 — 21:30
Лектор: Антон Герасименко
Домашние задания: 1
ДЗ
Рефлексия и её применение. Основное задание:
1. Написать сериализацию свойств или полей класса в строку
2. Проверить на классе: class F { int i1, i2, i3, i4, i5; Get() => new F(){ i1 = 1, i2 = 2, i3 = 3, i4 = 4, i5 = 5 }; }
3. Замерить время до и после вызова функции (для большей точности можно сериализацию сделать в цикле 100-100000 раз)
4. Вывести в консоль полученную строку и разницу времен
5. Отправить в чат полученное время с указанием среды разработки и количества итераций
6. Замерить время еще раз и вывести в консоль сколько потребовалось времени на вывод текста в консоль
7. Провести сериализацию с помощью каких-нибудь стандартных механизмов (например в JSON)
8. И тоже посчитать время и прислать результат сравнения
9. Написать десериализацию/загрузку данных из строки (ini/csv-файла) в экземпляр любого класса
10. Замерить время на десериализацию
11. Общий результат прислать в чат с преподавателем в системе в таком виде:

Сериализуемый класс: class F { int i1, i2, i3, i4, i5;}
код сериализации-десериализации: ...
количество замеров: 1000 итераций
мой рефлекшен:
Время на сериализацию = 100 мс
Время на десериализацию = 100 мс
стандартный механизм (NewtonsoftJson):
Время на сериализацию = 100 мс
Время на десериализацию = 100 мс
Сериализация
использовать механизмы сериализации и результирующие форматы сериализации;
применять стандартные способы сериализации.
13 марта, 20:00 — 21:30
Лектор: Elena Сычева
Атрибуты
использовать существующие атрибуты;
проверять наличие атрибутов на классах, функциях, полях, и т.д.;
создавать свои собственные атрибуты.
18 марта, 20:00 — 21:30
Лектор: Виктор Дзицкий
Исключения и нюансы работы с ними
объяснить, что из себя представляет исключение;
разобраться как исключение устроено "под капотом";
научиться бросать и перехватывать исключения;
познакомиться с Best Practice в работе с исключениями.
20 марта, 20:00 — 21:30
Лектор: Михаил Дмитриев
Работа с методами как с переменными (delegates, events) // ДЗ
создавать делегаты для передачи методов в функции;
создавать события и подписки на них;
писать менее связный код и упростить расширение функционала ПО.
25 марта, 20:00 — 21:30
Лектор: Павел Нилов
Домашние задания: 1
ДЗ
Делегаты и события. 1. Написать обобщённую функцию расширения, находящую и возвращающую максимальный элемент коллекции.
Функция должна принимать на вход делегат, преобразующий входной тип в число для возможности поиска максимального значения.
public static T GetMax<T>(this IEnumerable<T> collection, Func<T, float> convertToNumber) where T : class;
2. Написать класс, обходящий каталог файлов и выдающий событие при нахождении каждого файла;
3. Оформить событие и его аргументы с использованием .NET соглашений:
public event EventHandler<FileArgs> FileFound;
FileArgs – будет содержать имя файла и наследоваться от EventArgs
4. Добавить возможность отмены дальнейшего поиска из обработчика;
5. Вывести в консоль сообщения, возникающие при срабатывании событий и результат поиска максимального элемента.
Дженерики, их реализация и ограничения
работать с обобщениями.
27 марта, 20:00 — 21:30
Лектор: Виктор Дзицкий
Сборщик мусора, деструкторы и финализаторы, Disposable Pattern
разобраться с тем, как хранятся объекты в памяти в .NET;
познакомиться с алгоритмом выделения физической памяти для приложений;
понять алгоритм работы Сборщика Мусора (поколения, стратегии, карточный стол);
начать отличать Деструкторы от Финализаторов;
научиться использовать Disposable Pattern.
1 апреля, 20:00 — 21:30
Лектор: Александр Усманов
Дополнительные возможности языка: от директив препроцессора до указателей
писать небезопасный код и создавать указатели, если, столкнётесь с тем, что это понадобится;
использовать механизмы условной компиляции, чтобы обеспечить зависимость поведения проекта от окружения или обеспечить большее удобство работы с кодом;
применять динамические объекты и заготовки кода,
чтобы ускорить написание проектов.
3 апреля, 20:00 — 21:30
Лектор: Михаил Дмитриев
Что полезного в новых версиях C#?
проанализировать нововведения в новых стандартах.
8 апреля, 20:00 — 21:30
Лектор: Elena Сычева
Ретроспектива и планирование
уверенно участвовать в ретроспективах.
10 апреля, 20:00 — 21:30
Лектор: Антон Герасименко
Процессы и подходы
Этот модуль даст вам понимание современных и не очень методологий с более подробным рассмотрением DDD. А из более технических вещей, будут рассмотрены различные подходы в тестировании, журналировании, документации и трассировке
Waterfall, Scrum, Kanban и прочие методологии
разобраться в современных методологиях, необходимости и особенностям их применения.
15 апреля, 20:00 — 21:30
Лектор: Elena Сычева
Unit, Sandbox, Blackbox, Whitebox, Integration tests
разбираться во всём этом многообразии типов тестов;
понимать когда и какие нужно применять.
17 апреля, 20:00 — 21:30
Лектор: Роман Приходько
Domain Driven Development: Основы
изучить теоретическую часть подхода Domain Driven Development.
22 апреля, 20:00 — 21:30
Лектор: Евгений Тюменцев
Domain Driven Development: Практикум
научиться применять подход самостоятельно на практике.
24 апреля, 20:00 — 21:30
Лектор: Евгений Тюменцев
Логирование, метрики, трассировка и ведение документации
разбираться в инструментах исследования и анализа работы программ;
выбирать и настраивать подходящую систему логирования;
объяснять что из себя представляют метрики и как устроена трассировка;
перечислить минимум три системы для ведения программной документации.
29 апреля, 20:00 — 21:30
Лектор: Михаил Дмитриев
Реактивное программирование
изучить основные паттерны работы с последовательностями данных в режимах pull и push;
проанализировать интерфейс IObservable<T> и связанные с ним соглашения;
изучить основные возможности LINQ для IObservable<T>;
получить пример работы с подписками на данные в .net-приложении.
13 мая, 20:00 — 21:30
Лектор: Elena Сычева
Функциональное программирование
понимать принципы функционального программирования и их отличия от других парадигм;
применять основные техники функционального программирования;
эффективно использовать лямбда-выражения и LINQ для обработки коллекций;
разрабатывать функции высших порядков и использовать их для обработки данных.
15 мая, 20:00 — 21:30
Лектор: Антон Герасименко
Проектная работа
Заключительный модуль курса посвящен проектной работе. Проект — это отличная возможность объединить все полученные на курсе знания в одной системе.
Консультация по проектам и домашним заданиям
получить ответы на вопросы по проекту, ДЗ и по курсу.
20 мая, 20:00 — 21:30
Лектор: Алексей Ягур
Домашние задания: 1
ДЗ
Проектная работа. **Основные требования к проектным работам**
- База Данных
- Асинхронность
- Многопоточность (примитивы синхронизации)
- Шаблоны проектирования (3+)




**Общие шаги по проекту**
- Определиться со списком функций и ролей, которые будут в финальном варианте системе в конце курса и нарисовать это.
- Сделать копию первой картинки и удалить всё, без чего система не сможет выполнять самые-самые базовые функции.
- По получившемуся варианту сделать скелет проекта в IDE.
- Создать в таск-трекере верхнеуровневые задачи для разработки проекта до минимально рабочего варианта.
- Выбрать что из этих задач получится реализовать за первую итерацию.
- Реализовать и продемонстрировать на занятии по Ретроспективе и Планированию.
- Доработать проект до состояния прототипа (MVP).
- Создать в таск-трекере верхнеуровневые задачи для доработки проекта до итогового варианта.
- Выполнить задачи из таск-трекера.
Защита проектных работ
защитить проект и получить рекомендации экспертов.
22 мая, 20:00 — 21:30
Лектор: Алексей Ягур

Преподаватель

Алексей Ягур
Team Lead в компании YouDo в Москве.

Получил первое высшее образование по специальности «Информационные Системы и Технологии», параллельно работая программистом в Информационно-Вычислительном Центре, председателем факультета в профсоюзе и заместителем председателя в студенческом совете.
Пока получал второе высшее образование по специальности «Менеджмент Организации», создал сайт студентов потока, делал сайты на заказ, работал программистом в компании, разрабатывающей сканирующие установки для предприятий лесоперерабатывающей отрасли и старшим лаборантом в Институте Физиологии Коми Научного Центра. В 2013 году отправился покорять Москву, где до YouDo успел поработать в Актион-МЦФЭР, Social Discovery Ventures и Лаборатории Касперского.

Опыт программирования начинается с 2000 года, который включает в себя 10 лет оплачиваемого опыта работы с C#. Благодаря девизу «Постоянно учиться и расти», помимо двух высших образований, за его плечами большое количество всевозможных курсов и профессиональных переподготовок.

В Отус Алексей руководит курсами по направлению С#: "C# Developer Basic", "C# Developer Professional" и "C# ASP.NET Core разработчик"
Преподаватель курсов:
C# Developer. Professional

F.A.Q.: Наиболее часто задаваемые вопросы:

Нужно ли оплачивать обучение до Дня открытых дверей, если я хочу гарантированно попасть в группу?
Да, мы рекомендуем заранее оплатить обучение, чтобы гарантированно попасть в группу. В период проведения Дня открытых дверей резко возрастает количество желающих обучаться, поэтому может случиться так, что к окончанию Дня открытых дверей мест в группе не останется
Кто будет проводить День открытых дверей?
Проводить День открытых дверей будет преподаватель курса.
Как принять участие в Дне открытых дверей?
Для того, чтобы принять участие в Дне открытых дверей, оставьте свой e-mail в поле регистрации на мероприятие. Перед началом Дня открытых дверей мы пришлем вам ссылку, пройдя по которой, вы сможете присоединиться к вебинару.
Какие вопросы будем обсуждать на Дне открытых дверей?
На дне открытых дверей мы поговорим о проекте OTUS (о программе курса, почему мы не принимаем в группы новичков, почему учиться у нас интересно, но сложно), карьерных перспективах выпускников (почему вероятность карьерного роста у лучших студентов стремится к 100%), учебном процессе (оплатах, оценке знаний, сертификатах и прочих аспектах). Также ведущий мероприятия с радостью ответит на все ваши вопросы.
Черная пятница в Otus! ⚡️
Скидка 15% на все курсы до 20.11 →