Найти в Дзене
Shultais Education

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

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

Сегодня буду рассматривать книгу Зеда Шоу «Легкий способ выучить 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 

>>> 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 пишет, что «любая книга не подойдет, но на это проверенное издание можно с уверенностью положиться — миллионы последователей авторского подхода Зеда Шоу тому веское доказательство».

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

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

ССЫЛКИ