1. Какую IDE мне использовать для разработки на Java?

Выбор IDE зависит от личных взглядов и предпочтений разработчика. В ежегодном отчете Java Developer Productivity Report (2021) от компании JRebel, разработчикам задали вопрос "Какие IDE вы используете для профессиональной разработки?", т.е. предполагается, что возможны варианты использования нескольких IDE. Результат ответа приведен ниже.

report ide
What developer IDE do you use professionally?

2. Для чего используется Java?

Есть несколько основных направлений, где применяется Java:

  • Backend разработка (иногда называют enterprise)

  • Big Data (анализ огромного количества данных)

  • Мобильная разработка (часто в комбинации со знанием Kotlin)

  • Автоматизированное тестирование

  • Разработка под desktop (очень редкое явление, не развивается сообществом)

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

  • Telegram боты

  • Геймдев (gamedev)

  • Cмарт-карты

3. Какие есть варианты изучения Java?

Есть следующие варианты:

  • Самостоятельно

  • Курсы с преподавателем

  • Стажировка

  • Ментор

3.1. Самостоятельно

Note
Сюда же входит обучение с помощью различных платформ, например: Udemy, Stepik и т.д.
  • Очень сложно сформировать путь по которому стоит изучать.

  • Очень быстро падает мотивация.

  • Необходимо искать материал самостоятельно.

  • Стоит найти сообщество где будут помогать.

3.2. Курсы с тренером (преподавателем)

  • Большое количество курсов.

  • В большинстве своем платные.

  • Не гарантируется качество, так как многое зависит от тренера.

  • Чаще всего имеют высокую интенсивность

3.3. Стажировка

  • Сложно попасть, так запускают периодически, а желающих много

  • Бесплатно (чаще всего)

  • Будут очень требовательны к выполнению заданий

  • Если повезет, то будет кому задавать вопросы и от кого получать обратную связь

3.4. Ментор

  • Обучение проще, так как есть более опытный специалист, который отвечает за процесс обучения

3.4.1. Бесплатное менторство

  • Сложно найти бесплатное менторство.

  • Скорее всего вы будете работать над задачами на каком-то pet-проекте ментора.

  • Если вы не будете заинтересованны или не будете показывать прогресса (т.е. не будете работать), то ментор не будет заинтересован в работе с вами.

3.4.2. Платное менторство

  • Легко найти, но нужно смотреть отзывы на ментора.

  • Стоит смотреть, подходит ли этот ментор вам (т.е. комфортно ли с ним работать и есть ли прогресс).

  • Дополнительная мотивация, так как вы платите за это.

4. Почему компаниям невыгодно нанимать начинающих специалистов (т.е. не имеющих опыта в прод)?

Note
Важно помнить, что в компании ОБЯЗАТЕЛЬНО нужен приток начинающих специалистов и начинающий специалист обязательно найдет работу, если будет развиваться и работать над своими навыками. Просто специалистам без опыта сложнее попасть на работу чем тем, кто уже имеет опыт работы.

Одна из основных задач компании, зарабатывать деньги. Что собой представляет начинающий специалист (без опыта работы в прод) с точки зрения компании.

4.1. 1 вариант

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

Note
Минимальный набор для Java Back end разработчика, по состоянию на август 2022: Java 8+, Spring (Boot, Web, Data), Hibernate, SQL (PostgreSQL), Apache Maven

Такой начинающий специалист:

  • Требует времени опытного специалиста по ревью кода и обучению лучшим практикам (т.е. расходуется время опытного специалиста, которое весьма дорого)

  • Желает получать зарплату (т.е. расходуются деньги компании)

Warning
Временные рамки взяты приблизительные и они основываются на опыте автора.

Какая польза компании от такого начинающего специалиста:

  • Первые полгода - эффективность такого специалиста невелика.

  • Вторые полгода - специалист начинает приносить пользу на проекте.

  • Только через один год, специалист начинает окупать себя.

  • Существует риск, что специалиста обучат и он уйдет в компанию, где дали немного больше ЗП.

Итого: Компания, которая вкладывается в такого начинающего специалиста ресурс (в частности деньги и время), сильно рискует своими ресурсами.

4.2. 2 вариант

Начинающий специалист не знаком с разработкой или только начинает изучение).

Такой начинающий специалист:

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

  • Требует времени опытного специалиста по ревью кода и обучению лучшим практикам (т.е. расходуется время опытного специалиста, которое весьма дорого)

  • Желает получать зарплату (т.е. расходуются деньги компании)

Какая польза компании от такого начинающего специалиста:

  • Первые полгода от такого специалиста нет никакой пользы.

  • Вторые полгода - эффективность такого специалиста невелика.

  • Третьи полгода - специалист начинает приносить пользу на проекте.

  • Только через 1.5 года, специалист начинает окупать себя.

  • Существует риск, что специалиста обучат и он уйдет в компанию, где дали немного больше ЗП.

Итого: Компания, которая вкладывается в такого начинающего специалиста ресурс (в частности деньги и время), ОЧЕНЬ сильно рискует своими ресурсами.

4.3. Что имеем?

  • Компаниям не очень выгодно набирать начинающих специалистов (т.е. которые не имеют опыта работы в прод).

  • Компании делают бесплатные стажировки.

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

  • Для того, что бы повысить эффективность стажировки, делается предварительный отбор (в виде тестового задания), что бы собрать наиболее подготовленных начинающих специалистов на рынке.

  • К сожалению, на некоторых стажировках даже нет обратной связи (в виде ревью кода и объяснения ошибок), что не позволяет начинающим специалистам работать над своими ошибками.

4.4. Вам повезло, если

  • Вы нашли стажировку/подработку/работу, где вас обучают и при этом вы получаете деньги, а в трудовую книгу идет опыт работы по специальности "Инженер-программист" (или аналогичное).

5. Когда стоит ходить по собеседованиям?

Если кратко, то чем раньше, тем лучше.

  • Проходить собеседование - это отдельный навык, который приходит ТОЛЬКО с опытом, поэтому чем больше опыт их прохождения, тем более успешными они будут (при должной работе над ошибками).

  • Собеседования позволяют вам получить обратную связь о ваших знания, что позволит их усовершенствовать

  • Помните что все знать просто невозможно и состояния "я знаю все" практически недостижимо.

  • Можно проходить собеседование в одну и ту же компанию несколько раз, единственное, уточняйте когда можно к ним обращаться в следующий раз (обычно это 6 или 12 месяцев).

  • Отправляйте свое резюме всем компаниям сразу, а не сидите и ждите пока ответят от одной. Ответ может вообще не прийти, придет позже.

6. Как готовиться к собеседованиям?

  • Только собеседования показывают, что требуется сейчас на профессиональном рынке от специалиста того или иного уровня.

  • Только собеседования показывают, что какие вопросы сейчас задают специалистам того или иного уровня.

  • После интервью нужно обязательно:

    • Зафиксировать все вопросы, которые спрашивали.

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

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

7. Какие задачи дают Junior специалистам?

Зависит от множества факторов:

  • Процессы в компании

  • Проект

  • Команда

Чаще всего это:

  • Исправление багов

  • Реализация нового функционала

  • Написание тестов

8. Что такое артефакт?

  • Проект - это набор исходного кода

  • Артефакт - это то, что получаем после сборки проекта.

  • Артефакт - может представлять собой:

    • библиотеку, которой можно делиться с другими разработчиками, что бы упростить им разработку

    • запускаемое приложение (консольное, с графическим интерфейсом, web-service)

Жизненный цикл кода проекта в общих чертах выглядит так:

  1. Пишем код
    Ведется работа с source code (исходным кодом)

  2. Скомпилировать проект
    Этот шаг многие начинающие разработчики не до конца осознают. Ведь source code должен превратиться в byte code (байт код), который можно запустить на компьютере где установлена Java (JRE). Есть несколько вариантов скомпилировать проект: вручную, с помощью IDE, используя сборщики проектов (Apache Ant, Apache Maven, Gradle)

  3. Собрать проект
    Про этот шаг, многие начинающие разработчики вообще не имеют представления. Ведь именно он, позволяет использовать разработанную библиотеку или запускать разработанное приложение на клиентском компьютере или сервере. Есть несколько вариантов собрать проект: вручную, с помощью IDE, используя сборщики проектов (Apache Ant, Apache Maven, Gradle). В итоге все скомпилированные классы, а так же различные ресурсы будут помещены в специальный архив .jar/.war/.ear, в зависимости от того, что вы разрабатывали. Архив, полученный после сборки и есть артефакт.

    • Правкой артефактов никто не занимает

    • Правят исходный код и потом по новому компилируют исходный код и собирают проект.