Мы продолжаем обзор книг по Python для новичков и сегодня у меня на столе книга Майка МакГрата: «Python, программирование для начинающих». И сперва мельком глянем на обложку: «Первый шаг на пути к успешной карьере. Для версий 3.1 — 3.4.». Сейчас активная версия — 3.8, но для новичка это не важно.
Книга узенькая, всего 190 страниц. Цена чуть более 600 рублей. Но это также важно. Посмотрим, что внутри. А внутри у нас 10 тем начиная с установки Python и заканчивая обработкой запросов и оконными приложениями.
Под обработкой запросов автор имеет в виду HTTP-запросы, то есть web-разработку.
Разумеется, с таким большим количеством тем и небольшим количеством страниц, говорить о какой-то глубине нет смысла.
Но посмотрим первую главу и тут всё хорошо, автор доступным языком, объясняет, что такое Python и как его установить, а также пошагово доводит до первой программы — «Hello, World».
В целом глава простая и понятная. У вас действительно получится создать свою первую элементарную программу на Python. А это важно.
Разумеется, на «Hello, World» никто не останавливается, поэтому пойдем дальше.
Далее автор рассказывает об арифметических операциях и сравнении величин, а после сразу вводит однострочное условие. Спорный момент, показывать новичкам тернарный оператор до ввода полноценных условий. Но пусть будет так.
Завершается глава битовыми операциями. Битовые операции ради битовых операций так себе идея. Просто показать, что они существуют? Но зачем это новичку? Хотя автор показывает, как с помощью исключающего ИЛИ поменять значения двух переменных без использования третьей:
a = 10
b = 5
a = a ^ b
b = a ^ b
a = a ^ b
В три действия. Но опять же, зачем это нужно? В Python есть изящный способ поменять значения переменных местами:
a = 10
b = 5
a, b = b, a
Красота. Ну ладно, может я придираюсь, оставим это на совести автора и перейдем к третьей главе — «Конструирование инструкций.» Не выговоришь.
Глава начинается со списков и в какой-то момент автор приводит такой код:
colors-tuple = ('Red', 'Green', 'Red', 'Blue', 'Red')
И проблема этого кода в том, что он не рабочий. Тут допущена синтаксическая ошибка. А если точнее таких ошибок на странице три.
Напомню, это книга для начинающих. И что ученик подумает, когда у него не сработает код. Что он так себе программист? Или что проблема не в коде, а в нём? Или может Python сломался? Не понятно.
И самое обидное, что простое гугление тут не поможет, Питон, конечно показывает в чем ошибка, но для новичка она не очевидна.
Вообще, в именах переменных нельзя использовать знак минуса, тут должен быть символ подчеркивания, тогда код будет работать:
colors_tuple = ('Red', 'Green', 'Red', 'Blue', 'Red')
Тем не менее такая ошибка в книге есть, и она не одна. Но двинемся дальше. А дальше автор начинает рассказ про условный оператор if else и делает акцент на отступах, которые важны в данном операторе. Отступы в Python — это, вообще, его киллер фича.
И что мы видим в книге. Никаких отступов в примерах. Всё идет в одну линию. А значит ваш код снова не будет работать:
Далее идет цикл while — без отступов, for — без отступов, создание функций — без отступов:
Я думаю, дальше читать эту книгу смысла нет, так как большая часть кода в ней не будет.
И это я понимаю, как исправить положение, но вы-то только начинаете. Вам это зачем?
На самом деле, тут у меня закрались сомнения, а автор ли виноват. Это всё-таки перевод. И я начал искать оригинальную книгу.
Оригинал не нашел, но нашел другой труд Майка МакГрата: программирование для новичков. Книга примерно на 90% пересекается с этой. И что я увидел, в оригинальном издании с отступами всё в порядке.
То есть это наши переводчики и редакторы из издательства Эксмо полностью запороли книгу. Можно было ошибиться в терминах, где-то опечататься, но налажать с отступами в Python. Это Big Fail.
И я так понимаю минусы вместо подчеркиваний в именах переменных — это тоже трудности перевода. «Минус, подчеркивание — как разница?» — подумал переводчик. И вставил то, что посчитал нужным.
Кстати, в оригинальной книге тоже не без изъянов. Там автор в начале говорит про двойные и одинарные кавычки, но не всякие кавычки можно использовать в программировании. И верстальщик с легкой руки вставляет во всей книге одинарные английские левые и правые апострофы. Они выглядят почти также, как и правильные кавычки, но они другие и весь код в этой книге, в принципе, работать не будет. Даже с учетом правильных отступов:
Если вы набираете примеры самостоятельно на клавиатуре, то может вам повезет, и вы вставите правильные кавычки, но если вы скопируете код с PDF-версии книги, то вас ждет разочарование.
Вот так поднасрали в издательствах: что там, что у нас. Кстати, у нас кавычки правильные, но это скорее случайность, просто в России не принято использовать английские апострофы. Но с учетом того, что я уже видел в книге, могли и ёлочки воткнуть.
Это мне напомнило историю системы компьютерной верстки ТеХ, которая была создана Дональдом Кнутом в 1979 году, чтобы в издательстве могли правильно напечатать его книгу «Искусство программирования». Хочешь что-то сделать — сделай это сам.
Но вернемся к нашему подопытному. Даже, не знаю, стоит ли дальше делать разбор книги или нет. Но давайте посмотрим еще.
Вообще автор довольно вальяжно подходит к стилю написания кода. Если кратко, то срать он хотел на PEP8. PEP8 это такое руководство для разработчиков, которое описывает как должен выглядеть красивый и легкочитаемый код на Python.
Благодаря PEP8 все программы на Python выглядят так, как будто их писал один человек. Разумеется, кроме программ Майка МакГрата. Он тут расставляет отступы как хочет. Например, так:
print( "Python In Easy Steps" [ 7 : ] )
Это вполне рабочий код, внезапно. Но его нужно записывать так:
print("Python In Easy Steps"[7:])
То есть, без лишних пробелов.
Вверху уродство, внизу красота. И такой стиль в книге встречается повсюду. Просто жесть. Кстати, я посмотрел исходники, которые идут вместе с книгой. С отступами там всё в порядке, но вот стиль кода. Нет.
И я хотел бы закончить, но всё-таки обязан перейти к восьмой главе — про обработку HTTP-запросов, то есть про создание сайтов. Я сайты делаю с 2001 года, но жести, которую он тут написал давно не видел.
Для вывода HTML-страницы он приводит вот такой фрагмент кода.
Тут просто принты с HTML-тегами. Ни шаблонизатора, ни HTML-файла, который мы читаем и выводим содержимое, ни в конце концов строк с тройными кавычкам. Ничего этого. Просто обычные принты. Когда говорят про говнокод на PHP, то вот это он. Только на Питоне.
Да и к тому же всё обрабатывается через CGI, который безнадежно устарел. На web-сервере Abyss Personal Edition. Никогда про него не слышал. Как его установить — в книге ни слова. И это печально.
При этом издание 2020 года, только выпустили, хотя оригинал, я посмотрел, 2013 года. Зачем Эксмо её переводили, да еще и так коряво, да еще и доп. тираж в 1000 экземпляров напечатали — для меня загадка.
И, в целом, конечно, я эту книгу не рекомендую ни в каком виде: ни в печатном, ни в PDF. Для новичков она вредная и дальше её обсуждать смысла нет.
Пока, и успехов в учебе!