Мой предыдущий пост возымел определенный эффект – несколько человек посчитали его очень мотивирующим и попросили меня дать некоторые советы и рекомендации, с чего же начать карьеру разработчика. Очевидно, вопрос слишком широкий и не имеет ответа как такового, поэтому я поставлю его более узко: что должен знать молодой java-разработчик, пишущий back-end?
Этот пост не является курсом молодого бойца, а является лишь:
- Моей попыткой выбрать основные направления, в которых должен ориентироваться каждый начинающий java back-end разработчик.
- Небольшим собранием материалов к изучению.
- Описанием тестового проекта, который разработчик должен суметь реализовать с использованием указанных инструментов.
Цель:
- Осветить список основных инструментов экосистемы языка, которыми необходимо уметь пользоваться и понимать на базовом уровне. Я не ставлю целью дать глубокое понимание инструментов, так как это самое понимание можно приобрести лишь с опытом.
Как я уже говорил, я буду оперировать терминами экосистемы Java, хотя в целом это легко можно спроецировать на любую другую платформу.
Итак, есть человек, понимающий ООП и прочитавший хотя бы одну стоящую книгу по языку от авторитетного автора. Человека в дальнейшем будем называть “падаван”, и если падаван не читал книг – все же стоит это сделать. Это необходимо для того, чтобы понимать возможности языка и его основных библиотек, но закапываться тоже не стоит – для начала одной хорошей книги будет достаточно. Фанатичное чтение без практики никаких особых плюсов не дает, особенно на начальных порах.
Значит, что мы пока что имеем:
- Падаван – 1 единица.
- Имеется понимание ООП.
- Базовое понимание возможностей языка и знание основных его библиотек тоже в наличии.
Как можно применить имеющиеся пока знания? Никак. Для этого нужно погружаться в экосистему платформы. Для Java, по моему мнению, необходимо понимание следующих инструментов:
-
Collections Framework. Вообще говоря, это Core Java, то есть не часть экосистемы как таковой. Ориентироваться в структурах данных – обязательно. Необходимо четко понимать разницу между LinkedList и ArrayList. А также понимать, что такое Set и Map (а еще помнить, что Map – это не Collection). Хорошая статья про HashMap, например. Я бы даже рекомендовал еще посмотреть сюда.
-
Иерархия исключений: тут
-
Иерархию классов кстати тоже неплохо представлять в общих чертах. Хотя бы помнить, что все классы неявно наследуют от Object.
-
Spring. Это фреймворк, который сильно упрощает жизнь. Фреймворк этот слишком большой, поэтому для начала достаточно просто понимать, зачем он нужен.
-
Знать, как расшифровывается ORM и для чего это нужно. Я бы дал такую краткую и сильно упрощенную формулировку: ORM (ладно, Object-Relational Mapping) – это такая штука, которая позволяет преобразовывать записи (строки) базы данных в объекты языка. С этими объектами затем можно работать так же, как и с любыми другими – проверять или менять их состояние, вызывая те или иные методы. Соответственно, все изменения объекта отразятся в БД.
-
JDBC. Это то, что позволяет довольно сложно и непонятно работать с базой данных. Но знать полезно. Сюда же и отнесу базовое знание SQL.
-
Maven. Определенно необходим, так как эта штука помогает собрать проект из кусочков в один исполняемый файл (грубо говоря). Есть аналоги: Gradle, Ant. Последний, на мой взгляд, довольно сложен для начала, да и популярность его на сегодня довольно мала.
-
HTML на базовом уровне, то есть уметь красиво верстать ни к чему для начала.
- JUnit / TestNG, в общем – юнит-тестирование. Я не буду делать на этом акцент, а также не буду говорить про TDD или BDD – итак уже слишком много материалов для начала. Я бы даже сказал, что на начальных порах скорее более важно само понимание важности юнит-тестирования, а не непосредственно умение писать тесты.
Если я упустил какие-либо важные моменты, прошу меня поправить и дополнить.
Итак, в чем заключается суть тестового проекта: я предлагаю падавану сделать простейшую блог-платформу без регистрации и без красивых форм на bootstrap. Пусть это будет голый уродливый html без какой-либо динамики, а главная форма имеет лишь:
-
Поле ввода. Просто вбейте туда слова “Hello World”.
-
Кнопку “создать запись”. Нажимаете на нее, и слова “Hello World” уходят приложению на обработку, сохраняются в БД, а затем появляется на страничке. Динамики не нужно, пусть запись появится только после перезагрузки страницы.
- Список созданных ранее записей. Конечно, они будут подтягиваться из БД и отображаться на форме при каждом новом запуске приложения. Данные не будут теряться после завершения работы приложения.
Все! Это правда все. Это очень просто, но если вы только-только начинаете, то вам придется ознакомиться со множеством моментов.
Вроде кто-то когда-то говорил:
Java – это инструмент для преобразования больших xml-файлов в stack-трейсы.
В этом есть доля правды, поэтому я рекомендую сразу же избавиться от всей этой xml-конфигурации, используя Spring Boot – он оперирует аннотациями.
Я уже говорил, что это не курс молодого бойца, а лишь мои рассуждения. Так что ниже я дам лишь рекомендации о порядке выполнения этого проекта:
- Начать рекомендую с установки Java на компьютер, как ни странно. JDK8 можно скачать здесь;
- Поставить Maven;
- Создать первый Spring-boot проект. Здесь описано лишь как создать “Hello, World!”;
- Поставить БД (например, postgre, h2 или mysql);
- Создать классы моделей. Точнее, один простейший класс;
- Реализовать CRUD (create-read-update-delete, операции с данными);
- Создать простейшую jsp-форму;
- Связать форму с контроллером.
По поводу пунктов 5-8 можно почитать следующее:
- Здесь есть все, но вместо добавления простейших сообщений автор предлагает добавлять сотрудников.
- Эта статья больше ориентирована на создание API-приложения, так что все понимать в ней ни к чему. Но прочитать ее тоже будет весьма недурно.
И это все! Я верю, если падаван освоит указанные моменты и сумеет не просто склепать простейшую блог-платформу, но и поймет, для чего он делал каждое из действий, то этого будет достаточно для первого трудоустройства на позицию junior java-developer. Различные рассуждения и дополнения категорически приветствуются.
Автор: tmn4jq