Чтобы устроиться младшим Java-разработчиком, нужно знать довольно много вещей: язык программирования, алгоритмы, фреймворки, принципы разработки и многое другое. Новичок легко запутается в огромном количестве информации и потратит много времени, метаясь от одних технологий к другим.
Цель данной статьи — дать начинающим программистам на Java понимание, что и в какой последовательности изучать, чтобы устроиться на работу, и сколько времени это займёт.
- Что нужно знать перед началом обучения?
- Этап 1: Получение основных теоретических знаний
- Язык программирования Java
- Принципы ООП
- Коллекции
- Алгоритмы
- Многопоточность
- Базы данных: JDBC + Hibernate
- Серверная разработка: HTTP, запросы, сервлеты, Spring и Spring Boot
- Тестирование
- Паттерны проектирования
- Git и GitHub
- HTML, CSS, JavaScript + AJAX
- Английский язык
- Этап 2: Создание реальных проектов
- Проект 1: система для записи к врачу на сервлетах и JDBC
- Проект 2: онлайн ежедневник на Spring Boot и Hibernate
- Этап 3: Подготовка к собеседованию
Что нужно знать перед началом обучения?
У каждого новичка в определённый момент появляются сомнения, возникает много вопросов, на которые сложно найти однозначные ответы. Часто из-за этого начинающие разработчики перескакивают с одного языка программирования на другой, тратят время на изучение ненужных вещей и всё больше запутываются в огромном количестве информации.
Рассмотрим самые популярные вопросы и разберёмся с каждым из них.
Хотя изучение Java может казаться сложным и запутанным, на самом деле это не так. Рассмотрим все технологии и знания, которые необходимы, чтобы устроиться Java Junior разработчиком.
Этап 1: Получение основных теоретических знаний
Лучший способ обучения – это практика. Но без каких-либо теоретических знаний выполнять практические задания невозможно. Для быстрого и эффективного изучения следует сначала разбирать теоретическую информацию по теме, а потом делать простые практически задания, направленные на закрепление этой темы.
Язык программирования Java
Сначала нужно изучить сам язык программирования Java: его синтаксис, основные конструкции и особенности. Желательно пройти базовый курс или прочитать простую вводную книгу, это позволит получить представление о языке программирования в целом. Не стоит читать полные руководства по 1000 страниц, это убьёт любую мотивацию. В первую очередь следует рассмотреть самые базовые вещи: переменные, типы данных, циклы, условия, классы, функции, хранение данных и т. д.
Постепенно нужно углубляться в аспекты языка, то есть подробнее разбираться с каждой темой, изучать более продвинутые механизмы (например, что такое статический вложенный класс и где его применять).
Важно понимать, что не нужно тратить несколько месяцев на зубрёжку и углублённое изучение языка. Достаточно получить общее понимание на уровне: “Я могу написать простую программу с классами и методами, которая будет решать учебную задачу”. То есть уметь использовать конструкции языка. Остальные навыки и знания будут получены в процессе дальнейшего обучения.
Принципы ООП
Про принципы объектно-ориентированного программирования спрашивают на любом собеседовании. Их понимание позволяет программисту не просто писать код, а писать хороший код.
Важно не только выучить определение и написать несколько простых программ, но и понять суть каждого принципа, разобраться, как и зачем его применять.
В интернете много хороших статей, в которых описывается каждый принцип (инкапсуляция, наследование, полиморфизм и, опционально, абстракция). Можно найти много вариаций определений, главное, уметь объяснять своими словами.
Компаниям не нужны программисты, которые умеют зубрить, им нужны программисты, которые понимают, как писать код!
Коллекции
Коллекции – это большая и важная тема. Коллекции позволяют хранить данные в том или ином виде, они используются везде.
Программисту следует изучить каждую коллекцию, а точнее узнать:
- как работать с коллекцией;
- для чего используется коллекция;
- в каких случаях следует использовать ту или иную коллекцию;
- что такое временная сложность, и какая она для каждой коллекции.
Алгоритмы
Алгоритмы – одна из самых фундаментальных и важных тем программирования. Почему они настолько важны? Предположим, есть задача, для которой размер входных данных равен n. Также есть два компьютера: современный и устаревший. Если использовать “грубый” алгоритм, который просто перебирает все возможные варианты для поиска решения, тогда:
- n ~ 1000. Современный компьютер: 0.03 секунды.
- n ~ 1000. Старый компьютер: 1 секунда.
- n >> 1 000 000. Старый компьютер: 27 часов.
- n >>1 000 000. Современный компьютер: 0,8 часов.
То есть если увеличить n в >1000 раз, то время, необходимое для решения задачи, увеличится в >1000000 раз. Существуют задачи, для которых решение таким алгоритмом даже на самом современном компьютере займёт десятки лет. Однако, если использовать правильный алгоритм, в котором время увеличивается линейно, относительно входных данных, то ситуация получается совсем иной:
- n ~ 1000. Современный компьютер: 0.03 секунды.
- n ~ 1000. Старый компьютер: 1 секунда.
- n >> 1 000 000. Старый компьютер: 100 секунд.
- n >> 1 000 000. Современный компьютер: 30 секунд.
На самом деле эти цифры взяты “с потолка”, но они иллюстрируют реальную ситуацию. Использование эффективного алгоритма даёт гораздо больше преимуществ, чем усовершенствование производительности компьютера.
Для устройства на работу достаточно разобраться с самыми популярными алгоритмами. Не нужно учить их реализацию, код в любой момент можно найти и скопировать. Главное знать:
- в чём преимущества этого алгоритма;
- где его использовать;
- как он работает.
Единственное, что нужно действительно вызубрить, это временную сложность алгоритмов, то есть то, как эффективность алгоритма зависит от размера входных данных. Это позволит легко выбирать нужный алгоритм для решения определённой задачи.
Многопоточность
Сейчас на каждом компьютере установлен многоядерный процессор, поэтому любое приложение делается многопоточным. Если говорить о Java, то здесь многопоточность ещё важнее.
Большое Enterpise-приложение (обычно это не одно приложение, а много различных приложений, соединённых между собой) производит огромное количество вычислений за короткое время, это нужно делать быстро, иначе приложение зависнет, поэтому процесс обязательно должен разбиваться на много потоков, работающих параллельно.
Многопоточность – сложная тема, не нужно изучать её слишком глубоко. Достаточно понимать основные принципы, знать, что такое: состояние гонки, взаимная блокировка, класс Thread и интерфейс Runnable, синхронизация методов и блоки синхронизации и другое. Эти знания позволят писать простые многопоточные приложения.
После устройства на работу программист научится более продвинутым и правильным вещам, в этом ему помогут старшие специалисты.
Базы данных: JDBC + Hibernate
В больших приложениях используется огромное количество данных. Предположим, что в приложении зарегистрировано около 1 миллиона пользователей, то есть 1 миллион аккаунтов. Тогда для каждого аккаунта нужно хранить:
- логин и пароль;
- дату рождения;
- почту;
- имя, фамилию и другое.
Чтобы можно было работать с таким количеством информации, используются базы данных. Они позволяют удобно структурировать информацию и легко манипулировать ей. Знание того, что такое базы данных и как с ними работать, необходимо любому начинающему разработчику.
Начните с изучения MySQL, разберитесь с основными видами запросов к базе данных, узнайте, что такое связи (OneToMany, ManyToOne, ManyToMany).
Чтобы работать с базами данных в Java, изучите инструменты JDBC и Hibernate.
- JDBC – это инструмент для работы с базами данных, встроенный в Java SE.
- Hibernate – это отдельная библиотека, предназначенная для того же.
С JDBC работать сложнее, чем с Hibernate, потому что если в Hibernate многие процессы автоматизированы, то JDBC требует от программиста писать много кода самостоятельно. Однако изучить нужно оба инструмента, чтобы понимать, как всё работает.
Серверная разработка: HTTP, запросы, сервлеты, Spring и Spring Boot
На Java можно написать всё что угодно – от микросервисов до десктоп приложений. Однако в основном на Java пишут веб-приложения, поэтому от начинающего разработчика требуют связанный с вебом стек технологий.
Изучите, что такое протокол HTTP/HTTPS, какие бывают запросы (GET, POST и другие), как компьютеры общаются между собой, что такое клиент-серверная архитектура.
После получения базовых знаний следует перейти непосредственно к инструментам языка Java, а точнее сервлетам, фреймворку Spring и фреймворку Spring Boot.
Эти инструменты используются для создания веб-приложений, причём сервлеты – более низкоуровневый инструмент, а Spring Boot – сторонняя платформа, которая сильно упрощает разработку. Однако, как и в случае с JDBC и Hibernate, программисту нужно знать оба инструмента:
- Без понимания сервлетов невозможно по-настоящему разобраться, что такое Spring Boot и как он работает.
- Скорее всего вы встретите старый проект, написанный на чистых сервлетах (даже сейчас некоторые компании пишут свои системы на сервлетах, чтобы не зависеть от стороннего фреймворка).
Тестирование
Когда приложение становится достаточно большим, становится трудно отслеживать и исправлять ошибки. Поэтому в хороших компаниях разрабатываемые приложения имеют почти полное покрытие тестами, это позволяет быстро выявить большинство проблем.
Паттерны проектирования
Хотя на начальном этапе своей карьеры программисту не доверят строить архитектуру приложения и вряд ли дадут задачу, в которой от него потребуется её глубокое понимание, знать основные паттерны проектирования необходимо.
Паттерны проектирования – это шаблоны, которые разработаны для того, чтобы решать часто встречающиеся задачи. Существует много паттернов проектирования, причём они разделены на три типа: порождающие, структурные и поведенческие.
Изучите назначение и особенности каждого паттерна, посмотрите и поймите их реализацию (не нужно заучивать её), попробуйте применить какой-либо паттерн в своём проекте.
Git и GitHub
Над одним проектом может работать большая команда разработчиков. Чтобы несколько человек могли изменять проект одновременно, были разработаны системы контроля версий, одна из которых — Git.
Junior Java Developer должен знать, что такое Git и GitHub и как с ними работать. Прежде всего, нужно понять, что Git — это непосредственно система контроля версий, а GitHub — это платформа (хостинг), которая хранит Git-репозитории. Есть и другие системы контроля версий, однако Git — самая популярная из них.
Без знаний этого инструмента нет смысла идти на собеседование.
HTML, CSS, JavaScript + AJAX
HTML — это язык разметки, CSS — язык таблиц стилей, JavaScript — язык программирования, используемые для создания фронтенда, а AJAX — асинхронные запросы, позволяющие обмениваться данными с сервером в фоновом режиме, то есть обновлять содержимое страницы без перезагрузки.
Всё это относится к фронтенду, однако причём здесь он, если на Java пишется серверная часть приложений? Дело в том, что фрондент и бэкенд постоянно взаимодействуют, поэтому, чтобы писать код для серверной части приложения правильно, нужно знать, как происходит это взаимодействие. Кроме того, зная эти инструменты, вы самостоятельно сможете написать полноценное веб-приложение с более менее хорошим интерфейсом, и продемонстрировать его на собеседовании.
Не нужно изучать эти инструменты слишком углублённо. Достаточно понимать:
- как построить простую веб-страницу;
- как сделать её динамической с помощью JavaScript (изменение HTML в зависимости от действий/событий;
- что такое AJAX запрос и как работать с ним;
Изучив эту тему, разработчик легко сможет написать простое веб-приложение, например, онлайн-ежедневник. Оно будет устроено определенным образом.
- Пользователь входит на веб-страницу, проходит авторизацию/регистрацию (первая ситуация, где клиент взаимодействует с сервером, то есть фронтенд с бэкендом).
- Затем пользователь попадает на главную страницу ежедневника, которая посылает запрос на сервер и получает ответ (сервер в свою очередь обращается к базе данных).
- Полученные данные используются для формирования страницы, загружается список дел на выбранные пользователем дни.
- Когда пользователь совершает действия (добавляет, удаляет или редактирует задачу), на сервер также отправляется AJAX запрос, затем сервер совершает какие-то действия (обращается к базе данных, добавляет информацию о новой задаче на определённое число, привязывает поле таблицы к этому пользователю и т. д.), а затем посылает ответ обратно клиенту.
Английский язык
Хотя этот пункт расположен в конце, он является одним из самых важных. Английский обязателен для каждого программиста. Важно уметь читать и писать, в меньшей степени – говорить.
Умение читать позволяет читать техническую литературу. Желательно читать в оригинале с самого начала. Во-первых, на английском больше информации и она обновляется гораздо быстрее, так как перевод выходит с задержкой. Во-вторых, перевод часто оставляет желать лучшего, может быть переводчики очень хорошо знают английский язык, но плохо знают предметную область, поэтому переводят термины буквально, из-за чего очень сложно понять материал правильно.
Уметь писать на английском тоже важно, ведь программист должен писать комментарии и документацию к своему коду. Это принято делать на английском, комментарии на других языках — это не просто моветон, но и серьёзная проблема при сопровождении кода.
Хотя умение говорить не настолько значимо, оно тоже пригодится. Часто программисту нужно общаться с иностранными коллегами, недостаточное умение говорить на английском не только будет выглядеть смешно, но и создаст барьер в общении.
Какой уровень английское нужен для Junior-разработчика? Минимальный порог — B1 (intermediate), лучше знать на уровне B2 и выше.
Этап 2: Создание реальных проектов
В теории без практики мало смысла. Если в процессе изучения теории программист решает небольшие практические задачи, чтобы закрепить знания по отдельности, то создание реального проекта позволяет закрепить теорию в целом, приобрести глубокое понимание инструментов, узнать, как связать различные компоненты между собой.
Кроме того, наличие нескольких более менее больших проектов в репозитории на GitHub необходимо для успешного прохождения собеседования. Они показывают интервьюеру, что программист обладает необходимыми знаниями и навыками и может работать.
Можно придумать бесконечное множество идей для проекта, разберём частный случай, рассчитанный на сжатые сроки.
Проект 1: система для записи к врачу на сервлетах и JDBC
Создание данного проекта позволит закрепить знания языка программирования Java, сервлетов, баз данных, JDBC и фронтенда (HTML, CSS, JavaScript и AJAX). Также при создании проекта программист сможет понять, как эти компоненты должны взаимодействовать между собой, и научится решать проблемы (а они обязательно будут).
С помощью HTML, CSS и JS нужно сделать интерфейс. Например, чтобы пользователь мог записаться к врачу, можно сделать специальную кнопку, при нажатии на которую поверх экрана открывается форма, где пользователь может выбрать врача, дату, ввести дополнительную информацию. Причём общение с сервером идёт постоянно, то есть в фоновом режиме. Врач, который сейчас в отпуске/на больничном должен быть недоступен для выбора, но должен оставаться в списке.
Проект 2: онлайн ежедневник на Spring Boot и Hibernate
Spring Boot и Hibernate позволяют упростить многие процессы, по сравнению с сервлетами и JDBC. Однако не стоит относиться к этому проекту с пренебрежением, знание этих инструментов очень важно, и хотя они многое упрощают, когда вы встретитесь с реальным коммерческим проектом, будет сложно.
Почему ежедневник? Он не слишком сложный, но позволяет отработать все необходимые навыки и знания.
- Сначала пользователь должен попасть на страницу авторизации/регистрации, причём следует использовать сессию, чтобы пользователю не нужно было каждый раз вводить логин и пароль.
- Информация о пользователе, его списке дел, статистике, должна хранится в базе данных. На главной странице следует сделать 3 блока: вчера, сегодня, завтра. Так пользователь сможет увидеть, что он сделал вчера, а что ему нужно сделать сегодня и завтра.
- Следует реализовать календарь, чтобы пользователь смог выбрать любой день и создать дела для него. Тогда «вчера, сегодня, завтра» меняются на даты. Важно правильно реализовать хранение всего этого в базе данных, ведь нужно учитывать не только список дел, но и сегодняшнее число. То есть когда пользователь заходит на страницу, программа должна проверять, какое сейчас число и какие данные из базы данных выбрать, чтобы всё отобразилось правильно.
Этап 3: Подготовка к собеседованию
Программист получил необходимые теоретические знания, сделал несколько больших проектов, что дальше? Теперь нужно целенаправленно готовиться к собеседованию:
- Нужно подумать, какие темы изучены хуже всего, а затем повторить их.
- Следует найти в интернете популярные вопросы и типовые тестовые задания на собеседованиях на Java Junior разработчика и подготовиться по ним.
Если нужно устроится в какую-то конкретную компанию (на самом деле придётся подавать резюме в несколько мест, маловероятно, что получится устроиться после первого собеседования), следует найти в интернете информацию о том, что требуют от разработчика именно в этой компании, возможно кто-то поделился списком вопросов.
Конечно, программиста не будут заставлять писать тест, как в школе или университете. Интервьюер задаст вопросы, оценит общее понимание и компетентность. Не страшно, если не получилось ответить на какой-нибудь заковыристый вопрос, главное, чтобы интервьюер видел, что программист понимает тему и имеете хорошие знания и навыки для своего уровня.
Изучение популярных вопросов к собеседованию — это как подготовка к экзамену. Вы учили предмет весь семестр, но всё ещё нужно закрепить важные понятия и моменты. Кроме того, вы можете наткнуться на что-то, что могли пропустить в процессе обучения, так что это может заполнить оставшиеся пробелы.
Становление Java Junior разработчиком — это долгий процесс. Требуется изучить много теоретической информации, постоянно закрепляя её на практике, написать несколько серьёзных проектов и пройти собеседование. В среднем на это может уйти около года. Всё зависит от уже имеющихся знаний и навыков и способностей самого человека.
После этого разработчика ждёт ещё более долгий путь, если Junior знает «всего по чуть чуть», то более опытные разработчики должны обладать углублёнными знаниями и понимать сложные концепции.
Журналист, копирайтер и репетитор.
Прям руководство к действию) Спасибо за столь обширную статью, буду изучать!
Сайт полезный и развивуюшщий мне понравилось всем советую!
Вот это … так разложить по полочкам.да тут даже тот кто не в зуб ногой в этой теме врубится.Так,что считаю,что статья полезная и очень разъяснительная.
Хорошая, полная и грамотная статья, которая дает четкое понимание, какие действия вам необходимо проделать, что преодолеть для достижения поставленной цели стать разработчиком на языке java.
В любом обучении нужно конечно начинать с азов, чтобы понимать чем ты будешь заниматься.. А вообще это очень перспективное направление, и профессия в наше время довольно востребована, и думаю ещё долго будет актуальной.. Так что как говорится, было бы желание и цель.. Дерзайте!!! )))
Очень перспективная профессия в наше время я считаю) Открывает многие возможности. Главное желание учиться, а дальше работу будет найти несложно.
Профессии, связанные с программированием, в наше время популярны как никогда. Но надо чётко понимать, что нужно быть настоящим специалистом в этой области, чтобы зарабатывать неплохие деньги. Думаю, автор статьи совершенно прав, говоря о том, что процесс получения этой профессии длительный, при этом в дальнейшем всё равно потребуется постоянное совершенствование.