Мы продолжаем поиск лучшей книги по Python для новичков.
Сегодня у нас на обзоре «Учимся программировать, с примерами на Python» за авторством Эрика Фримена. И забегая вперед скажу, что данная книга повлияет на состав лидеров, который держится уже практически 2 года.
И так, раз книга меняет лидерский состав, то мне придется не только внимательно изучить саму «Учимся программировать», но и сравнить её с другими лидерами.
Например, вы могли заметить, что данная книга из серии «Head First» издательства O'Reilly и это хорошая серия. Та же «Изучаем программирование» Пола Бэрри давно и стабильно занимает 4-е место в нашем рейтинге. Поэтому нужно как-минимум сравнить эти две книги.
Также, в попытках понять заслуживает ли эти книга первого места, взамен Тони Гэддиса, нужно сравнить и с ним. И Тони придется несладко, ведь Эрик Фримен является одним из самых продаваемых в мире авторов по компьютерной тематике.
Но давайте всё же посмотрим содержание. И собственно, раз мы говорим про серию «Head First», то сразу надо понимать, что мы имеем дело с нестандартным повествованием, которое содержит массу забавных фотографий, иллюстраций и мемов.
И это важно, ведь обучаясь программированию нужно не только уметь составлять алгоритмы, знать синтаксис и стандартную библиотеку языка, но и понимать культуру и IT-юмор. Причем не только современный, но и тот, который стоял у истоков, тот который сформировали олды.
И как раз в этой книге есть масса забавных шуток, которые позволяют глубже погрузиться в мир IT, а также сделают изучение программирования не таким скучным.
Также нескучными эту книгу делают самые разные формы обучения, от написания кода карандашом прямо на страницах, до решения кроссвордов.
Z даже немного завидую креативности автора. Написать более 600 страниц с подбором правильных иллюстраций и схем, а также разных типов заданий — это очень сложная творческая задача.
Первая игра
При этом, уже с самого начала Эрик Фримен рассказывает про условия, что дает ему гораздо большую степень свободы как в повествовании, так и в выборе примеров. И, собственно, одна из первых программ, которую вы напишете — это игра «камень, ножницы, бумага».
Этой игре он посвящает 52 страницы. Казалось бы, «камень, ножницы, бумага», что может быть проще, но на примере одной несложной игры Эрик Фримен вводит не только понятие условия, но и знакомит нас с модулем random для генерации случайных чисел, а также объясняет принципы сравнения и булевы значения.
А затем добивает операторами OR и AND, давая микро примеры из других областей. После Эрик снова возвращается к игре и усложняет логику программы.
А когда кода становится много, автор рассказывает про документацию этого кода, а также про его более компактную организацию.
Далее, чтобы игра стала более интересной, Эрик вводит понятие бесконечного цикла. То есть на примере всего лишь одной игры мы затрагиваем сразу несколько самых разных тем. При этом в процессе продвижения по книге вам будут предлагаться различные упражнения для самостоятельной работы. Всего около 10 дополнительных заданий на главу.
Решения к этим упражнениям вы найдете в конце главы.
Другие темы
Следующий раздел посвящен структурам данных, а точнее спискам. При этом при изучении списков Эрик Фримен сразу вводит цикл for и функцию range(), что вполне логично.
Одно из заданий, которое он даёт — это соединение вызовов range() с разными параметрами с ответами, который они генерируют. Это гениально.
Функции и рекурсия
После списков Эрик знакомит нас с функциями. При этом глава про функции завершается разбором алгоритма пузырьковой сортировки, что объединяет в себе как функции, так и работу со списками. А это, что не маловажно, дает представление о том, как функции взаимодействуют со списками.
В процессе обучения Python автор приводит не только блок схемы и код на Python, но и псевдокод, что тоже полезно.
С 7 главы, примерно на половине книги, Эрик вводит понятия модулей и, разумеется, импорта. При этом сложность кода и приводимых программ постепенно увеличивается, однако благодаря подробным описаниям никаких сложностей у вас возникнуть не должно. Плюс сам код себя неплохо документирует — имена переменных и функций вполне себе читаемы. Если же вам будет не хватать описаний в книге, то автор предлагает самостоятельно добавить комментарии в код, что, разумеется, включает мозг и развивает навык написания документации, и это опять же важно для программиста.
Плюс само чтение и понимание чужого кода — это тоже отличный способ научиться программировать.
Тут же автор вводит понятие объекта, метода и атрибутов. Но пока без создания собственных классов. Что не перегружает вас синтаксисом и позволяет посмотреть на объекты несколько с другой стороны. Со стороны их использования, а не проектирования.
В восьмой главе Эрик Фримен возвращается к структурам данных и на этот раз рассказывает про словари, а также объясняет, что такое рекурсия. Разумеется, какая рекурсия может быть без чисел Фибоначчи, но при этом автор дает не просто алгоритм в лоб, но и показывает, как можно его ускорить с помощью кэша на словарях. И это здорово.
При этом пару глав назад Эрик Фримен немного времени посвятил черепашьей графике и рисованию простейших фигур. И если сложить рисование и рекурсию, то можно прийти к снежинке Коха, что автор и делает.
И тут это смотрится гораздо проще и лаконичней, чем в книге «Основы Python» Алена Дауни. Ален предлагал нарисовать снежинку самостоятельно в одном из заданий, тут же мы делаем это вместе с Эриком.
API, JSON, МКС
После функций и рекурсии мы переходим к работе с файлами, а также знакомимся с исключениями. 10 глава посвящена еще более прикладной теме — работе с сетью на примере библиотеки requests. И, собственно, тут мы учимся делать простейшие запросы к API и получать, и обрабатывать данные в формате JSON. А благодаря знакомству с черепашьей графикой мы приходим к написанию программы, которая будет в реальном времени показывать, где находится МКС. И это круто. Кстати, сам автор какое-то время работал в НАСА, поэтому не удивительно, что тут есть такая программа.
Игра Жизнь
Следующая глава посвящена игре Жизнь. Это очень известная и популярная в сфере программирования игра. Однако я по какой-то причине много читал про неё, еще в студенческие годы, но ни разу не программировал и вот как раз эту главу я решил изучить от корки до корки.
Тут автор предлагает нам разработать игру с графическим интерфейсом и сперва приводит прототип интерфейса программы, что еще глубже погружает нас в процесс разработки.
Также автор описывает алгоритм тестирования прототипа тестировщиками, что позволяет лучше разобраться в том, что нам нужно программировать. И еще до написания кода выявить до 85% потенциальных ошибок.
Далее автор рассказывает про MVC (Model-View-Controller), а после приводит промежуточную функцию для решения одной из задач в рамках нашей модели. При этом он не делает подробного описания этих функций, а предлагает читателю самостоятельно в этом разобраться и это действительно будет очень полезно для развития ваших навыков. Я бы даже советовал не переписывать код автора, а попробовать написать функцию самостоятельно.
Вторую функцию автор также приводит, правда вам предстоит собрать её самостоятельно из набора блоков, и это тоже классная тренировка.
После Эрик Фримен дает еще несколько функций, а затем приступает к созданию графического интерфейса на Ткинтер. Куда же без него :)
Однако тут Ткинтер смотрится очень удачно и к месту. В «Учимся программировать» мы рассматриваем Ткинтер не как какую-то прикладную библиотеку, без которой программисту не обойтись. А как мы выяснили в прошлом обзоре, в реальной жизни Ткинтер никому не нужен.
Тут он рассматривается как удобный способ обучения концепции MVP и событийно-ориентированного программирования. И это круто.
Просидев за книгой пару часов я написал программу жизнь. И признаюсь, это был отличный опыт программирования. В книге всё подробно расписано и задокументировано, сложностей за исключением моей невнимательности у меня не возникло. В нескольких местах пришлось поломать голову, но в пределах разумного.
Последние главы
Последняя глава в книге посвящена созданию классов, а после автор добавил 10 тем, которые в книге не рассмотрены, но которые было был полезно знать: среди них списковые включения, работа с датой, регулярные выражения, кортежи, множества, декораторы и другие.
Также Эрик приводит несколько полезных библиотек, в том числе requests, Django, Flask, Pygame, logging, beautiful soap и Pillow. И почти все из этих библиотек в том или ином виде пригодятся в реальной практике, поэтому я также рекомендую их изучить.
Заключение
Что ж, на этом с обзором самой книги я закончил и теперь осталось найти ей место в моем рейтинге. А для этого, как я уже говорил, книгу надо сравнить с другими.
Сразу отмечу, что к «Учимся программировать» у меня нет никаких претензий. Она просто отлично подходит для новичков — можете смело её брать даже без учета каких-либо рейтингов или позиций. Книга огонь. Но сравнение всё же сделать необходимо.
Итак, сперва посмотрим на «Изучаем программирование на Python» Пола Бэрри. У Пола Бэрри основной акцент делается на web-разработке, и, собственно, уже с 5 главы вы начинаете делать сайт.
Тут же мы не делаем какого-то большого сквозного проекта, однако делаем много маленьких, что мне кажется, несколько проще, особенно для новичков.
И поэтому я ставлю её выше, чем «Изучаем программирование на Python». Просто, потому что она показалась мне немного проще. Хотя если вы хотите стать именно web-разработчиком, то из этих двух следует выбрать Пола Бэрри.
Теперь сравним с «Программируем на Python» Майкла Доусона. И у Доусона отличная книга, но как я помню там у меня возникли небольшие проблемы с запуском PyGame, которые я, впрочем, решил. Тут же я получил более комфортный опыт написания программ, я для новичка это важно. Поэтому книга оказывается чуть выше.
Следующая на очереди — это «Изучаем Python» Эрика Мэтиза. И это тоже отличная книга, но опять же она чуть сложнее чем «Учимся программировать с примерами на Python», хотя у Эрика просто бомбические проекты: от игр до сайтов. Однако мы ищем книги для совсем новичков. И данная книга мне показалась несколько понятней.
И наконец настало время сравнить с Тони Гэддисом, и мне реально сложно сделать выбор в пользу одной из них. У Гэдиса отличный примеры и лучший сторителлинг, тут же максимально творческое и нескучное изложение, плюс забавные игры, а игры — это всегда кайф.
Пожалуй, сделаю так, Тони Гэддис по-прежнему остается на первом места, в то время как Эрик Фримен занимает почетное второе. Хотя балы я им выставлю одинаковые.
На этом у меня всё, пока и успехов в учебе.