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

Рецензия на книгу Программируем на Python (Майкл Доусон)

Оглавление
Обложка книги «Программируем на Python» (Майкл Доусон)
Обложка книги «Программируем на Python» (Майкл Доусон)

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

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

В книге 12 глав и в каждой главе разбирается как минимум одна игра. А последние три главы охватывают графические интерфейсы, графику, звук и анимацию.

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

GAME OVER

Книга начинается с установки Питона, и первую программу, которую автор предлагает написать — это «Game Over». То есть вместо «Hello World», мы печатаем «Game Over», что в целом соответствует концепции книги и выглядит весьма забавно.

Далее автор постепенно знакомит читателя с Python, рассказывает про строки и числа, функцию print и переменные. В целом — это стандартный набор новичка и тут каких-то проблем не возникает.

Единственное, сами примеры записаны странным моноширным шрифтом, в котором запятые очень маленькие и похожи на точки.

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

НАЧАЛЬНЫЕ ГЛАВЫ

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

При этом, он очень подробно описывает в чем проблема и как её исправить.

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

Далее, в третьей главе, автор знакомит читателей с модулем random, а также условиями и циклом while. for он пока не затрагивает, что логично, ведь и if, и while имеют схожий синтаксис, обе конструкции используют условия. В первом случае для выбора ветки, а во втором для управления итерациями.

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

После трассировки в книге говориться о проектировании алгоритмов и псевдокоде. То есть для Майкла Доусона важно не просто рассказать о Питоне, а именно сделать из вас программистов. И это здорово.

Завершается глава классической игрой — отгадай число.

Четвертый блок начинается с цикла for сперва автор объясняет последовательности на примере строк. А уже после вводит функцию range.

Далее Майкл рассказывает про индексы, включая отрицательные, а потом переходит к срезам. Причем, опять же, к срезам на строках. Это очень тонкий момент. Срезы действительно проще объяснить на строках, так как строки более наглядные.

При этом после строк вводятся кортежи, а не списки. Что выглядит как такой промежуточный этап. А вот про списки автор начинает говорить только в 5 главе, в которой разрабатывает классическую игру «Виселица». В этой же главе вводится и понятие словаря.

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

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

И под дополнительными усилиями я имею в виду усовершенствование игры. Как только вы поняли, как работает каждый кусочек кода, задайте себе вопрос «Как я могу улучшить программу?». Может сделать так, чтобы слова брались из файла? А может добавить возможность сохранения результатов, чтобы можно было вернуться к игре после перерыва. А может начать вести таблицу побед? Внедрив эти улучшения, вы не только лучше поймете, как работает код из книги, но и сами сильно продвинетесь в программировании. Используйте этот подход, когда читаете эту книгу. Правда файлы вы изучите только через главу, но всегда можно придумать и другие усовершенствования. Главное немного пошевелить мозгами.

В следующем блоке автор переходит к функциям и разрабатывает игру крестики нолики. При создании функций Майкл Доусон немного отошел от PEP8 и мне стало интересно, это реально его код или правки внес корректор или редактор издательства.

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

Немного полазив по сайту, я всё-таки нашел исходники.

Итак, открыв исходники, я увидел, что автор, действительно, немного отходит от PEP8 в плане записи аргументов функций, если быть точным, то он отделяет знак равно пробелами. Но это придирка с моей стороны. Я сам не пишу идеальный код. Да и такая мелочь не влияет на работу программы, и даже близко не стоит с тем, что мы видел в исходниках Майка МакГрата в первом обзоре.

В целом же глава хорошая и функции автор объясняет отлично, особенно для новичков.

ФАЙЛЫ, ИСКЛЮЧЕНИЯ, ООП

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

Кстати, я не обращал внимания, но в конце каждой главы автор даёт небольшие задания. Например после файлов есть такое задание: «Доработайте игру Викторина таким образом, чтобы она хранила в файле список рекордов».

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

После файлов и исключений, автор переходит к ООП. В том числе Майкл рассказывает про приватные атрибуты, которые в Python не совсем приватные, от чего периодически прикипает у Java программистов, которые только начинают писать на питоне. В целом же классы раскрыты хорошо, в том числе не забыты статические методы и свойства.

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

ГРАФИЧЕСКИЙ ИНТРЕФЕЙС И СОЗДАНИЕ ИГР

А вот с 10 главы автор начинает рассказывать про графический интерфейс на базе tkinter и разрабатывает несколько несложных шуточных программ. Анализировать tkinter я не буду, мне идея оконных приложений на Python не нравится. Хотя в контексте мини-игрушек она вполне уместна.

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

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

Итак, во-первым мне пришлось повозиться с установкой PyGame на MacOS, так как были нужны дополнительные либы для компиляции. Но я довольно быстро нашел решение на stackoverflow и поставил эти библиотеки с помощью brew — это такой менеджер пакетов для MacOS. Обычные пользователи с ним не сталкиваются, но программистам приходится.

Далее с помощью pip я установил библиотеку livewires, которую автор использует для работы с pyGame. Эту библиотеку разработала группа преподавателей из Англии, чтобы новичкам было проще работать с PyGame. И основная загвоздка в том, что автор использует собственную версию этой библиотекой, которая идет вместе с книгой.

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

Поэтому мне пришлось удалить оригинальную livewires и поставить версию Майкла Доусона. Но и на этом мои проблемы не закончились.

Оказывается, на данный момент PyGame не до конца поддерживает Python 3.8 и мне пришлось откатываться до версии 3.6. Такие моменты могут отпугнуть новичка. Но если запастись терпением, то всё получится.

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

Но мне они не понравились и я решил поискать графику на unsplash.com На этом сайте можно скачать фотографии высокого качества с лицензией, которая позволяет их использовать в том числе и в коммерческих целях.

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

Но вернемся к игре. Так как я решил использовать свою собственную графику, то столкнулся с одной проблемой. Библиотека livewires не умеет работать с png изображениями. А точнее с png с полупрозрачностью. На таких картинках почему-то начинают появляться артефакты. Поэтому мне пришлось идти на официальный сайт PyGame и читать документацию про то, как включить png в свой проект. Но, к счастью, там нет ничего сложного.

После того, как я разобрался со всеми проблемами и запустил первую версию игры, процесс пошел быстрее.

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

Конечно, реальные игры на Python не пишутся, и после прочтения этой книги вы не устроитесь в Blizzard и не начнете работу над новой версией Diablo. Но вы, однозначно, лучше начнете разбираться в программировании на Python. Поэтому не пропускайте последние три главы, даже если вы хотите стать web-разработчиком.

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

Возможно, в ней не хватает более практических примеров, вроде создания сайтов или работы с базами данных, но как старт в Python — книга великолепна.

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

ССЫЛКИ

Наука
7 млн интересуются