Разработчик Python

О курсе

Python является языком общего назначения и чаще всего применяется в разработке инфраструктурных решений, веб-приложений, систем контроля качества и аналитических систем. Исходя из этой предпосылки, курс нацелен на получение специализированных знаний связанных с различными областями применения языка. В курсе, в основном, рассматривается Python версии 2.7, но 3 версия не обходится стороной. При этом предполагается, что базовые вещи уже усвоены, и задачей становится изучение конкретных решений в рамках экосистемы Python. По ходу курса мы затронем каждую из вышеописанных областей, рассмотрим инструменты и практики, получившие там наиболее широкое применение, а также научимся писать прагматичный и идеоматичный код, который не стыдно не только запускать, но и показывать.

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

Необходимое время: 4 академических часа на занятия и 4 академических часа на домашнюю работу в неделю.

Программа курса
1
Advanced
Python
2
Web
3
Data
science
4
Highload
5
Проект



  • Advanced basics. Кодировки, Unicode в Python 2, coercion. Floating point numbers, IEEE-754, особенности реализации, основные ошибки и особенности использования.

    Itertools, iterable, iterator, iterator protocol, sequence protocol. Generators: piplines, routing, coroutines. Функциональное программирование, рекурсия и ее ограничения, tail recursion optimization. Scoping, namespaces, замыкания и их устройство. Декораторы функции и классы, декораторы с аргументами, вложенные декораторы.


  • HW1: Advanced Python Exercises. "Разгоночное" ДЗ: несколько упражнений на тему прошедшего занятия. Настройка окружения, coding style, релиз на github.



  • Internals. CPython, внутренности и архитектура, байткод, stack virtual machine, интерпретация. Имплементация основных типов данных: строки, числа, списки, словари, множества. Оптимизации. Memory model, allocation, pooling, reference counting, garbage collection и тюнинг. GIL, реализация и последствия, методы обхода.



  • HW2: Adding new statement to Python language. Продолжаем копаться в интерпретаторе, добавляем поддержку инкремента, собираем свой Python. Понадобятся знания С.



  • OOP. Object model, множественное наследование, method resolution order, C3 linearization. Дескрипторы, data и non-data дескрипторы, descriptor protocol, property. Интроспеция. Магические методы и перегрузка. Модуль ABC, абстрактные классы. Name mangling. Metaclasses и "черная магия". Design patterns, ключевые принципы, примеры.


  • HW3: OOP. Создаем декларативный язык описания и систему валидации запросов к HTTP API.



  • Automatization. Базы данных, коннекторы, ping-reconnect, конкурентное использование, SQL-инъекции, connection pooling, "отстреливание" долгих запросов. Кеширование, инвалидация кеша.

    Networking, socket, UDP, TCP/IP, клиент-серверное приложение, timeouts, HTTP, requests, REST, архитектуры web-server'ов. Демонизация, кастомные демоны, логирование, обработка ошибок, монитринг.

    Deployment. Setup tools и дистрибуция, менеджмент зависимостей. Пакеты и пакетные менеджеры, сборка, контейнеры, docker.


  • HW4: Asynchronous HTTP server. Создаем свой асинхронный сервер на "ванильном" Python, частично реализующий протокол HTTP (будет корректно отдавать страничку wikipedia). Проводим нагрузочное тестирование с помощью ab или wrk.




  • Стандарт WSGI. FastCGI, Gunicorn. uWSGI, обзор основных особенностей. Архитектура frontend - backend

    Django. Паттерн MVC\MTV, настройка окружения, структура Django проекта, конфигурация проектов, маршрутизация URL.


  • HW5: uWSGI microservice daemon. Пишем стандартного "промышленного" демона, который будет отвечать по HTTP, ходить в базу, писать логи и собираться в пакет.



  • ORM и "зло". Типичный CRUD в Django. Query sets, lazy evaluation, prefetch\preload, join'ы, сложные запросы и raw SQL. Object managers. Транзакции и уровни изоляции. Миграции схемы и миграции данных, большие объемы данных. Репликация, перенос сложных запросов на slave'ы, распределение нагрузки. Шардирование. NoSQL

    SQLAlchemy. Задание схемы, основные типы, типичный CRUD, exceptions и транзакции.


  • HW6: Django App I. Сквозное ДЗ на несколько занятий: создание web-приложения. Определяемся со структурой и схемой данных.



  • Views, представления, виды представлений, function/class based views, generic views. Формы, поля, процесс валидаци, model form. Widgets.

    Templates, язык шаблонов, контекст и рендеринг, рендеринг на стороне клиента и сервера, кеширование. Встроенные фильтры\тэги и создание кастомных. Альтернативные шаблонизаторы, Jinja2


  • HW7: Django App II. Начинаем рисовать красивые странички.



  • Middleware, применение и кастомизация, обзор готовых, написание собственного middleware. Django Admin, кастомизация, генерация документации, безопасность.

    Testing. Юнит тесты, интеграционные тесты, ручные тесты, покрытие тестами. Mocking, monkey patching. Тестирование верстки. Selenium. Continuous integration и continuous delivery. Документирование.


  • HW8: Django App III. Дописываем свой middlware для трейсинга запросов. Покрывает тестами.



  • REST API. Архитектура и особенности, версионирование, endpoint'ы, аутентификация, json, Google API desigh guide. REST фреймворки, Django REST framework. Rate limiting. Документация, swagger.

    Отложеннная и асинхронная обработка, очереди задач и очереди сообщений, celery.

    Другие фреймворки: Twisted. Tornado. Flask.


  • HW9: Django App IV. Добавляем к разабатываемому приложению API.




  • IPython, базовое использование, исключения, история команд, макросы, магические методы, взаимодействие с ОС, разработка, notebook

    SciPy и NumPy. Основные принципы и типы данных, массивы, ndarray, функции над массивами, матрицы, линейная алгебра. Reshaping, broadcasting, structured и record массивы, сортировки, хранение и загрузка данных. Оптимизация производительности.


  • HW10: Logistic Regression. Дописываем логистический регрессор, используем его для классификации отзывов о еде из Amazon. Экспериментируем в IPython notebook.



  • Pandas, базовое использование, загрузка и сохранение данных, форматы данных. Очистка данных, transform, reshape, merge. Временные ряды.

    Scikit-learn, тренировочная и тестовая выборки, модели, обучение, кросс-валидация. Сериализация обученных моделей, интеграция с production.


  • HW11: Open data analysis. Выбираем один из открытых dataset'ов и анализируем его с помощью pandas в IPython notebook.



  • Visualization. Построение графиков, визуализация статистических данных, инфографика. matplotlib, seaborn, pandas, d3.js .

    Python and Hadoop. Основы Hadoop, архитектура, HDFS, концепция map-reduce, streaming. Цикл ETL, data pipeline'ы.


  • HW12: MapReduce task with visualization. Поднимает локальный Hadoop, пишем job'у по обработке готового dataset'а, запускаем с помощью Hadoop Streaming, визуализируем результат.




  • Profiling. Средства профилирования, модули языка, инсрументы операционной системы (Linux). CPU, кеширование. Memory, расход памяти, утечки. Трейсинг, perf.

    Concurrency, parallelism, межпроцессорное взаимодействие, event'ы, блокировки, синхронизация доступа, shared state. Multithreading, multiprocessing. Асинхронный gevent, event loop, greenlet.


  • HW13: Concurrent file processing. Реализуем конкурентную обработку файлов.



  • C extensions, Написание расширений на C, C API, сборка. ctypes, cffi.

    Cython. Pypy.


  • HW14: Protobuf (un)packer extension. Пишем свое расширение, которое будет писать файлы с protobuf сереализованным содержимым. Понадобятся знания C.



  • Clustering. Parallel Python, IPython Parallel, Queues.

    Оптимизация потребления памяти. Вероятностные структуры данных.

    Производительность Python. Golang.


  • HW15: Concurrent file processing in Go. Создаем простого демона на Go по аналогии с HW13, проводим сравнение.



  • Python 3. Обзор изменений, внутренности, новые фичи, asyncio. Миграция проектов с 2 на 3 верси..


  • HW16: Python 3 Exercises. Финальное ДЗ, набор упражнений по усвоению оcбенностей третьей версии Python.



  • Monitoring system


  • Flask REST API


  • Django Web App


  • Data pipeline


  • Custom project

Преподаватели
Станислав Ступников
Ступников Станислав - программист рекламной системы в Mail.Ru. 6 лет опыта промышленной разработки, в том числе создания и поддержания веб-приложений, инфраструктурных решений, высоконагруженных систем, data pipeline'ов и аналитических систем. 3 года научной разработки для крупных государственных заказчиков с контрактами по тематике анализа больших объемов данных. Опыт программирования на Python, Go, Lua, C, JavaScript, Perl. Широкий круг профессиональных интересов, начиная от построения распределенных систем, заканчивая машинным обучением. Более 5 лет преподавания программирования на Python студентам МГТУ им. Н.Э. Баумана. 4 года преподавания курса СУБД в Технопарк Mail.Ru. Закончил МГТУ им. Н.Э. Баумана по специальности "Специалист по защите информации" в 2013 году.
Работодатели