17 книг для начинающих, опытных и продвинутых Python-разработчиков
Опытные Python-разработчики советуют книги о программировании и рассказывают, как выжимать из них максимальную пользу.
Иллюстрация: rawpixel.com / Vectonauta / timmdesign / zlatko_plamenov / Freepik / Дима Руденок для Skillbox Media
Мы попросили экспертов, сведущих в Python-разработке, посоветовать хорошую литературу для программистов разных грейдов. В итоге получилась подборка из 17 книг, проверенных временем, опытом и карьерой :)
В опросе принимали участие:
- Никита Соболев — сооснователь компании wemake.services, топ-70 по коммитам в CPython и топ-6 по коммитам в Mypy и Typeshed.
- Семён Жаров — инженер по автоматизации и Senior-разработчик.
- Дмитрий Курлов — Senior Software Engineer в Smart Agri Labs.
- Аким Акимов — дата-инженер в Amazon Web Service.
- Гриша Герасев — разработчик.
Книги для начинающих Python-разработчиков
Сложность: ★ ☆ ☆
Дмитрий Курлов
Senior Software Engineer в Smart Agri Labs
«В последние годы самыми популярными источниками информации стали блоги и ютуб-каналы. Но лучшим способом изучить язык по-прежнему остаётся документация.
Выбрать хорошую книгу довольно тяжело — это скорее вопрос везения. Как с курсами на Udemy: может попасться что-то интересное, но, скорее всего, вести курс будет индиец с ужасным акцентом, пересказывающий документацию. Тем не менее есть хорошие книги, которые стоит прочитать новичкам».
Книги из этой подборки дадут представление об основах языка, алгоритмах, фреймворке Django, машинном обучении и лучших практиках написания кода.
«Изучаем Python»
Марк Лутц
Оригинальное название: Learning Python.
Перевод с английского: Артёменко Ю.
Издательство: «Диалектика». 2019 год, 832 с.
Зачем читать: чтобы начать программировать на Python, даже если вы никогда в жизни не писали код.
«Изучаем Python» Марка Лутца — культовый учебник программирования, рассчитанный на новичков. Поможет освоить Python с нуля — от азов до продвинутых концепций объектно-ориентированного программирования. А ещё в книге много примеров и упражнений — чтобы можно было отточить теорию на реальных задачах.
Учебник Лутца хорош тем, что описывает буквально всё, что нужно знать о Python, — вплоть до работы интерпретатора и виртуальной машины. Если сможете освоить его целиком (800 страниц как-никак), получите фундаментальные знания о возможностях языка и его внутренней кухне.
Преимущества: книга даёт сильную базу не только по основам Python, но и по computer science в целом. Например, описывает, как язык работает с памятью и операционной системой.
Недостатки: некоторые мысли повторяются много раз — видимо, чтобы новички прочнее их усвоили. Плюс многие читатели жалуются на не самый качественный перевод на русский язык.
«Простой Python»
Билл Любанович
Оригинальное название: Introducing Python: Modern Computing in Simple Packages.
Перевод с английского: Зазноба Е. В.
Издательство: «Питер». 2021 год, 592 с.
Зачем читать: чтобы в сжатой форме получить всё самое важное о языке.
Ещё один классный учебник для знакомства с Python. Здесь не будет глубокого погружения во «внутренности» языка, зато вы освоите основное: синтаксис, переменные, типы и структуры данных, возможности ООП, а на сладкое — работу с сетью, памятью и популярными фреймворками. И всё это на примере реальных программ, написанных на Python.
Бонусом книга раскрывает возможности Python в искусстве и науке — например, в ней говорится о работе с двухмерной и трёхмерной графикой, диаграммами, визуализациями, графическими интерфейсами. Так что она особенно понравится новичкам, нацеленным на data science, — можно получить базовые навыки работы с данными.
Преимущества: по-настоящему лаконичный учебник по программированию.
Недостатки: многие ссылки из книги уже недоступны.
Django 2 в примерах
Антонио Меле
Оригинальное название: Django 2 By Example.
Издательство: «ДМК Пресс». 2019 год, 408 с.
Зачем читать: чтобы начать работать с Django — самым популярным Python-фреймворком для разработки веб-приложений. Он позволяет создавать сайты и веб-приложения из готовых шаблонов и библиотек — примерно как в конструкторе, только с куда более тонкой настройкой.
С помощью книги «Django 2 в примерах» вы изучите возможности платформы, создавая реально работающие приложения: блог, социальную сеть, интернет-магазин и платформу для онлайн-обучения. Научитесь разворачивать проект на сервере и подключать к нему разные полезные штуки — например, формы оплаты, комментариев и авторизации.
Преимущества: написано легко и интересно, с обилием примеров. В книге пошагово разбирается создание сайта и его настройка. Все исходники и библиотеки можно скачать в репозитории на GitHub.
Недостатки: в книге разбирается вторая версия Django, в то время как уже вышли третья и четвёртая. По ним тоже есть книги, но они пока не переведены на русский язык. Впрочем, большая часть информации в книге актуальна — все инструкции и фрагменты кода будут работать и с Django 3, и с Django 4.
«Грокаем алгоритмы»
Адитья Бхаргава
Оригинальное название: Grokking Algorithms: An Illustrated Guide for Programmers and Other Curious People.
Перевод с английского: Матвеев Е. А.
Издательство: «Питер». 2022 год, 288 с.
Зачем читать: чтобы понять, что алгоритмы — это интересно и совсем не сложно.
Мастрид для всех, кто видит себя в IT. Неважно, работате вы программистом или просто сдаёте ЕГЭ по информатике, — понимание работы алгоритмов будет полезно всем причастным к computer science.
Простым и увлекательным языком автор рассказывает, как работают сортировка, рекурсия, хеш-таблицы, жадные алгоритмы и другие сложные концепции. Если вы любите, когда запутанные вещи объясняют на примере простых аналогий и жизненных ситуаций, вам точно понравится эта книга.
Преимущества: теория дана человеческим языком, с примерами кода на Python.
Недостатки: встречаются опечатки в коде из-за ошибок при редактуре русского издания.
«Грокаем глубокое обучение»
Эндрю Траск
Оригинальное название: Grokking Deep Learning.
Перевод с английского: Киселёв А.
Издательство: «Питер». 2019 год, 352 с.
Зачем читать: чтобы начать разбираться в машинном обучении и сделать первый шажок к data science.
Если вы всегда мечтали узнать, как учатся машины и из чего состоят нейронные сети, обязательно прочитайте эту книгу. По стилю подачи это скорее научпоп, а не академический учебник — идеально, чтобы полноценно разобраться в вопросе и не сломать мозг по дороге. Ну и куда же без практики — ближе к концу книги сможете попробовать сделать свои нейронки и ML-фреймворки с помощью популярных Python-библиотек — тех же NumPy и PyTorch.
Преимущества: для прочтения не требуется специальных математических знаний — достаточно простой арифметики и базовых кодерских навыков.
Недостатки: несмотря на простой язык, для прочтения понадобится математический бэкграунд — к середине книги во многих вещах придётся разбираться самостоятельно. Ну и классическая претензия к качеству перевода — судя по отзывам, читать книгу лучше в оригинале.
Что читать Python-разработчикам уровня Middle
Сложность: ★ ★ ☆
Никита Соболев
Сооснователь компании wemake.services
«Многие новички начинают изучение программирования с чтения книг. Я бы, наоборот, не рекомендовал этого делать и сам редко читаю учебники.
Лучше изучать официальную документацию и исходный код программ: заходите на GitHub, открываете понравившийся проект по Django или Python и читаете исходники. В какой-то момент благодаря этому вы начнёте понимать устройство практически любого проекта.
Но если хочется почитать книги, обратите внимание на литературу по базовым концепциям, например алгоритмам и работе с базами данных».
В этой подборке вы найдёте книги о распределённых системах, алгоритмах, инфраструктуре баз данных, глубоком обучении и типизации в Python.
«Python. Книга рецептов»
Дэвид Бизли, Брайан К. Джонс
Перевод с английского: Уваров Д.
Издательство: «ДМК Пресс», 2019 год, 646 с.
Оригинальное название: Python Cookbook.
Зачем читать: чтобы пополнить кодерский багаж полезными лайфхаками и начать применять их в работе.
«Python. Книга рецептов» — это учебник программирования, заточенный на практику. Скучной теории здесь мало, зато на каждой странице — задача с решением и обсуждением. Все задания основаны на реальных ситуациях в разработке, поэтому их можно воспринимать как готовые инструкции — не зря же это книга рецептов.
Конечно, теоретическая база здесь тоже есть: структуры данных, алгоритмы, работа с итераторами и генераторами, кодирование и обработка данных, функции и так далее. Но всё это максимально привязано к практике — например, можно узнать, как ускорить работу программы, изменив парадигму написания кода.
Преимущества: книгу можно использовать как набор шпаргалок или справочник.
Недостатки: для чтения понадобятся базовые навыки в программировании — новичкам вникнуть будет сложновато.
«Python. Разработка на основе тестирования»
Гарри Персиваль
Оригинальное название: Test-Driven Development with Python.
Перевод с английского: Логунов А.
Издательство: «ДМК Пресс». 2018 год, 622 с.
Зачем читать: чтобы научиться писать веб-приложения с помощью подхода TDD — разработки через тестирование. Это когда для какого-то фрагмента программы сначала пишут тесты, а потом — код.
В основном книга рассчитана на опытных разработчиков, но новичкам тоже будет полезна. Автор ведёт читателя методом TDD через все процессы создания сайта — от написания тестов и рефакторинга до подключения модулей на Django и самой разработки. Подача простая и наглядная, с обилием юмора и иллюстраций, так что читать будет интересно.
Преимущества: чуть ли не единственная книга о разработке через тестирование на Python.
Недостатки: читатели отмечают низкое качество перевода — например, некоторые фрагменты кода приведены с ошибками. Плюс часть инструкций по развёртыванию проектов немного устарели.
«Python. К вершинам мастерства»
Лучано Рамальо
Оригинальное название: Fluent Python: Clear, Concise, and Effective Programming.
Перевод с английского: Слинкин А.
Издательство: «ДМК Пресс». 2016 год, 768 с.
Зачем читать: чтобы начать использовать возможности Python по-максимуму.
Фишка книги в том, что автор не только рассказывает о популярных инструментах, но и поясняет, для каких задач их лучше использовать: например, когда будут уместны списки, а когда — массивы. Многие советуют читать её после книги Лутца, чтобы глубже разобраться в сложных штуках: потоках управления, метапрограммировании, декораторах, замыканиях и вот этом всём.
Преимущества: автор описывает лучшие практики Python-программирования — рассказывает, как писать эффективный и читаемый код.
Недостатки: не подходит для новичков — минуя синтаксис и базовые особенности языка, книга сразу переходит к продвинутым фичам питона.
«Высоконагруженные приложения. Программирование, масштабирование, поддержка»
Мартин Клеппман
Оригинальное название: Designing Data-Intensive Applications.
Переводчик: Пальти И.
Издательство: «Питер». 2022 год, 640 с.
Зачем читать: чтобы ещё лучше понимать, как работают сложные серверные приложения.
Книга Мартина Клеппмана — это Священное Писание бэкенд-разработчика. Базы данных, сетевые протоколы, репликация — чего тут только нет. Даже теорию категорий и техники объектно-ориентированного дизайна завезли. Если же обращаться к практической стороне вопроса, из книги вы узнаете:
- как базы данных хранят данные на сервере, чтобы их можно было эффективно находить;
- как серверные приложения справляются с большой нагрузкой;
- какие модели данных и языки запросов для каких ситуаций подходят;
- какие подходы позволяют создавать надёжные и масштабируемые системы.
И многие другие вещи, которые гуманитариям лучше не читать на ночь :)
Преимущества: можно получить представление о внутреннем устройстве баз данных и сценариях их использования.
Недостатки: некоторые считают, что из-за постоянного появления новых методик работы с данными книга в какой-то момент начнёт устаревать.
«Чистый код»
Роберт Мартин aka Дядя Боб
Оригинальное название: Clean Code: A Handbook of Agile Software Craftsmanship.
Перевод с английского: Матвеев Е.
Издательство: «Питер». 2019 год, 464 с.
Зачем читать: чтобы научиться писать чистый код и замечать ошибки там, где другие их не видят.
Эта книга имеет спорную репутацию, и вот почему.
Фишка в том, что очень многие вещи, о которых пишет Дядя Боб, правильные. Но из-за того, что мы не можем приучить себя к высокой культуре написания кода, мы так никогда не пишем. А из-за этого код, который мы видим в книге, кажется нам странным, некрасивым, и мы начинаем его осуждать.
Книга состоит из трёх частей. В первой части — принципы, паттерны и приёмы написания чистого кода с примерами. Вторая часть — практические сценарии и упражнения по чистке проблемного кода. Третья — перечень правил, описывающих, как правильно читать, писать и исправлять код.
Преимущества: можно узнать, какие паттерны разработки предлагают использовать опытные программисты.
Недостатки: примеры из книги рассчитаны на идеалистов и часто неприменимы в коммерческой разработке.
Никита Соболев
Сооснователь компании wemake.services
«Всё прочитанное отложится в голове, только если применять это на практике. Познакомившись с какой-то концепцией, нужно начать использовать её в коде, пытаться применить в уже существующих проектах или создать собственный на её основе. Только через практику вы поймёте, что из прочитанного вам подходит, а что — нет».
«Распределённые системы»
Эндрю С. Таненбаум, Мартен ван Стин
Оригинальное название: Distributed Systems.
Перевод с английского: В. Яровицкий.
Издательство: «ДМК Пресс». 2021 год, 584 с.
Зачем читать: чтобы прокачаться в создании надёжных масштабируемых систем для бэкенда.
Действительно фундаментальный труд о распределённых системах. Написан немного старомодным языком, зато здесь есть всё, что нужно хорошему бэкендеру: сетевые модели и протоколы, клиент-серверная архитектура, кэширование и репликация в вебе — бери и используй в работе. Что ещё можно узнать из книги:
- как работает конкурентный доступ к ресурсам;
- как реализуются очереди сообщений;
- как сбалансировать нагрузку на сервер.
Преимущества: неустаревающая классика, написанная простым языком с понятными примерами.
Недостатки: читатели жалуются на качество русского перевода книги. Например, frontend перевели как «передний конец», а commit — как «фиксация». Поэтому эту книгу рекомендуют читать в оригинале, тем более что он опубликован в открытом доступе.
«Типизированный Python для профессиональной разработки»
Алексей Голобурдин
Зачем читать: чтобы понять всю прелесть динамической типизации в Python. На примере приложения «Погода» автор рассказывает, как использовать встроенные в Python структуры и типы данных: строки, кортежи, словари и другие.
Преимущества: единственное за долгие годы издание о типизации в питоне. Живое сообщество поклонников — у автора есть популярный ютуб-канал, и не только по этой теме, но и по всей Python-разработке в целом.
Что почитать опытным Python-разработчикам
Сложность: ★ ★ ★
Никита Соболев
Сооснователь компании wemake.services
«Специалистам постарше можно читать более философские, концептуальные истории, чтобы начать разбираться в вопросе не поверхностно, а глубоко, соединять разрозненные данные о разработке в единую картинку».
В подборке книг для сеньоров — теория категорий, паттерны проектирования, SQLAlchemy, продвинутый Python: слои приложений, метапрограммирование, событийное программирование и асинхронность.
Category Theory for Programmers
Bartosz Milewski
Язык: английский.
Оригинальное название: Category Theory for Programmers: The Preface.
Издательство: Bartosz Milewski. 2019 год, 350 с.
Зачем читать: чтобы взглянуть на программирование с точки зрения математики, а ещё чтобы разобраться в монадных функциях.
Забудьте про классы, объекты, полиморфизм, наследование. Автор книги, физик по образованию, предлагает разработчикам заглянуть в самые недра программирования — принципы теории категорий, благодаря которым разные части кода вообще можно сочетать друг с другом. Если это и не бином Ньютона, то очень близко к этому.
Это не просто книжка, которую можно прочитать и закрыть. Нужно обдумать прочитанное, написать код, снова обдумать и выполнить предложенные автором примеры кода. Это сложный образовательный процесс. А образовательный процесс — всегда насилие над собой. Нужно будет немножко поиздеваться над собой.
Преимущества: книга даёт программистам расширенную математическую базу. Есть качественный перевод на русский язык. Если хотите поработать с примерами кода из этой книги, можно скачать их в авторском GitHub-репозитории.
Недостатки: сложная книга, но не из-за подачи, а из-за темы. Фрагменты кода приводятся на C++ и Haskell, поэтому понадобится базовое знание этих языков.
Expert Python Programming
Michal Jaworski, Tarek Ziadé
Язык: английский.
Издательство: Packt Publishing. 2021 год, 630 с.
Зачем читать: чтобы разобраться в новых фишках синтаксиса Python, научиться работать с популярными инструментами и настраивать окружение.
Так как особое внимание в книге уделено параллелизму и развёртыванию проектов, она особенно подойдёт веб-разработчикам и бэкенд-инженерам. Начав с описания нововведений Python 3.7, авторы постепенно подводят читателя к написанию приложений и управлению проектом. Можно научиться:
- разворачивать приложения на сервере;
- интегрировать в Python блоки кода на C и C++;
- использовать библиотеки событийного, сигнального и асинхронного программирования;
- оптимизировать код — вычислять уязвимые места в проекте и улучшать их производительность;
- составлять техническую документацию.
Преимущества: книга позволит глубже изучить язык программирования Python в версии 3.7.
Недостатки: опечатки в коде, нет перевода на русский язык.
«Паттерны разработки на Python: TDD, DDD и событийно-ориентированная архитектура»
Гарри Персиваль и Боб Грегори
Оригинальное название: Architecture Patterns with Python: Enabling Test-Driven Development, Domain-Driven Design, and Event-Driven Microservices.
Перевод с английского: Андрей Логунов.
Издательство: «Питер». 2021 год, 336 с.
Зачем читать: чтобы разобраться в высокоуровневых паттернах проектирования.
Учебник даёт подробную информацию о подходах к архитектуре приложений. На понятных примерах авторы объясняют принципы предметно-ориентированного проектирования, разработки через тестирование, основные концепции ООП и общую архитектуру программного обеспечения.
Книга учит строить приложение со слоями, менеджерами контекста, пониманием unit of work, управлять сложностью приложений и получать максимальный результат от тестов.
Преимущества: описанные подходы работают не только в Python, но и в других языках программирования.
Недостатки: читатели жалуются на плохую вёрстку и адаптацию русскоязычного издания.
500 Lines or Less
Michael DiBernardo (editor)
Язык: английский.
Оригинальное название: 500 Lines or Less.
Издательство: Lulu Press. 2016 год, 478 с.
Зачем читать: чтобы узнать, как опытные программисты решают сложные задачи.
Это не книга в классическом понимании, а скорее альманах или сборник статей. Разработчики приложений с открытым исходным кодом рассказывают о своих продуктах: как они работают, из чего состоят и что из них можно почерпнуть. По словам авторов проекта, статьи будут интересны двум категориям разработчиков:
- новичкам — чтобы узнать, как думают опытные коллеги;
- опытным программистам — чтобы перенять какие-то приёмы и использовать их в работе.
Преимущества: учимся у лучших.
Недостатки: нет.
«Элегантный SciPy»
Хуан Нуньес-Иглесиас и Штефан ван дер Уолт
Оригинальное название: Elegant SciPy: The Art of Scientific Python.
Перевод с английского: Логунов А.
Издательство: «ДМК Пресс». 2018 год.
Зачем читать: чтобы научиться работать с библиотеками для обработки данных.
Напоследок: книга для настоящих учёных и всех, кто грезит о больших данных. С её помощью можно освоить популярные библиотеки, которые используют в статистике, машинном обучении, визуализации данных и обработке изображений. Это и NumPy, и её надстройка SciPy, и Pandas, и легендарный блокнот Jupyter, который умеет исполнять код по кусочкам. А что ещё нам, учёным, надо?
Преимущества: коротко и по делу, без лирических отступлений — подробное и глубокое погружение в дебри научной Python-экосистемы. Все примеры — на основе реальных исследований. Например, есть примеры с набором данных по экспрессии генов и анализом радарных данных.
Недостатки: нет.
В заключение: как читать книги о программировании, чтобы извлечь максимальную пользу
С книжками разобрались, теперь немного о том, как их читать, чтобы не потерять время и вынести что-то полезное.
Выбирайте книгу по уровню
Классическая ошибка — читать не ту книгу в неподходящий момент времени. Если вы новичок и читаете книжку для опытных программистов, вы себе вредите. Ведь вы ещё не понимаете проблематики, которая стояла перед автором, когда он эту книгу писал. После этого люди часто начинают «впихивать невпихуемое», а это плохо и для программиста, и для кода, который он пишет.
Не зацикливайтесь на best practices
Коммерческая разработка — это всегда костыли. Зачастую там никакие практики неприменимы. Поэтому будете вы читать книги или нет — никакой разницы. Чтение книг не играет роли в профессиональном становлении.
В коммерческой компании стать большим профессионалом крайне сложно. Нужно либо создавать что-то своё, набивать шишки, либо находить себе уникального ментора, которых очень мало в мире, а книжки вам в этом не помогут.
Главное — практика
Книги — лишь некий заменитель развития. Вы развиваетесь, когда что-то делаете. Когда вы читаете, то только делаете вид, что что-то делаете. Вместо этого вы должны полученные знания сразу применить на практике.
Лучший способ чему-то научиться — сделать open-source-проект, который решает конкретную проблему, а потом развивать его и поддерживать. Так вы становитесь экспертом в конкретной проблеме. Если вы не можете создать свой проект, можно присоединиться к существующему, и тогда люди, по работам которых написаны все эти книги, расскажут, как делать и как не делать. Это будет намного полезнее, чем прочитать книгу и не написать ни строчки кода по описанным практикам.
Больше интересного про код в нашем телеграм-канале. Подписывайтесь!