Про книгу «Android. Программирование для профессионалов»
Обычно я пишу обзоры книг, которые мне понравились. К книге, о которой пойдет речь в этом посте, у меня больше претензий, чем восторга, однако все-равно хочется о ней написать (и не только для того, чтобы поворчать).
Я уже давно поглядываю на программирование под Android, когда-то уже читал книги про это дело, но до реального применения все не добирался. И вот тут понадобилось написать для себя одно приложение под Android, поэтому параллельно с написанием кода решил освежить знания, почитав книжку. Надо сказать, что мне как-то не везет с литературой на эту тему, мне еще не попалось ни одной книги, которой бы я мог поставить твердую пятерку и написать восторженный отзыв. Везде описание идет какое-то обрывочное, которое не дает красивого описания архитектуры Android. Возможно, в этом виновата сама система.
К сожалению, книга Б. Харди, Б. Филлипса, К. Стюарта и К. Марсикано «Android. Программирование для профессионалов» не исключение. Но сначала хочется выразить свое «фи» переводчикам и издателю (несмотря на все мое уважение к издательству Питер). Во-первых, второе название книги перевели настолько вольно, что оно стало полностью противоречить содержанию книги. В оригинале книга называется «Android Programming. The Big Nerd Ranch Guide». Никаких профессионалов в оригинале нет, «The Big Nerd Ranch» — это компания, которая занимается разработкой и обучением программированию. И даже предисловие книги начинается словами «Начинающему программисту Android предстоит основательно потрудиться…» Таким образом, эта книга предназначена именно для новичков. Вот именно с этой позиции и стоит рассматривать эту книгу.
Во-вторых, что мне не понравилось в переводе книги. Ну почему наследование классов (subclassing) везде переведено как «субклассирование», а шаблон проектирования Singleton как «синглет»? Еще есть некоторые косяки у редактора в том, что где-то перепутаны рисунки, где-то неправильно названы имена файлов, используемых в листинге программы, но таких ошибок не так много.
Теперь, что касается содержания книги. У меня больше всего претензий к подаче материала. Для совсем начинающих она может быть даже неплохой книгой при условии, что читатель будет последовательно выполнять все упражнения, которые описаны в книге. На самом деле я очень не люблю, когда описание возможностей языка или платформы демонстрируется не на коротких примерах, которые можно легко удержать в голове, а на примере сравнительно больших программ, которые пишутся на протяжении нескольких глав, а именно так и построена данная книга. Из-за этого при переходе от одной главы к другой подробно описывается рефакторинг, которые нужно сделать, прежде чем удастся пощупать описываемую особенность Android. При этом в самом описании уже начинаешь путаться (если не писать программу, следуя за авторами), где код относится непосредственно к Android, а где к обвязке вокруг него, которую предлагается написать.
Кроме того, при использовании такого подхода в описании ощущаешь, что тебя ведут за руку по проторенной дорожке, но не дают обзора того, что еще можешь сделать с помощью описанных возможностей, и что для этого может понадобиться. Нет, в книге есть некоторые теоретические отступления, но их немного и они достаточно условно написаны (не хватает конкретики). А большую часть книги предлагается добавить такие-то строки в этот класс, такие-то строки в тот и посмотреть на результат. Наверное, такой подход оправдан для курсов по программированию, но в книге это читать ужасно нудно.
Какие же темы затронуты в книге? Разумеется, создание активностей и их жизненный цикл. Довольно неплохо написано про работу с фрагментами (они используются на протяжении всей книги), а также про взаимодействие активностей и фрагментов между собой.
Про стандартные виджеты сказано очень мало, используется их небольшое количество, и какие еще есть в поставке не сказано. Особенно обидно, что практически ничего не сказано про способы размещения виджетов в активности, рассказано только про те классы для размещения элементов, которые используются в примерах.
Неплохо написано про диалоговые окна, двухпанельный интерфейс и панели инструментов. Рассказано про работу с БД SQLite и работу с интентами (в том числе широковещательными). Что-то говорится о активах (assets) и использование класса SoundPool для проигрывания звуков. Отдельная глава посвящена стилям и темам. Кое-что сказано про рисование и анимации. Достаточно подробно разбираются примеры, где используется многопоточность и фоновые задачи. Про сервисы (фоновые службы) рассказывается тоже достаточно подробно.
Две главы посвящены отслеживанию положения пользователя с помощью GPS и работе с виджетом карты Google. И последняя глава посвящена Material Design.
В книге понравилось, что авторы показывают использование не только компонентов, встроенных в систему Android, но и использование библиотеки поддержки (support library), например, для работы с фрагментами, чтобы обеспечить работоспособность фрагментов в той версии Android, которая нативно их не поддерживает.
В книге для новичков не хватает «завершающего аккорда» — подпись файла APK и выпуск его в свет с помощью Google Play. Что-то про подпись файла APK сказано, но очень поверхностно и применительно к другой задаче — как получить доступ к Google Services.
В целом книга на троечку, но если вы только хотите «пощупать», что такое программирование под Android, то почитать ее можно.
Я буду благодарен, если вы посоветуете действительно качественную книгу про Android, может быть на английском языке, желательно, чтобы она была достаточно свежей. После прочтения этой книги у меня не сложилась полная мозаика из классов системы Android.
PS. Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.
DROS:
По моему сейчас вся литература о том или ином ЯП написана как путеводитель. «Пишем сюда это, туда то, жмем запуск/компиляцию — смотрим результат». Будто бы шаг в сторону — расстрел. Поэтому у меня с литературой такой направленности не сложилось как-то с самого начала.
Лучшее обучение — постановка задачи и ее героическое решение. Во всяком случае так учился я. Не без говнокодинга по началу конечно. Но это скорее отсутствие опыта кодинга в принципе (как давно это было).
3 февраля 2017, 4:34 ппJenyay:
Про всю литературу не согласен. Есть много отличных книжек по разным языкам. Из последнего, что мне попадаолсь, это Книга Лучано Рамальо «Python. К вершинам мастерства», о которой я писал недавно. Про Python мне нравятся книги Лутца. Ну и по другим языкам тоже могу назвать неплохие книги.
3 февраля 2017, 4:46 ппkelciour:
> Я буду благодарен, если вы посоветуете действительно качественную книгу про Android, может быть на английском языке, желательно, чтобы она была достаточно свежей.
2 марта 2017, 12:51 ппAndroid Programming: The Big Nerd Ranch Guide (3rd Edition) (February 9, 2017)
Jenyay:
Если вы повнимательнее прочитаете начало поста, то увидите, что он как раз о книге этого же колелктива авторов (правда, 2-е издание). Она мне совсем не понравилась.
2 марта 2017, 1:21 ппkelciour:
Да, в этом абзаце я прочитал только первую строчку, а по названию и картинке понял, что речь идет о какой-то другой книге.
2 марта 2017, 3:07 ппМне книга понравилась, как и Professional Android 4 Application Development by Reto Meier, и я последовательно выполнял все упражнения в книге.
Возможно, стоит дождаться выхода Professional Android, 4th Edition by Reto Meier (July 24, 2017), потому что The Busy Coder’s Guide to Android Development by Mark L. Murphy мало подходит под формат книги, а Embedded Android by Karim Yaghmour (второе издание выйдет March 25, 2017), наверное, будет не всем интересна.
И видео от Школы мобильной разработки 2016 Yandex (https://www.youtube.com/playlist?list=PLQC2_0cDcSKBNCR8UWeElzCUuFkXASduz) я пока не смотрел, ничего сказать не могу.
Jenyay:
Спасибо за ссылки и книги, буду иметь их в виду.
2 марта 2017, 4:34 пп