Мой топ книг о Python

Привет, Хабр! Я Слава, руководитель команды «Профессиональные инструменты» в Циане и член core-команды авторов в Яндекс.Практикуме.

Вместе с ребятами мы развиваем курс «Мидл python-разработчик», и сегодня я хочу поделиться моим личным списком книг, которые помогут вам структурировать и углубить свои знания о разработке на языке Python.

abs609tivuel7shtljygsjvuii0.png

«Изучаем Python», Марк Лутц


7vu45d0pinpukjx0eh2j0ftpqtw.jpeg

Открывает топ книга Марка Лутца «Изучаем Python». Она занимает особое место в моей карьере — моё изучение Python проходило именно по ней. В студенчестве она казалась мне фундаментальным трудом — в книге почти полторы тысячи страниц!

Книга позволит войти в Python, что называется, с нуля. Почему люди программируют на Python? Кто использует Python сегодня? Что можно делать при помощи Python? Каковы сильные стороны Python? Ответы на эти вопросы позволят получить общее представление о языке.

Книга знакомит читателя с интерактивным режимом — командной строкой Python. Вы узнаете о том, как выводить текст в стандартный поток вывода, о модулях и об их импорте, об особенностях использования Python в Windows.

Дальше следует описание типов данных и особенностей работы с ними. Отдельными главами раскрывается работа со строками и словарями. Вы узнаете о ветвлении и циклах, итераторах, генераторах, функциях и их аргументах, о модулях и пакетах как способах организации кода. Затем следует введение в ООП: классы, наследование, перегрузка операторов, полиморфизм и метаклассы. Рассказывается об исключениях, о их роли в языке.

На мой взгляд, «Изучаем Python» очень плавно и всеобъемлюще знакомит читателя с миром Python, с одной стороны, не углубляясь в детали, с другой — давая всю полноту картины.

«Высокопроизводительный Python: практическое пособие для людей», Миша Горелик, Ян Освальд


h7lwkkmricpyv3r3d6r1aez4h4s.jpeg

Второе место топа занимает книга М. Горелика и Я. Освальда «Высокопроизводительный Python: практическое пособие для людей».

Книга позволит вам немного заглянуть под капот языка. Что вообще такое высокая производительность применительно к Python? Книга знакомит с виртуальной машиной Python, учит пользоваться инструментами профилирования для поиска узких мест в использовании процессорного времени, рассказывает о типах данных с точки зрения их внутреннего устройства.

Вы узнаете о многопоточности, асинхронном и мультипроцессорном исполнении, о том, как организовать кластерные вычисления и как потреблять меньше оперативной памяти. Для особо искушённых есть отдельная глава о компиляции кода на Python в C.

Ваш код может быть абсолютно верным, но работать недостаточно быстро. Чтобы ускорить его работу, вам нужно понять, как устроен язык, на котором вы пишете. Это практическое руководство поможет вам получить глубокое понимание реализации Python.

«Python. Разработка на основе тестирования», Гарри Персиваль


kkcpu6p03gcke9gipywkazdqlvw.jpeg

Следующая книга топа — «Python. Разработка на основе тестирования» Гарри Персиваля. Мне посчастливилось пообщаться с Гарри в рамках прошедшей Russian Python Week 2020. Говорят, британцы чопорные, со странным чувством юмора. Я думаю, что это стереотипы. Гарри много и смешно шутил, улыбался, рассказывал истории из жизни, был очень открыт. Лучше всего о своей книге Гарри расскажет сам.

jc1xqmsbrc-rst7i8g_sou4hujc.png

Меня иногда спрашивают, как я пришёл к тому, чтобы написать эту книгу. Впервые я изучил Python по книге «Dive Into Python» — это было примерно в 2008-м. Я изучал словари, строки, узнавал различные фичи языка — все вот эти вещи. И где-то к 14-й главе впервые появились слова о юнит-тестировании. Там нужно было написать калькулятор римских чисел. И было написано, что гораздо легче это сделать, если вы пишете юнит-тесты. Я подумал: «О, это звучит круто!» Но это звучало как что-то, что вам следует делать. Как чистить зубы зубной нитью — хорошо бы, чтобы вы это делали каждый день. Разумеется, с таким посылом я проигнорировал этот совет полностью и сразу же о нём забыл. К тому моменту я программировал на Python уже три недели — зачем мне какое-то юнит-тестирование? У меня и так дела идут хорошо! Если я напишу небольшое Django-приложение, несколько веб-страниц — без проблем, я могу всё это проверить. И знаете что? У меня действительно было всё отлично. Поначалу.

Когда моё приложение было небольшим, было очень просто проверить руками, работает оно или нет. Где-то на второй неделе разработки у меня уже было восемь различных модулей, 12 веб-страниц, появилось множественное наследование веб-форм, и перед очередным изменением я стал рассуждать так.

— Я внесу изменения сюда. О, нет, это поломает мне вон тот класс. Лучше изменю здесь. Хотя… есть риск, что перестанет работать веб-форма. Лучше вот сюда. Да, точно, сюда! Ах, черт, всё равно сломалось!

И довольно быстро даже крошечное изменение стало для меня очень болезненным. Я не представлял, что на самом деле от чего зависит, страх вносить изменения сковал меня, я не мог ничего отрефакторить — мой код превратился в лапшу.

Когда я пришёл на свою первую работу, там практиковали разработку через тестирование и экстремальное программирование. И я был уже готов усвоить свой урок, но всё ещё много жаловался: «Юнит-тесты и функциональные тесты? Зачем так много тестов?» Разработка была примерно такой: ты делаешь микроизменение — и запускаешь тест. Делаешь ещё микроизменение — снова запускаешь тест. И так всё время. Я говорил: «Вы серьёзно? Неужели мы не можем пропустить этот шаг, мы сэкономим время!» На что мне спокойно говорили: «Нет-нет, Гарри, продолжай делать так». Я жаловался, я ныл, это было тяжело, это занимало много времени. Но! Через какое-то время мне открылась вся прелесть такого подхода! Я понял, что до этого делал что-то не так, и что вот он — правильный путь. Спустя пару лет я решил написать книгу об этом.

Разработка на основе тестирования — не естественная вещь; чтобы проникнуться, нужна практика. В книге я как раз и пытаюсь дать немного практики.


Книга позволит вам переосмыслить вашу работу и подход к ней, буквально перевернёт сознание. Многие рутинные вещи обретут новый смысл, к ним появится интерес. Качество тестов заметно улучшится, и это неизбежно повлияет на качество кода и архитектуру приложения.

«Architecture Patterns with Python: Enabling Test-Driven Development, Domain-Driven Design, and Event-Driven Microservices», Гарри Персиваль, Боб Грегори


d_wwilnu0gghfmxemntufd1wdkk.jpeg

Я не мог не поговорить с Гарри Персивалем о новой книге, над которой он работает в соавторстве с Бобом Грегори, — «Архитектурные паттерны в Python». Книгу можно почитать бесплатно на сайте www.cosmicpython.com. Гарри продолжает.

В конце первой книги я стал говорить о разных типах тестов. В проекте могут быть низкоуровневые юнит-тесты, интеграционные тесты, где мы проверяем интеграцию с API, или с файловой системой, или с базой данных, а также высокоуровневые тесты — e2e-тесты, функциональные тесты; возможно, тесты на всю систему целиком. Я начал рассуждать о правильном балансе, как много каких тестов должно быть, — об идее пирамиды тестирования. Я также рассуждал о цене, которую нужно за тесты платить: некоторые тесты проходят очень быстро, некоторые медленно, некоторые более надёжные, некоторые менее. Оказалось, что это тяжело — найти правильный баланс скорости тестов и уверенности в том, что они надёжные.

Новая книга пытается дать ответ на этот вопрос. Она о выборе архитектурных шаблонов, о способах структурировать ваш код, которые позволят получить максимальное покрытие юнит-тестами и минимальное количество тяжёлых e2e- и интеграционных тестов. И достигается это как раз хорошим дизайном вашего приложения. Это непросто.

Мне невероятно повезло: я встретил своего коллегу Боба, который оказался экспертом в вопросе. Он стал соавтором книги и рассказал мне о том, как он решает эту задачу. Мы транслировали несколько хороших идей из мира Java и C# (представителей энтерпрайз-мира) в мир Python. Разумеется, мы не просто вставляли код Java в Python (это было бы ужасно), мы пытались ответить на вопрос, как это лучше всего делать в стиле pythonic way.

Основной вопрос, на который я пытаюсь дать ответ в этой книге, — каким образом архитектура приложения может помочь нам получить тесты наивысшего качества.


Книгу стоит читать как продолжение «Python. Разработка на основе тестирования». Если вам понравилась первая книга, а идеи, рассказанные там, нашли у вас отклик, то вторая книга ответит на все ваши вопросы и поможет воплотить подход в жизнь — на работе или в вашем личном проекте.

«Python. К вершинам мастерства», Лучано Рамальо


d6sol96ay2jssos6pvjazq0oxgi.jpeg

Замыкает сегодняшний топ книга «Python. К вершинам мастерства» великолепного Лучано Рамальо. Книга стала очень успешной и была переведена на восемь языков.

Если попытаться одной строкой раскрыть, о чём эта книга, то я бы сказал так: она о том, как использовать Python 3 наилучшим возможным способом.

Лучано 66 лет, он живёт и работает в Сан-Паулу в Бразилии. Мне посчастливилось пообщаться с ним в рамках прошедшей Russian Python Week 2020. Несмотря на возраст, Лучано показался мне очень живым, открытым и жизнерадостным собеседником.

n2ilvuto9qsxocoyei9fylfdgp8.png

Сейчас Лучано работает над вторым изданием книги. Он поделился, что основным изменением в новой книге будет глава «Введение в Type Hints» — она ещё не закончена, но уже сейчас в ней 60 страниц, и это будет самая большая глава книги!

Однажды Лучано позвали играть в волейбол.

— Я не умею играть в волейбол, — сказал Лучано.
— Да никто понятия не имеет, как играть в волейбол, нам просто нужен ещё один человек, чтобы сформировать команду, — ответили ребята.

В команде только капитан был профессионалом. Он объяснил: игрок с дальней части поля передаёт мяч игроку в центре, он делает передачу игроку под сеткой, который в свою очередь отправляет мяч на сторону противника. Это Best Practice, так играют Pro.

Игра началась, команда действовала по инструкции и со временем начала проигрывать.

Реальность была такова, что никто за исключением капитана не умел играть достаточно хорошо, и часто при передачах команда теряла мяч — он падал на землю, и ход переходил к противнику.

Лучано собрал команду.

— Давайте перестанем притворяться, что мы Pro — на самом деле мы не умеем профессионально играть! Давайте сразу закидывать мяч на сторону противника без передач внутри — так, как мы делали когда-то давно в школе!

И это сработало! Это не было Best Practice, но эта тактика лучше всего подходила к ситуации и для команды, которая у них была. И в конце концов это привело к победе.

Эта небольшая история показательна и для мира Python. Нужно понимать, что Python используют очень много людей, которые не являются профессиональными разработчиками — это физики, биологи, социологи и другие. Нужно, чтобы инструмент не требовал от них выполнения Best Practice, а позволял решать насущную задачу. И Python это позволяет.

Лучано очень любит программировать. Он начал изучать Python 20 лет назад и с тех пор обучил ему многих других людей. Лучано обнаружил, что поскольку Python очень лёгок для обучения, иногда люди даже не читают tutorial полностью. Из-за этого иногда, читая чужой код, можно обнаружить, что человек пишет Java-код на Python или Ruby-код на Python, то есть пытается повторить на другом языке то, к чему он привык. Лучано создал курс «Python для тех, кто знает Python». После этого он много выступал на тему того, как делать те или иные вещи в стиле pythonic way. Так и родилась книга.

Книга стала очень успешной и в мире, и для самого Лучано: он получил работу в ThoughtWorks. Он очень хотел там работать, но не решался отправлять к ним своё резюме из-за высоких требований к кандидатам. После того как книга вышла в свет, они сами к нему пришли. Сегодня ThoughtWorks поддерживают Лучано как публичного спикера точно так же, как поддерживают Мартина Фаулера.

Русское название для книги предложил Python core developer Юрий Селиванов. Лучано считает, что это хороший перевод его книги.

Если вы серьёзно настроены построить карьеру Python-разработчика, то эта книга для вас.

Зачем читать книги


Я глубоко убеждён, что читать книги необходимо людям всех возрастов. Не только литературу профессиональную, но и художественную. Книги действуют на человека, как точильный камень действует на саблю, — они придают знаниям остроту.

Стивен Р. Кови в своей книге »7 навыков высокоэффективных людей» называет это «затачиванием пилы». Этот навык — ваши личные ресурсы и средства. Он поддерживает и развивает самый ценный ваш ресурс — вас самих.

«Как ты узнаёшь новое?» — вопрос, который обычно я задаю кандидатам на собеседованиях. Ответ на него для меня действительно важен, и тут мне недостаточно услышать про чтение статей, просмотр видео на ютубе или прослушивание подкастов. Только книги придают знаниям структуру, без разрывов и со всей полнотой контекста проводя читателя к просветлению.

Перефразируя Антона Птушкина, скажу: «Читайте, оно того стоит!»

P.S. Список книг, который мы обсудили сегодня, не претендует на полноту. Если вы считаете, что есть книга, которая не менее других достойна занять своё место в рейтинге, то я приглашаю вас присоединиться к доске Trello, на которой мы — русское комьюнити Python-разработчиков — формируем собственный рейтинг книг о разработке на Python. Чувствуйте себя как дома — голосуйте за существующие, добавляйте новые книги или целые категории!

P.P. S. Остались вопросы? Ищите меня в сети: slavabezborodov.com

© Habrahabr.ru