Книги по Java для начинающих и опытных программистов
Собираем библиотеку джависта с основателем книжного клуба для бэкенд-разработчиков Григорием Скобелевым.
Иллюстрация: Colowgee для Skillbox Media
Григорий Скобелев
Бэкенд-разработчик. Любит играть на гитаре и кататься на скейтборде. Назвал кошку в честь Spring Framework — Веснуша. Возглавляет программный комитет Podlodka Backend Crew, ментор WDA — Women Developer Academy от Google. Организовал книжный клуб для бэкенд-разработчиков { между скобок }. Преподаёт, разрабатывает курсы и выступает с докладами.
Я попросил коллег из компании, в которой работаю, поделиться любимыми книгами по программированию на Java. В итоге получился длинный список, из которого мы выбрали лучшее и составили две подборки: одну для стажёров и джуниоров, другую — для мидлов и более опытных разработчиков. Расскажу вкратце о каждой книге, а в конце поделюсь мыслями о том, как получать от чтения максимум пользы.
Книги для начинающих Java‑разработчиков
Если вы делаете первые шаги в программировании или вовсе не написали ни строчки кода, но очень хотите попробовать — этот раздел для вас.
Представленные ниже книги в основном посвящены Java 8 и немного Java 11. А вот по Java 17, который вышел относительно недавно, проверенной литературы пока мало — на написание, перевод и техническое рецензирование уходит очень много времени. Тем не менее для изучения с нуля общих принципов программирования и синтаксиса этих рекомендаций вполне хватит — на какой бы версии языка вы ни кодили.
Герберт Шилдт
«Java. Полное руководство»
Издательство «Диалектика-Вильямс», 2018 год, 1488 с.
Оригинальное название: Java: The Complete Reference, Tenth Edition
Если вы ищете учебник по Java с нуля, то в первую очередь обратите внимание на «Полное руководство» Герберта Шилдта. Я всегда рекомендую его своим студентам, когда они просят посоветовать фундаментальную литературу. В этой книге вы найдёте исчерпывающее описание базовых концепций языка, его методов и библиотек. А ещё познакомитесь с принципами ООП и узнаете, какие приложения и как можно разрабатывать на Java.
Достоинства: книга настолько хороша, что легко заменит новичкам курсы по программированию. А более опытные разработчики могут использовать её в качестве справочника.
Недостатки: несмотря на внушительный объём (почти 1500 страниц), книга охватывает лишь базовые области. Разработчикам уровня Middle и выше может не хватить глубины изложения.
Кей Хорстманн
«Java. Библиотека профессионала»
Перевод с английского: Берштейн И.
Издательство «Диалектика-Вильямс», 2020 год, 1-й том — 864 с., 2-й том — 1008 с.
Оригинальное название: Core Java, Volume I-II (Core Series).
Коллеги в качестве первой книги по Java порекомендовали двухтомный труд Кея Хорстманна. Я Core Java не читал, но слышал много хороших отзывов. Например, мой бывший коллега из «Одноклассников» изучил её от корки до корки. По его словам, именно эта книга помогла ему пройти собеседование в «Одноклассники». Вот насколько она крутая.
Достоинства: будьте уверены — если вы осилите оба тома, то точно станете Java-разработчиком :)
Недостатки: очень большой объём — почти 2000 страниц.
Джошуа Блох
«Java. Эффективное программирование»
Перевод с английского: Красиков И.
Издательство «Диалектика-Вильямс», 2019 год, 464 с.
Оригинальное название: Effective Java.
Третья крутая книга для новичков — Effective Java Джошуа Блоха. Она содержит около 300 правил, каждое из которых посвящено определённым аспектам и свойствам языка.
Книга содержит мало справочной информации, но учит правильно писать код на Java. Вы узнаете, какие практики стоит внедрять в разработку, а каких — лучше избегать.
Когда я был зелёным джуниором, мой коллега часто скидывал в код-ревью номера правил из Effective Java и говорил, на что обратить внимание в контексте моего кода. После прочтения я понимал, что делал не так и как это исправить. Став сеньором, я взял этот приём на вооружение и теперь тоже иногда рекомендую джунам главы или конкретные правила из этой прекрасной книги.
Достоинства: вы научитесь правильно программировать на Java и по максимуму использовать его возможности. У книги чёткая структура — это очень удобно.
Недостатки: единственная проблема, впрочем, как и у всех книг по Java в этом списке, — издания не успевают за релизами языка.
Крейг Уоллс
«Spring в действии»
Перевод с английского: Киселёв А.
Издательство «ДМК-Пресс», 2022 год, 544 с.
Оригинальное название: Spring in Action.
Сейчас приложения редко пишут на чистом Java — обычно используют фреймворк Spring. О нём замечательно рассказывает Крейг Уоллс в своей книге «Spring в действии». Стоит отметить, что третье издание несёт мало практической пользы: примеры удачные, но в работе их применить сложно. Пятое и шестое издания в этом плане гораздо более удачные — но их ещё не перевели на русский язык.
Что цепляет в книге, так это манера повествования. Например, автор описывает синтаксис и функции через метафору рыцарского турнира. Раньше я и не думал, что о программировании можно писать так интересно. Всё излагается живым языком, концепции и подходы иллюстрируются примерами рабочего кода. Подобной литературы я больше не встречал.
Достоинства: сложные темы объясняются доступным языком; много примеров и советов о том, как сделать приложение эффективным.
Недостатки: нет.
Книги для опытных Java‑разработчиков
А теперь — о литературе для тех, кто знает синтаксис и умеет писать код. На этом этапе можно углубиться в computer science, начать осваивать многопоточность и решать более сложные практические задачи.
Брайан Гетц, Тим Пайерлс, Джошуа Блох и другие
«Java Concurrency на практике»
Перевод с английского: Логунов А.
Издательство «Питер», 2020 год, 464 с.
Оригинальное название: Java Concurrency in Practice.
Центральная тема «Java Concurrency на практике» — многопоточное программирование. Книга может показаться сложной, но это потому, что само API для работы с потоками в Java устроено сложно. Зато после прочтения вы будете разбираться, когда нужно использовать concurrency, как с её помощью решать рутинные задачи и делать это правильно.
Книга подробно раскрывает проблемы, с которыми сталкиваются программисты при разработке многопоточных приложений, включая дедлоки и использование «вечных ресурсов». Авторы предлагают варианты решения, основанные на их личном опыте. В чуть более чем 400 страницах заключено невероятно много практической пользы.
Достоинства: доступно объясняется одна из самых сложных тем в Java; много примеров и советов по повышению эффективности приложений.
Недостатки: не замечено.
Роберт Седжвик, Кевин Уэйн
«Алгоритмы на Java»
4‑е издание
Перевод с английского: Моргунов А.
Издательство «Вильямс», 2019 год, 848 с.
Оригинальное название: Algorithms (4th edition).
Состоявшемуся разработчику полезно знать алгоритмы. О них написано много книг, с примерами на разных языках программирования, но читать код на «родном» языке, конечно, гораздо удобнее. Для Java-разработчиков есть замечательный справочник Роберта Седжвика — «Алгоритмы на Java». Рассказывать о нём особо и нечего: информация подана доступно, алгоритмы и структуры данных разобраны подробно.
Достоинства: алгоритмы описаны простым языком.
Недостатки: мало практических примеров.
Роберт Мартин
«Чистый код»
Перевод с английского: Матвеев Е.
Издательство «Питер», 2018 год, 464 с.
Оригинальное название: Clean Code.
Прекрасная книга Роберта Мартина Clean Code регулярно попадает в подборки литературы для программистов. Она не столько о Java, сколько о том, как писать хороший, легко поддерживаемый код. Книга содержит универсальные знания и будет полезна всем разработчикам — независимо от того, на каком языке вы программируете.
Достоинства: вы определённо научитесь писать хороший код — а это дорого стоит :)
Недостатки: иногда встречаются слишком очевидные советы.
Мартин Клеппман
«Высоконагруженные приложения. Программирование, масштабирование, поддержка»
Перевод с английского: Пальти И., Тумаркин А.
Издательство «Питер», 2018 год, 640 с.
Оригинальное название: Designing Data-Intensive Applications.
Если вы уверенно владеете Java и Spring и хороши в computer science, поверьте, расслабляться рано. Новые вопросы и проблемы не заставят себя долго ждать, ведь вас окружают компьютерные сети, машины с различной архитектурой и базы данных.
Одна из лучших книг, в которой освещаются проблемы бэкенд-разработки, — «Высоконагруженные приложения» Мартина Клеппмана. Это практическое руководство, которое можно перечитывать много раз и на каждом новом уровне находить новые фишки. Поэтому советую добавить её в библиотеку даже начинающим разработчикам.
Достоинства: это без преувеличения священная книга бэкенд-разработчика, вы будете обращаться к ней на протяжении всей своей карьеры.
Недостатки: нет.
Postgres Professional
Примерно 80% работы бэкенд-разработчика составляет взаимодействие с базой данных. Если в своих проектах вы пользуетесь Postgres, то рекомендую отличный ресурс Postgres Professional. Это сборник бесплатных учебников по языку SQL, основам Postgres и теории баз данных.
Достоинства: подробное, понятное и бесплатное руководство по работе с СУБД.
Недостатки: нет.
Как читать книги о программировании, чтобы получать максимум пользы
Вот несколько советов, к которым мы пришли в нашем книжном клубе для бэкендеров { между скобок }.
Не замыкайтесь на учебниках
Если вы прочитали учебник по функциональному программированию на Java, не обязательно сразу браться за следующий. Посмотрите курс на любой учебной платформе, поищите статьи, порешайте задачки на LeetCode или другом тренажёре, посмотрите доклады.
Например, у Тагира Валеева на YouTube есть целая серия крутых лекций по основам Java. А у Алексея Шипилёва — много вдохновляющих докладов о том, как Java устроен под капотом.
Относитесь к книгам как к справочному материалу
Не обязательно штудировать техническую литературу и заучивать всё, что прочитали. Появился вопрос? Берите книгу, открывайте конкретную главу и ищите ответ. Как правило, в учебниках по программированию главы не сильно связаны, поэтому вы наверняка поймёте материал с любой страницы.
Конечно, тот, кто только знакомится с синтаксисом Java, вряд ли много чего усвоит в таком случае. Абсолютным новичкам лучше читать главу за главой — вдумчиво, последовательно.
Задавайте вопросы в сообществах, вступайте в книжные клубы
Сообщество { между скобок } ориентировано на разработчиков уровня Middle+, но есть и книжные клубы для начинающих. К ним относится «Книжный клуб.rar», созданный «Тинькофф»: ребята собираются в Zoom и обсуждают книги по Java, архитектуре ПО и софт-скиллам. Например, в прошлом месяце разобрали несколько глав The Art of Multiprocessor Programming и «Программиста-фанатика».
У того же «Тинькофф» есть книжный клуб для архитеткоров ПО. Записи их встреч можно посмотреть на YouTube. Обычно участники книжных клубов очень отзывчивые: всегда можно задать вопросы, попросить рекомендации для чтения и поделиться своими находками.
Помните, что хорошая книга даёт ещё один взгляд на проблему
Даже если вы проходите курс на учебной платформе, вам будет полезно параллельно читать книгу по теме. Это ещё одна точка зрения на вопросы, которые вы рассматриваете.
Бывают сложные темы — например, подходы к обеспечению observability или низкоуровневое программирование. Послушаешь доклады про это, а потом дома открываешь книгу и понимаешь, что спикер просто пересказал содержание главы. Дело в том, что про некоторые вещи уже давным-давно всё написано — на конференциях нам просто преподносят материал в более привлекательной обёртке.
Выучить язык программирования по книге можно
В институте я изучал C++, который у нас преподавали по двум книгам: «Стандартный C++» советского инженера Вадима Подбельского и «Язык программирования C++» Бьёрна Страуструпа. Авторы настолько подробно изложили материал и описали работу процессора, что я вполне успешно освоил язык и сдавал лабораторные работы. Хотя по этой теме в университете нам ничего не рассказывали, не было даже лекций — мы читали книги и самостоятельно во всём разбирались.