Минимальный набор знаний молодого разработчика
Мой предыдущий пост возымел определенный эффект — несколько человек посчитали его очень мотивирующим и попросили меня дать некоторые советы и рекомендации, с чего же начать карьеру разработчика. Очевидно, вопрос слишком широкий и не имеет ответа как такового, поэтому я поставлю его более узко: что должен знать молодой 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. Различные рассуждения и дополнения категорически приветствуются.
Комментарии (7)
29 сентября 2016 в 00:40
–5↑
↓
> Spring. Это фреймворк, который сильно упрощает жизнь. Фреймворк этот слишком большой, поэтому для начала достаточно просто понимать, зачем он нужен.Все задачи spring замечательно решаются на уровне самого JVM. Внешние тулзы не нужны.
Так что имхо, надо выбирать: либо ты знаешь и умеешь ООП, и тогда спринг не нужен. Либо ты из ООП только страшные слова выучил, а сути не понимаешь, и тогда без костылей тебе никуда.
29 сентября 2016 в 03:57
+1↑
↓
>Все задачи spring замечательно решаются на уровне самого JVM. Внешние тулзы не нужныКонечно решаются. И даже хелло-ворлда из статьи на голом JVM всё ещё можно написать за время не очень сильно бОльшее, чем на спринге. Только это будет никому не нужный хелло-ворлд. Поскольку усилия по его расширению будут расти экспоненциально. Мало для кого это приемлимо.
29 сентября 2016 в 04:40
0↑
↓
Экспоненциально они будут расти, только если вы не умеете в ООП программирование и декомпозицию. Вы ещё расскажите, что без AspectJ жизни нет.29 сентября 2016 в 06:39 (комментарий был изменён)
0↑
↓
К чему слова? Напишите, пожалуйста, ваш вариант хелло-ворлда из статьи. Потом дополните его, ну, скажем, аутентификацией. Можно наколенной. А потом oauth…
Но сначала, хотя бы, этот хелло-ворд. Что-то мне подсказывает…29 сентября 2016 в 06:53
0↑
↓
Посмотрел на hellow world. За аннотациями скрыты реальные библиотеки. Мне пока недосуг разбираться в спринге, какие именно библиотеки вызывает чёрная магия. Но те же самые библиотеки можно вызвать без аннотаций. Просто композицией.29 сентября 2016 в 08:12
0↑
↓
Какой ещё спринг? Вы на голой JVM обещали.
А в аннотациях нет магии, это просто сахар. Можно и явно всё дёргать, но зачем?
29 сентября 2016 в 04:39
0↑
↓
На мой взгляд не стоит начинат освоение Spring со spring-boot. Как он работает не сразу разберет даже хорошо знакомый со Spring разрабтчик. Т.е работать с ним, как черным ящиком какое-то время можно, но потом все равно придется spring-context/mvc/orm осваивать.