Рецензия на книгу
Python для чайников

Джон Пол Мюллер

Обложка книги Python для чайников (Джон Пол Мюллер)

Краткая рецензия

Книга скорее про Jupyter Notebook, чем про Python. Самому языку уделено мало внимания, темы раскрыты слабо, много неточностей в ключевых концепциях языка.

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

Полная рецензия

Продолжаем поиск лучшей книги по Питону для новичков и сегодня на обзоре 2-е издание «Python для чайников» Джона Пола Мюллера.

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

И это довольно плодовитый писатель, на сайте издательства я нашел его книги по Питону, C#, C++, Visual Basic, Microsoft Exchange Server, Алгоритмам, Машинному обучению. Всего более 100 книг на самые разные тематики. И это не удивительно, ведь мы имеем дело с профессиональным техническим писателем. Как например, Майк МакГрат, который занимает нижнюю строку нашего рейтинга лучших книг по Python.

Но давайте вернемся к данной книге и начнем с обложки, на которой нам обещают: во-первых, создать и запустить свое первое приложение на Python, звучит неплохо. Во-вторых, научиться выполнять отладку и устранять ошибки, а это уже полезно. А в-третьих, освоить работу с Anaconda и Jupyter Notebook. И это круто.

С Юпитером в наших обзорах мы еще не сталкивались и в целом данная тема интересна лично для меня. Так как Jupyter нередко используется в обучении. А еще его реально применяют на практике в разных компаниях, особенно связанных с аналитикой.

На последней конференции Moscow Python Conf++ юпитеру было посвящено минимум два доклада. То есть тема актуальная.

Первые сложности

Но вернемся к книге. И начинается она со знакомства и установки Python, включая установку в Windows, MaOS и Linux. В Linuxe автор предлагает скачать архив исходников, а затем собрать их в командной строке с помощью ./configure и make.

И я вам скажу, что это не самый простой способ. Особенно для новичков. Особенно для чайников.

После установки, если вы с ней справитесь, автор приводит варианты запуска интерпретатора из командной строки с использованием разных параметров. Я не знаю зачем он тратит на это две страницы, данная информация новичку совсем не нужна.

Ну серьезно если запустить Python с параметрами -OO и -u (python -OO -u) то он будет запущен с оптимизацией за счет удаления строк документации и с поддержкой небуферезированного двоичного ввода для устройств stdout и stderr. Я уверен, что это очень важные параметры, но зачем о них знать новичку — ума не приложу.

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

Но, двинемся дальше, а дальше Джон знакомит нас с несколькими функциям, включая print и help, с помощью которой можно перейти в режим справки и получить помощь находясь прямо в интерпретаторе.

Забавно, что в книге есть врезка «Совет», которая начинается со слов «У многих читателей наверняка возник вопрос: зачем нужен режим справки, если те же самые результаты можно получить из командной строки.»

У меня же возник другой вопрос, зачем использовать режим справки в командной строке, если в 2021 году у нас есть интернет, с официальной документацией и кучей ресурсов на всех языках?

Действительно, навык использования функции help сомнительный для новичка, да и для опытного пользователя тоже. Но пойдем дальше к 4 главе — «Создание первого приложения».

Первые ляпы

Кстати, мы прочитали уже более 70 страниц, но пока наш максимум — это запуск интерпретатора и вывод простой строки с помощью print. Хотелось бы уже чего-то поинтересней.

И, собственно, в четвертой главе, автор вводит понятие IDE и в качестве IDE для разработки приложений Джон предлагает использовать Jupyter Notebook в составе Anaconda.

Перед тем как я продолжу, хочу сразу предупредить, что в этой статия я постоянно буду употреблять «Ноутбук» в значении «Юпитер Ноутбук».

Итак, как я сказал, автор в качестве IDE предлагает использовать Ноутбук и самое интересное, что Notebook — это не IDE. Это скорее интерактивная среда для запуска Python программ доступ к которой осуществляется через web-интерфейс и, собственно, Notebook служит для создания документов, заметок и так называемых блокнотов Python.

Звучит несколько туманно, но немного позже я покажу как Юпитер выглядит. Тем не менее автор упорно продолжает называть его IDE и даже приводит официальный список IDE, которые работают с Python, но в этом списке нет ни Юпитера, ни Ноутбука, ни Анаконды. Потому что всё это не IDE.

Ладно, мне кажется у Джона Пол Мюллера какое-то свое собственно понимание процесса разработки. Права стоит оговориться, что в некоторых специальностях, вроде DataScience, Юпитер Ноутбук действительно основной или один из основных инструментов для написания программ на Python, и для таких специальностей Ноутбук действительно может быть сродни IDE. Но у меня другое мнение.

Как я сказал, автор предлагает использовать Ноутбук в составе анаконды и сперва нужно установить её. Анаконда — это дистрибутив Python и языка R с поддержкой всяких научных библиотек.

Я без проблем её установил и у меня возник вопрос, а зачем мы устанавливали Python с официального сайта, а в случае Linux собирали его из исходников, если в конечном счете будем использовать Анаконду со своей версией питона?

Дочитав книгу до конца, я так и не нашел ответа на этот вопрос.

Но продолжим, итак, Анаконду я установил, а после запустил сперва её, а потом и сам Ноутбук. Каких-то сложностей тут не возникло. В книге даются довольно подробные инструкции.

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

А вот в Ноутбуке не так. Давайте посмотрим пример:

Работа в Jupyter

Пример работы в Jupyter.

В первой ячейке я вывожу переменную myVar и она спокойно выводится, а всё потому что до этого я запустил строки, которые находятся ниже. Именно в этих строках была объявлена переменная myVar. И самое необычное это то, что система запомнила, в какой последовательности я всё запускал. Поэтому myVar в первой строке вывелась без проблем.

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

Кстати обратите внимание на имя переменной myVar — это не моя работа. Вы всё правильно поняли, автор немного подзабил на PEP8 и символы подчеркивания. И везде в книге использует CamelCase и lowerCamelCase.

А еще в функции print он в конце строки после двоеточия поставил пробел, чтобы вывести следующую за строкой переменную с отступом:

Пробел с лишним отступом

Пробел с лишним отступом

Только вот этот пробел там лишний, функция print сама по умолчанию ставит пробел между параметрами при их выводе. И в коде автора получается двойной пробел. Это не критично, но тут прослеживается то, что Джон всё-таки плохо знает Python. И это болезнь всех технических писателей. Да они разбираются во многих технологиях, выпускают 100500 книг, но всё это как-то поверхностно.

Далее автор знакомит с базовыми понятиями блокнота, а также приводит несколько несложных конструкций на Python. Каких-то трудностей у меня не возникло.

Углубялемся в Jupyter Notebook

Следующая глава посвящена работе с Анакондой, но на самом деле автор еще сильнее углубляется в Ноутбук. Рассказывает про контрольные точки и расширенные возможности ячеек. В том числе упоминает, что ячейки выполняются независимо и при их создании нужно заранее продумывать структуру. Что опять же, для начинающего разработчика может быть непросто. Тут бы с Python справиться. Хотя к программированию на Python, как вы заметили, мы еще не подобрались.

После автор просто перечисляет все возможности интерфейса ноутбука как будто это мы читаем справочник. При этом мы прошли уже 120 страниц и пока даже не начали программировать.

К слову, книге в «Python на примерах» Васильева, к этому моменту мы уже научились вычислять площадь фигуры ограниченной двумя кривыми. А тут преодолели пока только подготовку.

Но вторая часть книги называется «Основы программирования на Python» поэтому есть вероятность, что вот-вот начнем.

Начинаем программировать

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

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

В итоге я скачал с сайта издательства исходники с русскими комментариями и поместил всю папку в ноутбук. А после легко открыл все примеры из 6 главы.

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

Но вернемся к книге.

После чисел Джон Пол Мюллер рассказывает об операторах сравнения, а после сразу переходит к функциям, с которыми всё более-менее понятно.

Следующая глава посвящена условиям, а затем и циклам. Всё максимально сжато и просто. Какой-то глубины вы тут не найдете. Базовые примеры.

После циклов идет глава про ошибки, где сперва автор рассказывает о видах ошибок, а затем логично объясняет исключения. А затем переходит к третьей части книги, которая посещена профессиональным методикам программирования на Python.

Профессиональные методики программирования

И начинает он с пакетов. При этом акцент делает именно на взаимодействии с Анакондой, то есть объясняет, как искать, устанавливать и удалять пакеты с помощью утилиты conda глубоко не погружаясь в особенности работы инструкции import и from import

Далее Джон переходит к строкам. Тут также нет ничего примечательного, общее описание возможностей строк, их методов и спецификаторов для форматирования. Примеров мало, скорее похоже на справочник.

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

Тот же Зед Шоу, как бы я его не любил, такого себе не позволял, не говоря уже о Марке Лутце.

А еще читая исходники Джона я заметил очень странное использование методов строк:

Странное использование методов строк

Странное использование методов строк

То есть вместо того, чтобы вызвать метод upper через объект ColorSelect (ColorSelect.upper()), автор вызывает его через сам класс str. Что выглядит как минимум странно. При этом главой ранее мы как раз прошли строковые методы и там приводились правильные примеры. Да с переменной, записанной в нотации CamelCase, но всё же.

Вообще, существует не так много реальных случаев, когда нужно использовать методы строк через саму str, например такой подход применятся при использовании функции map, скажем когда нужно привести все элементы списка к верхнему регистру:

upper_list = list(map(str.upper, lower_list))

В этом случае str.upper оправдан, а вот в книге нет.

Также автор приводит пример сортировки списка в обратном порядке, но делает это с помощью двух методов sort и reverse:

Сортировка в обратном порядке

Сортировка в обратном порядке

Вместо более логичного:

Colors.sort(reverse=True)

Не знаю с чем это связано, возможно автор намерено опустил некоторые вещи, чтобы не усложнять, а может он сам довольно поверхностно знает Питон.

Главный провал книги

После списков мы переходим к 14 главе, посвященной коллекциям данных. И коллекции в понимании Джона Пол Мюллера — это набор схожих элементов, собранных в одном месте и организованных в простом и понятном виде.

Звучит лаконично, просто и понятно. И к коллекциям автор относит кортежи, словари, стек, очередь и дек.

При этом он вроде как упоминает, что с помощью списков можно тоже создавать коллекции, что логично. Однако в финальный набор коллекций, который предлагает автор — список не попадает. Но попадает кортеж, которому Джон приписывает какие-то магические свойства.

В книге говорится, что с помощью кортежей можно создавать более сложные последовательности, чем с помощью списков. Например, один кортеж можно вкладывать в другой. И автор несколько раз делает на этом акцент.

То есть он буквально пишет «Основные различия между кортежем и списком заключаются в том, что кортеж неизменяем и позволяет вкладывать одни кортежи в другие»:

Чушь про списки и кортежи

Чушь про списки и кортежи

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

Но вернемся к содержанию. Далее Джон снова возвращается к спискам и приводит пример реализации стека на базе списка.

А затем переключается к очередям и показывает примеры с помощью библиотеки queue. При этом вместо того, чтобы дать как можно больше примеров, автор большую часть книги отводит последовательности действий в Ноутбуке. Щелкните на Кнопке Run Cell, нажмите клавишу Enter и так далее. А книга и так не очень толстая.

После коллекций мы переходим к 15 главе, посвященной классам. И целом, если не учитывать имена атрибутов и методов, записанных с большой буквы, глава получилась нормальной. Хотя буду честен, приводимые примеры я не запускал, но каких-то явных ляпов я не нашел.

При этом автор затронул темы наследования и даже перегрузку оператора сложения. Что в целом неплохо.

Решение сложных задач

После классов мы переходим к четвертой части книги — «Решение сложных задач».

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

С одной стороны это полезно, а с другой стороны может сперва научиться работать с обычными файлами и освоить какие-то базовые операции чтения и записи?

Но автор настаивает именно на работе с csv и в следующем примере мы учимся читать только что записанные данные.

Далее Джон переключается на модуль os.path и приводит несколько примеров работы с файловой системой, что очень полезно.

А еще очень полезно уметь работать с разными кодировками файлов, но тут об этом не слова.

Следующая сложная задача — это работа с электронной почтой.

И такое ощущение, что эти две главы отражают опыт работы автора, когда он брал excel файл, приводил его к csv, а затем пробегался по всем записям и отправлял письма.

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

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

Где сперва приводятся 10 ценных ресурсов для программистов, 10 утилит, улучшающих работу с Python, 10 библиотек, о которых стоит знать. Не буду на этом останавливаться и перейду к выводам.

Выводы

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

Может ли эта книга быть хоть кому-то полезной, да. Если вы метите в аналитики на Python, там вам придется познакомиться с Юпитером, Анакондой и другими инструментами.

И в общем тут неплохое описание. С другой стороны, нужна ли целая книга, чтобы освоить Юпитер Ноутбук? Сомневаюсь, мне кажется, хватит пары статей и какие-то видео на YouTube. При этом если вы всё-таки решите взять эту книгу, то только в качестве дополнения к другой, более основательной книге или курсу.

Что ж, на этом у меня всё. Ставьте лайк, подписывайтесь на наш канал.

Пока и успехов в учебе!