Почти сразу хотелось на манер Как заработать больше посудомойки написать что-то и джавистам, но долго не получалось. Проблем две.

Во-первых, Python более универсален горизонтально. Его для своих узких задач могут использовать не только разработчики, но админы и девопсы, датасатанисты и тестировщики. Выучи свою достаточную часть языка и вперёд, уже этого хватит, чтобы получать повседневную «бытовую» пользу от знаний. Частичная Java бесполезна. В лучшем случае вы напишете то же, что на Python написали бы в разы быстрее, да ещё и boilerplate кода было бы меньше. Грубо говоря, Java — язык для написания сервисов целиком.

Во-вторых, в мире Java нет однозначно рекомендуемых учебников для начинающих. Вроде и книг немало, но чёт как-то… прям вот хорошей (на мой взгляд) нет. А начинающему лучше бы именно одну книгу, да ещё и попроще, да ещё и такую, что не отпугнёт всем этим Java-словием ради какой-нибудь мелочи.

Потому всё сложно.

Решил выкрутиться через дробление. Попробую написать мануалы по уровням: junior, middle, senior. Каждый текст ориентирован на человека, что готов пойти академическим путём через чтение, чтение и снова чтение, перемежая практикой. Не ваш вариант? Проходите мимо. Похоже на ваше? Берите за основу (тем более, стараюсь дать варианты), составляйте свой план. В любом случае лучше, чем без системы болтаться от одной статьи до другой, подбирая отрывочные знания.

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

Ну и сразу про версии: здесь не будет книг про Java версий ниже 8-й, если книга про Java (скажем, для алгоритмов такого требования нет). Не вижу никакого смысла. И вы в самостоятельной работе обращайте внимание на то, о какой версии автор говорит. Если ниже 8-й, закрывайте страницу / книгу. Есть несколько исключений в литературе, я про них упомяну однажды, все они не для уровня junior.

0. Вступление

Хороший junior Java developer состоит из двух обязательных запчастей:

  • Java — язык и часть стандартной библиотеки.
  • Базовые структуры данных и алгоритмы.

Дальше начинается специализация (которая по мере роста дополняется из других областей).

Бекендерам (на них нацелен этот мануал) хорошо бы основы вот этого в голове иметь:

  • Spring или Spring Boot.
  • Базы данных — часто какая-нибудь RDBMS (соответственно, SQL), особенно если вас будут брать в какой-нибудь банк.
  • Hibernate.
  • Linux — основы командной строки нынче что-то типа гигиенического минимума для бекендера.

Людям, которым хочется писать десктопные приложения, полезно:

Друганы маленьких зелёных роботов живут в немножко своём мире и вообще у них грядёт Kotlin вместо Java. Откровенно говоря, мне кажется, что Kotlin в следующие лет 5..7 грядёт и в других областях, но знание pure Java всё равно ещё долго будет актуальным.

Отсюда и структура обучения первого года, отсюда и последовательность изучения ниже.

1. Первая книга для слабых духом

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

1.a. Если вы совсем не про программирование, то [Barry Burd. Beginning Programming with Java For Dummies. For Dummies, 2017] — именно 5-я редакция. Неплохая книга, правда, есть в ней один спорный момент — автор использует Eclipse в качестве редактора / IDE. Сам я топлю за IntelliJ IDEA, тем более, у них есть Community (бесплатная) версия, но ни фига не уверен в том, что начинающий сможет читать книгу для одного IDE, работая в другом. Потому… ну, ок, пусть Eclipse, хоть и та ещё козяква.

1.b. Другой вариант жаждущим лёгких знаний: [Mike McGrath. Java in easy steps. In Easy Steps Limited, 2017] — 6-я редакция. Не очень понимаю, чем эта книга людям нравится (может, тем, что в ней страниц почти в три раза меньше от обычной книги для джавистов), но она действительно нравится и помогает. Объяснений в ней толком нет, обучение через путь повторяющей обезьянки, но зато сразу пишется код.

1.c. Уже менее начинающая [Herbert Schildt. Java: A Beginner’s Guide. McGraw-Hill, 2018] — 8-я редакция. Шилдт давно и упорно выпускает неплохие учебники, 7-я редакция есть на русском языке ([Шилдт Герберт. Java. Руководство для начинающих. Диалектика, 2018]), её тоже можно брать. Классический привычный путь для сотен тысяч джавистов, дядька уже 30+ лет на учебниках специализируется.

1.oca. Тем, кому зачем-то со старта прям нужна сертификация Oracle, стоит сходить сюда, я описал свой опыт: 1Z0-808 (Java SE 8 Programmer I)

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

2. Первая книга для сильных духом

Если вам показались слишком школьными книги из первого списка, попробуйте книги уровня вуза.

2.a. Первой хочу упомянуть [Walter Savitch, Kenrick Mock. Absolute Java. Pearson, 2015] — 6-я редакция. Собственно, полноценный курс. Хоть и 1296 страниц, но настолько всё доступно и настолько наглядно (книга хорошо оформлена), что читается легко.

2.b. Тем, кому очень хочется грызть гранит и прикоснуться к олдовости: [Cay S. Horstmann. Core Java Volume I. Fundamentals. Prentice Hall, 2018] — 11-я редакция (но можно и 10-ю). Тоже известный дядька из поколения Шилдта, издаёт «Core Java» уже 20 лет, я сам по его ранним изданиям учился, но есть один нюанс: это смесь мануала с учебником и документацией, а не ласковый к дошколятам текст. Зато тысяча страниц качественной информации.

3. Алгоритмы и структуры данных

Прочитали первую книгу, выполнив все упражнения? Ура. Берите следующую. Если книги из пунктов #1 и #2 советую читать от корки до корки, книги ниже советую прочитать до момента, в который вы поймёте, что дальше уже не можете. Хорошо, если в процессе вы поймёте, почему та или иная структура данных в Java сделана вот так, а не иначе (и не будете на собеседованиях нести про содержимое JCF совсем уж грустные сказки).

3.a. Классика: [Robert Sedgewick, Kevin Wayne. Algorithms. Addison-Wesley, 2011] — 4-я редакция. Мой фаворит. Что текст нравится, что оформление. Заодно и основы языка повторите.

3.b. Новенький в классе: [Allen B. Downey. Think Data Structures: Algorithms and Information Retrieval in Java. O’Reilly, 2017]. Больше похоже на конспект (150+ страниц), но лучше так, чем никак.

Других альтернатив для начинающих джавистов не знаю (нет, вот [Michael T. Goodrich, etc. Data Structures and Algorithms in Java. Wiley, 2014] не надо). Вы можете, конечно, читать другие алгоритмические мануалы, их хватает хороших, только вот рекомендуемые полезны ещё и тем, что вам снова в голову слоями будет укладываться Java-код.

4. Базы данных (SQL)

Эту книгу вам надо читать для того, чтобы проще было разбираться со следующими этапами.

4. Берём [Thomas Nield. Getting Started with SQL. O’Reilly, 2016] и прорабатываем её всю от обложки до обложки. На неё у вас должно уйти 2..3 недели, не больше.

Здесь можно было бы поспорить о том, а не стоит ли начинающим учить не SQL (не RDBMS), а не лучше ли какую MongoDB поучить… Нет, не лучше. Пролистайте пару сотен вакансий джуниор джавистов на рынке, оцените соотношение SQL и NoSQL в пожеланиях работодателей. Потому не выпендриваемся, учим то, что сказано.

5. Spring [Boot]

Там, где у питонистов Django, у джавистов Spring Framework. Задумывался как глоток воздуха после душных EJB, но со временем сам выродился в нечто монструозное. Потому появилось нечто вроде облегчённого и упрощённого на старте варианта: Spring Boot.

Ну и… как-то не понять. В практике используется как Spring, так и Spring Boot. Первый суровее и богаче (ну и просто много где), на втором проще поднять какую-нибудь фитюльку и не париться, что тоже не редкость. Осторожно сформулирую так: учите сейчас Spring Boot, чтобы:

  • в процессе учёбы быстро поднимать фитюльки;
  • получить опыт, который может пригодиться;
  • познакомиться с концепциями, знание которых упростит вход в большой Spring.

Но тут есть нюанс: хороших книг про Spring Boot нет. Даже удовлетворительных. Потому ничего книжного не дам. Не книжного полезным будет вот это:

Когда будете самостоятельно гуглить, гуглите Spring Boot 2.

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

6. Hibernate

Наконец, Hibernate — мамонт древних времён. Встретите вы его не везде, но через него как-то более классически войдёте в мир ORM. Наконец, вот прямо сейчас на HeadHunter, например, 235 вакансий с упоминанием Hibernate, т.ч. лишним не будет хоть по верхам полистать, чтобы представление получить.

Ну и да, учите строго версию 5.x. Младше не надо.

6.a. Можно попробовать [Joseph B. Ottinger, Jeff Linwood. Dave Minter. Beginning Hibernate. Apress, 2016] — 4-я редакция.

6.b. Ну или [Christian Bauer, Gavin King, Gary Gregory. Java Persistence with Hibernate. Manning, 2016] — 2-я редакция.

Обе книги на тройбан. Попробуйте поступить вот так: из обеих книг прочтите вступительные главы, в которых рассказывается о том, что такое ORM, зачем всё это, всё такое. Дальше полистайте в каждой страниц 40..50. Вот что вам лучше зайдёт, тем и пользуйтесь. Если обе книги не заходят, ну, сходите в официальные гайды, попробуйте с ними подружиться.

7. Факультативное

Темы выше — лишь начало пути. Хороший специалист развивается не только узко внутри своей специальности, но также и пополняет эрудицию по смежным областям. Потому попробуйте в свободное время (откуда оно у вас?) почитать книги из следующего списка…

7.1. Эрудиция: серия In Seven Weeks попсовая, но даст вам понять, что мир сложнее и многомернее. Попробуйте [Luc Perkins, Eric Redmond, Jim Wilson. Seven Databases. Pragmatic, 2018] и [Paul Butcher. Seven Concurrency Models. Pragmatic, 2014].

7.2. Linux: [Christine Bresnahan, Richard Blum. Linux Essentials. Sybex, 2015] — чуть устарела, скучновата, но простым языком для самых маленьких. Пробить порог входа, а дальше уже крутиться, как получится. Без Linux вы будете страдать, потому надо, надо.

7.3. Классика: [Charles Petzold. Code. Microsoft Press, 2000] — очень доступная книга о битах, байтах, кодах и т.п. Я б её школоте в информатику добавил. Если вштырит, читайте [Henry S. Warren. Hacker’s Delight. Addison-Wesley, 2012] — брулянт, а не книга.

Эдак за год упорной работы из вас получится хороший junior. До похода по собеседованиям советую полистать [Noel Markham. Java Programming Interviews Exposed. Wrox, 2014] — технически устарела, но в целом актуальна для того, чтобы булки не расслаблялись, спросить могут обо всём. А могут и не спросить, об этом главка #9.

8. Советы

Полнота обучения достигается гармонией теории, практики и источников (уиии, три и подряд влепил). Иначе говоря:

  • не упарывайтесь лишь по чтению, пишите много кода;
  • не упарывайтесь лишь по коду, много читайте;
  • не упарывайтесь лишь по книгам, читайте и статьи;
  • не упарывайтесь лишь по худ.литу, читайте и исходник;
  • не упарывайтесь лишь по чтению и коду, смотрите и доклады конференций.

Ну вы поняли.

Кстати, о конференциях. На YouTube полистайте JUG.ru — много полезного, особенно начинающим.

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

Собственно, вы это и так сделаете, если прилежно выполните предыдущие шаги, но для раздолбаев всё же подчеркну: освойте GitHub, Maven, JUnit.

9. Всё ли надо?

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

Люблю формулировать так: каждый дополнительный байт знаний и перелом умений повышает ваши шансы быть принятым в большее количество мест, чем без этих вот дополнений. Да, вас взяли в ПупкинВаре, но могут взять и в СидоровЛабс, если вы потратите на недельку больше, чтобы доучить что-нибудь. А там и условия чуть лучше, и перспективы.

Но тут каждый за себя. Решать вам, вам же и расхлёбывать.