- Junior java developer roadmap
- Базы данных – SQL & NoSQL
- GIT
- Java Collections
- Паттерны проектирования
- Функциональное программирование
- Операционные системы
- Системы сборки
- REST И HTTP
- SPRING & SPRING BOOT
- Тестирование
- Микросервисы
- Очередь сообщений (Message queue)
- DevOps
- Как же изучить все эти инструменты?
- Мне сложно самостоятельно научиться программировать на Java. Пробовал и бросал. Что делать?
- Ок, звучит интересно. А какие гарантии?
Junior java developer roadmap
Данный раздел подразумевает глубокое понимание структур данных и алгоритмов, таких как ArrayList, LinkedList, и в чем их отличие от Stack, Queue, Map, а также древовидных структур данных. Знание того, как они работают и устроены, за какое время выполняют свою работу, помогут разработчику при решении разных задач. Конечно же, необходимо еще знать про алгоритмы сортировки.
Базы данных – SQL & NoSQL
Хранение данных – одна из главных задач в проектировании систем. Есть реляционные базы и нереляционные базы данных. Они могут быть использованы для решения разных задач. PostgreSQL – одна из самых популярных реляционных баз данных, которая требуется практически во всех вакансиях. MongoDB – пример востребованной нереляционной базы данных. Чтобы правильно проектировать базы данных, нужно знать все виды отношений: One-to-One, One-to-Many, Many-to-Many, а также уметь писать запросы разных сложностей. Например:
- SELECT, CTE
- INNER JOIN, LEFT JOIN, RIGHT JOIN
- WHERE, IN, SIMILAR
- GROUP BY, ORDER BY
GIT
GIT – система, без которой невозможно представить разработку. Чем раньше начинающий разработчик познакомится с системой, тем лучше. Для начала достаточно изучить поверхностно и ознакомиться с базовыми командами:
- git init, git status
- git add, git commit
- git branch
- git remote, git push, git pull
Java Collections
После изучения Java Syntax и Java Core можно приступать к Java Collections. Java Collections – пакет, который содержит реализацию всех структур данных и алгоритмов на Java. Большую часть времени в разработке мы применяем структуры именно из этого класса, поэтому очень важно знать Java Collections. Вдобавок, один из самых частых вопросов на собеседованиях: «Что вы знаете о Java Collections?» 🙂
Паттерны проектирования
Паттерны проектирования – один из теоретических модулей в разработке, где описываются общие решения тех или иных проблем, которые стали стандартными решениями в индустрии и реализации многих фреймворков, основаны именно на паттернах проектирования. Полезно понимать и применять их эффективно на практике. Head First Design Patterns – одна из самых понятных и простых книг для начинающих разработчиков
Функциональное программирование
Одна из парадигм программирования, которая получила большой буст в последние годы и которая также отразилась на Java. Начиная с Java 8, появились функциональные интерфейсы, лямбда выражения, функции высшего порядка и понятие «ленивого вычисления». Знание функционального программирования – обязанность каждого разработчика
Операционные системы
Знание операционных систем – одно из важнейших навыков, значение которого невозможно переоценить. Все свое время мы взаимодействуем с операционной системой, поэтому полезно уметь писать скрипты и взаимодействовать с командной строкой.
Системы сборки
Gradle и Maven – две самые популярные и востребованные системы сборки. Системы сборки автоматизируют компиляцию, скачивание зависимостей сторонних библиотек, сборку и много другое. Без систем сборки почти невозможно представить разработку.
Gradle и Maven предоставляют почти идентичный функционал, их отличие в том, что:
- Maven – использует xml для описания проекта
- Gradle – использует Groovy для описания проекта
REST И HTTP
REST (от англ. Representational State Transfer — «передача репрезентативного состояния» или «передача „самоописываемого“ состояния») — архитектурный стиль взаимодействия компонентов распределенного приложения в сети. Другими словами, REST — это список правил того, как программисту организовать написание кода серверного приложения, чтобы все системы легко обменивались данными и приложение можно было масштабировать.
REST представляет собой согласованный набор ограничений, учитываемых при проектировании распределенной гипермедиа-системы. В определенных случаях (интернет-магазины, поисковые системы и прочие системы, основанные на данных) это приводит к повышению производительности и упрощению архитектуры.
SPRING & SPRING BOOT
Spring и Spring Boot – самые популярные фреймворки для создания веб-приложений. Spring Boot обладает большим функционалом, но его наиболее значимыми особенностями являются: управление зависимостями, автоматическая конфигурация и встроенные контейнеры сервлетов. Для создания веб-приложения нужно всего лишь выбрать необходимые зависимости и всего лишь нужно запустить программу. И веб-приложение готово. Всю магию под капотом делает Spring Boot, который волшебно управляет всеми зависимостями, например, взаимодействует с базами данных, настраивает сервер Tomcat или Netty по умолчанию. Также предоставляется зависимость Spring Security для обеспечения системы защиты приложения.
Тестирование
Для тестирования на Java чаще используются:
- JUnit – используется для написания юнит-тестов
- Mockito – используется для написания интеграционных тестов
- Selenium – используется для тестирования Web-приложений, больше нацелен для автоматизации фронтенда
Микросервисы
С развитием облачных технологий и технологий контейнеризации также изменилась архитектура создания и разработки информационных систем. Если раньше весь функционал разрабатывался в одном проекте или сервисе, который называется монолит, то сейчас архитектура меняется в сторону микросервисов, где каждый функционал развивается как отдельный сервис или юнит. Для понимания, как разрабатываются микросервисные приложения, необходимо понимать, как работают load balancer и service discovery. Spring Cloud и Kubernetes предоставляют встроенные механизмы load balancer и service discovery, благодаря которым можно эффективно разрабатывать микросервисные приложения на Java.
Очередь сообщений (Message queue)
С развитием микросервисной архитектуры систем свое развитие получила и другая архитектура – Event Driven Architecture. Event Driven Architecture использует события для запуска и обмена данными между несвязанными сервисами и часто используется в современных приложениях, созданных с помощью микросервисов. Событие – это изменение состояния или обновление, например, добавление товара в корзину в онлайн магазине. Для разработки EDA – систем на Java используются брокеры сообщений. Наиболее популярные брокеры – Kafka и RabbitMq.
DevOps
Docker и Kubernetes используются для контейнеризации приложений и оркестрации контейнеров. Навыки Kubernetes и Docker позволяет разработчику запускать приложение, распределять нагрузку между сервисами, проверять логи и многое другое.
Конечно, тут не все инструменты, которые должен знать и уметь применять на практике разработчик, но это тот самый минимум, который необходим.
Как же изучить все эти инструменты?
Мы посоветовались со школой Kata Academy, и они рассказали, что лучший вариант — это самостоятельное обучение, но тут есть несколько подводных камней. Чтобы в кратчайшие сроки освоить базовые навыки и получить свой первый оффер:
- Важно четко следовать роадмапу , не нужно копать слишком глубоко на старте. К сожалению, не все понимают, когда уже достаточно разбирать одну тему и пора переходить к следующей.
- Заниматься по 3-4 часа в день. Только ежедневные занятия помогут вам погрузиться в процесс целиком и поймать ту самую волну. И даже в таком темпе вам придется учиться минимум 7-12 месяцев. Но при этом нужно быть аккуратным: если заниматься больше, то можно выгореть, и, в результате, бросить обучение через 1-2 месяца после начала.
- Больше практики. Даже если вы отлично понимаете прочитанные статьи и книги или просмотренные видео и думаете, что полностью усвоили материал, все равно необходимо попробовать применить полученные знания на практике. Например, решить несколько задач с применением того, что вы только что изучили, и всего того, что вы прошли до этого. На этом этапе очень сильно помогает наставник или ментор, который не только поможет в случае тупика, но и проверит ваше решение на качество, ведь в программировании недостаточно просто решить задачу — решение должно быть «элегантным».
Мне сложно самостоятельно научиться программировать на Java. Пробовал и бросал. Что делать?
Эти и другие трудности можно преодолеть благодаря наставнику или курсу. Но тут нужно быть очень аккуратным в выборе. Трудно оценить опытность и профессионализм наставника, когда ваш путь в IT только начинается. А найти качественный курс вообще очень сложно. Никогда не забывайте про известную парадигму: «Быстро, качественно, дешево». Если два из этих пунктов будут выполняться, то третий никогда не получится достичь. А какие 2 пункта выбрать при поиске курса – тут уже вам нужно решить для себя самим. Многие из школ активно пушат вас обещаниями, при этом только единицы реально могут гарантировать вам трудоустройство и зарплату.
Одна из таких школ Kata Academy. Они прямо говорят — у нас тебе придется пахать минимум 7 месяцев по 30 часов в неделю , но взамен Kata дает очень качественно построенную программу , которая обкатана не на одной тысяче студентов. А главная фишка Kata – оплата ТОЛЬКО после трудоустройства .
Ок, звучит интересно. А какие гарантии?
В договоре без всяких звездочек прописано, что если их выпускник не найдет работу по специальности с з/п не ниже 100 тысяч рублей, то студент ничего не платит за обучение. Таким образом, Kata наравне со студентом берет на себя риски и заинтересована не только в том, чтобы довести обучение до конца, но и успешно трудоустроить выпускника, ведь доход школы напрямую зависит от зарплаты студента, так как он платит Kata определенный процент от своего заработка.
Мы не будем рассказывать про программу, ведь по факту она была описана выше в роадмапе, но сам учебный процесс основан на трех подводных камнях: четкое следование плану, практика и наставник.
Уже 6 лет Kata развивает свой курс по Java, из которых 4.5 года работает по формату оплата после трудоустройства. За это время школа выпустила более 1000 человек, и все они смогли получить свой оффер.
При этом и мы, и Kata считаем, что никакие курсы и наставники не сделают из вас разработчика, если вы сами этого не захотите. Курс — это инструмент, который поможет быстрее выполнить поставленную задачу, но без вас он работать не будет. Удачи в обучении, и помните, что все возможно — главное, не опускать руки.