Comment apprendre le développement en Python: un nouveau cours vidéo de Yandex

L'automne dernier, la première école de développement backend a eu lieu au bureau de Yandex à Moscou. Nous avons tourné les leçons en vidéo et aujourd'hui, nous sommes heureux de partager le cours vidéo complet de l'école d'Habré. Il vous permettra d'apprendre le développement industriel en Python. Les auteurs des conférences sont des développeurs expérimentés de Yandex. Chaque vidéo contient des liens vers des exemples et des documents utiles.

Pour apprendre le cours, vous devez connaître les bases de Python et comprendre comment les applications sont déployées sur les serveurs. Nous nous attendons à ce que vous puissiez effectuer des requêtes de base de données et savoir comment les applications Web sont créées, au moins au niveau initial.

1. Dispositif CPython
2. Programmation orientée objet
3. Tests
4. Bases de données
5. Bases de données: modèles, migrations, tests
6. Architecture
7. Infrastructure
8. Algorithmes
9. Débogage, journalisation, profilage
10. Programmation asynchrone. Première conférence
11. Programmation asynchrone. Deuxième conférence
12. Programmation asynchrone. Troisième conférence

1. Dispositif CPython - Egor Ovcharenko


Parlons pourquoi et ce que nous écrivons en Python. Nous discuterons de la structure de l'interpréteur et des dictionnaires, de la gestion de la mémoire et du typage. Vous apprendrez comment fonctionnent les générateurs et comment fonctionnent les exceptions.


Présentation: yadi.sk/i/dcNx5Sgix4axOA

Références


L'interpréteur dans son ensemble:
docs.python.org/3/reference/executionmodel.html
github.com/python/cpython
leanpub.com/insidethepythonvirtualmachine/read

Memory Management:
arctrix.com/nas/python/gc
rushter.com/blog/pythython -memory-managment
instagram-engineering.com/dismissing-python-garbage-collection-at-instagram-4dca40b29172
stackify.com/python-garbage-collection

Exceptions:
bugs.python.org/issue17611

2. Programmation orientée objet - Valery Lisay


Parlons de la POO et de son implémentation en Python. Tenez compte des sujets et des concepts tels que les décorateurs, les descripteurs et les métaclasses.


Présentation: yadi.sk/i/f-UpCHCsnxqf9Q

Références


habr.com/ru/post/141411
docs.python.org/3/howto/descriptor.html
habr.com/ru/post/145835
ibm.com/developerworks/ru/library/l-pymeta
docs.python.org/ 2.5 / ref / slots.html

3. Essais - Maria Zelenova


Parlons de ce qu'est le test logiciel, de ce que sont les tests et pourquoi les écrire. Parlons des bibliothèques pour tester le code Python: unittest, pytest, doctest. Nous découvrirons en quoi ils diffèrent et examinerons des exemples de test simples. Nous aborderons le sujet de l'intégration continue: qu'est-ce que c'est, comment est-il utilisé dans le développement.


Présentation: yadi.sk/i/g6nd4aORJyrPMQ

Références


docs.python.org/3/library/unittest.html
docs.pytest.org/en/latest
docs.python.org/3/library/doctest.html

4. Bases de données - Tatyana Denisova


Parlons de ce que sont les données, quelles sont les bases de données et comment elles diffèrent. Vous apprendrez quelles fonctionnalités de la base de données vous devez garder à l'esprit du développeur. Nous discuterons de la façon de caractériser, structurer et stocker des données, en fonction des caractéristiques actuelles du système et de son évolution future.

Grâce aux connaissances acquises lors de la conférence, le développeur sera en mesure de comprendre dans lequel les sujets mentionnés doivent être approfondis pour résoudre un problème spécifique, et en cas de bogues, pour déterminer si le travail avec la base de données est la source du problème. Et si oui, de quelle manière creuser.


Présentation: yadi.sk/i/Uf5U_xwt5qGBIQ

5. Bases de données: modèles, migrations, tests - Alexander Vasin


Il s'agit d'un cours pratique sur les bases de données relationnelles utilisant PostgreSQL comme exemple. Parlons de la façon de choisir un SGBDR, de l'apparence de l'infrastructure en production, comparons les pilotes PostgreSQL synchrones et asynchrones. Nous découvrirons comment le pilote de base de données est organisé. Nous discuterons du travail efficace avec les données, les curseurs nommés et non nommés, l'utilisation des transactions, RETURNING et UPSERT.

Vous apprendrez comment créer une application tolérante aux pannes et évolutive, ce que sont Query Builder, ORM et quand les utiliser (en utilisant SQLAlchemy comme exemple), comment écrire des migrations de base de données (en utilisant Alembic comme exemple), et pourquoi et comment les tester.


Présentation: yadi.sk/i/DqYmAbrPu6en2g
Exemples: github.com/alvassin/alembic-quickstart

6. Architecture - Oleg Ermakov


Examinons trois parties de la conception de nouvelles fonctionnalités système:

- API pour l'interaction client-serveur;
- modèles de conception au niveau du code (justification du besoin de décomposition en référence à Martin Fowler);
- architecture d'interaction interservices.


Présentation: yadi.sk/d/PivB-ZJ0UJGjYQ

Références


Spécification du protocole HTTP:
tools.ietf.org/html/rfc2616
tools.ietf.org/html/rfc5789

15 faits triviaux sur l'utilisation du protocole HTTP:
habr.com/ru/company/yandex/blog/265569 Le

stagiaire Vasya et son histoire à propos de l'API idempotency:
habr.com/en/company/yandex/blog/442762

Patterns of Enterprise Application Architecture: martinfowler.com/eaaCatalog/index.html
Patterns Microservices: manning.com/books/microservices-patterns
Design Patterns: litres.ru / elizabet-robson / head-first-patterny-proektirovaniya-39123671
Conception pilotée par le domaine: s'attaquer à la complexité au cœur du logiciel: amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215
Optimisation de l'API Netflix: medium.com/netflix-techblog/optimizing-the-netflix-api-5c9ac715cf19

7. Infrastructure - Dmitry Orlov


Discutons de l'infrastructure autour du programme Python: référentiel d'index de package Python (PyPI), outil virtualenv, processus de déploiement, système de gestion de configuration Ansible, virtualisation et conteneurisation.


Présentation: yadi.sk/i/9eOXdelTpXkoEQ

Références


Package Python: docs.python.org/3.8/distutils/setupscript.html
virtualenv: docs.python.org/3.8/library/venv.html
Déploiement du logiciel: en.wikipedia.org/wiki/Software_deployment
Ansible: docs.ansible.com /ansible/latest/user_guide/quickstart.html
Virtualisation: en.wikipedia.org/wiki/Hardware_virtualization
Conteneurisation: en.wikipedia.org/wiki/OS-level_virtualization

8. Algorithmes - Ilya Volkov


Parlons des structures de données, de la complexité informatique et amortie.

En utilisant un exemple d'une simple liste de tâches et son évolution avec des améliorations progressives, nous considérons des approches pour les tâches d'écriture du côté serveur des applications Web. Nous passerons en revue les approches et les techniques courantes pour optimiser les tâches et le code. Dans la dernière partie de la conférence, nous examinerons le processus de réussite des entretiens techniques dans les entreprises informatiques.


Présentation: yadi.sk/i/hBbOjd4SqMlw5g

Liens


Implémentation de listes en Python: docs.python.org/3.7/faq/design.html#how-are-lists-implemented-in-cpython
Analyse de l'implémentation de listes en Python sur Habr: habr.com/en/post/273045
Analyse de l'algorithme B -Arbre sur Habré: habr.com/en/post/114154
Analyse de l'algorithme LRU: habr.com/en/post/136758
Travail du cache LRU dans Redis: redis.io/topics/lru-cache La
liste des commandes Redis avec des difficultés de calcul - c'est possible Devinez ce qui se passe sous le capot: redis.io/commands
Algorithmes galactiques: en.wikipedia.org/wiki/Galactic_algorithm
Exemple de tâche d'entrevue à partir d'une conférence: leetcode.com/problems/trapping-rain-water

Introduction à la théorie de la complexité sur Habré:habr.com/en/post/196560 Un
condensé de services pour la pratique de la programmation: tproger.ru/digest/competitive-programming-practice
Un exemple de service avec un ensemble de tâches plus ou moins simple pour explorer de nouvelles langues: exercism.io

9. Débogage, journalisation, profilage - Yuri Shikanov


Au début de la conférence, vous trouverez une introduction aux connaissances de base des systèmes d'exploitation (en particulier, Linux). Ensuite, nous considérerons la gestion de la mémoire, les processus, le multitâche, l'IPC, les fichiers, les appels système. Nous allons vous montrer comment travailler avec le débogueur Pdb intégré à Python. Parlons de la journalisation en général et de la bibliothèque de journalisation en Python. Nous apprenons comment faire face aux performances insuffisantes du programme et comment trouver un goulot d'étranglement dans lequel la plupart des ressources processeur ou mémoire sont dépensées.


Présentation: yadi.sk/d/BCky8YkLcbVeUA
Livre de programmation système Linux: oreilly.com/library/view/linux-system-programming/9781449341527

10. Programmation asynchrone. Première conférence - Edward Beetle


Considérez quel est le problème des applications synchrones et ce qui peut être fait à ce sujet.

Nous allons discuter de ce qui se passe du point de vue du système d'exploitation lors d'une requête HTTP, comment traiter plusieurs requêtes en même temps, et quels sont les avantages et les inconvénients des processus et des threads dans les serveurs Web. Vous découvrirez les fonctionnalités des threads en Python. Discutons des E / S non bloquantes: comment gérer plusieurs demandes dans un seul thread.

Parlons de ce qu'est la boucle d'événements et pourquoi elle est nécessaire. Nous aborderons le choix entre une solution synchrone et asynchrone.


Présentation: yadi.sk/i/OhqXMEOKzNlK6g

Références


Un robot d'exploration Web avec des coroutines asyncio: aosabook.org/en/500L/a-web-crawler-with-asyncio-coroutines.html
David Beazley: Generators: The Final Frontier: youtube.com/watch?v=D1twn9kLmYg

11. Programmation asynchrone. Deuxième conférence - Alexander Vasin


Cette conférence est une brève présentation de asyncio: la bibliothèque, l'interface et la norme pour la programmation asynchrone en Python.

Nous considérerons l'interface asyncio de haut niveau (coroutine, tâche, avenir et méthodes pour travailler avec eux), l'interface de bas niveau (boucle d'événement, politiques), ainsi que les interfaces asynchrones Python (gestionnaires de contexte, itérateurs, générateurs, compréhensions). Nous vous expliquerons pourquoi aiohttp est nécessaire, comment y écrire des applications Web. Vous apprendrez ce qu'est un middleware, comment aiohttp vous permet de sérialiser des données et comment effectuer des tâches asynchrones en arrière-plan.


Présentation: disk.yandex.ru/i/4gyVoP1DM9enxQ

Références


Votre propre async Build (par David Beazley): youtu.be/Y4Gt3Xjd7G8
Asyncio aujourd'hui et demain (Yuri Selivanov): youtu.be/3rSAtD2gKQE
le PEP 492: coroutines avec le async et la syntaxe await: python.org/dev/peps/pep-0492
le PEP 530: Compréhensions asynchrones: python.org/dev/peps/pep-0530

12. Programmation asynchrone. Troisième conférence - Dmitry Orlov


Lors du développement d'applications asynchrones avec Python et asyncio, des problèmes sont parfois associés à la gestion des tâches d'arrière-plan, au blocage de la sortie standard, à la stratégie de nouvelle tentative et aux opérations de blocage. Vous apprendrez comment l'équipe de service Edadil résout ces problèmes avec aiomisc, les concepts de base de ce projet open source, les classes de base, les services prêts à l'emploi, les décorateurs, le travail avec les flux et bien plus encore.


Présentation: yadi.sk/i/SAJnWVQNfdHV0w aiomisc
Documentation: pypi.org/project/aiomisc

All Articles