Привет, друзья! Продолжаем обзор книг по Python для новичков и не только, и сегодня на очереди книга Марка Саммерфилда «Программирование на Python 3: подробное руководство».
Выпуск 2020 года, но если посмотреть на оригинальный ISBN, то это перевод книги 2009 года, причем первого издания. Было еще и второе, чуть позже, но это первое. Сам Марк Саммерфилд книгу более не переиздавал, поэтому у нас, своего рода раритет в хорошей обложке.
У меня даже возникли сложности с её покупкой, на популярных площадках книги уже нет, поэтому пришлось поискать. При этом у книги высокий рейтинг и странные отзывы, часть из которых явные фейки, а часть не совпадают с тем, что увидел я.
Поэтому давайте посмотрим, что там внутри, но сперва ставьте лайк и подписывайтесь на канал, чтобы не пропустить следующие рецензии.
Первая глава
Итак, если в прошлый раз мы разбирали книгу Тони Гэддиса, которая подходит для совсем новичков, то на этот раз книга для опытных программистов. При этом, если вы когда-то давно изучали программирование в ВУЗе или школе и хотите погрузиться в Python, то данная книга может быть сложной.
Она больше подходит практикующим разработчикам, которые пишут код в данный момент, и которые хотят быстро, буквально за пару дней или даже несколько часов, начать программировать на Python.
И структура книги этому способствует. Хотя она и начинается с традиционного "Hello, World!", уже в первой главе автор проходится по типам данных, операторам сравнения, условиям, циклам, функциям и исключениям.
То есть с самого старта вам даются все инструменты для написания программ на Питоне.
А первую главу, можно прочитать и понять за пару часов, конечно, если вы уверенно себя чувствуете в C#, PHP, JavaScript, C++ или например, Java. Кстати, последние два языка автор постоянно приводит в сравнение с Python. Почти все программы в книге Марк Саммерфилд запускает через функцию main, что как раз принято в C++.
Погружение в Python
После того как вы бегло ознакомитесь с основными возможностями Python можно смело переходить к следующим главам, в которых автор всё глубже и глубже погружается в Python. Подробно рассказывает о типах данных, функциях, модулях и ООП.
При этом Марк Саммерфилд, с одной стороны, снабжает свои объяснения хорошими информативными схемами. Не такими подробными как у Пола Бэрри, но всё равно очень точными. Однако, с другой стороны, в книге приводится много примеров боевого кода и этот код имеет минимальные объяснения. Автор описывает только ключевые моменты и не останавливается на каких-то элементарных вещах. То есть логику работы программы вам придется понимать самостоятельно. Поэтому я и сказал, что книга больше подойдет для практикующих разработчиков, так как им не потребуется много времени, чтобы вникнуть в приводимые примеры.
Кстати, сами примеры интересные. Так в одной из глав приводится программа для генерации никнеймов пользователей по их имени и фамилии. Это реальная задача, с которой я сам несколько раз сталкивался в разных проектах. Хотя в начале книги, до тех пор, пока вы не познакомитесь с более серьезным функционалом, примеры довольно простые и слегка искусственные, но это нормальная практика и Марк Саммерфилд об этом предупреждает.
В конце каждой главы дается несколько упражнений на закрепление материала, и как правило, эти упражнения на модификацию примеров, которые были приведены Марком ранее. То есть, чтобы выполнить упражнение, нужно в деталях вникнуть теорию и хорошо разобраться с тем, как работает код автора.
Справочник
Еще данная книга может использоваться как справочник, в частности автор дает описания методов и функций, как встроенных в Python, так и из стандартной библиотеки. Хотя я считаю, что пользоваться официальной документацией в качестве справочника несколько удобней, чем каждый раз обращаться к бумажной или даже электронной книге.
Дополнительные библиотеки
Примерно с середины, после ООП, автор начинает знакомить читателя с окружением Python — то есть с библиотеками, которые могут пригодится в повседневной работе.
Например, в главе про файлы, Марк разбирает работу с XML, а также двоичными файлами.
После идет глава с приемами программирования на Python. Эту главу можно сравнить с первой главой книги. Первая — это быстрое введение в Python, всего понемногу, а данная глава — это тоже всего понемногу, но сами примеры более сложные и изощренные.
Во второй половине книги, содержится еще 5 прикладных глав: про процессы и потоки, сети, работу с базами данных, регулярные выражения и графический интерфейс на tkinter.
Я решил чуть подробнее изучить процессы и потоки, а также посмотреть примеры работы с базами данных.
Процессы и потоки
Начну с процессов. Так сложилось, что на практике мне редко приходится распараллеливать выполнение программы, хотя, я понимаю, как это работает в принципе и как это сделать на Python. Нужно было только освежить знания.
К тому же у меня как раз нашлась интересная задача для распараллеливания. У нас есть курс по классическим алгоритмам на Питоне, и недавно я писал сценарий о том, как определять является ли число простым или нет. Такие алгоритмы на тест простоты можно одновременно выполнять на нескольких ядрах, процессорах или даже компьютерах.
Задача поставлена. Поэтому я открыл книгу и бегло начал читать: сперва общее описание, а потом исходники. В какой-то момент я осознал, что ничего не понимаю. То есть код автора и описание этого кода для меня оказались трудными. Я прочитал еще раз, не помогло. Тогда я решил начать прямо с начала главы не просто читать, но и повторять за Марком. И сразу столкнулся с проблемой, автор использует в коде функцию parse_options, объясняет, как она работает, но саму функцию не приводит.
Я начал листать книгу в поисках этой функции, возможно Марк определил её где-то ранее. Автор часто использует ранее разработанные функции, правда обычно даёт ссылку на страницу, где они определены. Но в данном случае ничего подобного. Я не нашел ни самой функции, ни ссылки.
В оригинальном издании на английском языке всё то же самое. В итоге я потратил около 30 минут, прежде чем сообразил посмотреть исходники, которые идут к книге. И функция parse_options оказалась в одном из файлов. Если быть точнее в этом файле Марк Саммерфилд приводит полный текст программы, которую описывает в рамках главы про процессы. Что в общем логично. И посмотрев на исходники и описание в книги я понял почему у меня ничего не получилось.
Когда я открываю справочник или описание какой-то технологии, я ожидаю увидеть там самую суть о том, как работает какой-то подход или метод, без воды и лишних слов. Но в данном случае автор показал, как работает запуск процессов через довольно сложную программу по рекурсивному поиску файлов. Помимо того, что программа ищет файлы, она еще обрабатывает аргументы командной строки, передает данные через стандартный поток ввода, использует режим отладки и бог знает что еще делает. И всё это под соусом не самого простого объяснения автора: он постоянно перескакивает от одной части кода к другой и довольно сложно понять в какой последовательности это всё работает.
И получается, что вторая часть книги это не столько учебник, справочник или руководство, это скорее своеобразные комментарии к исходным кодам, которые идут к книге. В самих исходниках комментариев нет, они все тут.
Поэтому читая книгу я не мог понять как всё устроено, нужно было читать исходники.
Тем не менее, мне как разработчику хочется решить конкретную задачу, быстро и качественно. И я ожидал какой-то понятной инструкции или документации по общему способу решения. Как искать файлы и изучать всю эту ненужную обертку вокруг распараллеливания я не хотел. Поэтому данная глава довольно спорная, Гугл, официальные доки и
Базы данных
Теперь перейдем к базам данных, и начинает Марк Саммерфилд с работы с DBM базами через модуль shelve. DBM базы хранят данные в виде ключ значение в файле на жестком диске. Это своего рода прародитель NoSQL решений, но сильно упрощенный по возможностям.
На самом деле это просто удобный механизм записи словарей в файл — буквально в пару строк, а после чтения этих словарей обратно в программу. Правда автор опять усложнил код, зачем-то добавил к нему графический интерфейс и из-за этого работа с базой затерялась под слоем лишнего кода. Я специально открыл официальную документацию Python по модулю shelve и там буквально на одном экране уместились все необходимые примеры с комментариями для успешной работы с такими базами.
При этом автор, как я сказал, использует модуль shelve, а это не совсем dbm. В Python есть специальный модуль dbm с помощью которого можно работать с Oracle Berkeley DB. Berkeley DB — это встраиваемая база данных, то есть база, которая хранится рядом с программой и поддерживает транзакции, блокировки и другие крутые штуки. Вообще с такими базами не часто приходится сталкиваться, обычно мы всё же работаем с реляционными базами данных, и вторая часть главы как раз посвящена SQLite.
Марк Саммерфилд подразумевает, что читатель уже владеет SQL, поэтому в книге вы найдете только описание как работать с базой.
Если вы не знакомы с SQL, то под видео я вот ссылка на наш практический курс, который вам поможет.
В целом, глава по базы данных неплохая, то есть автор более-менее понятно объясняет, что и как, единственное что настораживает, это использование SQLite. С одной стороны, для объяснения общих принципов работы с базами её будет достаточно. SQLite поддерживает интерфейс DB-API, к ней также надо коннектится, у неё есть курсоры и транзакции, хотя и неявные. Но всё же это SQLite, SQLite хранится на жестком диске вместе с программой, а в реальности мы обычно работаем с клиент-серверными базами, вроде Postgresql, MySQL и так далее. В книге Пола Бэрри как раз приводится примеры работы с MySQL, включая установку, сетевое подключение, выполнение запросов. Всё это снабжено подробными описаниями, схемами и таблицами. Что несет больше практической пользы, нежели работа с SQLite у Марка Саммерфилда.
Хотя для общего понимания работы с DB-API, хватит и SQLite.
Выводы
И просмотрев всю книгу, у меня сложилось двоякое впечатление. Первая часть, в которой Марк рассказывает про язык, мне понравилась, интересные примеры, всё четко и по делу. Пишешь на Java и тебе нужно быстро освоить Python, то можешь смело читать Саммерфилда. Но вот вторую, практическую часть книги, я бы не рекомендовал. Тут уж лучше обратиться либо к официальной документации, либо к другим источникам. Использовать книгу как комментарии к исходникам, так себе идея.
На этом у меня всё! Пока и успехов в учебе!