Начало занятий 13 августа

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

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

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

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

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

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

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

После прохождения курса у вас будет:
- 6-11 (в зависимости от желания выполнять опциональные задания) выполненных ДЗ на все темы курса,
- 1 мини веб-проект,
- богатый список литературы и референсов для ознакомления и углубления знаний,
- код и материалы занятий, соединенные вместе в виде jupyter ноутбуков,
- видеозаписи всех вебинаров,
- проектная работа на интересную вам тему.

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

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