Cómo aprender el desarrollo en Python: un nuevo video curso de Yandex

El otoño pasado, la primera Escuela de Desarrollo de Backend se celebró en la oficina de Yandex en Moscú. Grabamos las lecciones en video y hoy nos complace compartir el curso completo en video de la Escuela en Habré. Te permitirá aprender el desarrollo industrial en Python. Los autores de las conferencias son desarrolladores experimentados en Yandex. Cada video tiene enlaces a ejemplos y materiales útiles.

Para aprender el curso, debe conocer los conceptos básicos de Python y comprender cómo se implementan las aplicaciones en los servidores. Esperamos que pueda realizar consultas en la base de datos y saber cómo se crean las aplicaciones web, al menos en el nivel inicial.

1. Dispositivo CPython
2. Programación orientada a objetos
3. Pruebas
4. Bases de datos
5. Bases de datos: modelos, migraciones, pruebas
6. Arquitectura
7. Infraestructura
8. Algoritmos
9. Depuración, registro, creación de perfiles
10. Programación asincrónica. Lección uno
11. Programación asincrónica. Lección dos
12. Programación asincrónica. Tercera conferencia

1. Dispositivo CPython - Egor Ovcharenko


Hablemos sobre por qué y qué escribimos en Python. Discutiremos la estructura del intérprete y los diccionarios, la gestión de la memoria y la escritura. Aprenderá cómo funcionan los generadores y cómo funcionan las excepciones.


Presentación: yadi.sk/i/dcNx5Sgix4axOA

Referencias


El intérprete en su conjunto:
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/python -memory- managment
instagram-engineering.com/dismissing-python-garbage-collection-at-instagram-4dca40b29172
stackify.com/python-garbage-collection

Excepciones:
bugs.python.org/issue17611

2. Programación orientada a objetos - Valery Lisay


Hablemos de OOP y su implementación en Python. Considere temas y conceptos como decoradores, descriptores y metaclases.


Presentación: yadi.sk/i/f-UpCHCsnxqf9Q

Referencias


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


Hablemos sobre qué son las pruebas de software, qué son las pruebas y por qué escribirlas. Hablemos de las bibliotecas para probar el código Python: unittest, pytest, doctest. Descubriremos en qué se diferencian y veremos ejemplos de pruebas simples. Tocaremos el tema de la integración continua: qué es, cómo se usa en el desarrollo.


Presentación: yadi.sk/i/g6nd4aORJyrPMQ

Referencias


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

4. Bases de datos - Tatyana Denisova


Hablemos sobre qué son los datos, qué son las bases de datos y cómo difieren. Aprenderá qué características de trabajar con la base de datos necesita tener en cuenta al desarrollador. Analizaremos cómo caracterizar, estructurar y almacenar datos, en función de las características actuales del sistema y su escalamiento futuro.

Gracias al conocimiento adquirido en la conferencia, el desarrollador podrá comprender cuáles de los temas mencionados deben profundizarse para resolver un problema específico y, en caso de errores, determinar si trabajar con la base de datos es la fuente del problema. Y si es así, qué manera de cavar.


Presentación: yadi.sk/i/Uf5U_xwt5qGBIQ

5. Bases de datos: modelos, migraciones, pruebas - Alexander Vasin


Esta es una conferencia sobre trabajo práctico con bases de datos relacionales usando PostgreSQL como ejemplo. Hablemos sobre cómo elegir un RDBMS, cómo se ve la infraestructura en producción, comparar controladores PostgreSQL síncronos y asíncronos. Descubriremos cómo está organizado el controlador de la base de datos. Discutiremos el trabajo efectivo con datos, cursores con nombre y sin nombre, el uso de transacciones, DEVOLUCIÓN y UPSERT.

Aprenderá cómo hacer una aplicación escalable y tolerante a fallas, qué es Query Builder, ORM y cuándo usarlas (usando SQLAlchemy como ejemplo), cómo escribir migraciones de bases de datos (usando Alembic como ejemplo), y por qué y cómo probarlas.


Presentación: yadi.sk/i/DqYmAbrPu6en2g
Ejemplos: github.com/alvassin/alembic-quickstart

6. Arquitectura - Oleg Ermakov


Consideremos tres partes del diseño de la nueva funcionalidad del sistema:

- API para la interacción cliente-servidor;
- patrones de diseño a nivel de código (justificación de la necesidad de descomposición con referencia a Martin Fowler);
- arquitectura de la interacción entre servicios.


Presentación: yadi.sk/d/PivB-ZJ0UJGjYQ

Referencias


Especificación del protocolo HTTP:
tools.ietf.org/html/rfc2616
tools.ietf.org/html/rfc5789

15 datos triviales sobre cómo trabajar con el protocolo HTTP:
habr.com/ru/company/yandex/blog/265569

Trainee Vasya y su historia sobre idempotency API:
habr.com/en/company/yandex/blog/442762

Patrones de arquitectura de aplicaciones empresariales: martinfowler.com/eaaCatalog/index.html
Patrones de microservicios: manning.com/books/microservices-patterns
Patrones de diseño: litres.ru / elizabet-robson / head-first-patterny-proektirovaniya-39123671
Diseño basado en el dominio: abordar la complejidad en el corazón del software: amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215
Optimización de la API de Netflix: medium.com/netflix-techblog/optimizing-the-netflix-api-5c9ac715cf19

7. Infraestructura - Dmitry Orlov


Analicemos la infraestructura en torno al programa Python: repositorio de índice de paquetes Python (PyPI), herramienta virtualenv, proceso de implementación, sistema de gestión de configuración Ansible, virtualización y contenedorización.


Presentación: yadi.sk/i/9eOXdelTpXkoEQ

Referencias


Paquete Python: docs.python.org/3.8/distutils/setupscript.html
virtualenv: docs.python.org/3.8/library/venv.html
Implementación de software: en.wikipedia.org/wiki/Software_deployment
Ansible: docs.ansible.com /ansible/latest/user_guide/quickstart.html
Virtualización: en.wikipedia.org/wiki/Hardware_virtualization
Containerization: en.wikipedia.org/wiki/OS-level_virtualization

8. Algoritmos - Ilya Volkov


Hablemos de estructuras de datos, complejidad computacional y amortizada.

Usando un ejemplo de una lista simple de tareas y su evolución con mejoras graduales, consideramos enfoques para las tareas de escribir el lado del servidor de las aplicaciones web. Revisaremos enfoques y técnicas comunes para optimizar tareas y código. En la parte final de la conferencia, consideraremos el proceso de pasar entrevistas técnicas en empresas de TI.


Presentación: yadi.sk/i/hBbOjd4SqMlw5g

Enlaces


Implementación de listas en Python: docs.python.org/3.7/faq/design.html#how-are-lists-implemented-in-cpython
Análisis de implementación de listas en Python en Habr: habr.com/en/post/273045
Análisis del algoritmo B -Árbol en Habré: habr.com/en/post/114154
Análisis del algoritmo LRU: habr.com/en/post/136758
Trabajo de caché LRU en Redis: redis.io/topics/lru-cache La
lista de comandos Redis con dificultades computacionales - es posible Adivina qué sucede debajo del capó: redis.io/commands
Algoritmos galácticos: en.wikipedia.org/wiki/Galactic_algorithm
Ejemplo de una tarea de entrevista de una conferencia: leetcode.com/problems/trapping-rain-water

Introducción a la teoría de la complejidad en Habré:habr.com/en/post/196560 Un
resumen de servicios para la práctica de programación: tproger.ru/digest/competitive-programming-practice
Un ejemplo de un servicio con un conjunto de tareas más o menos simple para explorar nuevos idiomas: exercism.io

9. Depuración, registro, creación de perfiles - Yuri Shikanov


Al comienzo de la conferencia, encontrará una introducción a los conocimientos básicos de los sistemas operativos (en particular, Linux). Luego consideraremos la administración de memoria, procesos, multitarea, IPC, archivos, llamadas al sistema. Le mostraremos cómo trabajar con el depurador Pdb integrado en Python. Hablemos sobre el registro en general y sobre la biblioteca de registro en Python. Aprendemos cómo lidiar con el rendimiento insuficiente del programa y cómo encontrar un cuello de botella en el que se gastan la mayoría de los recursos de procesador o memoria.


Presentación: yadi.sk/d/BCky8YkLcbVeUA
Libro de programación del sistema Linux: oreilly.com/library/view/linux-system-programming/9781449341527

10. Programación asincrónica. Conferencia uno - Edward Beetle


Considere cuál es el problema de las aplicaciones síncronas y qué se puede hacer al respecto.

Discutiremos qué sucede desde el punto de vista del sistema operativo durante una solicitud HTTP, cómo procesar varias solicitudes al mismo tiempo y cuáles son las ventajas y desventajas de los procesos y subprocesos en los servidores web. Aprenderá sobre las características de los hilos en Python. Analicemos las E / S sin bloqueo: cómo manejar múltiples solicitudes en un solo hilo.

Hablemos acerca de qué es un bucle de eventos y por qué es necesario. Tocaremos la elección entre una solución síncrona y asíncrona.


Presentación: yadi.sk/i/OhqXMEOKzNlK6g

Referencias


Un rastreador web con asyncio Coroutines: aosabook.org/en/500L/a-web-crawler-with-asyncio-coroutines.html
David Beazley: Generadores: The Front Frontier: youtube.com/watch?v=D1twn9kLmYg

11. Programación asincrónica. Conferencia dos - Alexander Vasin


Esta conferencia es un breve recorrido general de asyncio: la biblioteca, la interfaz y el estándar para la programación asincrónica en Python.

Examinaremos la interfaz asincio de alto nivel (rutina, tarea, futuro y métodos para trabajar con ellos), la interfaz de bajo nivel (bucle de eventos, políticas), así como las interfaces asincrónicas de Python (gestores de contexto, iteradores, generadores, comprensiones). Le diremos por qué se necesita aiohttp, cómo escribir aplicaciones web en él. Aprenderá qué es el middleware, cómo aiohttp le permite serializar datos y cómo realizar tareas asincrónicas en segundo plano.


Presentación: disk.yandex.ru/i/4gyVoP1DM9enxQ

Referencias


Su propia del asíncrono que la compilación (por David Beazley): youtu.be/Y4Gt3Xjd7G8
Asyncio hoy y mañana (Yuri Selivanov): youtu.be/3rSAtD2gKQE
el PEP 492: corrutinas con el asíncrona y la sintaxis esperan: python.org/dev/peps/pep-0492
la PEP 530: Comprensiones asincrónicas: python.org/dev/peps/pep-0530

12. Programación asincrónica. Conferencia tres - Dmitry Orlov


Al desarrollar aplicaciones asincrónicas con Python y asyncio, a veces hay problemas asociados con la administración de tareas en segundo plano, bloqueo de stdout, política de reintentos y operaciones de bloqueo. Aprenderá cómo el equipo de servicio de Edadil resuelve estos problemas con aiomisc, los conceptos básicos de este proyecto de código abierto, las clases base, los servicios listos para usar, los decoradores, el trabajo con transmisiones y mucho más.


Presentación: yadi.sk/i/SAJnWVQNfdHV0w
Documentación aiomisc : pypi.org/project/aiomisc

All Articles