Advanced basics
Этот модуль посвящен рассмотрению фундаментальных основ языка на продвинутом уровне, а также применению общих практик разработки ПО в контексте "экосистемы" Python. Целью является достижение единого понятийного аппарата, формирование представления о внутреннем устройстве языка, его возможностях, ограничениях, недостатках и области применимости.
В модуле рассматриваются аспекты функционального, процедурного и ОО программирования на Python, особенности устройства виртуальной машины, вопросы обеспечения качества ПО и автоматизации инфраструктурных задач.
Advanced basics. Протоколы
разобраться в особенностях представления естественных языков в Python;
рассмотреть нюансы применения чисел с плавающей точкой;
осознать систему протоколов языка;
разобраться с концепцией итерирования в Python;
получить представление о реализации и применимости итераторов.
ДЗ
ДЗ-1: Log Analyzer.
Актуальное описание ДЗ искать в архиве с материалами занятия
Advanced basics. "Граждане первого порядка"
разобраться с особенностями применения ФП в Python;
рассмотреть пространства имен и замыкания;
рассмотреть устройство декораторов и способы их использования.
Internals. Виртуальная машина
разобраться с устройством виртуальной машины;
рассмотреть процесс исполнения кода;
рассмотреть фундаментальные абстракции, которыми оперирует виртуальная машины.
ДЗ
ДЗ-2: CPython (опционально).
Актуальное описание ДЗ искать в архиве с материалами занятия
Internals. Управление памятью, "печально известный" GIL
разобраться с работой основных типов данных и следствиями такой реализации;
рассмотреть процесс управлению памятью в Python;
объяснить, как GIL влияет на производительность Python программ.
OOP. Объектная модель
осознать устройство объектной модели Python;
разобраться с разделением на новые и классические классы;
объяснить тонкости множественного наследования;
разобраться с нюансами реализации ООП в Python.
ДЗ
ДЗ-3.0: Scoring API.
Актуальное описание ДЗ искать в архиве с материалами занятия
OOP. Белая и черная "магия"
объяснить дескрипторы и их протокол;
разобраться с использованием "магических методов";
рассмотреть область применимости абстрактных базовых классов;
проанализировать особенности эксплуатации метаклассов.
Testing. Дизайн тестов
разобраться с конструированием кейсов тестирования;
рассмотреть различия между видами тестирования;
доказать необходимость тестирования и его место в жизненном цикле ПО.
ДЗ
ДЗ-3.1: API Testing.
Дописываем тесты API
Testing. Пирамида тестирования
разобраться с устройством пирамиды тестирования;
рассмотреть область применения инструментов тестирования (моков, фикстур и т.д.);
разобраться с видами атоматизации тестирования.
Automatization. Сетевое взаимодействие
рассмотреть принципы сетевого взаимодействия через сокеты;
разобраться с особенностями сетевых протоколов;
рассмотреть нюансы написания программ, общающихся по сети.
ДЗ
ДЗ-4: Web Server.
Создаем свой сервер на "ванильном" Python, частично реализующий протокол HTTP (будет корректно отдавать страницу wikipedia). Проводим нагрузочное тестирование.
Automatization. Общение с БД и демонизация
рассмотреть нюансы общения с серверной БД и основные паттерны;
разобраться с процессом демонизации программ;
разобраться с дистрибуцией Python программ.
Web
Этот модуль посвящен веб-разработке, тому, какой она выглядит со стороны Python программиста и какими особенностями обладает.
Целью является рассмотрение нюансов и лучших практик по созданию и эксплуатации веб-сервисов с использованием фреймворка Django. В модуле рассматривается сам Django, внутреннее устройство ORM и других его составляющих, обсуждаются особенности построения REST API, масштабирования веб-проектов.
Dynamic Web
рассмотреть принципы функционирования динамического веба;
разобраться с WSGI и его особенностями;
поговорить о различных WSGI контейнерах.
ДЗ
ДЗ-5: uWSGI Daemon/ Django Tutorial (опционально).
Пишем стандартного "промышленного" демона, который будет отвечать по HTTP, ходить в базу, писать логи и собираться в пакет. Те, кто не знаком с Django, проходят tutorial.
Django. Intro
разобраться с классической структурой веб-сервисов;
рассмотреть лучшие практики развертывания Django проектов;
объяснить, как конфигурируются и эксплуатируются Django проекты.
Django. ORM и "зло"
поговорить о лучших практиках использования моделей;
объяснить, как работает ORM и из чего он состоит;
разобраться с написанием запросов через ORM;
проанализировать запросы.
ДЗ
ДЗ-6.0: Django project.
Создание web-приложения аналога Stack Overflow. Определяемся со структурой и схемой данных.
Database layer
объяснить, как навигироваться в комплексном пространстве мира распределенных систем и баз данных;
познакомиться с основными понятиями, связанными с эксплуатацией и оптимизацией хранилища данных.
Django. Views
разобраться с устройством логики представления в Django;
объяснить, каким образом выбирать подход к описанию этой логики.
ДЗ
ДЗ-6.1: Django project.
Начинаем рисовать красивые странички
Django. Forms
разобраться с логикой обработки форм и принципом их функционирования;
объяснить, как устроен template engine и как это влияет на его производительность.
REST API. Know-how
объяснить, что такое REST;
разобраться с лучшими практиками реализации этого подхода.
ДЗ
ДЗ-6.2: Django REST API (опционально).
Добавляем к разрабатываемому приложению API.
Web performance
рассмотреть пути масштабирования веб-проектов;
разобраться с производительностью фронтенда.
Data engineering
Этот модуль посвящен знакомству с фундаментальными библиотеками, применяемыми для анализа данных. Python является де-факто стандартом при решении аналитических задач, поэтому данный аспект языка нельзя обойти стороной. При этом, целью модуля является не погружение в математические дебри, а рассмотрение таких инструментов как jupyter, numpy, pandas и matplotlib и области их применения в инженерной и аналитической деятельности.
Основы NumPy
разобраться с областью применимости numpy и его основной структурой данных - ndarray;
рассмотреть индексирование и операции над массивами;
поговорить о возможностях библиотеки.
ДЗ
ДЗ-7: LogRegression.
Дописываем логистический регрессор, используем его для классификации отзывов о еде из Amazon.
Advanced NumPy и IPython
разобраться с внутренним устройством ndarray;
рассмотреть продвинутые операции с массивами и broadcasting; познакомиться с основными возможностями ipython.
Pandas. Машинное обучение и продакшен
разобраться с областью применимости pandas и его основной структурой данных - dataframe;
рассмотреть индексирование и операции над dataframe;
поговорить о возможностях библиотеки;
объяснить, как аналитические продукты интегрируются с продакшен системами.
ДЗ
ДЗ-8: Open Data Analysis (опционально).
Выбираем один из открытых dataset'ов и анализируем его с помощью pandas в IPython notebook.
Визуализация данных
разобраться с видовым многообразием библиотек визуализации данных в Python;
рассмотреть основные возможности matplotlib и два его интерфейса;
рассмотреть основные возможности seaborn и понять его преимущества над matplotlib;
познакомиться с принципами визуализации данных.
Highload
Этот модуль посвящен высокопроизводительным вычислениям на Python. В модуле рассматриваются особенности конкурентного и асинхронного программирования и то, как на это влияет устройство виртуальной машины языка. Так же внимание уделяется превратностям написания расширений на С и вопросам профилирования кода. В качестве бонуса происходит знакомство с языком Go, который часто используется Python программистами для решения performance-critical задач.
Concurrency. Потоки
разобраться с терминологией конкурентного программирования;
рассмотреть ограничения, накладываемые виртуальной машиной на multithreading;
познакомиться с примитивами синхронизации из стандартной библиотеки.
ДЗ
ДЗ-9: MemcLoad.
Реализуем конкурентную заливку данных в memcache'ы
Concurrency. Процессы
разобраться с превратностями запуска процессов в разных ОС;
познакомиться с возможностями коммуникации процессов для выполнения общей задачи;
рассмотреть устройство основных примитивов синхронизации.
C extensions
разобраться с основными принципами написания расширений на языке C;
познакомиться с управлением памятью через reference counting;
рассмотреть подход к созданию сложных объектов.
ДЗ
ДЗ-10: Protobuf (de)serializer (опционально).
Пишем свое расширение, которое будет писать файлы с protobuf сериализованным содержимым. Понадобятся знания C.
ffi. Cython. Pypy
разобраться с генерацией С расширений из Python кода с помощью Cython;
познакомиться с синтаксисом Cython;
рассмотреть область применимости PyPy;
научиться вызывать функции из уже скомпилированных приложений через ffi и ctypes/.
Asyncio. Origins
познакомиться с историей появления asyncio в Python;
разобраться с коррутинами и yield from;
разобраться с futures.
ДЗ
ДЗ-11: YCrawler.
Пишем асинхронный краулер для новостного сайта news.ycombinator.com
Asyncio. Event loop, async/await, low/high level API
познакомиться с концепцией event loop, старым и новым синтаксисом асинхронных вызовов;
рассмотреть высоко- и низкоуровневое API asyncio;
разобраться с внутренним устройством awaitable объектов.
Golang. Тур по языку
познакомиться с синтаксисом, основными идиомами и экосистемой языка;
проанализировать область применимости языка, его сильные и слабые стороны;
провести сравнение с Python.
ДЗ
ДЗ-12: MemcLoad v2.
Создаем простого демона на Go, проводим сравнение с аналогичным на Python.
Golang. Особенности внутреннего устройства
познакомиться с особенностями реализации языка;
рассмотреть принципы работы с памятью;
разобраться с диспетчером горутин;
познакомиться с примерами реальных задач, решаемых с помощью Go.
Profiling
проанализировать особенности архитектуры, характеристики железа;
познакомиться с методиками профилирования кода;
разобраться с профилированием памяти и ЦПУ;
познакомиться с инструментами для профилирования, предоставляемыми в linux.
Python 2 vs Python 3
рассмотреть особенности предыдущей версии;
обсудить миграцию проектов с 2 на 3 версию.
Проектная работа
Заключительный месяц курса посвящен разработке проекта. В качестве темы выбирается то, что интересно писать студенту и то, что потенциально можно будет потом включить в свое резюме. Участие в разработке некоего open source продукта тоже может рассматриваться в качестве выпускного проекта. При этом не обязательно закончить его за месяц. В процессе написания проекта можно получить консультации преподавателей.
Примеры тем проекта:
- система мониторинга ПК в корпоративной сети
- свой ORM
- web приложение по поиску групп с целевой аудиторией в ВК
- исследование dataset’а с визуализацией
Выбор темы и организация проектной работы
выбрать и обсудить тему проектной работы;
спланировать работу над проектом;
ознакомиться с регламентом работы над проектом.
ДЗ
Проект.
- выбрать тему;
- подтвердить тему в чате с преподавателем;
- предоставить промежуточные наработки на промежуточное ревью;
- предоставить финальную версию проекта к дедлайну.
Консультация по проектам и домашним заданиям
получить ответы на вопросы по проекту, ДЗ и по курсу.
Защита проектных работ
защитить проект и получить рекомендации экспертов.