9 советов, как выделиться среди Java-разработчиков

На протяжение десятилетий Java считается одним из самых популярных языков программирования. Все больше и больше людей желают освоить этот язык, из-за чего образуется сильная конкуренция. Теперь уже недостаточно быть просто хорошим Java-разработчиком. Чтобы оставаться на высоте, нужно углубленно знать и понимать множество аспектов. Если вы из тех, кто вечно задается вопросом: «Что мне изучить, чтобы отличиться от других разработчиков?», эта статья может дать вам ответ.

1. Изучите принципы ООП

Java  —  это объектно-ориентированный язык программирования, поэтому разработчикам не стоит недооценивать принципы ООП. Научитесь применять их и тщательно изучите объектное моделирование, принципы SOLID, паттерны проектирования и другие концепции. Все это нужно держать в голове при написании программы, особенно в современном объектно-ориентированном языке.

2. Прочтите книги о принципах ООП

Наличие такого багажа знаний поможет задействовать принципы ООП при работе над проектом. Много полезного можно узнать у классиков. Вот некоторые книги, которые должен прочитать каждый разработчик.

· Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес «Приемы объектно-ориентированного программирования. Паттерны проектирования».

· Роберт Мартин (Дядюшка Боб) «Чистый код».

· Роберт Мартин (Дядюшка Боб) «Чистая архитектура».

· Роберт Мартин и Кент Бек «Рефакторинг» (второе издание).

· Кент Бек «Экстремальное программирование».

· Кент Бек «Разработка через тестирование».

3. Изучите фреймворк Spring

Фреймворк Spring  —  это очень важное звено в современном Java-программировании. Его компоненты, такие как Spring MVC и Spring Boot, широко применяются многими компаниями для создания микросервисов и веб-приложений. Разработчики, которые знают все преимущества Spring, чаще показывают хороший результат в своей сфере, превращая локальный Java-метод в операцию управления или удаленный вызов процедур.
 
Если вы никогда не работали со Spring, то начните с изучения главных пунктов, например внедрение зависимостей (Dependency Injection  —  DI), инверсия управления (Inversion of control  —  IoC) и основы Spring MVC.

Следующий большой шаг  —  это Spring Boot и его полезные фичи, которые упрощают создание и запуск веб-приложений. Выучите ключевые аннотации и их работу, а также разберите аннотации Spring в целом (особенно если вы работали с языками на основе XML).

Этими аннотациями вы будете пользоваться постоянно: @Repository, @Service, @Controller или @RequestMapping. Задействовав их, попробуйте создать небольшое приложение. Разумеется, для этого вам нужно ясно представлять, что такое паттерны проектирования и как взаимодействовать с компонентами, которые создают эти аннотации.

Вы удивитесь, насколько легко запустить новое приложение с помощью Spring Boot и управлять им по сравнению с другими вариантами развертывания на Java. Этот фреймворк существенно упростит жизнь: он предоставит вам готовый к выполнению файл .jar, который можно запустить либо через командную строку, либо через контейнер Docker. Его также можно разместить как обычный сервис Linux через Nginx, если вы не используете Docker при разработке.

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

Еще один крутой компонент  —  это Spring Data, но его используют только в определенных проектах. Он обеспечивает удобную и лаконичную абстракцию данных. Spring Data не похож ни на ORM, ни на JPA: он предоставляет универсальную абстракцию, позволяющую уменьшить объем кода, необходимого для управления данными, и сделать его понятным и читабельным.

И последний компонент, который стоит отметить (вся экосистема Spring огромная),  —  Spring AOP (аспектно-ориентированное программирование). С его помощью можно внедрять разные аннотации, чтобы контролировать несколько аспектов поведения кода, например логирование, исключения и транзакции. Понимание логики его работы будет хорошим преимуществом на любом собеседовании.

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

4. Изучите главные API и библиотеки

API и библиотеки идут бок о бок с фреймворками Java. Они занимают неотъемлемую часть в экосистеме Java и имеют второе по величине комьюнити в разделе Q&A на StackOverflow. Поэтому для успешного трудоустройства нужно уделить им особое внимание.

API и библиотеки  —  это очень обширная тема, о них можно писать сотни статей. Но говоря в общем, профессиональному Java-разработчику нужно изучить базовые API, основные и сторонние библиотеки, а также Java Development Kit (JDK). Однако нет необходимости изучать все возможные API и знать каждый элемент в библиотеке, чтобы стать специалистом. Достаточно четко понимать, что такое Apache Commons, Guava, Maven и другие популярные API и библиотеки.

5. Освойте Java 11

Недавно сообщество Java-разработчиков застало выход в свет последней версии Java 15. Однако Java-специалисты, как правило, не торопятся с переходом на новые релизы. Принцип «если не ломается, фиксить не надо» особенно широко применяется в корпоративных проектах.

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

Тем не менее новые версии медленно, но уверено внедряются и в эти сферы. После каждого нового релиза все больше и больше компаний требуют опыт работы с новыми фичами. В свое время Java 8 была большим прорывом, и потребовалось несколько лет, чтобы она стала отраслевым стандартом. Поэтому двигаться дальше будет сложнее, если не освоить Stream API, дефолтные методы интерфейса, Lambda-выражения, Java Time API и другие главные фичи Java 8.

Последующие версии Java продолжили активно внедрять новые функции. Следующей LTS-версией стала Java 11. В последнее время ее часто можно встретить в списке требований для соискателей. Многие компании будут пользоваться ей, пока не выйдет другая версия с долгосрочной поддержкой. Предположительно, это будет Java 17, выход которой намечен на сентябрь 2021 года. Прежде чем начать поиск работы, стоит изучить все фичи Java 11.

Поздние версии Java, включая Java 15, тоже начинают постепенно распространяться. Например, уже доступен выпуск Amazon Corretto 15.

В любом случае для хорошего Java-разработчика важно внимательно следить за каждым новым релизом и быстро осваивать все новые функции. Ни одну из них нельзя пропустить.

6. Уделите особое внимание JVM

Java не может существовать без JVM (Java Virtual Machine  —  виртуальная машина Java), которая является ядром среды исполнения. Благодаря ему можно запустить Java-приложения на любых платформах. Поэтому, если вы хотите попасть в команду к хорошим Java-разработчикам, обязательно изучите принципы его работы. Кроме того, знание виртуальной машины упростит решение проблем при разработке. Также освойте системные потоки JVM и то, как работает Java в среде выполнения.

7. Имейте в арсенале несколько методологий

Чтобы выделиться среди других программистов Java, необходимо освоить разные методологии. Прежде всего ознакомьтесь с Agile и SCRUM, а также Waterfall. Большинство разработчиков выбирают методологию в зависимости от предпочтений клиента, поэтому знать сразу несколько будет существенным преимуществом.

Также вы можете изучить техники экстремального программирования (книга Кента Бека приведена выше), чтобы обогатить свой опыт и работать эффективнее.

8. Освойте автоматизированное тестирование

Умение проводить автоматизированное тестирование  —  это то, что отличает настоящего Java-разработчика от того, кто пытается им казаться. Говоря вкратце, любое неручное тестирование считается автоматизированным: модульное, интеграционное и другие. Также необходимо научиться доставлять проекты так, чтобы тесты были частью CI/CD-конвейера, а код не отправлялся в продакшн, если важные части не охвачены тестами.

Вот как может выглядеть разработка и дальнейшее развертывание с тестированием.

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

Если внимательно присмотреться к этой практике, можно заметить, что она заставляет сохранять модульность кода. Хороший модульный тест позволяет запустить код компонента изолированно. Вы не сможете применить базу данных, внешние API или воспользоваться другими классами. Единственное, что есть в момент тестирования  —  это ваш компонент.

Наполните компонент демо-данными, в которых учтены все крайние случаи, например пустые или нулевые значения. Далее проверьте, что вывод в точности соответствует ожиданиям. Теперь можно с уверенностью сказать, что компонент не станет источником сбоев, а на его логику можно положиться в других местах. Здесь вам помогут JUnit 5 и Mockito. Освойте их и пользуйтесь ежедневно.

Еще одним преимуществом будет использовать TDD. С ним тесты пишутся перед созданием кода компонента.

2. После разработки всех компонентов нужно провести интеграционное тестирование.

В большинстве случаев для тестирования используют само приложение с простым скриптом, запускают его с какими-либо вводными данными и проверяют вывод (зачастую тест проводится в контейнере Docker). Иногда тестируются отдельные компоненты или группы. В таких случаях применяются внешние ресурсы, например база данных или файловое хранилище.

Не забывайте следить за крайними вводными случаями и проверяйте, как их обрабатывает приложение.

3. В конце нужно внедрить тесты в конвейер CI/CD.

Современный стандартный способ выглядит так: как только вы отправляете код в репозиторий Git с помощью коммита, pull-запроса или слияния с определенной веткой, запускается хук. Таким образом выполняется сценарий развертывания и используется контейнер Docker, который в зависимости от развертывания пытается создать приложение или Docker-образ с приложением.

Предположим, что приложение успешно создано (если нет, вы получите автоматическую защиту от сломанных приложений) и выполняет все тесты, как модульные, так и интеграционные, внутри контейнера. Если хотя бы один тест провалится, то весь процесс даст сбой и Git автоматически отклонит pull-запрос или же выдаст ошибку при сборке.

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

9. Отточите мастерство кодинга

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

Среди огромного выбора платформ и курсов стоит рассмотреть следующие.

CodeGym

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

Codewars

В Codewars новички смогут освоить более 20 языков программирования. Студенты оттачивают свои навыки, проходя с другими разработчиками испытания, называемые ката. За выполнение задания даются очки чести и ранг, далее задачи усложняются. В Codewars вы также можете создать собственные ката и попросить студентов решить их.

Cyber-Dojo

В отличии от многих других курсов программирования, Cyber-Dojo делает акцент на улучшение навыков, а не прохождении игры. В Cyber-Dojo вы можете изучать Java индивидуально или с группой, а также поучаствовать в кодинг-спаррингах, если у вас уже есть опыт программирования.

CodeChef

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

CodinGame

CodinGame  —  идеальная платформа для разработчиков любого уровня. Этот курс не даст вам соскучиться при изучении Java: он предлагает кодинг-викторины, одиночные и групповые задания, 5-минутные кодинг-битвы в Clash of Code, а также соревнования по созданию бота для опытных разработчиков.

Заключение

Следуя этим советам, вы сможете выделиться среди других и стать частью крутой команды Java-разработчиков.

Читайте также:

Читайте нас в Telegram, VK и Яндекс.Дзен


Перевод статьи John Selawsky: 10 Tips to Help You Stand Out as a Java Developer

Предыдущая статья9 испытаний, или будни современного инженера данных
Следующая статьяСоздаем приложение React с нуля в 2021 году