Wie man die Entwicklung in Python lernt: Ein neuer Videokurs von Yandex

Im vergangenen Herbst fand im Moskauer BĂŒro von Yandex die erste Backend Development School statt. Wir haben den Unterricht auf Video gedreht und freuen uns, heute den vollstĂ€ndigen Videokurs der Schule auf HabrĂ© zu teilen. Damit können Sie die industrielle Entwicklung in Python lernen. Die Autoren der VortrĂ€ge sind erfahrene Entwickler bei Yandex. Jedes Video enthĂ€lt Links zu Beispielen und nĂŒtzlichen Materialien.

Um den Kurs zu erlernen, mĂŒssen Sie die Grundlagen von Python kennen und verstehen, wie Anwendungen auf Servern bereitgestellt werden. Wir erwarten, dass Sie Datenbankabfragen durchfĂŒhren und wissen können, wie Webanwendungen zumindest auf der Anfangsebene erstellt werden.

 1. CPython-GerĂ€t
 2. Objektorientierte Programmierung
 3. Testen
 4. Datenbanken
 5. Datenbanken: Modelle, Migrationen, Tests
 6. Architektur
 7. Infrastruktur
 8. Algorithmen
 9. Debuggen, Protokollieren, Profilieren
 10. Asynchrone Programmierung. Vorlesung eins
 11. Asynchrone Programmierung. Vorlesung zwei
 12. Asynchrone Programmierung. Dritte Vorlesung

1. CPython-GerÀt - Egor Ovcharenko


Lassen Sie uns darĂŒber sprechen, warum und was wir in Python schreiben. Wir werden die Interpretation und das Wörterbuchdesign, die Speicherverwaltung und die Eingabe diskutieren. Sie erfahren, wie Generatoren funktionieren und wie Ausnahmen funktionieren.


PrÀsentation: yadi.sk/i/dcNx5Sgix4axOA

Verweise


Der Interpreter als Ganzes:
docs.python.org/3/reference/executionmodel.html
github.com/python/cpython
leanpub.com/insidethepythonvirtualmachine/read

Speicherverwaltung:
arctrix.com/nas/python/gc
Rushter.com/blog/python -Speicher-managment
instagram-engineering.com/dismissing-python-garbage-collection-at-instagram-4dca40b29172
stackify.com/python-garbage-collection

Ausnahmen:
bugs.python.org/issue17611

2. Objektorientierte Programmierung - Valery Lisay


Lassen Sie uns ĂŒber OOP und seine Implementierung in Python sprechen. BerĂŒcksichtigen Sie Themen und Konzepte wie Dekoratoren, Deskriptoren und Metaklassen.


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

Verweise


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. Testen - Maria Zelenova


Lassen Sie uns darĂŒber sprechen, was Softwaretests sind, was Tests sind und warum sie geschrieben werden. Lassen Sie uns ĂŒber Bibliotheken zum Testen von Python-Code sprechen: unittest, pytest, doctest. Wir werden herausfinden, wie sie sich unterscheiden, und uns einfache Testbeispiele ansehen. Wir werden auf das Thema der kontinuierlichen Integration eingehen: Was ist das, wie wird es in der Entwicklung verwendet?


PrÀsentation: yadi.sk/i/g6nd4aORJyrPMQ

Verweise


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

4. Datenbanken - Tatyana Denisova


Lassen Sie uns darĂŒber sprechen, was Daten sind, was Datenbanken sind und wie sie sich unterscheiden. Sie erfahren, welche Funktionen Sie fĂŒr die Arbeit mit der Datenbank benötigen, um den Entwickler im Auge zu behalten. Wir werden diskutieren, wie Daten basierend auf den aktuellen Funktionen des Systems und seiner zukĂŒnftigen Skalierung charakterisiert, strukturiert und gespeichert werden.

Dank der in der Vorlesung gewonnenen Erkenntnisse kann der Entwickler verstehen, welches der genannten Themen zur Lösung eines bestimmten Problems untersucht werden muss, und im Falle von Fehlern feststellen, ob die Arbeit mit der Datenbank die Ursache des Problems ist. Und wenn ja, welchen Weg zu graben.


PrÀsentation: yadi.sk/i/Uf5U_xwt5qGBIQ

5. Datenbanken: Modelle, Migrationen, Tests - Alexander Vasin


Dies ist eine Vorlesung ĂŒber die praktische Arbeit mit relationalen Datenbanken am Beispiel von PostgreSQL. Lassen Sie uns darĂŒber sprechen, wie Sie ein RDBMS auswĂ€hlen, wie die Infrastruktur in der Produktion aussieht, und die synchronen und asynchronen PostgreSQL-Treiber vergleichen. Wir werden herausfinden, wie der Datenbanktreiber angeordnet ist. Wir werden die effektive Arbeit mit Daten, benannten und unbenannten Cursorn, die Verwendung von Transaktionen, RETURNING und UPSERT diskutieren.

Sie erfahren, wie Sie eine fehlertolerante und skalierbare Anwendung erstellen, was Query Builder und ORM sind und wann Sie sie verwenden (am Beispiel von SQLAlchemy), wie Sie Datenbankmigrationen schreiben (am Beispiel von Alembic) und warum und wie Sie sie testen.


PrÀsentation: yadi.sk/i/DqYmAbrPu6en2g
Beispiele: github.com/alvassin/alembic-quickstart

6. Architektur - Oleg Ermakov


Betrachten wir drei Teile des Entwurfs neuer Systemfunktionen:

- API fĂŒr die Client-Server-Interaktion;
- Entwurfsmuster auf Codeebene (BegrĂŒndung fĂŒr die Notwendigkeit der Zerlegung unter Bezugnahme auf Martin Fowler);
- Architektur der dienststellenĂŒbergreifenden Interaktion.


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

Verweise


HTTP-Protokollspezifikation:
tools.ietf.org/html/rfc2616
tools.ietf.org/html/rfc5789

15 triviale Fakten zur Arbeit mit dem HTTP-Protokoll:
habr.com/ru/company/yandex/blog/265569

Trainee Vasya und seine Geschichte
Informationen zur IDempotenz- API: habr.com/de/company/yandex/blog/442762

Muster der Unternehmensanwendungsarchitektur: martinfowler.com/eaaCatalog/index.html
Microservices-Muster: manning.com/books/microservices-patterns
Entwurfsmuster: litres.ru / elizabet-robson / head-first-patterny-proektirovaniya-39123671 DomÀnengesteuertes
Design: KomplexitÀt im Herzen von Software angehen : amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215
Optimierung der Netflix-API: medium.com/netflix-techblog/optimizing-the-netflix-api-5c9ac715cf19

7. Infrastruktur - Dmitry Orlov


Lassen Sie uns die Infrastruktur rund um das Python-Programm diskutieren: Python Package Index-Repository (PyPI), Virtualenv-Tool, Bereitstellungsprozess, Ansible-Konfigurationsmanagementsystem, Virtualisierung und Containerisierung.


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

Verweise


Python-Paket: docs.python.org/3.8/distutils/setupscript.html
virtualenv: docs.python.org/3.8/library/venv.html
Softwarebereitstellung: en.wikipedia.org/wiki/Software_deployment
Ansible: docs.ansible.com /ansible/latest/user_guide/quickstart.html
Virtualisierung: en.wikipedia.org/wiki/Hardware_virtualization
Containerisierung: en.wikipedia.org/wiki/OS-level_virtualization

8. Algorithmen - Ilya Volkov


Lassen Sie uns ĂŒber Datenstrukturen, rechnerische und amortisierte KomplexitĂ€t sprechen.

Anhand eines Beispiels einer einfachen Liste von Aufgaben und ihrer Entwicklung mit schrittweisen Verbesserungen betrachten wir AnsĂ€tze fĂŒr die Aufgaben des Schreibens der Serverseite von Webanwendungen. Wir werden AnsĂ€tze und gĂ€ngige Techniken zur Optimierung von Aufgaben und Code ĂŒberprĂŒfen. Im letzten Teil der Vorlesung werden wir den Prozess des Bestehens technischer Interviews in IT-Unternehmen betrachten.


PrÀsentation: yadi.sk/i/hBbOjd4SqMlw5g

Links


Implementierung von Listen in Python: docs.python.org/3.7/faq/design.html#how-are-lists-implemented-in-cpython
Analyse der Implementierung von Listen in Python auf Habr: habr.com/en/post/273045
Analyse von Algorithmus B. -Baum auf Habré: habr.com/en/post/114154
Analyse des LRU-Algorithmus: habr.com/en/post/136758
Arbeit des LRU-Cache in Redis: redis.io/topics/lru-cache Die
Liste der Redis-Befehle mit Rechenschwierigkeiten - es ist möglich Ratet mal, was unter der Haube passiert: redis.io/commands
Galaktische Algorithmen: en.wikipedia.org/wiki/Galactic_algorithm
Beispiel einer Interviewaufgabe aus einer Vorlesung: leetcode.com/problems/trapping-rain-water

EinfĂŒhrung in die KomplexitĂ€tstheorie auf HabrĂ©:habr.com/de/post/196560 Eine
Zusammenfassung der Dienste fĂŒr die Programmierpraxis: tproger.ru/digest/competitive-programming-practice
Ein Beispiel fĂŒr einen Dienst mit mehr oder weniger einfachen Aufgaben zur Erkundung neuer Sprachen: ĂŒb.io

9. Debuggen, Protokollieren, Profilieren - Yuri Shikanov


Zu Beginn der Vorlesung finden Sie eine EinfĂŒhrung in die Grundkenntnisse von Betriebssystemen (insbesondere Linux). Dann werden wir Speicherverwaltung, Prozesse, Multitasking, IPC, Dateien, Systemaufrufe betrachten. Wir zeigen Ihnen, wie Sie mit dem in Python integrierten Pdb-Debugger arbeiten. Lassen Sie uns ĂŒber die Protokollierung im Allgemeinen und ĂŒber die Protokollierungsbibliothek in Python sprechen. Wir lernen, mit unzureichender Programmleistung umzugehen und einen Engpass zu finden, bei dem die meisten Prozessor- oder Speicherressourcen verbraucht werden.


PrÀsentation: yadi.sk/d/BCky8YkLcbVeUA
Linux-Systemprogrammierbuch: oreilly.com/library/view/linux-system-programming/9781449341527

10. Asynchrone Programmierung. Vorlesung Eins - Edward Beetle


Überlegen Sie, was das Problem synchroner Anwendungen ist und was dagegen getan werden kann.

Wir werden diskutieren, was aus Sicht des Betriebssystems wÀhrend einer HTTP-Anforderung geschieht, wie mehrere Anforderungen gleichzeitig verarbeitet werden und welche Vor- und Nachteile Prozesse und Threads auf Webservern haben. Sie lernen die Funktionen von Threads in Python kennen. Lassen Sie uns nicht blockierende E / A diskutieren: Wie werden mehrere Anforderungen in einem einzigen Thread verarbeitet?

Lassen Sie uns darĂŒber sprechen, was eine Ereignisschleife ist und warum sie benötigt wird. Wir werden auf die Wahl zwischen einer synchronen und einer asynchronen Lösung eingehen.


PrÀsentation: yadi.sk/i/OhqXMEOKzNlK6g

Verweise


Ein Webcrawler mit asynchronen Coroutinen: aosabook.org/en/500L/a-web-crawler-with-asyncio-coroutines.html
David Beazley: Generatoren: The Final Frontier: youtube.com/watch?v=D1twn9kLmYg

11. Asynchrone Programmierung. Vorlesung Zwei - Alexander Vasin


Diese Vorlesung ist eine kurze Übersicht ĂŒber Asyncio: Bibliothek, Schnittstelle und Standard fĂŒr die asynchrone Programmierung in Python.

Wir werden uns die Asyncio-Schnittstelle auf hoher Ebene (Coroutine, Aufgabe, Zukunft und Methoden fĂŒr die Arbeit mit ihnen), die Schnittstelle auf niedriger Ebene (Ereignisschleife, Richtlinien) sowie asynchrone Python-Schnittstellen (Kontextmanager, Iteratoren, Generatoren, VerstĂ€ndnis) ansehen. Wir werden Ihnen sagen, warum aiohttp benötigt wird, wie Webanwendungen darauf geschrieben werden. Sie erfahren, was Middleware ist, wie Sie mit aiohttp Daten serialisieren können und wie Sie im Hintergrund asynchrone Aufgaben ausfĂŒhren.


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

Verweise


Ihre eigenen die Asynchron die Build (von David Beazley): youtu.be/Y4Gt3Xjd7G8
Asyncio heute und morgen (Yuri Selivanov): youtu.be/3rSAtD2gKQE
des PEP 492: Koroutinen mit der Asynchron und der await Syntax: python.org/dev/peps/pep-0492
der PEP 530: Asynchrone VerstÀndnisse: python.org/dev/peps/pep-0530

12. Asynchrone Programmierung. Vorlesung Drei - Dmitry Orlov


Bei der Entwicklung asynchroner Anwendungen mit Python und Asyncio treten manchmal Probleme beim Verwalten von Hintergrundaufgaben, Blockieren von Standardausgabe, Wiederholungsrichtlinie und Blockieren von VorgÀngen auf. Sie erfahren, wie das Edadil-Serviceteam diese Probleme mit aiomisc löst, die Grundkonzepte dieses Open Source-Projekts, die Basisklassen, vorgefertigte Services, Dekorateure, die Arbeit mit Streams und vieles mehr.


PrÀsentation: yadi.sk/i/SAJnWVQNfdHV0w aiomisc
Dokumentation: pypi.org/project/aiomisc

All Articles