День открытых дверей по курсу «Python Developer. Professional» 11.10.2018 в 20:00 | OTUS >
Проходил 11 октября 2018 года в 20:00

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

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

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

Чтобы принять участие в розыгрыше приятных подарков, необходимо успешно пройти вступительное тестирование и оставить свои контакты: e-mail и телефон! Желаем успехов и до встречи в прямом эфире!
Преподаватель
Станислав Ступников

Запись

О курсе

Python Developer. Professional
150 000 ₽
5 месяцев
Начало 27 мая

Для кого этот курс?

Профессиональный онлайн-курс для тех, кто уже имеет опыт программирования на Python и хочет повысить свой уровень за счет новых знаний и навыков из различных областей разработки. Если вы уверенно чувствуете себя с Python, помните C, имеете представление о сетевом взаимодействии и реляционных СУБД, умеете обращаться с Linux, Git и прочими стандартными инструментами девелопера — курс для …

Программа курса
Модуль 1
База
Модуль 2
Web-программирование
Модуль 3
ML Engineering
Модуль 4
Highload
Модуль 5
Проектная работа
База
Этот модуль посвящен рассмотрению фундаментальных основ языка на продвинутом уровне, а также применению общих практик разработки ПО в контексте «экосистемы» Python. Целью является достижение единого понятийного аппарата, формирование представления о внутреннем устройстве языка, его возможностях, ограничениях, недостатках и области применимости.
В модуле рассматриваются нюансы настройки окружения разработчика, аспекты функционального, процедурного и ООП программирования на Python, особенности устройства виртуальной машины, вопросы обеспечения качества ПО и автоматизации инфраструктурных задач.
Структура проекта, управление зависимостями, настройка окружения: обзор и лучшие практики // ДЗ
разобрать стандартный шаблон структуры Python проекта;
рассмотреть различные инструменты по управлению зависимостями;
научиться создавать удобное окружение для разработки.
Домашние задания: 1
ДЗ
Анализатор логов. Реализовать сервис, формирующий статистический отчет о характеристиках запросов к сервису (среднее, медианное время ответа и т. п.) на основании парсинга логов, которые пишет nginx. Оформить проект согласно всем лучшим практикам, подключить CI, линетры, чекеры, написать Dockerfile и README.
Дистрибуция кода и развертывание: путь от лэптопа до кластера
рассмотреть различные способы сборки Python-проектов;
обсудить способы и каналы дистрибуции проектов;
изучить лучшие практики по контейнеризации Python-приложений;
рассмотреть Kubernetes в качестве основной среды для запуска контейнеров.
3 июня, 20:00 — 21:30
Лектор: Ринат Садыков
Аннотации типов: уровень nightmare! // ДЗ
познакомиться с теорией типов и изучить особенности ее применения к Python;
рассмотреть возможности аннотации типов, разобрать кейсы;
изучить существующие варианты и инструменты для проверки аннотаций.
8 июня, 20:00 — 21:30
Лектор: Ринат Садыков
Домашние задания: 1
ДЗ
Тренажер по аннотации типов. На предоставленном ресурсе пройти максимальное количество упражнений на аннотацию типов, результаты собрать в единый файл и оформить как отдельный проект.
Внутренности: байткод, его исполнение и виртуальная машина
разобраться с устройством виртуальной машины;
рассмотреть процесс исполнения кода;
рассмотреть фундаментальные абстракции, которыми оперирует виртуальная машина.
10 июня, 20:00 — 21:30
Лектор: Ринат Садыков
Внутренности: устройство основных типов, управление памятью и GIL
разобраться с работой основных типов данных и следствиями такой реализации;
рассмотреть процесс управления памятью в Python;
объяснить, как GIL влияет на производительность Python-программ.
15 июня, 20:00 — 21:30
Лектор: Валентин Шилин
ООП: Объектная модель и особенности ООП в Python // ДЗ
изучить устройство объектной модели Python;
разобраться с разделением на новые и классические классы;
объяснить тонкости множественного наследования;
разобраться с нюансами реализации ООП в Python.
17 июня, 20:00 — 21:30
Лектор: Кирилл Стаценко
Домашние задания: 1
ДЗ
API скоринга. Реализовать логику валидации запросов к скоринговому API на базе готового «скелета». Сервис на вход принимает POST-запросы с JSON, содержащий набор атрибутов, требующих проверки на соответствие набору правил, аналогично тому, как Django проверяет данные на соответствие описанию формы. Подразумевается, что реализация будет использовать метаклассы или протокол дескрипторов.
ООП: Дескрипторы и метапрограммирование
объяснить дескрипторы и их протокол;
разобраться с использованием «магических методов»;
рассмотреть область применимости абстрактных базовых классов;
проанализировать особенности эксплуатации метаклассов.
22 июня, 20:00 — 21:30
Лектор: Кирилл Стаценко
Тестирование: pytest и как писать тесты // ДЗ
обсудить необходимость тестирования и когда нужно писать тесты;
разобраться с тем, что именно тестировать и как структурировать тесты;
рассмотреть pytest в качестве основного инструмента тестирования;
разобраться с устройством пирамиды тестирования.
24 июня, 20:00 — 21:30
Лектор: Александр Игнатьев
Домашние задания: 1
ДЗ
Тестирование. Написать юнит, интеграционные и функциональные тесты в API из прошлого домашнего задания. Для интеграционных тестов понадобится сначала дописать свою обертку, взаимодействующую с БД. Тесты понадобится реализовать с помощью фреймворка pytest.
Тестирование: (анти)паттерны и инструменты
разобрать антипаттерны тестирования;
рассмотреть область применения инструментов тестирования (моков, фикстур и т.д.);
разобраться с видами автоматизации тестирования.
29 июня, 20:00 — 21:30
Лектор: Александр Игнатьев
Дизайн кода и архитектура: абстракции, модульность, SOLID
рассмотреть подходы к формированию абстракций;
понять, что такое модульный код;
изучить SOLID-принципы к построению приложения.
1 июля, 20:00 — 21:30
Лектор: Валентин Шилин
Дизайн кода и архитектура: domain driven design, чистая архитектура // ДЗ
познакомиться с принципами и терминологией DDD;
изучить Clean Architecture как подход и его применимость в Python-проектах.
6 июля, 20:00 — 21:30
Лектор: Ринат Садыков
Домашние задания: 1
ДЗ
Чистый склад. На занятии рассматривались части приложения по управлению товарами на некоем складе. В домашнем задании предлагается расширить реализацию, добавив новые доменные объекты, репозитории, доработать unit of work. Всё это необходимо сделать, соблюдая принципы и подходы чистой архитектуры. Естественно, реализация должна быть протестирована.
Дизайн кода и архитектура: event driven архитектура, микросервисы
рассмотреть особенности событийной модели и разобраться с ее применимостью;
изучить микросервисный подход и паттерны микросервисной архитектуры.
8 июля, 20:00 — 21:30
Лектор: Ринат Садыков
Дизайн кода и архитектура: паттерны проектирования
рассмотреть паттерны проектирования;
определиться с их полезностью и применимостью в разработке на Python.
13 июля, 20:00 — 21:30
Лектор: Олег Дрюпин
Web-программирование
Этот модуль посвящен веб-разработке, тому, какой она выглядит со стороны Python программиста и какими особенностями обладает.
Целью является рассмотрение нюансов и лучших практик по созданию и эксплуатации веб-сервисов. В модуле рассматривается Django, внутреннее устройство его ORM и других его составляющих, обсуждаются особенности построения REST API на примере FastAPI, масштабирования веб-проектов.
Сетевое взаимодействие и архитектура web-серверов // ДЗ
рассмотреть принципы сетевого взаимодействия через сокеты;
разобраться с особенностями сетевых протоколов;
рассмотреть нюансы написания программ, общающихся по сети.
15 июля, 20:00 — 21:30
Лектор: Александр Игнатьев
Домашние задания: 1
ДЗ
HTTP сервер. Реализовать сервер, частично реализующий протокол HTTP, в частности методы GET и HEAD, добиться того, что код проходит предоставленные функциональные тесты. Архитектуру выбрать на свое усмотрение, исходя из вариантов, рассмотренных на занятии. Провести нагрузочное тестирование с помощью ab или wrk.
Создание динамических страниц: от CGI до ASGI
рассмотреть принципы функционирования динамического веба;
разобраться с WSGI и его особенностями;
поговорить о различных WSGI контейнерах.
20 июля, 20:00 — 21:30
Лектор: Александр Игнатьев
MVC/MVT фреймворки на примере Django // ДЗ
разобраться с классической структурой веб-сервисов;
рассмотреть лучшие практики развертывания Django-проектов;
объяснить, как конфигурируются и эксплуатируются Django-проекты.
22 июля, 20:00 — 21:30
Лектор: Ринат Садыков
Домашние задания: 1
ДЗ
Django tutorial. В рамках данного домашнего задания нужно пройти tutorial по Django, представленный на официальном сайте. Там нужно реализовать веб-сервис для боггинга и покрыть его тестами. В качестве дополнения требуется сделать проект production-ready, оформив по всем лучшим практикам и с соблюдением рекомендаций, обсуждаемых на занятии (12 factor apps).
ORM: хорошее, плохое и злое
поговорить о лучших практиках использования моделей;
объяснить, как работает ORM и из чего он состоит;
разобраться с написанием запросов через ORM;
проанализировать запросы.
27 июля, 20:00 — 21:30
Лектор: Олег Дрюпин
Работа с БД: транзакции, репликация, шардирование и даже NoSQL
объяснить, как навигироваться в комплексном пространстве мира распределенных систем и баз данных;
познакомиться с основными понятиями, связанными с эксплуатацией и оптимизацией хранилища данных.
29 июля, 20:00 — 21:30
Лектор: Олег Дрюпин
API: что такое настоящий REST и как создавать RESTful приложения
объяснить, что такое REST;
разобраться с лучшими практиками реализации RESTful приложений;
обсудить подходы к документированию и лимитированию запросов к API.
10 августа, 20:00 — 21:30
Лектор: Александр Игнатьев
FastAPI: основы // ДЗ
запустить простое приложение;
провалидировать модель запроса и ответа с помощью Pydantic;
добавить простую аутентификацию;
собрать docker-контейнер с приложением.
12 августа, 20:00 — 21:30
Лектор: Александр Игнатьев
Домашние задания: 1
ДЗ
ML model serving. ## Цель задания

Закрепить навыки работы с:

- библиотекой FastAPI для создания JSON API,
- защитой эндпоинтов с помощью базовой аутентификации,
- выполнением инференса с использованием onnxruntime,
- передачей данных в модель и возвратом предсказаний клиенту.

## Условие

У вас есть модель машинного обучения в формате ONNX (`diabetes_model.onnx`).

Она принимает на вход признаки пациента:

- `Pregnancies` (количество беременностей),
- `Glucose` (уровень глюкозы),
- `BMI` (индекс массы тела),
- `Age` (возраст).

На выходе модель возвращает вероятность наличия диабета:

- если вероятность > 0.5 → предсказание 1 (есть диабет)
- иначе 0 (нет диабета).

Используя FastAPI, необходимо разработать веб-сервис, который будет:

1. Принимать входные признаки через JSON API.
2. Передавать их в модель с помощью onnxruntime.
3. Возвращать предсказание в формате JSON.

Добавьте защиту: часть эндпоинтов (например, `/predict`) должна быть доступна только авторизованным пользователям через Basic Auth.

## Минимальные требования

Реализовать эндпоинт `/predict`, принимающий JSON вида:

```json
{
"Pregnancies": 2,
"Glucose": 140,
"BMI": 35.5,
"Age": 32
}
```

И возвращающий результат:

```json
{
"prediction": 1
}
```

Встроить базовую аутентификацию (по аналогии с примером на лекции).

Реализовать корневой эндпоинт `/`, который возвращает приветственное сообщение.

## Дополнительные задачи (по желанию)

Добавить валидацию входных данных через pydantic-модели.

Сделать логирование запросов и ответов.

Поднять сервис в Docker-контейнере.
FastAPI: взаимодействие с БД и SQLAlchemy
рассмотреть варианты синхронного и асинхронного взаимодействия;
проанализировать типичное CRUD-приложение;
разобраться с особенностями подключения и использования SQLAlchemy.
17 августа, 20:00 — 21:30
Лектор: Олег Дрюпин
Аутентификация и авторизация // ДЗ
разобраться с терминологической базой;
рассмотреть различные схемы аутентификации;
изучить способы разграничения прав пользователя;
рассмотреть стандарты и готовые инструменты.
19 августа, 20:00 — 21:30
Лектор: Кирилл Стаценко
Домашние задания: 1
ДЗ
Аутентификация. ### Цель

- Научиться выпускать и проверять JWT access-токены
- Ограничивать доступ к эндпоинтам по ролям (RBAC)
- Корректно обрабатывать статусы ошибок авторизации (401/403) и конфигурировать параметры безопасности через переменные окружения

### Исходные условия

У вас уже есть сервис FastAPI с эндпоинтом инференса модели diabetes_model.onnx (вход: Pregnancies, Glucose, BMI, Age; выход: вероятность/класс)

Базовая структура проекта и контейнеризация настроены

#### Аутентификация (JWT)

Регистрация пользователя: ввод логина/e-mail и пароля, хранение пароля только в виде хэша

Логин: при валидных учётных данных выдать JWT access-token

Токен должен включать как минимум:

- `sub` (идентификатор пользователя),
- `role` (роль пользователя),
- `exp` (время истечения),
- при необходимости `iat`/`nbf`.

Параметры безопасности задаются через переменные окружения:

- секрет
- алгоритм
- время жизни токена

Доступ к защищённым эндпоинтам только с заголовком `Authorization: Bearer <token>`

#### Авторизация (RBAC)

Ввести роли: минимум `user` и `admin`.

Правила доступа:

- Эндпоинт инференса (например, /predict) — доступен для user и admin.
- Админский эндпоинт (например, /admin/metrics или /admin/health) — только для admin.
- Реализовать проверку роли на уровне зависимостей/гейткиперов (концептуально: «пользователь должен иметь не ниже заданной роли»).

#### Поведение эндпоинтов

- /auth/register: создать пользователя; при конфликте — понятная ошибка.
- /auth/login: вернуть access-token и метаданные (например, время жизни).
- /me: вернуть профиль текущего пользователя по токену (id/username/role).
- /predict: принимать валидированный JSON с признаками; возвращать результат инференса (класс и, по возможности, вероятность/скор).
- /admin/...: один простой админ-эндпоинт (метрики, счётчик запросов, аптайм, версия сборки и т.п.).

#### Обработка ошибок и статусы

- Отсутствует/невалидный/просроченный токен → 401 Unauthorized.
- Роль недостаточна → 403 Forbidden.
- Сообщения должны быть информативными, но без утечки чувствительных деталей (не раскрывать внутренние структуры, секреты и т.д.).

#### Валидация и надёжность

- Валидация входных данных для инференса (тип, диапазоны, обязательность полей).
- Отдельные сообщения об ошибках валидации (400 Bad Request).
- Логирование ключевых событий: аутентификация, отказ в доступе, ошибки инференса.

#### Конфигурирование

- Все секреты/параметры безопасности — через окружение (секрет ключа, алгоритм, TTL).
- Возможность задать дефолтную роль при регистрации (например, user).
- (Опционально) предусмотреть «сидирование» админ-пользователя для локального запуска.

### Минимальные требования (на зачёт):

- Выпуск и верификация JWT access-токена.
- Защита эндпоинта инференса токеном.
- Встроенная RBAC с отдельным эндпоинтом, доступным только роли admin.
- Пароли хранятся в виде хэшей.
- Документация OpenAPI (/docs) открывается, защищённые эндпоинты помечены как требующие Bearer-токена.

### Дополнительно (по желанию, +)

- Refresh-токены и обновление access-токена.
- Чёрный список/ротация токенов (logout).
- Учёт попыток логина и «заморозка» аккаунта при брутфорсе.
- Ролевые матрицы доступа, расширяемые роли.
- Трассировка запросов и метрики (например, счётчик инференсов, среднее время ответа).
- Разграничение конфигов для prod/dev (разные секреты/TTL).

### Проверка/приёмка

- Без токена доступ к защищённым эндпоинтам невозможен (401).
- С токеном user доступен /predict, но недоступны админ-роуты (403).
- С токеном admin доступны и /predict, и админ-роуты.
- Ввод некорректных признаков даёт осмысленную 400-ошибку.
- Переменные окружения реально влияют на срок действия и подпись токена.
- Проект собирается и запускается в контейнере
- /docs отображает требования к авторизации
API: (g)RPC, GraphQL
рассмотреть альтернативные REST подходы создания API;
сравнить подходы между собой и определиться с границами применимости.
24 августа, 20:00 — 21:30
Лектор: Кирилл Стаценко
Безопасность: обзор распространенных проблем, уязвимостей и лучших практик
рассмотреть виды и примеры уязвимостей, которые могут возникать в приложениях на разных этапах жизни;
разобрать способы и инструменты по выявлению и устранению уязвимостей;
изучить возможности обеспечения ИБ.
26 августа, 20:00 — 21:30
Лектор: Артём Тарасов
ML Engineering
Этот модуль посвящен знакомству с фундаментальными библиотеками, применяемыми для анализа данных, а также обзору современной big data экосистемы. Python является де-факто стандартом при решении аналитических задач, поэтому данный аспект языка нельзя обойти стороной. При этом целью модуля является не погружение в математические дебри, а рассмотрение таких инструментов, как jupyter, numpy, pandas и matplotlib, и области их применения в инженерной и аналитической деятельности.
Высокопроизводительные вычисления с NumPy // ДЗ
разобраться с областью применимости numpy и его основной структурой данных — ndarray;
рассмотреть индексирование и операции над массивами;
поговорить о возможностях библиотеки.
31 августа, 20:00 — 21:30
Лектор: Олег Дрюпин
Домашние задания: 1
ДЗ
Логистическая регрессия. ## 1. Загрузка исходных данных

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

- Загрузите исходные данные
- Внесите в код изменения, которые обеспечат повторяемость исходных данных при каждом запуске.

## 2. Потренируйтесь с базовыми операциями над массивами данных

- Найдите среднюю, медианную и стандартную температуру.
- Найдите минимальное и максимальное значение и соответствующие индексы.
- Найдите дни, когда температура была выше средней.
- Сколько дней было холоднее 18 градусов?
- Разделите данные на недели (по 7 дней) и найдите среднюю температуру каждой недели.
- Вычислите скользящее среднее (по 7 дней) и сравните со средними для каждой недели.

## 3. Освойте векторные операции над массивами

Загрузите новую порцию исходных данных.

### Задание 1: Общая выручка по каждому продукту

Условие:
Считается, что каждый день продаётся по фиксированному количеству 10 единиц каждого продукта. Найдите общую выручку за год по каждому продукту с помощью скалярного произведения.

### Задание 2: День наибольшей выручки

Условие:
Определите, в какой день года суммарная выручка по всем продуктам была максимальной. То есть:
∑ (цена[i][d] × количество[i][d]) по всем i продуктов, где количество — случайные продажи в диапазоне [5, 20].

### Задание 3: Сравнение “средневзвешенной цены”

Условие:
Вычислите средневзвешенную цену каждого продукта за год, используя веса — количество проданных единиц (рандомно от 5 до 15 штук в день).
Исследовательский анализ данных c Pandas
разобраться с областью применимости pandas и его основной структурой данных — dataframe;
рассмотреть индексирование и операции над dataframe;
поговорить о возможностях библиотеки.
2 сентября, 20:00 — 21:30
Лектор: Дмитрий Панкрашов
Инструменты работы с данными: IPython, matplotlib, seaborn
разобраться с видовым многообразием библиотек визуализации данных в Python;
рассмотреть основные возможности matplotlib и два его интерфейса;
рассмотреть основные возможности seaborn и понять его преимущества над matplotlib;
познакомиться с основными возможностями IPython.
7 сентября, 20:00 — 21:30
Лектор: Ринат Садыков
Оркестрация задач: jenkins, luigi, airflow
обсудить необходимость оркестрации задач и связанные с этим сложности;
рассмотреть основные инструменты, используемые для запуска задач по расписанию.
9 сентября, 20:00 — 21:30
Лектор: Олег Дрюпин
Нейронки: PyTorch, TensorFlow, HuggingFace и LLM // ДЗ
разобраться с тем, что из себя представляют нейронные сети;
рассмотреть основные типы сетей;
обозреть самые популярные библиотеки;
обсудить возможности применения больших лингвистических моделей.
14 сентября, 20:00 — 21:30
Лектор: Валентин Шилин
Домашние задания: 1
ДЗ
OTUS-GPT. В данном домашнем задании предлагается выбрать на свое усмотрение одну из открытых генеративных моделей на HuggingFace, донастроить его под интересующий кейс и реализовать своего бота/агента или даже сеть/цепь агентов.

Задача:

- Зарегистрироваться на Huggingface.
- Получить API ключ.
- Получить доступ к каой-либо LLM модели.
- Развернуть модель локально.
Обзор big data экосистемы: хранение и обработка данных, обучение и inference, model serving
рассмотреть основные элементы современной инфраструктуры обработки больших данных;
объяснить, как аналитические продукты интегрируются с продакшен-системами.
16 сентября, 20:00 — 21:30
Лектор: Олег Дрюпин
Highload
Этот модуль посвящен высокопроизводительным вычислениям на Python. В модуле рассматриваются особенности конкурентного и асинхронного программирования и то, как на это влияет устройство виртуальной машины языка. Также внимание уделяется превратностям написания расширений на С и вопросам профилирования кода. В качестве бонуса происходит знакомство с языком Go, который часто используется Python-программистами для решения performance-critical задач.
Профилирование производительности
проанализировать особенности архитектуры, характеристики железа;
познакомиться с методиками профилирования кода;
разобраться с профилированием памяти и ЦПУ;
познакомиться с инструментами для профилирования, предоставляемыми в Linux.
28 сентября, 20:00 — 21:30
Лектор: Олег Дрюпин
Concurrency: многопоточное программирование и примитивы синхронизации // ДЗ
разобраться с терминологией конкурентного программирования;
рассмотреть ограничения, накладываемые виртуальной машиной на multithreading;
познакомиться с примитивами синхронизации из стандартной библиотеки.
30 сентября, 20:00 — 21:30
Лектор: Кирилл Стаценко
Домашние задания: 1
ДЗ
Memcache loader. В этом домашнем задании необходимо переделать готовый однопоточный скрипт, загружающий логи трекера мобильных приложений в кластер memcache'ей. Скрипт нужно сделать конкурентным, воспользовавшись возможностями многопоточной/многопроцессной обработки, для того чтобы оптимизировать время загрузки данных.
Concurrency: процессы и межпроцессное взаимодействие (IPC)
разобраться с превратностями запуска процессов в разных ОС;
познакомиться с возможностями коммуникации процессов для выполнения общей задачи;
рассмотреть устройство основных примитивов синхронизации.
5 октября, 20:00 — 21:30
Лектор: Олег Дрюпин
Ускорение с помощью C: расширения
разобраться с основными принципами написания расширений на языке C;
познакомиться с управлением памятью через reference counting;
рассмотреть подход к созданию сложных объектов.
7 октября, 20:00 — 21:30
Лектор: Валентин Шилин
Ускорение с помощью C: Cython, Pypy и FFI
разобраться с генерацией С-расширений из Python-кода с помощью Cython;
познакомиться с синтаксисом Cython;
рассмотреть область применимости PyPy;
научиться вызывать функции из уже скомпилированных приложений через ffi и ctypes/.
12 октября, 20:00 — 21:30
Лектор: Валентин Шилин
asyncio: происхождение и основы // ДЗ
познакомиться с историей появления asyncio в Python;
разобраться с корутинами и yield from;
разобраться с futures.
14 октября, 20:00 — 21:30
Лектор: Ринат Садыков
Домашние задания: 1
ДЗ
Crawler. В этом домашнем задании предлагается реализовать асинхронный краулер для новостного сайта news.ycombinator.com. Предполагается, что краулер запускается каждые N секунд, парсит топ новостей, сохраняя каждую, а также сохраняет все ссылки из обсуждения конкретной новости.
asyncio: event loop, внутренности async/await, низко- и высокоуровневое API
познакомиться с концепцией event loop, старым и новым синтаксисом асинхронных вызовов;
рассмотреть высоко- и низкоуровневое API asyncio;
разобраться с внутренним устройством awaitable объектов.
19 октября, 20:00 — 21:30
Лектор: Ринат Садыков
asyncio: инструменты и лучшие практики
познакомиться с асинхронным инструментарием языка;
разобраться с тем, как корректно запускать и останавливать асинхронные сервисы;
рассмотреть примеры асинхронных библиотек для общения с БД и сетью.
21 октября, 20:00 — 21:30
Лектор: Ринат Садыков
Golang: зачем он Python разработчику + тур по языку // ДЗ
познакомиться с синтаксисом, основными идиомами и экосистемой языка;
проанализировать область применимости языка, его сильные и слабые стороны;
провести сравнение с Python.
26 октября, 20:00 — 21:30
Лектор: Артём Тарасов
Домашние задания: 1
ДЗ
Go memcache loader. В этом домашнем задании предлагается переписать конкурентный memcache loader, реализованный на Python в одном из прошлых заданий, на Golang, соблюдая при этом идиоматику языка и используя его возможности, рассмотренные на занятии.
Golang: горутины, планировщик, конкурентная обработка
познакомиться с особенностями реализации языка;
рассмотреть принципы работы с памятью;
разобраться с диспетчером горутин;
познакомиться с примерами реальных задач, решаемых с помощью Go.
28 октября, 20:00 — 21:30
Лектор: Артём Тарасов
Обзор новинок и изменений из свежих версий Python
познакомиться с новшествами последних минорных версий языка;
обсудить грядущие анонсированные изменения;
разобраться с процессом миграции между версиями.
2 ноября, 20:00 — 21:30
Лектор: Артём Тарасов
Проектная работа
Заключительный месяц курса посвящен разработке проекта. В качестве темы выбирается то, что интересно писать студенту, и то, что потенциально можно будет потом включить в свое резюме. Участие в разработке некоего open source продукта тоже может рассматриваться в качестве выпускного проекта. При этом не обязательно закончить его за месяц. В процессе написания проекта можно получить консультации преподавателей.

Примеры тем проекта:
- система мониторинга ПК в корпоративной сети;
- свой ORM;
- web-приложение по поиску групп с целевой аудиторией в ВК;
- исследование dataset’а с визуализацией.
Выбор темы и организация проектной работы
выбрать и обсудить тему проектной работы;
спланировать работу над проектом;
ознакомиться с регламентом работы над проектом.
9 ноября, 20:00 — 21:30
Лектор: Олег Дрюпин
Домашние задания: 1
ДЗ
Проектная работа . Тема Итоговой Проектной Работы (далее - ИПР) может являться свободной для выбора, но необходимой для согласования в чате ДЗ.

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

## 1. Сбор и анализ требований

Сформировать собственные требования к итоговому продукту, опционально - провести опрос среди коллег/студентов для определения потенциальной ценности для пользователей. Определить бизнес-задачу, которую будет решать проект. Итоговые требования целесообразно включить в презентацию ИПР.

## 2. Планирование

На данном этапе уточняются и формализуются ключевые цели ИПР, его границы и приоритеты. Уточняется список автоматизируемых процессов (развёртывание, миграции БД и т.д.). Выполняется первичная оценка сроков, необходимых ресурсов и интеграций. Также на данном этапе полезно проанализировать сторонние проекты, которые могут использоваться для решения подобных задач, выявить существующие практики в данном направлении и рассмотреть целесообразность их внедрения в ИПР. Результат — понятный рабочий план ИПР, с оформленными целями, приоритетами, объёмом работ и ориентировочными сроками. Итоговый рабочий план и цели целесообразно включить в презентацию ИПР.

## 3. Проектирование

На данном этапе определяется архитектура ИПР, происходит выбор используемых технологий, прорабатываются пользовательские сценарии/ программные интерфейсы и определяется, как будут работать ключевые модули. Важно учесть не только текущие требования, но и перспективу масштабирования, поддержки и безопасности (Контейнеризацию, возможности по авторизации/аутентификации, способы хранения чувствительной информации). Итоговые требования и технологии целесообразно включить в презентацию ИПР.

## 4. Разработка

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

## 5. Тестирование

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

## 6. Развёртывание

На данном этапе необходимо развернуть проект в тестовой среде (в будущем пригодной к демонстрации на защите ИПР). Необходимо предусмотреть прозрачность и документальное обеспечение процесса развёртывания (как в автоматизированном так и в ручном режиме), с использованием технологий автоматизации процесса развёртывания, непрерывной интеграции и доставки (CI/CD), контейнеризации также с механизмами периодической проверки работоспособности ИПР. Краткую и обобщённую документацию по развёртыванию целесообразно включить в презентацию ИПР.

## 7. Эксплуатация и мониторинг

На данном этапе необходимо предусмотреть реализацию инструментов, имитирующих эксплуатацию ИПР - написать примеры запросов к сервису или примеры использования функций с отображением результатов работы. Данные инструменты необходимо реализовать с учётом возможности их демонстрации в процессе защиты ИПР. Также необходимо реализовать возможность демонстрации журналов логирования, отражающих эксплуатацию ИПР в режиме отладки (Debug). Инструменты, имитирующие эксплуатацию ИПР а также получаемые сообщения подсистемы логирования целесообразно использовать на этапе защиты ИПР.

## 8. Защита Итоговой Проектной Работы

На данном этапе необходимо предоставить ссылку на репозиторий с исходным кодом проекта а также подготовить презентацию к защите ИПР в 2-х вариантах, соответствующих следующим критериям:

### 8.1. Общая презентация ИПР

Презентация, рассчитанная на выступление приблизительной длительностью 5 минут (10-20 страниц) из расчёта 2-4 страницы на каждую минуту презентационного выступления.

### 8.2. Расширенная презентация ИПР

Презентация, рассчитанная на выступление приблизительной длительностью 10 минут (20-40 страниц) из расчёта 2-4 страницы на каждую минуту презентационного выступления.

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

## Формат сдачи

Выбрана тема и закреплена.
Разработан проект и ссылка на репозиторий отправлена в "чат с преподавателем".
Разработана презентация в 2-х вариантах, в соответствии с критериями оценки.
Проект представлен на защиту.
Консультация по проектам и домашним заданиям
получить ответы на вопросы по проекту, ДЗ и по курсу.
11 ноября, 20:00 — 21:30
Лектор: Олег Дрюпин
Защита проектных работ
защитить проект и получить рекомендации экспертов.
7 декабря, 20:00 — 21:30
Лектор: Олег Дрюпин

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

Станислав Ступников
Руководитель отдела разработки в VK
10+ лет опыта промышленной разработки, в том числе создания и поддержания веб-приложений, инфраструктурных решений, высоконагруженных систем, data pipeline'ов и аналитических систем.

3 года научной разработки для крупных государственных заказчиков с контрактами по тематике анализа больших объемов данных. Опыт программирования на Python, Go, Lua, C, JavaScript, Perl.

Широкий круг профессиональных интересов, начиная от построения распределенных систем, заканчивая машинным обучением. Более 5 лет преподавал программирование на Python студентам МГТУ им. Н.Э. Баумана. С момента старта преподаю на курсе по СУБД в образовательном центре VK при МГТУ им. Н.Э. Баумана. 4 года преподавания курса СУБД в Технопарк Mail.Ru. Закончил МГТУ им. Н.Э. Баумана по специальности «Специалист по защите информации» в 2013 году.
Преподаватель курсов:

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

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