Продолжаю поиск лучшей книги по питону для новичков и сегодня на обзоре 5-е издание «Начинаем программировать на Python» Тони Гэддиса. Предыдущее, 4-е издание, несколько лет занимало верхнюю строчку нашего рейтинга и вот сейчас пришло время ему подвинуться.
Начнем с очевидного, у новой книги изменилась обложка, он стала толще более чем на 100 страниц и сами страницы тоже стали больше.
Правда, увеличение размера листов произошло за счет увеличения размера самих шрифтов и если мы сравним две одинаковые страницы из разных изданий, то по количеству контента они отличаться не будут.
А вот толщина книги выросла за счет новых тем, но о них мы поговорим немного позже.
Почему книга хороша
А сейчас я напомню, чем же мне понравилось предыдущее издание и почему я поставил его на первое место в списке всех книг.
Итак, Тони Гэддис рассказывает не только про Python, но и про программирование в целом, и делает это очень увлекательно и доступно. Книгу действительно легко и комфортно читать. К тому же в ней приводится много схем и графиков, что еще сильнее упрощает понимание сложных концепций. А программирование — это сложно.
Особое внимание стоит уделить примерам программ, которые приводит автор, как правило — это небольшие бизнес-задачи про расчет зарплат, налогов, стоимости страховки и так далее. Такие программы гораздо интересней и полезней, чем безликие и абстрактные задачки в других книгах.
При этом Тони не обходит стороной алгоритмические и математические задания, которые прокачают вас как программиста, а это важно.
И все те плюсы, которые есть в четвертом издании, перешли в пятое, и уже поэтому данная книга не может быть хуже предыдущей. А с учетом новых тем, она должна быть лучше.
И в целом, апдейт можно разбить на две части: небольшие обновления текущих глав, а также совсем новые темы.
К небольшим изменениям относится информация о f-строках, списковые включения, а также несколько новых возможностей Tkinter.
В прошлом издании «Начинаем программировать на Python» была небольшая странность с функцией format(). Автор везде использовал именно функцию, хотя на практике обычно применяют метод .format(). Тогда мне показалось это странным. Однако в новом издании Тони Гэддис исправился и заменил все функции на f-строки, что делает примеры в книге максимально современными.
Правда про метод .format() автор так ничего и не рассказал, и хотя f-строки очень гибкие и быстрые, с помощью них всё же нельзя создавать шаблоны, а это иногда требуется. Ну да ладно, речь всё-таки про книгу для новичков и такие тонкости ей можно простить.
Реляционные базы данных и SQL
Помимо мелких нововведений в книге есть одна крупная новая тема, которая посвящена реляционным базам данных и языку SQL. Причем данная глава пришла на замену функциональному программированию. В четвертом издании наши переводчики и редакторы самостоятельно добавили еще одну небольшую главу про функциональное программирование на Python.
В новом книег этой дополнительной главы нет, а вместо неё стоит оригинальная 14 глава про базы данных.
К слову, 15 главу про функциональное программирование вы всё же можете скачать с сайта издательства БХВ, которое выпускает книгу в России. Ссылка на архив с исходниками и 15 главой есть в книге и она работает. Правда учитывайте, что там архив в почти в 700 Мегабайт и это потому что в этом архиве не только исходники, но и видео уроки от Тони Гэддиса. Да да, к данной книге прилагаются еще и видео уроки, ссылки на которые Тони дает прямо на страницах. Правда эти уроки на английском языке, но всё же.
Но вернемся к содержанию и я бы хотел чуть подробнее остановится на новой главе про базы данных, к тому же у нас есть большой курс про SQL, поэтому мне есть с чем сравнить, да и в принципе в базах данных я разбираюсь.
В общем я решил от корки до корки пройти 14 главу. Начинается она ожидаемо с общего описания, что такое СУБД и SQL. И Тони Гэддис, как всегда, раскрывает темы доступнымязыком. Читается на одном дыхании.
При этом автор довольно быстро приходит к созданию SQLite базы данных на языке python, а после посвящает несколько страниц созданию и наполнению таблиц разными способами.
Опять же, всё как всегда очень подробно и доступно, единственное чего не хватило лично мне — это подключения какого-то внешнего клиента. Потому что когда мы вставляем данные в базу, было бы неплохо посмотреть как они выглядят в базе на текущий момент. Выполняя код из книги мы как-будто отправляем данные в пустоту, что несколько некомфортно.
Конечно, Тони приводит картинки как будет выглядеть таблица, если мы в точности выполним весь код из примеров, но мне этого показалось мало.
Также в книге я нашел интересную ремарку, о том, что при использовании тройных одинарных кавычек, внутри мы должны использовать обычные двойные кавычки или наоборот. Это немного странное утверждение, к тому же сам Тони Гэддис во второй главе говорит, что в тройных кавычках мы можем использовать любые — и одинарные и двойные. А тут он сам себе противоречит.
Изначально я даже отметил это как опечатку, но потом, по мере того, как глубже погружался в книгу, понял, что автор на самом деле имеет ввиду. Он, правда почему-то так не объяснил такую противоречащую позицию, но тем не менее в ней есть здравый смысл и я сейчас объясню.
И тут важны два момента, во-первых, SQL-запросы обычно довольно большие и могут занимать несколько физических строк, именно поэтому мы используем тройные кавычки.
А во-вторых, некоторые SQL запросы могут заканчиваться кавычками, и если мы будем везде использовать, например, только двойные кавычки, то получается, что в конце у нас будет стоять сразу четыре одинаковые кавычки. А это синтаксическая ошибка. И именно от этого хочет предостеречь Тони Гэддис.
Далее Тони Гэддис приводит небольшую интерактивную консольную программу, с помощью которой можно вставить несколько записей в базу данных. Программа мне показалась интересной, но в ней есть небольшая проблема. Дело в том, что для реальной вставки данных в базу, нужно выполнить коммит. То есть мы можем написать несколько INSERT-запросов на вставку, но пока не вызвана функция commit() — эти данные в базу данных не попадут.
И если посмотреть на программу, которая приводится в книге, то видно, что commit() выполняется уже после того как мы сформировали все запросы на вставку:
И тут возникает опасная ситуация, если в процессе заполнения данных мы где-то допустим ошибку, например, вместо цены запишем какое-нибудь слово, то программа вылетит с исключением и коммит не будет выполнен, а значит все те данные, которые мы вбивали правильно, до ошибки, в базу данных не попадут. И фактически мы потеряем часть нашей работы, а это не хорошо.
Поэтому данную строку логично перенести внутрь цикла, чтобы коммит выполнялся и фиксировал каждый INSERT-запрос. Конечно, это скорее придирка с моей стороны, но всё же. Хотя далее по книге Тони Гэддис использует коммит уже внутри цикла подтверждая каждую операцию. Не знаю почему в первом примере он так не сделал.
Но зато Тони немного рассказал про SQL-инъекции и опасность использования f-строк в SQL запросах. Хотя если бы он в дополнение привел пару примеров таких запросов, было бы супер.
После создания и наполнения таблиц идут разделы про выборку данных с помощью SELECT-запросов, в том числе рассматривается конструкция WHERE.
В целом там всё понятно, единственное в качестве оператора равенства Тони использует двойное равенство как в Python. SQLite это разрешает, но в целом такая конструкция режет глаза, так как в SQL всё-таки принято использовать одинарное равенство.
После SELECT идет раздел про UPDATE, в котором Тони Гэддис грамотно предостерегает о выполнении обновления без условия WHERE, что может повредить все ваши данные, особенно если вы не поленились выполнить commit().
Закрепляется же тема апдейтов интересной программой с текстовым интерфейсом про обновление данных в базе по их ID.
Далее идет блок про DELETE, а за ним раздел про составные первичные ключи. И я не понял до конца зачем этот блок был добавлен в книгу. Далее по тексту мы ни разу не воспользуемся составными ключами, поэтому данный раздел скорее разбивает общее повествование, нежели добавляет что-то полезное.
Следом за составными ключами идет обработка исключений, а после мы переходим к концепции CRUD — CREATE, READ, UPDATE, DELETE и пишем большую программу на 4 страницы по взаимодействию с базой данных (стр 770). Программа интересная, несложная и хорошо документирована.
Далее Тони рассказывает про внешние ключи и организацию более сложной базы даных из нескольких таблиц. Также автор вводит связи одни ко многим и многие к одному.
А после приводит несколько запросов по извлечению данных из нескольких таблиц и при этом соединяет их в блоке WHERE, а не JOIN и это логично. На начальном этапе такие запросы для новичков более понятны, чем JOIN. JOINов в книге вообще нет, SQL здесь рассматривается на очень примитивном уровне, но для начинающих разработчиков этого достаточно.
После теории Тони Гэддис переходит к написанию небольшого GUI для нашей базы данных на ткинтере и это круто. Поэтому что это позволяет отработать не только базы данных, но и ООП.
Сама программа занимает 4 страницы и мне было лень её набирать вручную, поэтому я взял код и готовую базу данных из исходников, которые шли к книге. Да, там совсем элементарный интерфейс, но хочу обратить внимание на одну важную особенность.
И исходники, и все базы данных представлены в двух вариантах: на английском и на русском языках. Да, в издательстве БХВ заморочились и перевели вообще всё, даже записи в учебных базах данных, что вообще-то круто.
Выводы
То есть мы покупаем книгу, а затем скачиваем к ней 700 мегабайтов видео уроков на английском языке, а также все примеры и учебные базы данных на двух языках.
И за это я еще больше люблю «Начинаем программировать на Python».
И собственно поэтому, 5-е издание книги уверенно становится на первое место в нашем рейтинге. 4-е же издание я передвину немного ниже, за первую пятерку, чтобы у нас не стояло рядом две очень похожие книги.
Что ж, у меня на этом всё, а вы не забывайте ставить лайк и подписываться на канал.