Como aprender o desenvolvimento em Python: um novo curso em vídeo do Yandex

No outono passado, a primeira Escola de Desenvolvimento de Backend foi realizada no escritório de Yandex em Moscou. Filmamos as lições em vídeo e hoje temos o prazer de compartilhar o curso completo em vídeo da Escola em Habré. Isso permitirá que você aprenda o desenvolvimento industrial em Python. Os autores das palestras são desenvolvedores experientes na Yandex. Cada vídeo possui links para exemplos e materiais úteis.

Para aprender o curso, você precisa conhecer o básico do Python e entender como os aplicativos são implantados nos servidores. Esperamos que você possa fazer consultas aos bancos de dados e saber como os aplicativos Web são criados, pelo menos no nível inicial.

1. Dispositivo CPython
2. Programação orientada a objetos
3. Testes
4. Bancos de dados
5. Bancos de dados: modelos, migrações, testes
6. Arquitetura
7. Infraestrutura
8. Algoritmos
9. Depuração, registro, criação de perfil
10. Programação assíncrona. Aula um
11. Programação assíncrona. Aula 2
12. Programação assíncrona. Terceira palestra

1. Dispositivo CPython - Egor Ovcharenko


Vamos falar sobre o porquê e o que escrevemos em Python. Discutiremos a estrutura do intérprete e dicionários, gerenciamento de memória e digitação. Você aprenderá como os geradores funcionam e como as exceções funcionam.


Apresentação: yadi.sk/i/dcNx5Sgix4axOA

Referências


O intérprete como um todo:
docs.python.org/3/reference/executionmodel.html
github.com/python/cpython
leanpub.com/insidethepythonvirtualmachine/read

Gerenciamento de memória:
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

Exceções:
bugs.python.org/issue17611

2. Programação orientada a objetos - Valery Lisay


Vamos falar sobre OOP e sua implementação em Python. Considere tópicos e conceitos como decoradores, descritores e metaclasses.


Apresentação: yadi.sk/i/f-UpCHCsnxqf9Q

Referências


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


Vamos falar sobre o que são testes de software, o que são testes e por que escrevê-los. Vamos falar sobre bibliotecas para testar o código Python: unittest, pytest, doctest. Vamos descobrir como eles diferem e ver exemplos simples de teste. Vamos abordar o tema da integração contínua: o que é, como é usado no desenvolvimento.


Apresentação: yadi.sk/i/g6nd4aORJyrPMQ

Referências


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

4. Bancos de dados - Tatyana Denisova


Vamos falar sobre o que são dados, o que são bancos de dados e como eles diferem. Você aprenderá quais recursos de trabalho com o banco de dados você precisa ter em mente o desenvolvedor. Discutiremos como caracterizar, estruturar e armazenar dados, com base nos recursos atuais do sistema e em sua escala futura.

Graças ao conhecimento adquirido na palestra, o desenvolvedor será capaz de entender em qual dos tópicos mencionados precisa ser aprofundado para resolver um problema específico e, no caso de bugs, para determinar se o trabalho com o banco de dados é a fonte do problema. E se sim, qual o caminho a cavar.


Apresentação: yadi.sk/i/Uf5U_xwt5qGBIQ

5. Bancos de dados: modelos, migrações, testes - Alexander Vasin


Esta é uma palestra sobre trabalho prático com bancos de dados relacionais usando o PostgreSQL como exemplo. Vamos falar sobre como escolher um RDBMS, como é a infraestrutura em produção, comparar os drivers PostgreSQL síncronos e assíncronos. Vamos descobrir como o driver do banco de dados é organizado. Discutiremos o trabalho efetivo com dados, cursores nomeados e não nomeados, o uso de transações, RETURNING e UPSERT.

Você aprenderá como criar um aplicativo escalável e tolerante a falhas, o que são o Query Builder, o ORM e quando usá-los (usando o SQLAlchemy como exemplo), como gravar migrações de banco de dados (usando o Alembic como exemplo) e por que e como testá-las.


Apresentação: yadi.sk/i/DqYmAbrPu6en2g
Exemplos: github.com/alvassin/alembic-quickstart

6. Arquitetura - Oleg Ermakov


Vamos considerar três partes do projeto da nova funcionalidade do sistema:

- API para interação cliente-servidor;
- padrões de design em nível de código (justificativa para a necessidade de decomposição com referência a Martin Fowler);
- arquitetura de interação interserviços.


Apresentação: yadi.sk/d/PivB-ZJ0UJGjYQ

Referências


HTTP especificação do protocolo:
tools.ietf.org/html/rfc2616
tools.ietf.org/html/rfc5789

15 fatos triviais sobre como trabalhar com o protocolo HTTP:
habr.com/ru/company/yandex/blog/265569

Trainee Vasya e sua história sobre a API da idempotency:
habr.com/en/company/yandex/blog/442762

Padrões da arquitetura de aplicativos corporativos: martinfowler.com/eaaCatalog/index.html
Padrões de microsserviços : manning.com/books/microservices-patterns
Padrões de design: litres.ru / elizabet-robson / head-first-patterny-proektirovaniya-39123671
Design orientado a domínio: lidando com a complexidade no coração do software: amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215
Otimizando a API do Netflix: medium.com/netflix-techblog/optimizing-the-netflix-api-5c9ac715cf19

7. Infraestrutura - Dmitry Orlov


Vamos discutir a infraestrutura em torno do programa Python: repositório Python Package Index (PyPI), ferramenta virtualenv, processo de implantação, sistema de gerenciamento de configuração Ansible, virtualização e contêiner.


Apresentação: yadi.sk/i/9eOXdelTpXkoEQ

Referências


Pacote Python: docs.python.org/3.8/distutils/setupscript.html
virtualenv: docs.python.org/3.8/library/venv.html
Implantação de software: en.wikipedia.org/wiki/Software_deployment
Ansible: docs.ansible.com /ansible/latest/user_guide/quickstart.html
Virtualização: en.wikipedia.org/wiki/Hardware_virtualization
Containerização: en.wikipedia.org/wiki/OS-level_virtualization

8. Algoritmos - Ilya Volkov


Vamos falar sobre estruturas de dados, complexidade computacional e amortizada.

Usando um exemplo de uma lista simples de tarefas e sua evolução com melhorias graduais, consideramos abordagens para as tarefas de gravação do lado do servidor de aplicativos da web. Revisaremos abordagens e técnicas comuns para otimizar tarefas e códigos. Na parte final da palestra, consideraremos o processo de aprovação de entrevistas técnicas em empresas de TI.


Apresentação: yadi.sk/i/hBbOjd4SqMlw5g

Ligações


Implementação de listas no Python: docs.python.org/3.7/faq/design.html#how-are-lists-implemented-in-cpython
Análise da implementação de listas no Python no Habr: habr.com/en/post/273045
Análise do algoritmo B -Árvore em Habré: habr.com/en/post/114154
Análise do algoritmo LRU: habr.com/en/post/136758
Trabalho em cache LRU em Redis: redis.io/topics/lru-cache A
lista de comandos Redis com dificuldades computacionais - é possível Adivinhe o que acontece: redis.io/commands
Algoritmos galácticos: en.wikipedia.org/wiki/Galactic_algorithm
Exemplo de uma tarefa de entrevista de uma palestra: leetcode.com/problems/trapping-rain-water

Introdução à teoria da complexidade em Habré:habr.com/en/post/196560 Um
resumo de serviços para a programação prática: tproger.ru/digest/competitive-programming-practice
Um exemplo de um serviço com um conjunto mais ou menos simples de tarefas para explorar novas linguagens: exercism.io

9. Depuração, log, criação de perfil - Yuri Shikanov


No início da palestra, você encontrará uma introdução ao conhecimento básico de sistemas operacionais (em particular, Linux). Em seguida, consideraremos o gerenciamento de memória, processos, multitarefa, IPC, arquivos, chamadas de sistema. Mostraremos como trabalhar com o depurador Pdb incorporado no Python. Vamos falar sobre o log em geral e sobre a biblioteca de log no Python. Aprendemos como lidar com o desempenho insuficiente do programa e como encontrar um gargalo no qual são gastos mais recursos de processador ou memória.


Apresentação: yadi.sk/d/BCky8YkLcbVeUA
Linux System Program book: oreilly.com/library/view/linux-system-programming/9781449341527

10. Programação assíncrona. Palestra Um - Edward Beetle


Considere qual é o problema dos aplicativos síncronos e o que pode ser feito sobre isso.

Discutiremos o que acontece do ponto de vista do SO durante uma solicitação HTTP, como processar várias solicitações ao mesmo tempo e quais são as vantagens e desvantagens de processos e encadeamentos em servidores da Web. Você aprenderá sobre os recursos de threads no Python. Vamos discutir E / S sem bloqueio: como lidar com várias solicitações em um único encadeamento.

Vamos falar sobre o que é um loop de eventos e por que é necessário. Iremos abordar a escolha entre uma solução síncrona e assíncrona.


Apresentação: yadi.sk/i/OhqXMEOKzNlK6g

Referências


Um rastreador da Web com asyncio Coroutines: aosabook.org/en/500L/a-web-crawler-with-asyncio-coroutines.html
David Beazley: Geradores: a fronteira final: youtube.com/watch?v=D1twn9kLmYg

11. Programação assíncrona. Palestra Dois - Alexander Vasin


Esta palestra é uma breve visão geral do asyncio: a biblioteca, a interface e o padrão para programação assíncrona no Python.

Examinaremos a interface assíncrona de alto nível (corotina, tarefa, futuro e métodos para trabalhar com elas), a interface de baixo nível (loop de eventos, políticas), bem como as interfaces assíncronas do Python (gerenciadores de contexto, iteradores, geradores, compreensões). Nós lhe diremos por que o aiohttp é necessário, como escrever aplicativos da Web nele. Você aprenderá o que é o middleware, como o aiohttp permite serializar dados e como executar tarefas assíncronas em segundo plano.


Apresentação: disk.yandex.ru/i/4gyVoP1DM9enxQ

Referências


Seu próprio o async a Construir (por David Beazley): youtu.be/Y4Gt3Xjd7G8
Asyncio hoje e amanhã (Yuri Selivanov): youtu.be/3rSAtD2gKQE
o PEP 492: co-rotinas com o async ea sintaxe aguardam: python.org/dev/peps/pep-0492
o PEP 530: Compreensões assíncronas: python.org/dev/peps/pep-0530

12. Programação assíncrona. Aula Três - Dmitry Orlov


Ao desenvolver aplicativos assíncronos com Python e asyncio, às vezes há problemas associados ao gerenciamento de tarefas em segundo plano, bloqueio de stdout, política de repetição e operações de bloqueio. Você aprenderá como a equipe de serviço da Edadil soluciona esses problemas com o aiomisc, os conceitos básicos deste projeto de código aberto, as classes base, os serviços prontos, os decoradores, trabalham com fluxos e muito mais.


Apresentação: yadi.sk/i/SAJnWVQNfdHV0w aiomisc
Documentação: pypi.org/project/aiomisc

All Articles