Как стать Java Junior разработчиком и устроиться на работу

Как стать java junior разработчиком Курсы IT

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

Цель данной статьи — дать начинающим программистам на Java понимание, что и в какой последовательности изучать, чтобы устроиться на работу, и сколько времени это займёт.

Что нужно знать перед началом обучения?

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

Рассмотрим самые популярные вопросы и разберёмся с каждым из них.

Какой язык программирования выбрать?
Нужен ли университет, чтобы стать программистом?
Что делать, если я ничего не понимаю?
Сколько времени займёт подготовка перед устройством на работу?

Хотя изучение Java может казаться сложным и запутанным, на самом деле это не так. Рассмотрим все технологии и знания, которые необходимы, чтобы устроиться Java Junior разработчиком.

Этап 1: Получение основных теоретических знаний

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

📌 Предполагается, что после изучения какой-либо теории, вы будете выполнять несколько практических задач на закрепление. Например, изучив массивы, напишите несколько простых программ вида: «Добавить 10 чисел в массив, отсортировать его, найти минимальное и максимальное число».

Язык программирования Java

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

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

Важно понимать, что не нужно тратить несколько месяцев на зубрёжку и углублённое изучение языка. Достаточно получить общее понимание на уровне: “Я могу написать простую программу с классами и методами, которая будет решать учебную задачу”. То есть уметь использовать конструкции языка. Остальные навыки и знания будут получены в процессе дальнейшего обучения.

Принципы ООП

Про принципы объектно-ориентированного программирования спрашивают на любом собеседовании. Их понимание позволяет программисту не просто писать код, а писать хороший код.

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

В интернете много хороших статей, в которых описывается каждый принцип (инкапсуляция, наследование, полиморфизм и, опционально, абстракция). Можно найти много вариаций определений, главное, уметь объяснять своими словами.

Компаниям не нужны программисты, которые умеют зубрить, им нужны программисты, которые понимают, как писать код!

Коллекции

Коллекции – это большая и важная тема. Коллекции позволяют хранить данные в том или ином виде, они используются везде.

Программисту следует изучить каждую коллекцию, а точнее узнать:

  • как работать с коллекцией;
  • для чего используется коллекция;
  • в каких случаях следует использовать ту или иную коллекцию;
  • что такое временная сложность, и какая она для каждой коллекции.
📌 Например, нужно написать программу, которая генерирует названия случайных городов для игры-песочницы. Какую коллекцию для этого использовать? Ту, которая быстро работает и позволяет хранить только уникальные элементы, ведь названия городов не должны повторяться. Лучшим выбором в этом случае будет Set (множество).

Алгоритмы

Алгоритмы – одна из самых фундаментальных и важных тем программирования. Почему они настолько важны? Предположим, есть задача, для которой размер входных данных равен 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.

  1. JDBC – это инструмент для работы с базами данных, встроенный в Java SE.
  2. Hibernate – это отдельная библиотека, предназначенная для того же.

С JDBC работать сложнее, чем с Hibernate, потому что если в Hibernate многие процессы автоматизированы, то JDBC требует от программиста писать много кода самостоятельно. Однако изучить нужно оба инструмента, чтобы понимать, как всё работает.

Серверная разработка: HTTP, запросы, сервлеты, Spring и Spring Boot

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

Изучите, что такое протокол HTTP/HTTPS, какие бывают запросы (GET, POST и другие), как компьютеры общаются между собой, что такое клиент-серверная архитектура.

После получения базовых знаний следует перейти непосредственно к инструментам языка Java, а точнее сервлетам, фреймворку Spring и фреймворку Spring Boot.

Эти инструменты используются для создания веб-приложений, причём сервлеты – более низкоуровневый инструмент, а Spring Boot – сторонняя платформа, которая сильно упрощает разработку. Однако, как и в случае с JDBC и Hibernate, программисту нужно знать оба инструмента:

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

Тестирование

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

📌 Изучите, что такое тесты, как и зачем их писать, а также разберитесь с фреймворком Junit и, желательно, Mockito. От начинающего разработчик не требуют углублённых знаний тестирования, достаточно иметь общее понимание процесса и уметь писать простые тесты для своих задач.

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

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

Паттерны проектирования – это шаблоны, которые разработаны для того, чтобы решать часто встречающиеся задачи. Существует много паттернов проектирования, причём они разделены на три типа: порождающие, структурные и поведенческие.

Изучите назначение и особенности каждого паттерна, посмотрите и поймите их реализацию (не нужно заучивать её), попробуйте применить какой-либо паттерн в своём проекте.

Git и GitHub

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

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

Junior Java Developer должен знать, что такое Git и GitHub и как с ними работать. Прежде всего, нужно понять, что Git — это непосредственно система контроля версий, а GitHub — это платформа (хостинг), которая хранит Git-репозитории. Есть и другие системы контроля версий, однако Git — самая популярная из них.

Без знаний этого инструмента нет смысла идти на собеседование.

HTML, CSS, JavaScript + AJAX

HTML — это язык разметки, CSS — язык таблиц стилей, JavaScript — язык программирования, используемые для создания фронтенда, а AJAX — асинхронные запросы, позволяющие обмениваться данными с сервером в фоновом режиме, то есть обновлять содержимое страницы без перезагрузки.

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

Не нужно изучать эти инструменты слишком углублённо. Достаточно понимать:

  • как построить простую веб-страницу;
  • как сделать её динамической с помощью JavaScript (изменение HTML в зависимости от действий/событий;
  • что такое AJAX запрос и как работать с ним;

Изучив эту тему, разработчик легко сможет написать простое веб-приложение, например, онлайн-ежедневник. Оно будет устроено определенным образом.

  1. Пользователь входит на веб-страницу, проходит авторизацию/регистрацию (первая ситуация, где клиент взаимодействует с сервером, то есть фронтенд с бэкендом).
  2. Затем пользователь попадает на главную страницу ежедневника, которая посылает запрос на сервер и получает ответ (сервер в свою очередь обращается к базе данных).
  3. Полученные данные используются для формирования страницы, загружается список дел на выбранные пользователем дни.
  4. Когда пользователь совершает действия (добавляет, удаляет или редактирует задачу), на сервер также отправляется 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. Однако не стоит относиться к этому проекту с пренебрежением, знание этих инструментов очень важно, и хотя они многое упрощают, когда вы встретитесь с реальным коммерческим проектом, будет сложно.

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

  1. Сначала пользователь должен попасть на страницу авторизации/регистрации, причём следует использовать сессию, чтобы пользователю не нужно было каждый раз вводить логин и пароль.
  2. Информация о пользователе, его списке дел, статистике, должна хранится в базе данных. На главной странице следует сделать 3 блока: вчера, сегодня, завтра. Так пользователь сможет увидеть, что он сделал вчера, а что ему нужно сделать сегодня и завтра.
  3. Следует реализовать календарь, чтобы пользователь смог выбрать любой день и создать дела для него. Тогда «вчера, сегодня, завтра» меняются на даты. Важно правильно реализовать хранение всего этого в базе данных, ведь нужно учитывать не только список дел, но и сегодняшнее число. То есть когда пользователь заходит на страницу, программа должна проверять, какое сейчас число и какие данные из базы данных выбрать, чтобы всё отобразилось правильно.
📌 Здесь также много фронтенда. Это и всплывающая форма для создания/редактирования дела, и список дел, причём он должен прокручиваться, и выбор даты в календаре. Помимо этого, пользователь может помечать как завершённые, так он будет видеть свой прогресс, например, перечёркивать их и помещать справа зелёную галочку «выполнено». Можно реализовать прогресс бар внизу каждого блока, а в блоке «вчера» подсвечивать невыполненные дела красным, чтобы показать, что они было пропущены.

Этап 3: Подготовка к собеседованию

Программист получил необходимые теоретические знания, сделал несколько больших проектов, что дальше? Теперь нужно целенаправленно готовиться к собеседованию:

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

Если нужно устроится в какую-то конкретную компанию (на самом деле придётся подавать резюме в несколько мест, маловероятно, что получится устроиться после первого собеседования), следует найти в интернете информацию о том, что требуют от разработчика именно в этой компании, возможно кто-то поделился списком вопросов.

Конечно, программиста не будут заставлять писать тест, как в школе или университете. Интервьюер задаст вопросы, оценит общее понимание и компетентность. Не страшно, если не получилось ответить на какой-нибудь заковыристый вопрос, главное, чтобы интервьюер видел, что программист понимает тему и имеете хорошие знания и навыки для своего уровня.

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

Заключение

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

После этого разработчика ждёт ещё более долгий путь, если Junior знает «всего по чуть чуть», то более опытные разработчики должны обладать углублёнными знаниями и понимать сложные концепции.

Оцените статью
Ucheba.club 🎓
Добавить комментарий

Какой язык программирования выбрать?
Java – хороший вариант. Это популярный и мощный язык программирования, на котором можно написать всё что угодно.

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

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

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

Не нужно бояться, что язык программирования станет не востребованным. Это невозможно, и даже если язык станет быстро терять популярность, опытный программист (к тому моменту вы таким будете) легко сможет переквалифицироваться.

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

Но это не значит, что учиться в университете бесполезно. В вузе программиста учат, как думать, дают знания о фундаментальных вещах, которые используются везде. Конечно, всему этому реально научиться самому, но лучшим вариантом будет параллельно заниматься самообразованием и проходить обучение в вузе.
Что делать, если я ничего не понимаю?
Пытаться дальше. У всех разные способности и условия, если что-то не получается, следует уделить этому больше времени. Изучать что-либо с нуля всегда сложно, но это не значит, что сложно будет всегда.
Сколько времени займёт подготовка перед устройством на работу?
Всё индивидуально. Это зависит от уже имеющихся знаний, способностей человека и многих других факторов. Если говорить просто, чем больше человек тратит на обучение, тем быстрее он научится.

В среднем стать Java Junior разработчиком с нуля можно за 1-1,5 года, тратя по 3-4 часа в день. Эта цифра приблизительно актуальна и для других языков программирования.
Как должно выглядеть приложение?
Во-первых, должно быть два вида пользователей: администратор и обычный. Если пользователь заходит, как администратор, он попадает на специальную страницу, где может менять расписание каждого врача. Например, врач уходит в отпуск, тогда администратор должен сделать его недоступны для записи в определённый период.

Во-вторых, систему нужно сделать более менее умной. Предположим, пользователь записался на 23 число этого месяца. А врач через день ушёл в отпуск, что делать в этом случае? Запись должна быть отменена, пользователь должен быть уведомлен, информацию об этом следует поместить в архив.
Как хранить информацию?
В базе данных. Как минимум нужно хранить информации о всех врачах и их расписании. Также нужно хранить информацию о каждом пользователе: его данные, текущие записи, архив записей. Нужно не забывать о связях в таблицах, например, между врачом и пользователями (oneToMany, к одному врачу может быть записано много пациентов).