- PVSM.RU - https://www.pvsm.ru -

Как научиться разработке на Python: новый видеокурс Яндекса

Как научиться разработке на Python: новый видеокурс Яндекса - 1 [1]Осенью прошлого года в московском офисе Яндекса прошла первая Школа бэкенд-разработки. Мы сняли занятия на видео и сегодня рады поделиться на Хабре полным видеокурсом Школы. Он позволит вам научиться промышленной разработке на Python. Авторы лекций — опытные разработчики в Яндексе. К каждому видео приложены ссылки на примеры и полезные материалы.

Для изучения курса нужно знать основы Python и понимать, как приложения развёртываются на серверах. Мы ждём, что вы умеете делать запросы к базам данных и знаете, как создаются веб‑приложения, — хотя бы на начальном уровне.

1. Устройство CPython [2]
2. Объектно-ориентированное программирование [3]
3. Тестирование [4]
4. Базы данных [5]
5. Базы данных: модели, миграции, тестирование [6]
6. Архитектура [7]
7. Инфраструктура [8]
8. Алгоритмы [9]
9. Дебаг, логирование, профилирование [10]
10. Асинхронное программирование. Лекция первая [11]
11. Асинхронное программирование. Лекция вторая [12]
12. Асинхронное программирование. Лекция третья [13]

1. Устройство CPython — Егор Овчаренко

Поговорим о том, почему и что мы пишем на Python. Обсудим устройство интерпретатора и словарей, менеджмент памяти и типизацию. Вы узнаете, как работают генераторы и как устроены исключения.

Презентация: yadi.sk/i/dcNx5Sgix4axOA [14]

Ссылки

Интепретатор в целом:
docs.python.org/3/reference/executionmodel.html [15]
github.com/python/cpython [16]
leanpub.com/insidethepythonvirtualmachine/read [17]

Управление памятью:
arctrix.com/nas/python/gc [18]
rushter.com/blog/python-memory-managment [19]
instagram-engineering.com/dismissing-python-garbage-collection-at-instagram-4dca40b29172 [20]
stackify.com/python-garbage-collection [21]

Исключения:
bugs.python.org/issue17611 [22]

2. Объектно-ориентированное программирование — Валерий Лисай

Поговорим об ООП и его реализации в языке Python. Рассмотрим такие темы и понятия, как декораторы, дескрипторы и метаклассы.

Презентация: yadi.sk/i/f-UpCHCsnxqf9Q [23]

Ссылки

habr.com/ru/post/141411 [24]
docs.python.org/3/howto/descriptor.html [25]
habr.com/ru/post/145835 [26]
ibm.com/developerworks/ru/library/l-pymeta [27]
docs.python.org/2.5/ref/slots.html [28]

3. Тестирование — Мария Зеленова

Поговорим о том, что такое тестирование ПО, какие бывают тесты и зачем их писать. Расскажем про библиотеки для тестирования Python-кода: unittest, pytest, doctest. Узнаем, чем они отличаются, и посмотрим на простые примеры тестов. Затронем тему непрерывной интеграции: что это такое, как это используется в разработке.

Презентация: yadi.sk/i/g6nd4aORJyrPMQ [29]

Ссылки

docs.python.org/3/library/unittest.html [30]
docs.pytest.org/en/latest [31]
docs.python.org/3/library/doctest.html [32]

4. Базы данных — Татьяна Денисова

Поговорим о том, что такое данные, какие базы данных бывают и чем они отличаются. Вы узнаете, какие особенности работы с БД нужно иметь в виду разработчику. Обсудим, как характеризовать, структурировать и хранить данные с расчётом на текущие особенности системы и её будущее масштабирование.

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

Презентация: yadi.sk/i/Uf5U_xwt5qGBIQ [33]

5. Базы данных: модели, миграции, тестирование — Александр Васин

Это лекция о практической работе с реляционными базами данных на примере PostgreSQL. Поговорим о том, как выбрать РСУБД, как выглядит инфраструктура в продакшене, сравним синхронные и асинхронные драйверы PostgreSQL. Узнаем, как устроен драйвер БД. Обсудим эффективную работу с данными, именованные и неименованные курсоры, использование транзакций, RETURNING и UPSERT.

Вы узнаете, как сделать отказоустойчивое и масштабируемое приложение, что такое Query Builder, ORM и когда их использовать (на примере SQLAlchemy), как писать миграции БД (на примере Alembic), а также зачем и как их тестировать.

Презентация: yadi.sk/i/DqYmAbrPu6en2g [34]
Примеры: github.com/alvassin/alembic-quickstart [35]

6. Архитектура — Олег Ермаков

Рассмотрим три части проектирования новой функциональности системы:

— API для клиент-серверного взаимодействия;
— паттерны проектирования на уровне кода (обоснование необходимости декомпозиции со ссылкой на Мартина Фаулера);
— архитектура межсервисного взаимодействия.

Презентация: yadi.sk/d/PivB-ZJ0UJGjYQ [36]

Ссылки

Спецификация протокола HTTP:
tools.ietf.org/html/rfc2616 [37]
tools.ietf.org/html/rfc5789 [38]

15 тривиальных фактов о правильной работе с протоколом HTTP:
habr.com/ru/company/yandex/blog/265569 [39]

Стажер Вася и его история об идемпотентности API:
habr.com/ru/company/yandex/blog/442762 [40]

Patterns of Enterprise Application Architecture: martinfowler.com/eaaCatalog/index.html [41]
Microservices Patterns: manning.com/books/microservices-patterns [42]
Паттерны проектирования: litres.ru/elizabet-robson/head-first-patterny-proektirovaniya-39123671 [43]
Domain-Driven Design: Tackling Complexity in the Heart of Software: amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215 [44]
Optimizing the Netflix API: medium.com/netflix-techblog/optimizing-the-netflix-api-5c9ac715cf19 [45]

7. Инфраструктура — Дмитрий Орлов

Обсудим инфраструктуру вокруг программы на Python: репозиторий Python Package Index (PyPI), инструмент virtualenv, процесс деплоймента, систему управления конфигурациями Ansible, виртуализацию и контейнеризацию.

Презентация: yadi.sk/i/9eOXdelTpXkoEQ [46]

Ссылки

Python Package: docs.python.org/3.8/distutils/setupscript.html [47]
virtualenv: docs.python.org/3.8/library/venv.html [48]
Развёртывание ПО: en.wikipedia.org/wiki/Software_deployment [49]
Ansible: docs.ansible.com/ansible/latest/user_guide/quickstart.html [50]
Виртуализация: en.wikipedia.org/wiki/Hardware_virtualization [51]
Контейнеризация: en.wikipedia.org/wiki/OS-level_virtualization [52]

8. Алгоритмы — Илья Волков

Поговорим о структурах данных, вычислительной и амортизированной сложности.

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

Презентация: yadi.sk/i/hBbOjd4SqMlw5g [53]

Cсылки

Реализация списков в Python: docs.python.org/3.7/faq/design.html#how-are-lists-implemented-in-cpython [54]
Разбор реализации списков в Python на Хабре: habr.com/ru/post/273045 [55]
Разбор алгоритма B-Tree на Хабре: habr.com/ru/post/114154 [56]
Разбор алгоритма LRU: habr.com/ru/post/136758 [57]
Работа LRU кэша в Redis: redis.io/topics/lru-cache [58]
Список команд Redis с вычислительными сложностями — можно поугадывать, что происходит под капотом: redis.io/commands [59]
Галактические алгоритмы: en.wikipedia.org/wiki/Galactic_algorithm [60]
Пример задачи на собеседовании из лекции: leetcode.com/problems/trapping-rain-water [61]

Введение в теорию сложности на Хабре: habr.com/ru/post/196560 [62]
Дайджест сервисов для практики программирования: tproger.ru/digest/competitive-programming-practice [63]
Пример сервиса с более-менее простым набором задач для знакомства с новыми языками: exercism.io [64]

9. Дебаг, логирование, профилирование — Юрий Шиканов

В начале лекции вас ждёт введение в базовые знания по операционным системам (в частности, Linux). Затем рассмотрим управление памятью, процессами, многозадачность, IPC, файлы, системные вызовы. Покажем, как работать со встроенным в Python дебаггером Pdb. Поговорим про логирование в целом и про библиотеку logging в Python. Узнаем, как бороться с недостаточной производительностью программ и как найти узкое место, в котором тратится больше всего ресурсов процессора или памяти.

Презентация: yadi.sk/d/BCky8YkLcbVeUA [65]
Книга «Linux System Programming»: oreilly.com/library/view/linux-system-programming/9781449341527 [66]

10. Асинхронное программирование. Лекция первая — Эдуард Жук

Рассмотрим, в чём проблема синхронных приложений и что с этим можно сделать.

Обсудим, что происходит с точки зрения ОС при HTTP-запросе, как обрабатывать несколько запросов одновременно и какие есть преимущества и недостатки у процессов и потоков в веб-серверах. Вы узнаете об особенностях потоков в Python. Обсудим неблокирующий ввод-вывод: как обрабатывать несколько запросов в одном потоке.

Поговорим о том, что такое event-loop и зачем он нужен. Затронем тему выбора между синхронным и асинхронным решением.

Презентация: yadi.sk/i/OhqXMEOKzNlK6g [67]

Ссылки

A Web Crawler With asyncio Coroutines: aosabook.org/en/500L/a-web-crawler-with-asyncio-coroutines.html [68]
David Beazley: Generators: The Final Frontier: youtube.com/watch?v=D1twn9kLmYg [69]

11. Асинхронное программирование. Лекция вторая — Александр Васин

Эта лекция — небольшая обзорная экскурсия по asyncio: библиотеке, интерфейсу и стандарту для асинхронного программирования в Python.

Мы рассмотрим высокоуровневый интерфейс asyncio (coroutine, task, future и методы для работы с ними), низкоуровневый интерфейс (цикл событий, политики), а также асинхронные интерфейсы Python (менеджеры контекста, итераторы, генераторы, comprehensions). Расскажем, зачем нужен aiohttp, как на нем написать веб-приложения. Вы узнаете, что такое middleware, каким образом aiohttp позволяет сериализовать данные и как выполнять асинхронные задачи в фоне.

Презентация: disk.yandex.ru/i/4gyVoP1DM9enxQ [70]

Ссылки

Build your own async (David Beazley): youtu.be/Y4Gt3Xjd7G8 [71]
Asyncio сегодня и завтра (Юрий Селиванов): youtu.be/3rSAtD2gKQE [72]
PEP 492: Coroutines with async and await syntax: python.org/dev/peps/pep-0492 [73]
PEP 530: Asynchronous Comprehensions: python.org/dev/peps/pep-0530 [74]

12. Асинхронное программирование. Лекция третья — Дмитрий Орлов

При разработке асинхронных приложений с Python и asyncio иногда возникают проблемы, связанные c управлением фоновыми задачами, блокировкой stdout, retry policy и блокирующими операциями. Вы узнаете о том, как команда сервиса Едадил решает эти проблемы при помощи aiomisc, об основных концепциях этого опенсорсного проекта, базовых классах, готовых сервисах, декораторах, работе с потоками и о многом другом.

Презентация: yadi.sk/i/SAJnWVQNfdHV0w [75]
Документация к aiomisc: pypi.org/project/aiomisc [76]

Автор: Дмитрий

Источник [77]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/python/352441

Ссылки в тексте:

[1] Image: https://habr.com/ru/company/yandex/blog/498856/

[2] 1. Устройство CPython: #1

[3] 2. Объектно-ориентированное программирование: #2

[4] 3. Тестирование: #3

[5] 4. Базы данных : #4

[6] 5. Базы данных: модели, миграции, тестирование : #5

[7] 6. Архитектура : #6

[8] 7. Инфраструктура: #7

[9] 8. Алгоритмы : #8

[10] 9. Дебаг, логирование, профилирование : #9

[11] 10. Асинхронное программирование. Лекция первая : #10

[12] 11. Асинхронное программирование. Лекция вторая: #11

[13] 12. Асинхронное программирование. Лекция третья: #12

[14] yadi.sk/i/dcNx5Sgix4axOA: https://yadi.sk/i/dcNx5Sgix4axOA

[15] docs.python.org/3/reference/executionmodel.html: https://docs.python.org/3/reference/executionmodel.html

[16] github.com/python/cpython: https://github.com/python/cpython

[17] leanpub.com/insidethepythonvirtualmachine/read: https://leanpub.com/insidethepythonvirtualmachine/read

[18] arctrix.com/nas/python/gc: http://arctrix.com/nas/python/gc/

[19] rushter.com/blog/python-memory-managment: https://rushter.com/blog/python-memory-managment/

[20] instagram-engineering.com/dismissing-python-garbage-collection-at-instagram-4dca40b29172: https://instagram-engineering.com/dismissing-python-garbage-collection-at-instagram-4dca40b29172

[21] stackify.com/python-garbage-collection: https://stackify.com/python-garbage-collection/

[22] bugs.python.org/issue17611: https://bugs.python.org/issue17611

[23] yadi.sk/i/f-UpCHCsnxqf9Q: https://yadi.sk/i/f-UpCHCsnxqf9Q

[24] habr.com/ru/post/141411: https://habr.com/ru/post/141411/

[25] docs.python.org/3/howto/descriptor.html: https://docs.python.org/3/howto/descriptor.html

[26] habr.com/ru/post/145835: https://habr.com/ru/post/145835/

[27] ibm.com/developerworks/ru/library/l-pymeta: https://ibm.com/developerworks/ru/library/l-pymeta/

[28] docs.python.org/2.5/ref/slots.html: https://docs.python.org/2.5/ref/slots.html

[29] yadi.sk/i/g6nd4aORJyrPMQ: https://yadi.sk/i/g6nd4aORJyrPMQ

[30] docs.python.org/3/library/unittest.html: https://docs.python.org/3/library/unittest.html

[31] docs.pytest.org/en/latest: https://docs.pytest.org/en/latest/

[32] docs.python.org/3/library/doctest.html: https://docs.python.org/3/library/doctest.html

[33] yadi.sk/i/Uf5U_xwt5qGBIQ: https://yadi.sk/i/Uf5U_xwt5qGBIQ

[34] yadi.sk/i/DqYmAbrPu6en2g: https://yadi.sk/i/DqYmAbrPu6en2g

[35] github.com/alvassin/alembic-quickstart: https://github.com/alvassin/alembic-quickstart

[36] yadi.sk/d/PivB-ZJ0UJGjYQ: https://yadi.sk/d/PivB-ZJ0UJGjYQ

[37] tools.ietf.org/html/rfc2616: https://tools.ietf.org/html/rfc2616

[38] tools.ietf.org/html/rfc5789: https://tools.ietf.org/html/rfc5789

[39] habr.com/ru/company/yandex/blog/265569: https://habr.com/ru/company/yandex/blog/265569/

[40] habr.com/ru/company/yandex/blog/442762: https://habr.com/ru/company/yandex/blog/442762/

[41] martinfowler.com/eaaCatalog/index.html: https://martinfowler.com/eaaCatalog/index.html

[42] manning.com/books/microservices-patterns: https://manning.com/books/microservices-patterns

[43] litres.ru/elizabet-robson/head-first-patterny-proektirovaniya-39123671: https://litres.ru/elizabet-robson/head-first-patterny-proektirovaniya-39123671/

[44] amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215: https://amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215

[45] medium.com/netflix-techblog/optimizing-the-netflix-api-5c9ac715cf19: https://medium.com/netflix-techblog/optimizing-the-netflix-api-5c9ac715cf19

[46] yadi.sk/i/9eOXdelTpXkoEQ: https://yadi.sk/i/9eOXdelTpXkoEQ

[47] docs.python.org/3.8/distutils/setupscript.html: https://docs.python.org/3.8/distutils/setupscript.html

[48] docs.python.org/3.8/library/venv.html: https://docs.python.org/3.8/library/venv.html

[49] en.wikipedia.org/wiki/Software_deployment: https://en.wikipedia.org/wiki/Software_deployment

[50] docs.ansible.com/ansible/latest/user_guide/quickstart.html: https://docs.ansible.com/ansible/latest/user_guide/quickstart.html

[51] en.wikipedia.org/wiki/Hardware_virtualization: https://en.wikipedia.org/wiki/Hardware_virtualization

[52] en.wikipedia.org/wiki/OS-level_virtualization: https://en.wikipedia.org/wiki/OS-level_virtualization

[53] yadi.sk/i/hBbOjd4SqMlw5g: https://yadi.sk/i/hBbOjd4SqMlw5g

[54] docs.python.org/3.7/faq/design.html#how-are-lists-implemented-in-cpython: https://docs.python.org/3.7/faq/design.html#how-are-lists-implemented-in-cpython

[55] habr.com/ru/post/273045: https://habr.com/ru/post/273045/

[56] habr.com/ru/post/114154: https://habr.com/ru/post/114154/

[57] habr.com/ru/post/136758: https://habr.com/ru/post/136758/

[58] redis.io/topics/lru-cache: https://redis.io/topics/lru-cache

[59] redis.io/commands: https://redis.io/commands

[60] en.wikipedia.org/wiki/Galactic_algorithm: https://en.wikipedia.org/wiki/Galactic_algorithm

[61] leetcode.com/problems/trapping-rain-water: https://leetcode.com/problems/trapping-rain-water/

[62] habr.com/ru/post/196560: https://habr.com/ru/post/196560/

[63] tproger.ru/digest/competitive-programming-practice: https://tproger.ru/digest/competitive-programming-practice/

[64] exercism.io: https://exercism.io

[65] yadi.sk/d/BCky8YkLcbVeUA: https://yadi.sk/d/BCky8YkLcbVeUA

[66] oreilly.com/library/view/linux-system-programming/9781449341527: https://oreilly.com/library/view/linux-system-programming/9781449341527/

[67] yadi.sk/i/OhqXMEOKzNlK6g: https://yadi.sk/i/OhqXMEOKzNlK6g

[68] aosabook.org/en/500L/a-web-crawler-with-asyncio-coroutines.html: https://aosabook.org/en/500L/a-web-crawler-with-asyncio-coroutines.html

[69] youtube.com/watch?v=D1twn9kLmYg: https://youtube.com/watch?v=D1twn9kLmYg

[70] disk.yandex.ru/i/4gyVoP1DM9enxQ: https://disk.yandex.ru/i/4gyVoP1DM9enxQ

[71] youtu.be/Y4Gt3Xjd7G8: https://youtu.be/Y4Gt3Xjd7G8

[72] youtu.be/3rSAtD2gKQE: https://youtu.be/3rSAtD2gKQE

[73] python.org/dev/peps/pep-0492: https://python.org/dev/peps/pep-0492/

[74] python.org/dev/peps/pep-0530: https://python.org/dev/peps/pep-0530/

[75] yadi.sk/i/SAJnWVQNfdHV0w: https://yadi.sk/i/SAJnWVQNfdHV0w

[76] pypi.org/project/aiomisc: https://pypi.org/project/aiomisc/

[77] Источник: https://habr.com/ru/post/498856/?utm_source=habrahabr&utm_medium=rss&utm_campaign=498856