Хотите переплюнуть профессиональных Java-разработчиков? Roadmap для изучения Java в 2023 году

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Java — настолько популярный и развитый язык, что контента на любую связанную с ним тему хоть отбавляй. Будь то технические разборы, обзоры популярных библиотек с открытым исходным кодом, статьи о поиске работы Java-программистом, сравнение с другими языками — всего не перечесть. Поиск по слову «java» в гугле выдал мне около 1,56,00,00,000 (?) результатов.

Колоссальный переизбыток java-контента
Колоссальный переизбыток java-контента

Чем НЕ является эта статья

Превалирующая на просторах интернета подкатегория — это контент для новичков. То есть книги для изучения java. Или, чего на порядок больше, статьи с заголовком “Ресурсы для изучения Java”. Я ни в коем случае не дискредитирую их. Даже напротив, я считаю, что чтение книг — один из лучших способов структурированного и достаточно глубокого изучения любого языка программирования. Но такого рода статьи в основном предлагают учащемуся случайный набор книг, не уделяя внимания порядку, в котором их нужно читать.

Также прошу не путать эту статью с теми, которые имеют в названии слова “Java” и “roadmap”, но уходят в перечисление всех существующих технологий. Или с теми, которые слишком подробно описывают каждую языковую конструкцию.

Учащиеся могут утонуть в океане “обучающего контента по Java”.

Из моих предыдущих статей вы, возможно, уже знаете, что я адвокатирую за то, чтобы люди тратили время на углубленное изучение материала и достигали в нем хорошего уровня компетенции. И я также настаиваю на том, что, чтобы развить свои профессиональные качества до такого уровня, нужно уделять обучению достаточно много времени. Эта статья также не очередной случайный набор ресурсов, это вполне конкретный roadmap по освоению языка до уровня разработчика, имеющего 6-7 лет опыта работы. Однако, чтобы стать таким же сильным разработчиком, вам определенно нужно посвятить время (не менее года), чтобы научиться чему-то должным образом. Поэтому я настоятельно рекомендую вам не позволять себе тратить драгоценное время, необходимое для полноценного обучения, “разбираясь по необходимости” или занимаясь “обучением на рабочем месте”. Давайте перестанем притворяться, что мы можем работать и учиться одновременно. Итак, вот полный roadmap. Следуйте ему, и вместе с советами, приведенными в конце, у вас будет все для того, чтобы стать профессионалом в Java за 1/5 времени, которое требуется другим разработчикам.

Roadmap

TL;DR — короткая версия

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

Roadmap изучения Java
Roadmap изучения Java

А теперь перейдем к списку книг, из которых, собственно, и сформирован этот roadmap.

Основы языка

  1. Java. Библиотека профессионала, том I и II, Кей Хорстманн (Core Java, Cay Horstmann)

Эти книги можно купить на Amazon (Core Java, том 1) и (Core Java, том 2):

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

2. Java. Эффективное Программирование, Джошуа Блох (Effective Java, Joshua Bloch )

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

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

3. Java Concurrency на практике, Брайан Гетц (Java Concurrency in Practice, Brian Goetz)

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

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

На этом этапе вы уже должны достигнуть уровня Java-разработчика с 3-летним опытом.

Что ж, вы практически полностью разобрались с языком Java и его применением для решения различных задач. Пора переходить к изучению паттернов проектирования в java. До сих пор вы изучали только идиомы, но теперь вам нужно научиться организовывать сущности Java (классы, объекты, интерфейсы и т.д.) таким образом, чтобы программа была гибкой и удобочитаемой. Официальным термином, используемым интервьюерами для проверки ваших навыков в этой области, служит LLD (low level design – архитектура низкого уровня).

LLD

Эта часть целиком посвящена LLD (Low Level Design). Для изучения этой области я бы посоветовал вам следующие книги. Отчасти потому, что они рассматриваю LLD в применении к Java:

  1. Объектно-ориентированный анализ и проектирование, Бретт Д. Маклафлин, Дэвид Уэст и Гэри Поллис (Head First Object-Oriented Analysis and Design, Brett D. McLaughlin, David West and Gary Pollice)

Купить можно здесь. Эта книга посвящена ПРИНЦИПАМ разработки хороших программ на Java. Как и все книги Head First, она написана очень ясным и легким для понимания языком. Авторы стараются использовать сразу несколько средств для объяснения концепции, чтобы она как можно лучше усвоилась сознанием. Не пропускайте эту книгу, так как она хорошо подготовит вас к изучению паттернов проектирования, которые следует изучить из следующей книги.

2. Паттерны объектно-ориентированного проектирования, Эрих Гамма (Design Patterns, Erich Gamma)

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

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

На этом этапе вы уже должны достигнуть уровня Java-разработчика с 4-летним опытом.

Производительность Java

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

  1. Эффективный Java. Тюнинг кода на Java 8, 11 и дальше, Скотт Оукс (Java Performance — In-Depth Advice for Tuning and Programming Java 8, 11, and Beyond, Scott Oaks)

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

2. Java: оптимизация программ. Практические методы повышения производительности приложений в JVM, Бенджамин Эванс и Джеймс Гоф (Optimizing Java: Practical Techniques for Improved Performance Tuning, Benjamin J Evans and James Gough)

Купить эту книгу можно здесь. Если предыдущая книга была больше о теории, то эта больше о практических методах, которые вы будете использовать для измерения и повышения производительности Java-приложений в своей работе. Это руководство является “недостающим звеном”, целью которого является перевод тюнинга производительности Java из области догадок и фольклора в экспериментальную науку. Вы узнаете, как последовательно и систематически подходить к проблемам производительности, решать проблемы с производительностью в производственной среде, изучая основные виды проблем с производительностью в Java, а также выявлять и решать проблемы с производительностью до того, как они вообще возникнут.

После завершения обучения по книгам в этом разделе вы достигните уровня Java-разработчика с 7-летним опытом!

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

Поздравляю, этот roadmap, как мне кажется, может сделать даже из новичка Java-разработчика с эквивалентом 7-8 лет опыта работы за относительно короткий промежуток времени в 1.5 года. Это среднее время, которое, по моим оценкам, потребуется людям, чтобы выучить и усвоить все из упомянутого выше материала. А получить уровень знаний человека с 7-летним стажем за 1.5 года — это очень даже не плохо. Я бы очень хотел, чтобы у меня был такой roadmap, когда я только начинал. Я не мог воспользоваться чем-то подобным в свое время, но вы, безусловно, можете. Так что вперед! Дерзайте!

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

Подробное изучение технологии — часть 1
Подробное изучение технологии — часть 2
Подробное изучение технологии — часть 3


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

  • Записаться на урок

Источник: https://habr.com/ru/companies/otus/articles/742158/


Интересные статьи

Интересные статьи

Не так давно в блоге ЛАНИТ на Хабре мы представили вашему вниманию часть нашей методички по JavaScript. Сегодня же предлагаем ознакомиться с ещё одним блоком, который затрагивает самые базовые и необх...
В начале прошлой недели в Ереване проходила самая крупная русскоязычная конференция по искусственному интеллекту OpenTalks.AI. На конференции было ~600 участников, ~100 спикеров и 28 сессий в рамках т...
Не рано ли говорить о весне и на такую тему? Только встретили новый год. Нет, не рано. Время быстротечно. И это подтверждает Минцифры, которое обнародовало, что совсем скоро начнет принимать заяв...
Перед вами список из 50 вопросов и ответов для собеседования по Swift. Эти вопросы посвящены программированию на Swift и разработке приложений для iOS. Вы должны знать ответы на них, прежде чем у вас ...
Доброго времени суток, друзья! Представляю вашему вниманию перевод статьи «Understanding (all) JavaScript module formats and tools» автора Dixin. При создании приложения часто возникает...