Рецензия на книгу
Легкий способ выучить Python 3

Зед Шоу

Обложка книги Легкий способ выучить Python 3 (Зед Шоу)

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

Автор, вообще, не объясняет Python и придерживается методики: вот вам код, разбирайтесь сами как хотите. При этом задания и приводимые примеры сложны для новичков.

В книге много опечаток и неточностей, а также не раскрыты некоторые ключевые возможности Python, например, срезы.

Одна из самых плохих книг по Python с точки зрения педагогики.

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

Сегодня буду рассматривать книгу Зеда Шоу «Легкий способ выучить Python 3» и первое что Вам нужно знать, это то, что в оригинале книга называется «Learn Python 3 the Hard Way» — то есть «трудный способ выучить Python».

Маркетологи, как всегда, на высоте. Легкий способ выучить Python, научись программировать за неделю, стань профессиональным разработчиком за месяц. К сожалению — это так не работает. Обучение программированию, особенно с нуля, это сложно и долго. Волшебной пилюли не существует.

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

При этом автор гарантирует вам «черный пояс» по программированию. Кстати, сам Зед Шоу довольно известный программист в узких кругах. До этого, по большей части, мы смотрели книги преподавателей, а тут крутой программист.

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

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

Правильное начало

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

Также Зед Шоу делает акцент на том, что не нужно копировать и вставлять код, а нужно самостоятельно набирать всё что он пишет в книге. Для новичка это действительно полезно — берешь и повторяешь всё точь-в-точь за учителем.

Также автор говорит о том, что нельзя бросать и нужно заставлять себя. А в случае сложностей пропускать задания, а затем возвращаться к ним снова. Это тоже вполне рабочий совет.

Но надо глубже посмотреть, как эти принципы реализованы в книге.

Поэтому листаем дальше и переходим к нулевому упражнению, где Зед Шоу рассказывает об установке Python в разных операционных системах. Тут всё довольно подробно.

Интересно, что автор рекомендует использовать бесплатные текстовые редакторы вместо профессиональных IDE. А также предостерегает от vim или emacs. На счет vim и emacs я с ним согласен, а вот насчет IDE нет. Ничего страшного если вы применяете PyCharm Community или что-то похожее.

А еще автор не рекомендует IDLE, так как он очень ограниченный. Тут я также его целиком поддерживаю. Хотя странно, что Зед Шоу упоминает неадекватную стоимость полной версии IDLE, но ведь IDLE бесплатный и я не смог найти информации о какой-то платной полной версии. Но ладно. Двинемся дальше, к первому упражнению.

Первые несостыковки

Вообще, я сперва бегло просмотрел первые десять упражнений и у меня к автору появилось много вопросов. Я подумал, что, слишком тороплюсь и решил пройти первые 5-7 глав как новичок. Внимательно вчитываясь и набирая весь код из книги.

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

Правда в самой книге начинается какая-то карусель. Во-первых, в его примере осталась строка с кодировкой файла.

Строка с кодировкой из Python 2.

Строка с кодировкой из Python 2.

Это было актуально для второй версии Python, которая по умолчанию принимала только ascii символы. В третьей версии эту строку вставлять уже не надо, так как все программы мы пишем в Unicode. А данная книга как раз описывает python 3.6.

В целом это ни на что не влияет, но требуя от ученика точности, надо бы и самому быть точнее.

Далее приводится пример вывода программы в MacOS терминале, но вместо него показан код в редакторе Notepad++:

Работа в Notepad вместо терминала

Работа в Notepad вместо терминала.

После того как вы выполните код автора, он просит добавить еще один print. Но тут меня смутило, что Зед Шоу вообще не объясняет то, что написано в книге. Ни что такое print, ни что такое строки и кавычки. Ни почему в одном случае он использует одинарные кавычки, а в другом двойные.

То есть тупо перепечатайте код и переходите ко второму упражнению. Что ж так и сделаем. Но, перед этим, обращу внимание, что в конце каждой главы есть блок «Распространенные вопросы». Это вопросы, которые задавали реальные ученики во время прочтения книги. Скорее всего через какой-то форум.

Давайте посмотрим на один из таких вопросов: в нём ученик получает ошибку синтаксиса, когда запускает файл с примером. И Зед Шоу пишет следующее «Вероятно, вы запустили Python, а затем пытаетесь вновь запустить его с помощью команды python». Мне потребовалось время, чтобы осознать, что автор имеет в виду. И это похоже на гадание на кофейной гуще. Потому что синтаксическая ошибка может возникнуть по массе причин: не закрыл скобку, поставил не ту кавычку, не поставил кавычку. Без исходного кода можно только догадываться. И почему автор привел именно этот случай для меня остается секретом. Но пойдем дальше. Возможно дальше будет понятней.

Новые сложности

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

Тут автор приводит математические операции. И снова он просто предлагает набрать код за ним, без каких-либо объяснений.

В этой же главе появляется логическое False и True, опять же, без объяснений. И пока по этой книге у меня больше вопросов, чем ответов. Думаю, у читателей также.

Сразу после упражнения автор дает задание переписать код используя числа с плавающей точкой. И даёт подсказку, что пример такого числа — это 20.0. Тут я подумал, а что такое число с плавающей точкой. Если я был бы новичком, то задался бы этим вопросом. Конечно, у меня были бы мысли по этому поводу, но я всё равно пошел читать википедию, чтобы подтвердить свои догадки.

А в вики написано вот так: «Число с плавающей точкой — это экспоненциальная форма представления вещественных (действительных) чисел, в которой число хранится в виде мантиссы и порядка (показателя степени).»

На этом я бы закончил с программированием, ну его, ничего ведь не понятно. Лучше в юристы. Вообще, конечно нужно сперва ввести целые числа: 1, 2, 3, 5 и так далее, затем не целые или по другому вещественные, вроде один с половиной или две целых семь десятых, а после сказать, что вещественные числа в Python записываются через точку, например один с половиной — это 1.5. И вот эта точка называется плавающей точкой.

Но ладно, что есть, то есть. Перейдем к четвертой главе, в которой Зед Шоу рассказывает про переменные и имена. Ну как рассказывает, по большей части в своем стиле — вот тебе код, перепечатывай.

И самое интересное, что он снова использует вещественное число 4.0 для обозначения количества сидений в автомобиле. Я подумал, а зачем тут вещественное число, ведь количество мест в автомобиле — это целое.

И в блоке «распространенные вопросы» ученики справедливо спрашивают, почему вы используете 4.0 в переменной space_in_a_car, обозначающей количество мест в машине?

Популярный вопрос учеников

Популярный вопрос учеников.

На что автор отвечает: «Прочитайте, что такое число с плавающей точкой, и вновь задайте себе этот вопрос».

Тут у меня как преподавателя и программиста подгорело.

Во-первых, вопрос задается автору, и сказать: «прочитайте и задайте этот вопрос себе еще раз», как минимум не корректно. Тут нужна более расширенная подсказка.

Во-вторых, про числа с плавающей точкой автор так нигде и не рассказал. Для нас это пока не совсем понятная штука.

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

В Python второй версии, при делении целых чисел, результат также получается целочисленным. То есть если разделить пять на два, то мы получим два. А для получения вещественного результата, нужно чтобы хотя бы одно из чисел также было вещественным. То есть, чтобы получить два с половиной нужно пять разделить на два точка ноль или пять точка ноль разделить на два. Или же использовать вещественные числа в обоих случаях:

 # Пример деления в Python 2 
 >>> 5 / 2 
 2 
 >>> 5.0 / 2 
 2.5
 >>> 5 / 2.0
 2.5
 >>> 5.0 / 2.0
 2.5

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

И всё бы ничего, но сейчас речь шла про Python второй версии. В книге же автор опирается на Python 3, а в третьей версии операция деления всегда возвращает вещественное число. Если в третьем питоне мы разделим пять на два, то получим две целых пять десятых. И какие-то дополнительные ухищрения вроде .0 в конце больше не нужны:

 # Пример деления в Python 3 
 >>> 5 / 2 
 2.5

При этом автор задаёт ученикам такой вопрос: «Я присвоил значение 4.0 переменной space_in_a_car. Почему, что произойдет, если указать значение 4?»

И правильный ответ: ничего не произойдет. Код в книге устарел.

Новичку о такой особенности знать неоткуда. А Зед Шоу вместо объяснения отправляет учеников прочитать о числах с плавающей точкой, о которых сам ничего не написал. И это только 4 глава.

Немного педагогики

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

Любое обучение строится на трех китах: знаниях, умениях и навыках. И весь смысл профессионального обучения — это пройти путь от знаний к навыкам.

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

В этой же главе ученики задают Зеду Шоу вопрос: «Почему я не могу понять этот пример?» Да, блин, потому что автор ничего не объясняет.

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

Пропуски важного

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

Еще в главе про форматирование строк, я наткнулся на такую фразу: «нужно вызвать строковую функцию format, то есть выполнить консольную команду по имени format».

Во-первых — не функцию, а метод. А во-вторых, что за консольная команда по имени format? Что под этим имеется в виду? Консольная команда format форматирует жесткий диск. Не надо её использовать при изучении Python. И Зед Шоу несколько раз употребляет это выражение.

Далее автор приводит разные упражнения и в какой-то момент вводит понятие списка. И практически игнорирует срезы. То есть он даже не вводит понятие среза.

А при изучении циклов, автор не говорит про break и continue. В одном из обзоров я немного критиковал книгу Златопольского из-за отсутствия классов, модулей и исключений. Но там были понятные объяснения и хорошие задачи на прокачку навыков программирования. А тут получается ни того, ни другого.

После главы про словари, в блоке с распространенными вопросами от учеников на первом месте стоит: «А в чем разница между списком и словарем?»

в чем разница между списком и словарем

В чем разница между списком и словарем?

Если это самый популярный вопрос у учеников, то ты явно что-то не так делаешь. Это прям звоночек.

Автора не остановить

В какой-то момент автор так увлекается и разгоняется, что даёт рекурсию без какого-то объяснения, а также вводит исключения. Изучаем классы, а почему бы не воткнуть сюда блок try except, не понимаете, что такое? Ничего страшного — это же Hard Way.

К сорок пятой главе Зеда Шоу уже не остановить. Он начинает разрабатывать игру. И делает это через Test-driven development, разработку через тестирование. Это вообще не новичковая тема. Не буду в деталях объяснять, что это, основы вы можете посмотреть в Вики.

И ладно бы он взял пайтоновские unit тесты, классы-то мы уже прошли, почему бы не использовать стандартный мощный инструмент? Нет он решил установить какую-то библиотеку nose, у который последний коммит был 4 года назад.

Сама же игра совсем не похожа, на то, что мы видел в книге Майкла Доусона. Я вообще не увидел у Зеда Шоу какого-то законченного фрагмента кода. Его постоянно кидает то в тестирование, то в исключения, то в какие-то каркасы.

Так и не закончив игру автор переключается на создание сайтов на Flask. Тут я даже читать не стал, к тому же с фласком я знаком по книге Пола Бэрри, там кстати, было всё понятно, и объяснял он подробно. Причем книга была не для новичков, а для программистов с опытом.

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

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

Кстати, тут в конце книги Кирилл Жвалов, сооснователь Moscow Coding School пишет, что «любая книга не подойдет, но на это проверенное издание можно с уверенностью положиться — миллионы последователей авторского подхода Зеда Шоу тому веское доказательство».

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

На этом у меня всё.
Пока и успехов в учебе!