Начало занятий 23 мая

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

Общая стоимость: 50 000 ₽
В месяц: 12 500 ₽
4 часа в неделю
5 месяцев
О курсе

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

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

Особенности курса: практикоориентированность и охват. На курсе много домашних заданий, некоторые из которых будут представлять настоящий challenge, а опциональные задания позволят самым смелым капнуть еще глубже и “потрогать” еще более продвинутые вещи. При этом области, в которых вы будете испытывать свои способности, имеют весьма широкий спектр: курс охватывает и web, и анализ данных и вопросы создания высоконагруженных систем. В конце курса вы реализуете проект на свободную тему.

Курс универсальный, рассматриваются и 2 и 3 версии Python. Домашние работы и проект можно выполнять на любой версии, примеры на занятиях чаще работают под обе версии, но большинство писались на 2ой версии, запущен процесс их переделывания на Python 3. Все необходимые отступления и обсуждения разницы в версиях делаются.

По окончании курса вы получите понимание структуры современной разработки ПО и место Python и прочих инструментов в ней, ответите на вопросы: “как писать простой и идиоматичный код, за который не будет мучительно стыдно?“, “как тестировать и поддерживать код на Python?“, “как написать приложение, которое не умрёт под нагрузкой?“

Трудозатраты
4 часа на занятия и 4-12 часов на домашнюю работу в неделю.

Программа курса
разработана совместно с Avito
1
Advanced
2
Web
3
Data engineering
4
Highload
5
Проектная работа
Занятие 1: Advanced basics. Часть 1
Кодировки, Unicode в Python 2, coercion. Floating point numbers, IEEE-754, особенности реализации, основные ошибки и особенности использования. Itertools, iterable, iterator, iterator protocol, sequence protocol. Generators: pipelines, routing, coroutines.
ДЗ
ДЗ-1: Log Analyzer. (1) Несколько упражнений на тему занятия: итераторы, генераторы, декораторы; (2) Делаем анализатор логов веб-сервера.
Занятие 2: Advanced basics. Часть 2
Функциональное программирование, рекурсия и ее ограничения, tail recursion optimization. Scoping, namespaces, замыкания и их устройство. Декораторы функции и классы, декораторы с аргументами, вложенные декораторы.
Занятие 3: Internals. Часть 1
CPython, внутренности и архитектура, байткод, stack virtual machine, интерпретация. Имплементация основных типов данных: строки, числа, списки, словари. Оптимизации.
ДЗ
ДЗ-2: CPython (опционально). Добавляем новый опкод и пару операторов, собираем свой Python. Понадобятся знания С.
Занятие 4: Internals. Часть 2
Memory model, allocation, reference counting, garbage collection. GIL, реализация и последствия, методы обхода.
Занятие 5: OOP. Часть 1
Object model, new-style classes, MRO, super. Множественное наследование, slots, new, name mangling. Дескрипторы, data и non-data дескрипторы, descriptor protocol, property.
ДЗ
ДЗ-3.0: Scoring API. Создаем декларативный язык описания и систему валидации запросов к HTTP API
Занятие 6: OOP. Часть 2
Интроспекция. Магические методы. Модуль ABC, абстрактные классы. Metaclasses и "черная магия". Design patterns, ключевые принципы, примеры.
Занятие 7: Testing. Часть 1
Пирамида тестирования. Test design, coverage. Unit testing, integration testing. Mocking, monkey patching. Фикстуры. Нагрузочное тестирование.
ДЗ
ДЗ-3.1: API Testing. Дописываем тесты API
Занятие 8: Testing. Часть 2
Автоматизация тестирования. Continuous integration, continuous delivery, continuous deployment. Canary deployment, feature flags, staged rollouts. Документирование.
Занятие 9: Automatization. Часть 1
Базы данных, коннекторы, ping-reconnect, конкурентное использование, connection pooling, "отстреливание" долгих запросов. Кеширование. Networking, socket, UDP, TCP/IP. HTTP, timeouts, requests.
ДЗ
ДЗ-4: Web Server. Создаем свой сервер на "ванильном" Python, частично реализующий протокол HTTP (будет корректно отдавать страницу wikipedia). Проводим нагрузочное тестирование.
Занятие 10: Automatization. Часть 2
Архитектуры web-server'ов. Демонизация, конфиги, логирование. Setup tools и дистрибуция, менеджмент зависимостей. Пакеты и пакетные менеджеры, сборка.
Занятие 11: Dynamic Web
Dynamic Web, CGI, FastCGI, WSGI, Gunicorn. uWSGI, обзор основных особенностей. Tiered architecture.
ДЗ
ДЗ-5: uWSGI Daemon/ Django Tutorial (опционально). Пишем стандартного "промышленного" демона, который будет отвечать по HTTP, ходить в базу, писать логи и собираться в пакет. Те, кто не знаком с Django, проходят tutorial.
Занятие 12: Django
Паттерн MVC\MTV, coding style, настройка окружения, структура Django проекта, конфигурация проектов, зависимости, маршрутизация URL.
Занятие 13: ORM и "зло"
Модели, CRUD, Query sets, lazy evaluation, prefetch\preload, join'ы, сложные запросы и raw SQL. Object managers.
ДЗ
ДЗ-6.0: Django project. Создание web-приложения аналога Stack Overflow. Определяемся со структурой и схемой данных.
Занятие 14: Database
Индексы. Транзакции и уровни изоляции. Миграции схемы и миграции данных, большие объемы данных. Репликация, перенос сложных запросов на slave'ы, распределение нагрузки. Шардирование. NoSQL.
Занятие 15: Views
Views, представления, виды представлений, function/class based views, generic views.
ДЗ
ДЗ-6.1: Django project. Начинаем рисовать красивые странички
Занятие 16: Формы
Формы, поля, процесс валидации, model form. Widgets. Templates, язык шаблонов, архитектура шаблонизатора. Фильтры, тэги. Jinja2
Занятие 17: REST API. Часть 1
Принципы REST, архитектурные стили, ограничения. Проектирование API, ресурсы, методы ошибки, версионирование. Django REST framework.
ДЗ
ДЗ-6.2: Django REST API (опционально). Добавляем к разрабатываемому приложению API.
Занятие 18: REST API. Часть 2
Rate limiting. Документация, swagger. Web Performance. Фронтэнд оптимизация, масштабирование бекэнда.
Занятие 19: NumPy. Часть 1
IPython, базовое использование, интроспекция, поиск, история, макросы, магические методы, взаимодействие с ОС, разработка. NumPy. ndarray, индексирование, маски, векторизация. Universal functions.
ДЗ
ДЗ-7: LogRegression. Дописываем логистический регрессор, используем его для классификации отзывов о еде из Amazon.
Занятие 20: NumPy. Часть 2
Reshaping, broadcasting, structured и record массивы, хранение и загрузка данных. Внутренности ndarray. Memmap, HDF5.
Занятие 21: Pandas
Pandas. Series. Dataframe, иерархические индексы, missing data, агрегация.
ДЗ
ДЗ-8: Open Data Analysis (опционально). Выбираем один из открытых dataset'ов и анализируем его с помощью pandas в IPython notebook.
Занятие 22: Matplotlib
Построение графиков, гистограммы, subplots, аннотации, стили. Data visualization, принципы правильных визуализаций.
Занятие 23: Concurrency. Часть 1
Concurrency, parallelism. IO/CPU bound задачи. Multithreading, sharing, communication.
ДЗ
ДЗ-9: MemcLoad. Реализуем конкурентную заливку данных в memcache'ы
Занятие 24: Concurrency. Часть 2
Multiprocessing, IPC, shared memory, Manager. Distributed computing
Занятие 25: C extensions
Написание расширений на C, C API.
ДЗ
ДЗ-10: Protobuf (de)serializer (опционально). Пишем свое расширение, которое будет писать файлы с protobuf сериализованным содержимым. Понадобятся знания C.
Занятие 26: ffi. Cython. Pypy
Занятие 27: Async. Часть 1
Generators, coroutines, yield from. Event loop. Future.
ДЗ
ДЗ-11: YCrawler. Пишем асинхронный краулер для новостного сайта news.ycombinator.com
Занятие 28: Async. Часть 2
async/await. Error handling
Занятие 29: Golang. Часть 1
Производительность Python. Golang. Toolchain, структура проекта, менеджмент зависимостей, тур по языку.
ДЗ
ДЗ-12: MemcLoad v2. Создаем простого демона на Go, проводим сравнение с аналогичным на Python.
Занятие 30: Golang. Часть 2
Внутренности: горутины, сборщик мусора, оптимизации.
Занятие 31: Profiling
Особенности архитектуры, характеристики железа. Антипаттерны профилирования. Методология. cProfile, line_profiler, memory_profiler. Инструменты Linux, perf.
Занятие 32: Python 3
Обзор изменений, новые фичи. Миграция проектов с 2 на 3 версию.
Заключительный месяц курса посвящен разработке проекта. В качестве темы выбирается то, что интересно писать студенту и то, что потенциально можно будет потом включить в свое резюме. Участие в разработке некоего open source продукта тоже может рассматриваться в качестве выпускного проекта. При этом не обязательно закончить его за месяц. В процессе написания по проекту можно получить консультации преподавателей.

Примеры тем проекта:
- система мониторинга ПК в корпоративной сети
- свой ORM
- web приложение по поиску групп с целевой аудиторией в ВК
- исследование dataset’а с визуализацией
Минимальные требования для прохождения курса

Чтобы начать познавать прекрасный мир advanced Python нужно предварительно обладать определенными знаниями. Если сформулировать емко, то это знания на уровне того, чтобы уметь сделать свой простенький (очень) поисковый движок. Тут и веб часть с html/css/js, и понимание сетевых вещей для обкачки ресурсов, и хранение добытого в БД, и представление о примитивах ОС (ведь краулер у нас вряд ли однопоточный) и алгоритмы какие-то, чтобы представить данные в виде, по которому быстро искать, и базовые представление о разработке с участием git’а, bash’а и прочего linux’а. Плюс ко всему понадобятся (рано или поздно) знания C.

1. Lutz M. Learning Python. – ” O’Reilly Media, Inc.“, 2013.
2. Hetland M. L. Python Algorithms: mastering basic algorithms in the Python Language. – Apress, 2014.,
3. Beazley D., Jones B. K. Python cookbook. – ” O’Reilly Media, Inc.“, 2013.
4. Martelli A. Python in a Nutshell. – ” O’Reilly Media, Inc.“, 2006.
5. http://www.pythonweekly.com/
6. http://pycoders.com/
7. http://pyvideo.org/
8. https://git-scm.com/book/en/v2
9. http://www.bottomupcs.com/
10. https://cstack.github.io/db_tutorial/
11. https://linuxjourney.com/

Преподаватели
Станислав Ступников
Ступников Станислав - программист рекламной системы в Mail.Ru. 6 лет опыта промышленной разработки, в том числе создания и поддержания веб-приложений, инфраструктурных решений, высоконагруженных систем, data pipeline'ов и аналитических систем. 3 года научной разработки для крупных государственных заказчиков с контрактами по тематике анализа больших объемов данных. Опыт программирования на Python, Go, Lua, C, JavaScript, Perl. Широкий круг профессиональных интересов, начиная от построения распределенных систем, заканчивая машинным обучением. Более 5 лет преподавания программирования на Python студентам МГТУ им. Н.Э. Баумана. 4 года преподавания курса СУБД в Технопарк Mail.Ru. Закончил МГТУ им. Н.Э. Баумана по специальности "Специалист по защите информации" в 2013 году.
Андрей Кравчук
Программист в «Ylab development».
Участник релиза 5-ой версии Free Download Manager.
Разработчик аналога Яндекс.маркета для печатной продукции на европейском рынке
Преподаватель в МУПОЧ "Дубна" дисциплин «C++», «Python», «Программирование в UNIX».
9 лет опыта коммерческой разработки на Python.
Область интересов - highload, машинное обучение, LISP-подобные языки.
Отзыв
Алексей Гребенщиков
Хочу сказать спасибо за курс «Разработчик Python» Станиславу Ступникову. Программа курса была очень насыщенной и постоянно держала в напряжении. Думать нужно было постоянно, идешь на работу – думаешь, обедаешь – думаешь, как же сделать эту домашку, как выбрать оптимальное решение, а вечером трудишься над реализацией.

Будущим студентом могу сказать, будет не просто сложно, а очень сложно. Помимо питона, нужно будет использовать Си и даже Го. Были охвачены практически все сферы коммерческого применения питона от Web до Data science, это позволяет понять для себя в какой же из сфер хочется дальше развиваться.

Станислав профессионал своего дела и будет заставлять вас писать промышленный код!
Работодатели