Мы продолжаем обзор книг по Python для новичков и сегодня на очереди, пожалуй, самая популярная и самая рекомендуемая книга: «Изучаем Python» Марка Лутца.
И до того, как я купил всю возможную литературу для обзоров, у меня была только одна книга о Питоне — Марк Лутц «Изучаем Python», третье издание.
Эту книгу я купил в 2009 году, когда работал в одной медиа компании и разрабатывал городской портал на Django. На тот момент я уже года 2 как программировал на Python, то есть эта книга для меня была не как пособие для новичков, а как хороший источник информации о языке.
Но это было третье издание. А сегодня на обзоре последнее (пятое) издание, и оно состоит из двух томов. То есть книга одна, но на самом деле две.
И если раньше, чтобы рассказать о тонкостях Python хватало восьмиста страниц, то теперь нужно полторы тысячи, настолько язык стал больше. При этом книга не дешевая, за оба тома вам придется выложить от пяти с половиной до восьми с половиной тысяч рублей, в зависимости от акций, скидок и конкретных магазинов.
Но давайте ближе к обзору. И перед тем, как мы посмотрим содержание, следует сразу сказать о ключевых отличиях «Изучаем Python» от других книг.
Особенности книги
Во-первых, оригинальная книга, то есть пятое издание на английском языке, вышло в 2013 году, и оно охватывает Python 3.3. К текущему моменту, то есть к 2020 году, книга получила несколько апдейтов и должна затрагивать Python 3.7. Однако эти апдейты условные. Основное же содержание книги не менялось уже 7 лет.
Так в предисловии автор много говорит, о том, что есть две ветки Python: вторая и третья, и вторая доминирует. Но это уже не так, Python 3 прочно занял место в продакшене, а Python 2 стремительно уходит в прошлое. Практически все ключевые библиотеки и фреймворки поддерживают Python 3. Поэтому, конечно, неплохо знать об отличиях второй и третьей ветки, но в обучении я бы делал упор именно на Python 3.
Во-вторых, Марк Лутц очень подробно описывает, что из себя представляет его книга и как ей пользоваться. В частности — данная книга не является справочником, а это скорее учебное пособие. А еще эта книга описывает возможности Python, и не затрагивает какие-то сторонние библиотеки.
Практически во всех книгах, которые я рассматривал в прошлых видео, авторы показывали примеры работ с различными библиотеками, например с Фласком у Пола Бэрри или PyGame у Майкла Доусона. Тут же вы не найдете ничего подобного. Суть книги в том, чтобы научить вас Питону, а хорошо зная язык вы самостоятельно сможете освоить любую библиотеку, которая на нем написана.
В-третьих, что нужно знать, это то, что «Изучаем Python» не учит вас программировать. Это кажется немного странным, но это так. Это книга о Python. Когда я рассматривал книгу Златопольского, то сказал, что он учит программировать, но плохо раскрывает Python. А тут ровно наоборот.
Разумеется, у Марка Лутца много тем, которые касаются программирования как области деятельности, но всё же если вы хотите более профессионально научиться алгоритмированию или проектированию программ в принципе, то вам потребуется что-то другое.
И в-четвертых, если вы совсем новичок и никогда раньше не программировали, то Марк Лутц советует параллельно использовать и другие источники получения знаний: курсы по Python, статьи, другие, более легкие книги.
Но, двинемся дальше, с общей концепцией мы разобрались. Теперь поговорим о содержании.
Содержание
Первая глава книги описывает, что такое Python, а также где и кем он применяется. Список, компаний, которые официально подтвердили использование Питона просто огромный: это Google, YouTube, Dropbox, Netflix, Яндекс, NASA, Cisco, Intel — тысячи их. И после того, как вы достаточно вдохновитесь языком, а Python действительно крут, то может смело переходить ко второй и третьей главам, где автор в деталях описывает как интерпретатор выполняет код, а также способы запуска python программ в разных операционных системах.
Третью главу автор завершает подробным описанием среды разработки IDLE. И хотя Марк Лутц рекомендует её использовать, он всё же уделяет две страницы замечаниям и проблемам, которые у вас могут возникать с этим недо IDE.
Также Марк Лутц даёт краткий обзор профессиональных сред разработки и делает вывод, что выбор IDE зачастую субъективен. Полностью с этим согласен. По историческим причинам я использую PyCharm, но кто-то и в Атоме себя уверенно чувствует.
Далее автор немного говорит про отладку кода и переходит ко второй части книги, в которой начинает непосредственно рассказывать про Питон.
Вторая часть книги находится в первом томе и начинается с четвертой главы, которая называется «Введение в типы объектов Python». Это очень точное название, ведь Python действительно имеет дело с объектами. На самом деле, новичку в программировании может быть сложно, так как в этой главе Марк Лутц вводит много понятий: включая те же объекты, списки, словари, упоминает lambda-функции.
Многие из этих терминов будут для вас незнакомыми. Даже если вы писали на других языках. И, в целом, если вы их не понимаете, то можете особо не напрягаться, а просто пропустить. Позже автор к ним вернется и подробно расскажет.
Тем не менее Марк Лутц постоянно забегает немного вперед, чтобы сохранить логику повествования, и это усложняет понимание.
Например, при описании строк он затрагивает регулярные выражения, а для новичка регулярные выражения это темный лес.
Также при описании списков он говорит о матрицах, генераторах, функциональном программировании. Да это круто, но для новичка будет сложно.
Завершается глава кратким описанием классов, что с одной стороны логично, но с другой стороны, если вы не знакомы с ООП или, например, изучали в школе Pascal, то классы будут для вас в новинку.
Следующая глава целиком посвящена числам. И тут всё очень подробно, но опять же, я бы не сказал, что текст легко воспринимается. Но зато Марк Лутц хорошо объясняет различия в делении целых чисел в Python 2 и в Python 3. Ровно то, на что забил Зед Шоу.
В целом, в первом томе Марк Лутц рассказывает про типы данных, списки, словари, условия, циклы, функции и модули. То есть даёт стандартный набор программиста. Поэтому подробно разбирать каждую главу смысла нет, да и придраться особо не к чему. Всё тут хорошо, только немного сложно.
Второй том
Поэтому перейдем ко второму тому, в котором автор затрагивает еще более сложные понятия и начинает он с классов.
Классам в книге уделено более 300 страниц. Это и стандартные возможности, и перегрузка операций, и колбэки, и делегирование, фабрики, декораторы, слоты, в общем всё что есть в Python.
В рецензии на книгу Златопольского я упрекнул его в отсутствии классов и это не спроста. Там вообще про классы не было, а тут целых 300 страниц. По объему как вся книга Дмитрия Михайловича. Также у Златопольского не было про исключения, а у Лутца им посвящено 80 страниц.
После классов и исключений идут еще более сложные темы: байтовые строки, расширенные возможности декораторов, метаклассы.
С некоторыми возможностями в реальности вы можете никогда не столкнуться, например, с теми же метаклассами. Другие темы могут показаться вам странными или малоприменимыми.
Например, в главе по байтовые строки, есть небольшой блок про маркеры BOM или по-другому маркеры порядка байтов. Маркер BOM — это специальный символ, который вставляется в текстовый документ, чтобы указать как в нем расположены байты. Этот символ добавляется далеко не всегда и основная проблема в том, что при открытии файла в текстовом редакторе, текстовый редактор этот символ не выводит, что может доставить массу неприятностей при программной обработке.
Казалось бы, что за маркер BOM и зачем он в книге про Python. Тем не менее, в прошлом году у меня был реальный опыт работы с такими файлами, то есть в коммерческой разработке. Один раз за 15 лет программирования. И таких редких, но в тоже время вполне реальных примеров в книге очень много. Именно в этом главная ценность данной книги. В глубине изложения и понимания Python.
Выводы о книгах
И в целом, прочитав оба тома, у меня сложилось твердое мнение, что эта книга не для новичков. Возможно, она подойдет, если вы писали на чем-то другом, но если вы только начинаете программировать, эта книга будет сложной и слишком детальной.
Идеальной же она будет для тех, кто уже умеет программировать на Python на базовом уровне и хочет достичь в этом деле мастерства. То есть для тех, кто хочет стать профессиональным Python-разработчиком — эта книга Must Have. Да она дорогая, но она того стоит.
Еще хочу заметить, что в книге нет заданий. Поэтому набивать руку вам придется самостоятельно. Либо по задачникам, либо на курсах и в сервисах. Однако, как я уже сказал, в книге много примеров, и читая её, нужно повторять их, внимательно изучая описания и пробуя что-то изменить в коде автора.
Также, в книге много сравнений второй и третьей версии Python. И фактически она сразу про два языка, поэтому книга и получилась такой толстой.
Теперь немного о минусах. Как я сказал, книга описывает Python 3.3 и в ней должны были быть апдейты до Python 3.7, но их не было. Было краткое описание нововведений в следующих версиях, но без деталей. Как минимум в книге нет аннотации функций, модуля typing и breakpoint, а также asyncio и асинхронного программирования. А это довольно серьезные темы.
То есть книга немного устарела, хотя это и не повод не использовать её. Дополнения, которые я озвучил несложно будет изучить самостоятельно.
Вообще, мне кажется, скоро выйдет 6-издание, уже пора. В нем будет меньше Python второй версии и больше новых возможностей третьей. Хотя мои прогнозы — это гадание на кофейной гуще.
На этом у меня всё.
Пока и успехов в учебе!