Привет! Сегодня поговорим о пути развития Java-разработчика и о том, что он обязательно должен знать, чтобы быть востребованным. Любой разработчик на собеседовании может “завалить” кандидата на должность. Например, начнет задавать вопросы по специфическим темам, с которыми он сталкивался в текущем проекте. Но не знать все — это нормально. То, что вы не ответите на некоторые вопросы — это тоже нормально. Как правило, у каждого Java-программиста должны быть базовые знания о разработке. Итак, давайте разберем, какие же технологии считаются “базовыми”.Чеклист Java-developer’а. Что должен знать разработчик - 1

1. Базовые алгоритмы

Первое, за что стоит взяться, начав изучать программирование (касается не только Java), — это разбор основ. Например, алгоритмов. Их существует бесконечное множество, и не стоит убивать целые годы на попытки изучить как можно больше алгоритмов: большинство из них вам не пригодятся. Необходимый минимум знаний можно получить из книги “Грокаем алгоритмы”. Для начала пути этого хватит, но при желании можно подучиться с помощью книги “Структуры и алгоритмы” или “Алгоритмы на Java” Роберта Седжвика и Кевина Уэйна. Также я советую вам подтянуть знания основ информатики. Это можно сделать на JavaRush с помощью курса CS50.

2. Java Syntax

После изучения основ алгоритмов мы должны выучить Java синтаксис. Ведь мы тут все учимся именно на Java-программистов, не так ли? Для этого отлично подойдет курс JavaRush. В процессе выполнения многочисленных задач вы “набьете” руку на Java синтаксисе и будете без особых раздумий писать/читать Java-код, будто это ваш родной язык. JavaRush — это практика, а помимо нее нужно еще и поглядывать в теорию, чтобы понимать, что вы именно делаете. Для этого можно прочесть книги, например одну из следующих:
  • Head First Java”;
  • “Java для чайников” Барри Бёрд;
  • “Java. Руководство для начинающих” Герберт Шилдт.
После прочтения этих книг можно приниматься за книги посложнее:
  • “Философия Java”, Брюс Экель;
  • “Эффективное программирование”, Джошуа Блох;
  • “Java. Полное руководство”, Герберт Шилдт.
Последние три книги не являются легким чтивом для новичков, но они могут дать крепкие знания в теории Java. Также не нужно забывать о статьях на JavaRush, ведь в них можно найти объяснения на большинство интересующих вас тем. Найти нужную статью можно, вбив в поиске интересующую вас тему:Чеклист Java-developer’а. Что должен знать разработчик - 2Также настоятельно рекомендую искать вопросы с собеседований по Java, как например, в этой подборке вопросов по абстрактным классам и интерфейсам. Это поможет понять, что именно вам нужно изучить и к каким вопросам быть готовым.Чеклист Java-developer’а. Что должен знать разработчик - 3

3. Паттерны программирования

Паттерны программирования — это некоторые повторяемые шаблоны, которые представляют собой решение проблемы в рамках часто возникающего контекста. Среди них есть базовые, простые шаблоны, которые должен знать каждый уважающий себя программист. Чтобы разобраться в этой теме, используйте книгу “Head First. Паттерны проектирования”. Она доступно объяснит базовые паттерны программирования. Но в книге много говорится о Java, поэтому на момент изучения книги необходимо овладеть этим языком программирования. Для большего углубления в паттерны можно также почитать “Приемы объектно-ориентированного проектирования. Паттерны проектирования” от Банды четырёх (Gang of Four: коллектив авторов, в который входят Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес — прим. ред.). После изучения этой темы вы начнете видеть паттерны фактически везде в коде. Обращайте на это внимание, особенно на используемые паттерны в Spring, так как это популярный вопрос на собеседованиях.

4. Парадигмы программирования. Чистота кода

Помимо стандартных шаблонов программирования, существуют различные принципы и парадигмы, которые необходимо знать (SOLID, GRASP). Также необходимо следить за чистотой кода и его читаемостью. Все, что нужно знать по этой теме, есть в книге “Чистый код” Роберта Мартина или взять на вооружение книгу “Идеальный код” Стива Макконнелла.

5. SQL

Следующим пунктом у нас идет изучение языка реляционных баз данных — SQL. Базы данных — это место, где хранится информация (данные) веб-приложения. База данных состоит из множества таблиц (адресная книга в вашем телефоне — самый простой пример подобных таблиц). Подробнее о базах данных можно почитать в этой статье. Для Java-разработчиков зона ответственности — это не только Java-приложение, но и база данных, с которой оно взаимодействует и где хранит данные. В реляционных (самых распространенных) базах данных все взаимодействие происходит через особый язык — Structured Query Language, или SQL. Чтобы разобраться в этой теме, достаточно будет прочитать одну из книг:
  • “Изучаем SQL”, Алан Бьюли;
  • “SQL”, Крис Фиайли;
  • “Head First SQL”, Линн Бейли.
Но ведь практика без теории не работает, не так ли? И на собеседованиях для проверки знаний по SQL часто (чуть ли не всегда) дают одну-две задачки на написание SQL-запроса. Поэтому очень важно отточить свои практические SQL-навыки, чтобы показать себя в хорошем свете. Отличным ресурсом для набивки SQL-практики может стать ресурс sql-ex.ru.

6. MySQL/PostgreSQL

После изучения языка SQL, вам нужно ознакомиться с конкретной реализацией базы данных. В зависимости от базы данных, некоторые команды могут разительно отличаться. Да и разница в возможностях баз данных весьма ощутима. Самые распространенные реляционные базы данных — MySQL и PostgreSQL.Чеклист Java-developer’а. Что должен знать разработчик - 4MySQL гораздо проще, но при этом у PostgreSQL шире возможности. Для начала достаточно быть знакомым хотя бы с одной из них. Изучать реализации баз данных можно, если использовать навыки по гуглению — находить нужные статьи и обучающие уроки в Youtube. Вы должны набивать руку на правильном поиске интересующих вас вопросов, ведь программист — это человек “с черным поясом” по поиску в Google.

7. Maven/Gradle

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

8. Git

Git — распределенная система управления версиями. Данная технология позволяет разработчикам совместно создавать одно приложение, при этом друг другу не мешая. Конечно, есть и аналоги данной системы управления версиями. Например, Subversion. Но в основном используется именно Git, и нужно уметь работать с ним.Чеклист Java-developer’а. Что должен знать разработчик - 5Помимо обучающих статей по нему, в Youtube достаточно видео, которые помогут вам шаг за шагом освоить данную технологию. Сперва лучше использовать именно консольный Git, а не какую-нибудь интерфейсную имплементацию, ведь в ней нужно будет все делать через команды. На собеседованиях часто любят спрашивать некоторые команды Git, поэтому рекомендую вам выписывать их и держать где-то под рукой. Также советую вести конспект, в который вы будете отмечать самые важные моменты, чтобы перед собеседованием пройтись по нему и освежить память.

9. JDBC

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

10. JPA. Hibernate

JPA — это способ организации соединения между приложением Java и базой данных, так же, как и JDBC. Но при этом JPA — более высокоуровневая технология и, соответственно, более простая в использовании. Но JPA — это только спецификация (концепция), которая не реализована, и для которой нужна ее конкретная реализация. Таковых реализаций много, но самой самой близкой к идеалам JPA, популярной и развитой, считается Hibernate. В своей карьере разработчика вы не раз столкнетесь с данной технологией. Поэтому помимо знакомства с этой технологией по статьям, возможно, стоит задуматься о прочтении книги о ней, например, — “Java Persistence API”.

11. Spring

Когда вы станете Java-разработчиком, Spring перестает быть для вас просто словом.Чеклист Java-developer’а. Что должен знать разработчик - 6Сейчас данный фреймворк по важности делит первое место с необходимостью знать синтаксис языка Java. Вы можете сказать, что у Spring есть аналог, то есть технологии Java EE. Но Java EE устарела, и на новых проектах уже и не используется. В подавляющем большинстве сейчас Java-разработчик — это Java-Spring-разработчик, поэтому знание некоторых базовых технологий Spring обязательно. Spring — это не просто фреймворк, а целая платформа фреймворков:Чеклист Java-developer’а. Что должен знать разработчик - 7И это только часть фреймворков, которые предоставляет Spring. Новичку же достаточно знать только некоторые из них:

  • Spring Core

Он должен быть у вас на первом месте, чтобы понимать, что такое Spring: что такое Spring контейнер, бины, DI, IoC и так далее. Так сказать, понять саму философию использования Spring. Дальнейшее изучение Spring-фреймворков будет происходить, отталкиваясь от этой базы. Возможно, стоит создать свое небольшое приложение, к которому вы будете понемногу прикручивать новые изученные технологии.

  • Spring JDBC

Ранее мы говорили о технологии JDBC как про технологии для создания соединения с базой данных. Вообще, “голое” использование технологии сейчас можно и не встретить в проектах, поэтому может показаться, что изучение JDBC и не нужно. Но это не совсем так. Рассмотрев “голое” использование JDBC, вы сможете увидеть технологию на более низком уровне, разобраться с ее проблемами и недостатками. Начав изучать Spring JDBC, вы поймете, что именно данный фреймворк улучшает, оптимизирует и скрывает от наших глаз.

  • Spring Hibernate

Как и в случае с “голым” JDBC, данный фреймворк улучшает использование уже существующей технологии, в данном случае Hibernate. Если рассмотреть использование Hibernate без Spring, вы точно поймете, в чем заключается выгода от использования Spring Hibernate.

  • Spring JPA

Ранее мы говорили о JPA и о том, что это только спецификация, для которой существуют различные реализации. Среди этих реализаций наиболее близок к идеалу Hibernate. У Spring есть собственная идеальная реализация JPA, которая “под капотом” использует Hibernate и максимально приближена к идеалу JPA-спецификаций. Эта технология носит название Spring JPA. К слову она сильно упрощает обращения к базе данных. Можно изучить только JPA без изучения JDBC, Hibernate, Spring JDBC, Spring Hibernate. Но в таком случае ваши знания по соединению с базой данных будут очень поверхностными.

  • Spring MVC

С этой технологией можно отображать веб-интерфейс нашего приложения для пользователей и обеспечивать общение интерфейса с остальной частью приложения. Также технология может работать без отображения, когда есть некоторое приложение, отвечающее за отображение, и вы с этим приложением взаимодействуете с помощью запросов и ответов по RESTful технологии. Чтобы лучше усвоить информацию о Spring, помимо статей, лекций на ютубе, можно прочесть несколько книг. Мне очень зашла книга “Spring в действии” Уоллса Крейга. К сожалению, на русском сейчас есть только третья версия, которая считается устаревшей. Советую прочесть именно 6-ю версию, если вы хорошо знаете английский. Еще одна великолепная книга по Spring — “Spring 5 для профессионалов”. Она более тяжелая для освоения и больше похожа на библию справочник по Spring, который лучше держать всегда под рукой, чем прочитать от корки до корки.Чеклист Java-developer’а. Что должен знать разработчик - 8

  • Spring Boot

Эта технология в разы упрощает использование Spring. Я не просто так вынес ее в конец списка, ведь она скрывает многое под “капотом” и для человека, незнакомого с обычным Spring, многие моменты могут быть не очевидны и непонятны. Сперва для лучшего понимания работы фреймворков Spring стоит использовать обычный Spring, а — потом все высшие блага использования Spring Boot. Также советую ознакомиться со Spring Security и Spring AOP. Но в отличие от технологий, приведенных выше, глубокие познания этих двух сейчас не нужны. Это технологии не для новичков. На собеседованиях джунов о них не спрашивают (разве что один поверхностный вопрос). Почитайте обобщенно, что это за технологии и принципы работы. В этой статье я постоянно упоминал прочтение книг. С одной стороны, это не обязательно. Можно стать программистом, не прочитав ни единой книги, изучив все необходимое по статьям и обучающим видео. С другой стороны, на данный момент на рынке начинающих разработчиков конкуренция высока, что и завышает планку необходимых начальных знаний для новичка. Поэтому чем больше вы будете знать, тем быстрее вы сможете найти свою первую работу, впечатлив интервьюера уровнем своих знаний. Всем спасибо, и да пребудет с вами Java.Чеклист Java-developer’а. Что должен знать разработчик - 9