Десять главных книг о Java-разработке

Десять книг, которые должен прочитать каждый Java-программист


Сентябрь 01, 2022


Новые книги по программированию появляются постоянно. Каждый уважающий себя автор считает своим долгом написать объемный труд с примерами эффективного кода или перечислением возможностей всех свежих фреймворков. Невозможно понять, как освоить такое количество информации. Но если вы только начинаете постигать мир Java-разработки, вам это и не нужно! Начните с основ.

Спросите знакомых опытных программистов о том, какие книги они прочитали — у каждого будет свой список. Но одни и те же названия будут повторяться снова и снова, как нечто само собой разумеющееся. Эти книги не стоят на первых полках магазинов, их вряд ли покажут на ярких рекламных баннерах, но именно они помогают понять культуру разработки на Java.

Предлагаем вашему вниманию десять главных книг, которые стоит порекомендовать всем, кто связал свой профессиональный путь с Java. Все эти работы выдержали испытание временем и были переведены на русский язык. Надеемся, что вы их тоже оцените.

Ссылки на печатные издания вы найдете в разделе «Полезные ссылки».

  1. Java. Библиотека профессионала (Core Java)
  2. Философия Java (Thinking in Java)
  3. Java Concurrency на практике (Java Concurrency in Practice)
  4. Экстремальное программирование: разработка через тестирование (Test Driven Development: By Example)
  5. Применение шаблонов Java (Applied Java Patterns)
  6. Шаблоны корпоративных приложений (Patterns of Enterprise Application Architecture)
  7. Предметно-ориентированное проектирование (DDD) (Domain Driven Design)
  8. Рефакторинг (Refactoring)
  9. Чистый код (Clean code)
  10. Программист-прагматик. Путь от подмастерья к мастеру (The Pragmatic Programmer: From Journeyman to Master)
  11. Полезные ссылки

1. Java. Библиотека профессионала (Core Java)

Автор: Кей Хорстман (Cay S. Horstmann)

Среди всех учебников «для самых маленьких», эта книга, пожалуй, самая популярная. Она пережила одиннадцать изданий, двенадцатое издание, выпущенное в 2021 году, пока не переведено на русский язык.

Можно долго рассуждать, в чем причина ее популярности, но факт остается фактом: когда новичок выражает желание изучить Java, эту книгу называют первой практически всегда даже те, кто предпочитает чтению видеокурсы и ролики на YouTube.

2. Философия Java (Thinking in Java)

Автор: Брюс Эккель (Bruce Eckel)

Недостаточно знать синтаксис языка, важно понимать, как на нем следует писать. Если вы любите Python, то при большом желании сможете писать на Java как на Python. Но учтите, ваш код будет корявым, не устойчивым к ошибкам, а коллегам-джавистам придется напрячься, чтобы понять, что вы хотели сделать.

Брюс Эккель рассказывает о стандартных проблемах и том, как их удобно и правильно решать с помощью Java. Это легкий, чистый, понятный учебник по основам применения языка. Прочитав эту книгу, вы сможете не просто программировать на Java, а делать это комфортно и со вкусом.

Это вторая «книга по-умолчанию», которая пережила множество переизданий и помогла нескольким поколениям разработчиков.

Единственный недостаток этой книги в том, что 4-е издание написано в 2006 году, а с тех пор в Java появилось много возможностей и функций. Она отлично подходит для понимания основ, но не захватывает новых особенностей языка.

3. Java Concurrency на практике (Java Concurrency in Practice)

Автор: Брайан Гётц (Brian Goetz)

Книга, которая заслужила собственную аббревиатуру — её коротко называют JCIP. Все специалисты по многопоточности знают эту книгу, а кто-то — почти наизусть.

Она написана в 2006 году, когда вышло 4-е здание «Философии Java» Эккеля. В это же время автор JCIP, Брайан Гёц, начал работать Java-инженером в Sun Microsystems, а с 2010 года является архитектором языка Java.

Кроме Гёца в соавторах — большая группа экспертов, каждый из которых оставил свой след в истории. Например, Даг Ли — человек со своей страничкой в Википедии, профессор Computer Science и декан факультета компьютерных наук Университета штата Нью-Йорк (SUNY Oswego), специализируется на параллельных вычислениях. Он состоял в Исполнительном комитете Java Community Process — организации, оказывающей решающее влияние на развитие Java.

Удивительно, но Java Concurrency in Practice остается актуальной даже сейчас. Кажется, что многопоточность — это нечто модное, динамичное и быстро развивающееся, требующее написания новых книг как минимум раз в год. Если речь идёт о фреймворках — отчасти это действительно так. Но в JCIP описана философия работы с многопоточностью с точки зрения базовой платформы Java. Платформа меняется не так часто и сохраняет железобетонную совместимость между версиями. Знания, полученные из этого труда, прослужат вам всю жизнь.

Многопоточность — очень сложная тема. Возможно, самая тяжелая из обычных «бытовых» тем, о которых в той или иной мере должны знать все. Java Concurrency in Practice — обязательная к прочтению книга для тех, кто погружается в страшный и волшебный мир многопоточности.

4. Экстремальное программирование: разработка через тестирование (Test Driven Development: By Example)

Автор: Кент Бек (Kent Beck)

Несмотря на слово «тестирование» в названии, эта книга совершенно не для тестировщиков.

Test Driven Development (TDD) — это способ избавиться от страха в процессе разработки. Для разработчика естественно непрерывно беспокоиться о том, чтобы случайно что-нибудь не сломать. Иногда такое давление становится невыносимым, приводя либо к падающим продакшн-серверам, либо к выгоранию.

В этой книге автор предложил радикальный и очень изобретательный способ писать тесты так, чтобы можно было переложить необходимость в непрерывном контроле на компьютер и системы автоматической проверки.

В своё время этот подход произвел фурор, и сегодня все системы быстрого тестирования и рефакторингов в IDE — в определенной степени продукт размышлений над наследием Кента Бека и его TDD.

5. Применение шаблонов Java (Applied Java Patterns)

Авторы: Стив Стелтинг и Олав Маассен (Stephen Stelting, Olav Maassen)

Когда читаешь код стандартных коллекций Java или любого действительно хорошо написанного фреймворка (например, Spring), трудно не заметить повторяющиеся приемы высокоуровневой организации кода. Можно учиться на этих примерах, но гораздо проще прочитать справочник, в котором все приемы уже систематизированы и описаны.

Одна из первых классических книг на эту тему — «Паттерны Проектирования» от «Банды Четырех» (Гамма, Хелм, Джонсон, Влиссидес). Несмотря на то, что автор приводит примеры на C++, она будет полезна и Java-разработчикам.

«Применение шаблонов Java» написана еще во времена Sun Microsystems. Эта книга за считанные часы погрузит вас в тему с помощью четкой структуры и наглядных диаграмм.

Учтите, её довольно сложно найти, и в ней есть совершенно не относящиеся к современности разделы (типа CORBA или старых EJB). В этом случае изучите такие работы, как, например, Java Design Patterns (Vaskaran Sarcar) на английском языке, легкую и веселую «Head First. Паттерны проектирования» (Кэти Сьерра) на русском, либо достаточно редкую «Шаблоны проектирования в Java» (Марк Гранд).

6. Шаблоны корпоративных приложений (Patterns of Enterprise Application Architecture)

Автор: Мартин Фаулер (Martin Fowler)

Недостаточно знать синтаксис и базовую философию языка. Программирование — дисциплина практичная и прагматичная. Программист должен уметь проектировать сложные и многогранные системы, которые будут разрабатывать и поддерживать сотни его коллег. Эта книга пригодится, если вы планируете работать в банках, больших электронных магазинах и маркетплейсах и прочих крупных компаниях.

Одно из основных применений Java — корпоративные приложения. «Шаблоны корпоративных приложений» — это обзор вопросов, с которыми сталкивается каждый профессионал в этой области.

Автор рассуждает о разделении сложных систем на уровни, о моделировании структуры и поведения на уровне объектов и реляционных баз данных, о типовых решениях обработки данных, бытовом параллелизме и отображении данных в вебе.

7. Предметно-ориентированное проектирование (DDD) (Domain Driven Design)

Автор: Эрик Эванс (Eric Evans)

В этом обзоре мы уже касались творчества Кента Бека и Мартина Фаулера. Предисловие к этой книге написал Фаулер, а начинается она цитатой Кента Бека: «Эта книга должна стоять на полке у каждого мыслящего программиста».

Она насыщена практическими примерами из реальных проектов, наполнена приёмами и методиками, основанными на обширном опыте автора. Она помогает инженеру-разработчику и специалисту в предметной области найти единый язык, на котором они могли бы разговаривать.

Книга ставит перед собой крайне амбициозную цель: дать полное руководство по моделированию предметных областей и созданию контекста, в котором этот подход можно было бы успешно объяснять и преподавать.

8. Рефакторинг (Refactoring)

Автор: Мартин Фаулер (Martin Fowler)

В данной работе автор вначале объясняет суть рефакторинга, а потом списком приводит примеры более 70(!) конкретных способов улучшить код.

Эта книга может показаться занудной, поскольку содержит скрупулезный разбор десятков примеров мелких структурных изменений, занимающий 370 страниц. Но помните, написание кода — это не только большие идеи, это еще и ежедневная, рутинная работа. Если делать ее неэффективно, она превратится в сущий ад как для самого разработчика, так и для его коллег, вынужденных разбирать неудобоваримый код.

«Рефакторинг» наполнен практичными советами, например: «Почувствовав потребность написать комментарий, попробуйте сначала изменить структуру кода так, чтобы любые комментарии стали излишними». Другие авторы ограничились бы подобным эффектным замечанием, но Фаулер в этом месте выдает полный список инструкций.

Книга писалась в далеком 2006 году. С тех пор язык Java изменился, но описанные там приемы актуальны по сей день. Инструменты разработки претерпели существенные изменения, например, в IDE вроде IntelliJ IDEA мы можем нажать Shift+F6 (Refactor -> Rename), и заменить имя не только в Java-коде, но и в связанных XML/Yaml файлах, конфигурации фреймворков и многом другом. Сегодня легко рефакторить код вовремя и правильно, а как именно это делать — расскажет эта книга.

9. Чистый код (Clean code)

Автор: Роберт Мартин (Дядя Боб) (Robert C. Martin)

Роберт Мартин, известный на просторах интернета как Дядя Боб, написал невероятно полезную книгу, которая осваивается за пару вечеров. Она подробно и ясно описывает всё, что вы хотели знать об организации быта на Java, но стеснялись спросить.

Как называть классы и методы? Какова максимальная концентрация остроумных шуток, которые ты вкладываешь в имена переменных? Нужно ли в комментариях объяснять каждую строчку? Как получается, что простые проблемы процедурного программирования так сложно выглядят в объектно-ориентированном виде?

На часть вопросов можно взглянуть уже ретроспективно, с учетом развития других языков программирования (если вы их знаете). Например, в книге есть обсуждение вопроса — стоит ли из функций бросать исключения, или можно ограничиться возвратом кодов ошибок? Программисты на Java и Go могут устроить по этому поводу нешуточный спор о хорошем вкусе и правильной архитектуре.

10. Программист-прагматик. Путь от подмастерья к мастеру (The Pragmatic Programmer: From Journeyman to Master)

Авторы: Дэвид Томас, Эндрю Хант (Andrew Hunt, David Thomas)

Несмотря на минимальное количество примеров кода, эту книгу советуют читать всем начинающим Java-разработчикам. При этом «Программист-прагматик» не привязывается к конкретному языку программирования или технологии, не обсуждает мелкие технические вопросы из репертуара StackOverflow. Она рассказывает о самой сути профессии и вечных темах профессионального роста.

Её стоит читать и перечитывать из года в год. И каждый раз находить что-то новое в свете приобретенного опыта, свежих технологий и ситуации в мире. Мы рекомендуем прочитать её два раза: до и после чтения всех книг в этом списке. И посмотреть, что изменится.

Полезные ссылки

  1. Java. Библиотека профессионала. Том 1
  2. Философия Java
  3. Java Concurrency на практике
  4. Экстремальное программирование: разработка через тестирование
  5. Применение шаблонов Java
  6. Шаблоны корпоративных приложений
  7. Предметно-ориентированное проектирование (DDD)
  8. Рефакторинг
  9. Чистый код
  10. Программист-прагматик
Author image

Олег Чирухин

Директор по коммуникациям с разработчиками (DevRel)

Команда Axiom JDK roman.karpov@axiomjdk.ru Команда Axiom JDK logo Axiom Committed to Freedom 199 Obvodnogo Kanala Emb. 190020 St. Petersburg RU +7 812-336-35-67 Команда Axiom JDK 199 Obvodnogo Kanala Emb. 190020 St. Petersburg RU +7 812-336-35-67