Cara mempelajari pengembangan di Python: kursus video baru Yandex

Musim gugur yang lalu, Sekolah Pengembangan Backend pertama diadakan di kantor Yandex di Moskow. Kami merekam pelajaran di video dan hari ini kami senang untuk berbagi video penuh dari School on Habré. Ini akan memungkinkan Anda untuk belajar pengembangan industri dengan Python. Para penulis ceramah adalah pengembang berpengalaman di Yandex. Setiap video memiliki tautan ke contoh dan bahan yang bermanfaat.

Untuk mempelajari kursus, Anda perlu mengetahui dasar-dasar Python dan memahami bagaimana aplikasi dikerahkan di server. Kami berharap Anda dapat membuat kueri basis data dan mengetahui bagaimana aplikasi web dibuat, setidaknya di tingkat awal.

1. Perangkat CPython
2. Pemrograman berorientasi objek
3. Pengujian
4. Basis data
5. Basis data: model, migrasi, pengujian
6. Arsitektur
7. Infrastruktur
8. Algoritma
9. Debug, logging, profiling
10. Pemrograman asinkron. Kuliah satu
11. Pemrograman asinkron. Kuliah dua
12. Pemrograman asinkron. Kuliah ketiga

1. Perangkat CPython - Egor Ovcharenko


Mari kita bicara tentang mengapa dan apa yang kita tulis dengan Python. Kami akan membahas struktur penerjemah dan kamus, manajemen memori, dan pengetikan. Anda akan mempelajari cara generator bekerja dan cara kerja pengecualian.


Presentasi: yadi.sk/i/dcNx5Sgix4axOA

Referensi


Penerjemah secara keseluruhan:
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

Pengecualian:
bugs.python.org/issue17611

2. Pemrograman berorientasi objek - Valery Lisay


Mari kita bicara tentang OOP dan implementasinya dalam Python. Pertimbangkan topik dan konsep seperti dekorator, deskriptor, dan metaclasses.


Presentasi: yadi.sk/i/f-UpCHCsnxqf9Q

Referensi


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


Mari kita bicara tentang pengujian perangkat lunak apa, tes apa dan mengapa menulisnya. Mari kita bicara tentang perpustakaan untuk menguji kode Python: unittest, pytest, doctest. Kami akan mencari tahu perbedaannya, dan melihat contoh-contoh uji sederhana. Kami akan menyentuh pada topik integrasi berkelanjutan: apa itu, bagaimana digunakan dalam pengembangan.


Presentasi: yadi.sk/i/g6nd4aORJyrPMQ

Referensi


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

4. Basis data - Tatyana Denisova


Mari kita bicara tentang apa itu data, apa database itu dan bagaimana mereka berbeda. Anda akan mempelajari fitur-fitur apa yang bekerja dengan database yang perlu Anda ingat pengembang. Kami akan membahas cara mengkarakterisasi, menyusun, dan menyimpan data, berdasarkan fitur sistem saat ini dan penskalaannya di masa mendatang.

Berkat pengetahuan yang diperoleh di kuliah, pengembang akan dapat memahami topik mana yang perlu dibahas untuk memecahkan masalah tertentu, dan jika ada bug, untuk menentukan apakah bekerja dengan database adalah sumber masalah. Dan jika demikian, cara mana untuk menggali.


Presentasi: yadi.sk/i/Uf5U_xwt5qGBIQ

5. Basis data: model, migrasi, pengujian - Alexander Vasin


Ini adalah kuliah tentang kerja praktek dengan database relasional menggunakan PostgreSQL sebagai contoh. Mari kita bicara tentang bagaimana memilih RDBMS, seperti apa infrastrukturnya dalam produksi, bandingkan driver PostgreSQL yang sinkron dan asinkron. Kami akan mencari tahu bagaimana driver basis data diatur. Kami akan membahas kerja efektif dengan data, kursor yang dinamai dan tidak disebutkan namanya, penggunaan transaksi, PENGEMBALIAN dan UPSERT.

Anda akan belajar cara membuat aplikasi yang toleran terhadap kesalahan dan dapat diskalakan, apa itu Query Builder, ORM dan kapan menggunakannya (menggunakan SQLAlchemy sebagai contoh), cara menulis migrasi basis data (menggunakan contoh Alembic), dan mengapa serta bagaimana mengujinya.


Presentasi: yadi.sk/i/DqYmAbrPu6en2g
Contoh: github.com/alvassin/alembic-quickstart

6. Arsitektur - Oleg Ermakov


Mari kita pertimbangkan tiga bagian merancang fungsionalitas sistem baru:

- API untuk interaksi client-server;
- pola desain tingkat kode (pembenaran untuk kebutuhan dekomposisi dengan mengacu pada Martin Fowler);
- Arsitektur interaksi interservice.


Presentasi: yadi.sk/d/PivB-ZJ0UJGjYQ

Referensi


Spesifikasi protokol HTTP:
tools.ietf.org/html/rfc2616
tools.ietf.org/html/rfc5789

15 fakta sepele tentang bekerja dengan protokol HTTP:
habr.com/ru/company/yandex/blog/265569

Trainee Vasya dan kisahnya tentang idempotency API:
habr.com/en/company/yandex/blog/442762

Pola Aplikasi Enterprise Architecture: martinfowler.com/eaaCatalog/index.html
Microservices Pola: manning.com/books/microservices-patterns
Pola Desain: litres.ru / elizabet-robson / head-first-patterny-proektirovaniya-39123671
Desain Domain-Driven: Menangani Kompleksitas di Jantung Perangkat Lunak: amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215
Mengoptimalkan Netflix API: medium.com/netflix-techblog/optimizing-the-netflix-api-5c9ac715cf19

7. Infrastruktur - Dmitry Orlov


Mari kita bahas infrastruktur di sekitar program Python: Python Package Index repository (PyPI), alat virtualenv, proses penyebaran, sistem manajemen konfigurasi yang memungkinkan, virtualisasi dan containerisasi.


Presentasi: yadi.sk/i/9eOXdelTpXkoEQ

Referensi


Paket Python: docs.python.org/3.8/distutils/setupscript.html
virtualenv: docs.python.org/3.8/library/venv.html
Penyebaran Perangkat Lunak: en.wikipedia.org/wiki/Software_deployment
Kemungkinan: docs.ansible.com /ansible/latest/user_guide/quickstart.html
Virtualisasi: en.wikipedia.org/wiki/Hardware_virtualization
Containerization: en.wikipedia.org/wiki/OS-level_virtualization

8. Algoritma - Ilya Volkov


Mari kita bicara tentang struktur data, kompleksitas komputasi dan diamortisasi.

Menggunakan contoh daftar tugas sederhana dan evolusinya dengan peningkatan bertahap, kami mempertimbangkan pendekatan untuk tugas-tugas penulisan sisi server aplikasi web. Kami akan meninjau pendekatan dan teknik umum untuk mengoptimalkan tugas dan kode. Pada bagian akhir kuliah, kami akan mempertimbangkan proses melewati wawancara teknis di perusahaan IT.


Presentasi: yadi.sk/i/hBbOjd4SqMlw5g

Tautan


Implementasi daftar dalam Python: docs.python.org/3.7/faq/design.html#how-are-list-diimplementasikan-in-cpython
Analisis implementasi daftar dalam Python pada Habr: habr.com/en/post/273045
Analisis algoritma B -Tree on Habré: habr.com/en/post/114154
Analisis algoritma LRU: habr.com/en/post/136758
Kerja cache LRU di Redis: redis.io/topics/lru-cache
Daftar perintah Redis dengan kesulitan komputasi - dimungkinkan Coba tebak apa yang terjadi di bawah tenda: redis.io/commands
Galactic algoritma: en.wikipedia.org/wiki/Galactic_algorithm
Contoh tugas wawancara dari sebuah kuliah: leetcode.com/problems/trapping-rain-water

Pengantar teori kompleksitas pada Habré:habr.com/en/post/196560 Intisari
layanan untuk praktik pemrograman: tproger.ru/digest/competitive-programming-practice
Contoh layanan dengan serangkaian tugas yang kurang lebih sederhana untuk menjelajahi bahasa baru: exerciseism.io

9. Debug, logging, profiling - Yuri Shikanov


Pada awal kuliah Anda akan menemukan pengantar pengetahuan dasar tentang sistem operasi (khususnya, Linux). Kemudian kami akan mempertimbangkan manajemen memori, proses, multitasking, IPC, file, panggilan sistem. Kami akan menunjukkan kepada Anda bagaimana cara bekerja dengan debugger Pdb yang ada di dalam Python. Mari kita bicara tentang logging secara umum dan tentang library logging dengan Python. Kami belajar bagaimana menangani kinerja program yang tidak mencukupi dan bagaimana menemukan hambatan di mana sebagian besar prosesor atau sumber daya memori dihabiskan.


Presentasi: yadi.sk/d/BCky8YkLcbVeUA
Buku Pemrograman Sistem Linux: oreilly.com/library/view/linux-system-programming/9781449341527

10. Pemrograman asinkron. Kuliah Satu - Edward Beetle


Pertimbangkan apa masalah aplikasi sinkron dan apa yang dapat dilakukan tentang hal itu.

Kami akan membahas apa yang terjadi dari sudut pandang OS selama permintaan HTTP, bagaimana memproses beberapa permintaan secara bersamaan, dan apa kelebihan dan kekurangan dari proses dan utas di server web. Anda akan belajar tentang fitur-fitur utas dengan Python. Mari kita bahas I / O yang tidak menghalangi: bagaimana menangani beberapa permintaan dalam satu utas.

Mari kita bicara tentang apa itu loop-acara dan mengapa itu diperlukan. Kami akan menyentuh pada pilihan antara solusi sinkron dan asinkron.


Presentasi: yadi.sk/i/OhqXMEOKzNlK6g

Referensi


Perayap Web Dengan asyncio Coroutines: aosabook.org/en/500L/a-web-crawler-with-asyncio-coroutines.html
David Beazley: Generator: Perbatasan Terakhir: youtube.com/watch?v=D1twn9kLmYg

11. Pemrograman asinkron. Kuliah Dua - Alexander Vasin


Kuliah ini adalah tur ikhtisar singkat asyncio: perpustakaan, antarmuka, dan standar untuk pemrograman asinkron dengan Python.

Kita akan melihat antarmuka asyncio tingkat tinggi (coroutine, tugas, masa depan dan metode untuk bekerja dengan mereka), antarmuka tingkat rendah (loop peristiwa, kebijakan), serta antarmuka asinkron Python (manajer konteks, iterator, generator, pemahaman). Kami akan memberi tahu Anda mengapa aiohttp diperlukan, cara menulis aplikasi web di dalamnya. Anda akan belajar apa itu middleware, bagaimana aiohttp memungkinkan Anda membuat serialisasi data, dan bagaimana melakukan tugas-tugas tidak sinkron di latar belakang.


Presentasi: disk.yandex.ru/i/4gyVoP1DM9enxQ

Referensi


Anda sendiri async Build (oleh David Beazley): youtu.be/Y4Gt3Xjd7G8
Asyncio hari ini dan besok (Yuri Selivanov): youtu.be/3rSAtD2gKQE
PEP 492: coroutines dengan async dan sintaks Tunggulah: python.org/dev/peps/pep-0492
PEP 530: Pemahaman Asinkron: python.org/dev/peps/pep-0530

12. Pemrograman asinkron. Kuliah Tiga - Dmitry Orlov


Saat mengembangkan aplikasi asinkron dengan Python dan asyncio, kadang-kadang ada masalah yang terkait dengan mengelola tugas latar belakang, memblokir stdout, mencoba kembali kebijakan, dan memblokir operasi. Anda akan belajar tentang bagaimana tim layanan Edadil menyelesaikan masalah ini dengan aiomisc, konsep dasar proyek sumber terbuka ini, kelas dasar, layanan siap pakai, dekorator, bekerja dengan aliran dan banyak lagi.


Presentasi: yadi.sk/i/SAJnWVQNfdHV0w aiomisc
Dokumentasi: pypi.org/project/aiomisc

All Articles