Java. План действий - 1

Содержание:

  1. Раздел Zero — Java Core
  2. Инструменты
  3. JDK API
  4. Новые возможности Java 8
  5. SQL, базы данных, JDBC
  6. Фреймворки
  7. Библиотеки и фреймворки для тестирования
  8. Сервисные библиотеки
  9. API-клиенты
  10. Паттерны проектирования
  11. Дополнительные знания
Что должен знать потенциальный Java Junior, чтобы получить первую работу или хотя бы претендовать на должность Trainee в хорошей компании? Какие инструменты помогут Java-программисту выйти на новый уровень? Какие технологии изучить, а какие — оставить на потом? Стандартного ответа на эти вопросы нет, как не существует и единого плана действий, который подошёл бы абсолютно всем. Одни компании стремятся к развитию, постоянно внедряют новые технологии и тестируют возможности новых версий языка, другие упорно держатся за старые. Есть и “серединные” варианты, и, пожалуй, таких больше всего. Тем не менее, мы составили план действий или Roadmap для начинающего Java-разработчика. В стремлении сделать его максимально простым, мы указали только те технологии и темы, которые необходимы подавляющему большинству “джавистов”. Следует помнить, что не всё нужно изучать досконально (кое-что из приведённого удастся освоить только в процессе работы в команде), но иметь общее представление о них — не помешает.

0. Раздел Zero — Java Core

Нулевой раздел мы вставили в статью на всякий случай — вдруг сюда заглянет человек, который только планирует изучать Java и не знает, с чего начать. Java Core — то, что даже новичок должен знать очень хорошо. То есть знать базовые вещи, ориентироваться, что предлагает язык для решения той или иной задачи и в простых случаях уметь применить эти знания. Попрактиковаться в Java Core можно на JavaRush, и если вы ещё этого не сделали — приглашаем пройти курс! Ну а всем остальным напомним главные вехи Java Core:
  • Основные конструкции, операторы и типы данных Java
  • ООП и его реализация в Java
  • Исключения
  • Java Collections
  • Дженерики
  • Многопоточность

1. Инструменты

IDE или интегрированная среда разработки

Главный инструмент современного разработчика — это IDE. Сегодня на рынке их очень много, однако в профессиональной Java-разработке обычно фигурируют только два имени. Это построенная на плагинах бесплатная Eclipse, которая много лет подряд удерживала пальму первенства, и IntelliJ IDEA, в последние годы активно вытесняющая Eclipse, и это невзирая на то, что подписка на нужную профессионалам Ultimate-версию стоит денег. Напомним, в курсе JavaRush мы пользуемся бесплатной редакцией Community IntelliJ IDEA, у которой есть определённые функциональные ограничения по сравнению с Ultimate. Фраза “я знаю IDE” означает, что вы ориентируетесь в основных возможностях среды разработки, умеете компилировать, запускать, отлаживать и тестировать файлы, рефакторить код. Неплохим подспорьем в ускорении работы будет освоение горячих клавиш. Не поленитесь, уделите несколько часов разбору возможностей IDE, о которых вы не знали, и начинайте использовать их на практике. И не пренебрегайте отладкой, это очень полезное умение. Все эти действия помогут существенно улучшить скорость и качество вашей работы.

Инструменты для автоматической сборки

Сегодня в Java-проектах чаще всего используют такие инструменты как Maven и Gradle. Не обязательно изучать их досконально, но будет полезно разобраться, чем они отличаются друг от друга, на чём основаны, что такое task’и (в Gradle) и фазы с целями в Maven. Будет достаточно почитать о системах и развернуть на них пару-тройку небольших проектов. Сделать это довольно просто, а с подробностями разберётесь уже в условиях реальной работы.

Системы контроля версий и сервисы онлайн-хостинга

Система контроля версий — это то, что помогает программистам работать в команде над общим проектом, не “поломав” его, синхронизировать разрозненные куски кода, сделанные разными людьми, откатывать неудачные обновления и добавлять новые. Наиболее распространены две системы контроля версий. Одна из них — распределённая и называется Git, вторая — централизованная, по имени SVN (она же — Subversion). На сегодняшний день стандартом де-факто является Git. Работать с этой системой удобнее и легче, она поддерживается всеми IDE (впрочем, как и SVN). Работу с Git можно опробовать быстро и просто, благо, в сети на эту тему — масса информации. Например, доступный на русском интерактивный учебник GitHowTo (проходится очень быстро). Начинающему разработчику очень важно освоить сервисы онлайн-хостинга для систем контроля версий. Чаще всего они базируются на Git и их называют Git-платформами (хотя некоторые из них умеют работать с разными системами контроля версий). Самая популярная из них — GitHub. Также довольно распространены BitBucket и GitLab. Эти системы помогают хранить и извлекать код, а ещё — делать то, что умеет Git, только не через командную строку, а через интерфейс. Также GitHub позволяет проверять код, предлагать решения проблем непосредственно на сайте. Там же можно найти какой-нибудь чужой открытый проект и попробовать предложить свои решения по его улучшению. По сути, GitHub — своеобразная социальная сеть для разработчиков. Так что если вы ещё этого не сделали, обязательно создайте аккаунт на GitHub и размещайте там свои проекты. Также почитайте о GitLab и BitBucket, а если будет время — можно и опробовать, у них есть бесплатные версии. К слову, все эти платформы полностью интегрированы с современными IDE. Java. План действий - 2

2. JDK API

В этом разделе выделены те JDK API, которые современному Java-разработчику нужно знать достаточно уверенно. Программисту не помешает время от времени заглядывать в исходный код этих библиотек, ориентироваться в них, понимать, когда их нужно применять и почему. Побочный эффект: если вы хорошо ориентируетесь в этих API, скорее всего вам будет гораздо проще успешно пройти собеседование.

Java Collections Framework

Java Collection Framework — один из важнейших API языка Java, его должен знать каждый разработчик. Он представляет собой иерархию интерфейсов и реализаций стандартных структур данных в Java, таких как список, связанный список, множество, стек, очередь, хэш-таблица и многих других. Разработчик должен хорошо разбираться в классах ArrayList, HashMap, HashSet, LinkedHashSet, TreeSet и прочих, знать об их свойствах. В частности, нужно понимать, какие затраты по времени и памяти у той или иной коллекции идут на стандартные операции (индекс, поиск, вставка, удаление) и исходя из этого правильно применять их в своих проектах. Коллекции в Java реализованы очень хорошо, но если есть необходимость разработчик может предложить собственную реализацию. Программист, который отлично разбирается в коллекциях, может расширить или переопределить логику в уже написанных классах или же реализовать всё с нуля.

Java Concurrency API

Java изначально разработана с поддержкой параллельного программирования, а начиная с версии 5.0, язык включает высокоуровневые API для параллельных потоков. Так что грамотный Java-разработчик просто обязан хорошо разбираться в многопоточности и иметь представление об основных API из пакетов java.util.concurrent.*. Как минимум, нужно знать и чётко осознавать, что такое Thread, Runnable, блокировка объектов и синхронизация. Обязательно разберитесь в концепциях deadlock, livelock, состоянии гонки и что со всем этим делать. Чтобы чувствовать себя уверенно, изучите синхронизаторы из java.util.concurrent.*, например, Semaphore, CyclicBarrier, CountDownLatch, Phaser, Exchanger<V>, CompleteableFuture и так далее. А ещё — интерфейсы Callable и Future.

Java I/O API

Начинающие разработчики частенько игнорируют углублённое изучение Java I/O и Java Non-blocking I/O. А зря: эти Java API облегчают работу с потоками и регулярно используются в реальных приложениях. Особенно такие классы, как File, InputStream, OutputStream, Reader и Writer из пакета java.io, который является ядром Java IO API. Java Non-blocking I/O (java.nio) представляет собой коллекцию прикладных программных интерфейсов, предназначенных для реализации высокопроизводительных операций ввода-вывода. К ним относятся, в частности, ByteBuffer, FileChannel и Selector и другие. Потрудитесь разобраться с этими API, не пожалеете.

Устройство класса Object

Понимаешь суперкласс Object — в каком-то смысле становишься “носителем языка Java”, гораздо лучше осведомлённым о структуре ООП и многих процессах. Класс java.lang.Object, лежит на самой вершине иерархии классов. Помимо лучшего понимания всего происходящего, знание методов класса существенно облегчит прохождение собеседований — интервьюеры просто обожают проверять кандидатов на прочность с помощью класса Object и его объектов. Java. План действий - 3

3. Новые возможности Java 8

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

4. SQL, базы данных, JDBC

Мало какой Java-разработчик не сталкивается в своей работе с SQL-запросами и базами данных. Поэтому важно понимать, что такое SQL и реляционные базы данных, как они работают, уметь писать простые запросы на join двух таблиц. Для тренировки можно попробовать поработать с одной из СУБД, например, PostgreSQL или MySQL. Также было бы неплохо получить начальные знания о нереляционных базах данных, о подходах noSQL и поверхностно ознакомиться с документоориентированной СУБД MongoDB. Для работы с базами данных в чистой Java можно использовать стандарт JDBC вместе с одноименным API. Он реализован в виде пакета java.sql, который входит в JDK. В чистом виде сегодня им пользуются редко, однако его часто можно встретить в старых приложениях для поддержки, да и в основе более современных и общепринятых средств зачастую лежит именно этот стандарт.

5. Фреймворки

Среди требований к Junior Java Developer сегодня всё чаще можно встретить “знание Spring, Hibernate, Spring Boot”. Изучить эти технологии самостоятельно — задача очень непростая, но, тем не менее, это возможно, особенно на поверхностном уровне. Более глубокое понимание придёт во время работы. Итак.

Spring Framework

Практически каждое приложение, создаваемое на Java в наши дни использует Spring Framework. Этот мощный фреймворк предоставляет определённую систему координат, костяк, с помощью которого строится приложение. Spring-приложение гораздо проще тестировать и поддерживать. А всё благодаря внедрению зависимостей.

Hibernate

Ещё один важнейший для Java-разработчиков фреймворк — Hibernate. Он реализует спецификацию JPA (Java Persistence API), с помощью которой решаются задачи объектно-реляционного отображения (ORM). Большинство Java-приложений взаимодействуют с базами данных, и, если речь идёт о реляционных базах данных, работать с ними без Hibernate неудобно. Этот фреймворк предоставляет разработчикам ряд важных функций, в частности, кэширование и транзакции из коробки, что в свою очередь позволяет сосредоточить усилия на разработке логики приложения и освобождает программиста от множества низкоуровневых задач при работе с реляционными базами данных. Это существенно повышает производительность разработчиков.

Spring MVC

Этот фреймворк обеспечивает разработку приложения согласно паттерну Model — View — Controller, применяя слабо связанные готовые компоненты. Изучите этот паттерн (о паттернах проектирования речь идёт чуть ниже) и логику работы Spring MVC. На практике его используют довольно часто.

Spring Boot

При надлежащем умении Spring упрощает создание приложения Java. В свою очередь Spring Boot упрощает создание Java-приложения на основе Spring. Spring Boot позволяет вам легко создавать полноценные Spring-приложения уровня Enterprise, которые можно запустить с минимальными усилиями: автоконфигурация устраняет большинство проблем, связанных с настройкой Spring-приложений.

6. Библиотеки и фреймворки для тестирования

Некоторые будущие разработчики уверены, что тестирование кода — забота вовсе не их, а специальных людей, которые так и называются — тестировщики. На практике дело обстоит не совсем так. Тестирование, особенно модульное (его чаще всего называют unit-тестированием), — очень важный навык для каждого программиста. Мало того, только что приступившим к исполнению обязанностей новичкам довольно часто поручают покрыть unit-тестами чей-то код. Так что настоятельно рекомендуем изучить библиотеку JUnit и взрастить привычку писать unit-тесты для своего кода. Также обратите внимание на фреймворк Mockito, который можно использовать совместно с JUnit для создания фиктивных классов-зависимостей.

7. Сервисные библиотеки

В Java есть огромное количество сервисных библиотек, которые помогают решить практически любые задачи, стоящие перед разработчиком. Изучить их все невозможно, да и смысла особого в этом нет. А вот ориентироваться в них — отличная идея. Здесь выделим лишь несколько из тех, которые очень часто используются на практике.

Библиотеки для логирования

В первую очередь можно упомянуть log4j и Slf4j. Эти библиотеки разработаны для сокрытия реализации рутинных операций по логированию событий, которые происходят во время работы Java-приложений.

Библиотеки для JSON

JSON, формат передачи информации от клиента к серверу, сегодня используется чаще всего. Есть несколько хороших библиотек, которые работают с JSON, самые популярные — Jackson и google-gson.

Google Guava

Guava — проект с основными библиотеками для Java, разработанными Google. Здесь можно найти новые типы коллекций (multimap, multiset и другие), неизменяемые коллекции, графы, функциональные, утилиты для параллелизма, ввода/вывода, хэширования, обработки строк и многое другое.

Apache Commons

Commons — огромный проект, содержащий множество полезных Java-утилит самого разного предназначения. Так, библиотеки Apache Commons лежат в основе Tomcat, Hibernate и ряда других крупных проектов. Библиотек в Apache Commons очень много. Упомянём Commons IO, которая упрощает выполнения операций ввода-вывода, Commons CSV для работы с csv-файлами, Commons Math для работы со сложными математическими и статистическими операциями и вычислениями, Commons CLI для анализа аргументов командной строки.

8. API-клиенты

REST — стиль именования эндпоинтов для доступа к ресурсам по сети в человекочитаемом формате. Современному Java-разработчику лучше ориентироваться в идеологии REST, а также знать Spring RestTemplate — очень полезную библиотеку для создания REST-клиента.

9. Паттерны проектирования

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

10. Дополнительные знания

Алгоритмы и структуры данных

“Алгоритмы и структуры данных” — это название целого курса, читаемого в технических вузах. В нём раскрываются теоретические основы построения разных структур данных. А на практических занятиях с ними учатся работать — класть и извлекать данные, искать и сортировать их. Собственно, под “Алгоритмами” в таком словосочетании понимают именно сортировку и поиск. За долгие годы специалисты в области Computer Science разработали множество алгоритмов. Некоторые из них носят учебный характер, так как при относительной простоте реализации они не слишком эффективны в работе. Например, работают медленно, что может быть ощутимо на больших пулах данных. Или же потребляют много памяти. Другие алгоритмы оказались очень эффективны. Настолько, что их внесли в официальные библиотеки большинства языков программирования. Соответственно, сегодня не обязательно разрабатывать такие алгоритмы самостоятельно. Достаточно знать, где они лежат. И тем не менее большинство опытных разработчиков рекомендует новичкам проходить “школу алгоритмов” — реализовывать их самостоятельно во время учёбы. Это развивает программистское мышление. А ещё — помогает проходить собеседования, там очень любят задавать задачки на сортировку и поиск.

Сервлеты

Сервлет — это способ обработки запроса пользователя. Их сегодня используют не везде и не всегда, но получить о них представление будет полезно.

HTML и CSS

Основы верстки должны знать все. Эти знания получить довольно просто, и если вы вдруг ещё этого не сделали, уделите этому занятию пару дней. Заодно отдохнёте от более сложных тем.

XML

Расширяемый язык разметки раньше повсеместно применялся в Java-разработке. Его постепенно вытесняет JSON, но XML встречается и сегодня. Изучать его несложно, так что можно уделить этому языку толику внимания.

JavaScript

Опросы разработчиков показывают, что даже те из них, кто не имеет абсолютно никакого отношения к фронтенд-разработке, время от времени писали скрипты на JavaScript. Знание основ этого языка можно считать правилом хорошего тона, поэтому не поленитесь, почитайте о нём и создайте десяток-другой скриптов. Лишним не будет.