Автор оригинала: John Selawsky.
От Джавападавана до Яванского джедая
Что должен знать потенциальный младший специалист по Java, чтобы получить первую работу или даже претендовать на должность стажера в хорошей компании? Какие инструменты помогут программисту Java выйти на следующий уровень? Какие технологии вам следует изучить, а какие лучше отложить?
На эти вопросы нет стандартного ответа, так же как нет единого плана действий, который подошел бы абсолютно всем. Некоторые компании стремятся к развитию, постоянно внедряя новые технологии и тестируя возможности новых версий языка, в то время как другие упорно цепляются за старые. Есть также средние варианты, и, возможно, это большинство из них.
Мне так часто задают этот вопрос, что я решил написать статью, на которую затем смогу сослаться, чтобы ответить на него. Кроме того, это будет полезно не только тем, кто спрашивает меня лично, но и всем, кто уже решил (или никак не решил) связать свою жизнь с программированием на Java.
Какие источники я использовал, чтобы ответить на Главный вопрос Статьи?
Чтобы ответить на главный вопрос статьи как можно полнее, я полагался на:
- Мой собственный опыт старшего Java-разработчика, который брал интервью у многих потенциальных Java-юниоров
- Мой опыт работы в качестве преподавателя (вернее, опыт моих учеников)
- Результаты одного опроса, проведенного порталом CodeGym для своих выпускников
- Некоторые ответы с интернет-форумов
Прежде всего: Ядро Java-это Должен
Ядро Java обычно означает базовые основы языка программирования. Он содержит следующие компоненты.
Синтаксис Java
- Классы, переменные и методы
- Примитивные типы данных
- Строки
- Основные операторы
- Основные конструкции: петли, ответвления
Синтаксис Java является своего рода азбукой этого языка. Студенты учатся этому на практике, как маленькие дети учатся читать и писать. Наиболее сложными понятиями здесь являются принципы программирования, такие как циклы и ветви. Они могут быть сложными для абсолютных новичков, но обычно после кодирования некоторых задач будущие программисты начинают разбираться в них.
До того, как они получат свое первое предложение о работе в качестве разработчика Java или стажера Java, 92,4% программистов знают синтаксис Java на хорошем или отличном уровне. А как насчет остальных 7,6%? Они знали это на среднем уровне, и им посчастливилось получить предложение о стажировке. Однако это чистая удача. Каждый кандидат должен свободно владеть синтаксисом Java, и, слава богу это быстро и легко освоить.
Объектно-ориентированное программирование (ООП)
Java и ООП являются почти синонимами, потому что все в этом языке программирования является объектом.
Если вы привыкли к процедурному программированию, поначалу может быть сложно перестроиться и мыслить в объектном стиле. Однако на самом деле ООП не так уж и сложна. Более того, это очень красивая концепция. Важно писать много кода и в то же время думать о том, как строятся иерархии объектов.
Основными подтемами ООП являются наследование классов, реализация интерфейса, абстракция данных и поведения, инкапсуляция данных и реализация классов, полиморфизм и виртуальные методы.
Большинство (80,3%) людей, которые получают свою первую работу, связанную с Java, хорошо знают принципы ООП и постоянно их используют.
Однако “хорошие знания” иногда могут иметь разные определения в зависимости от вашего опыта. “Я читал об ООП и использовал наследование и инкапсуляцию. Я думал, что хорошо это знаю, но понял, что вроде бы что-то знал раньше, но не понимал нюансов. По-настоящему глубокое понимание уровней абстракции и того, как их использовать, пришло ко мне только во время работы в качестве стажера Java в большом проекте”, – сказал Энди, который сейчас работает младшим сотрудником Java в одной из международных аутсорсинговых компаний.
Согласно опросу портала CodeGym, 78,8% младших и стажеров Java используют ООП в своей работе очень часто, 12,1% время от времени, а 7,6% стажеров используют их редко (обычно они работают с модульным тестированием и различными небольшими задачами).
Структура коллекций
Группа отдельных объектов, представленных как единое целое, представляет собой коллекцию. Java предоставляет структуру коллекций для различных коллекций. Коллекции основаны на популярных структурах данных: списках, регулярных и связанных, наборах, хэш-картах и так далее. Поэтому при изучении коллекций было бы неплохо также немного лучше ознакомиться со структурами данных. Основные подтемы:
Список
Набор
Карта
Список объектов
Список ссылок
Очередь
Деке
Хэш-набор
,Хэш-карта
,Хэш-таблица
Набор деревьев
,Карта деревьев
Основная трудность в изучении коллекций заключается в том, чтобы понять, как они работают и когда использовать какую структуру. Это приходит с практикой. Кроме того, из всего множества конструкций в реальной работе постоянно используются лишь немногие. В качестве учебного пособия может быть полезно воссоздать вашу собственную версию коллекции. Почти все (96,9%) Младшие и стажеры Java используют платформу сбора данных на своей первой работе, и 80,3% респондентов знали коллекции на хорошем или отличном уровне до того, как получили свое первое предложение о работе.
Обработка исключений
Исключение-это ненормальная ситуация, которая может возникнуть при выполнении вашей программы. Все классы исключений являются подтипами java.lang. Исключение
класс. Механизм обработки исключений значительно упрощает процессы обнаружения ошибок в программах. Обычно студенты начинают использовать исключения довольно рано, и эта тема определенно заслуживает вашего внимания. Основные подтемы:
- Механизм обработки исключений
- Попробуй-поймай-наконец
- Бросать, бросает
- Иерархия исключений в Java
- Проверенные/непроверенные исключения
- Разница между ошибкой и исключением
- Ошибка недоступного блока перехвата
- Выбрасывание исключений вручную
Исключения используются каждым стажером Java и младшим сотрудником Java на своих рабочих местах, и интервьюеры очень часто задают вопросы об этом механизме.
Потоки ввода/вывода Java
Java выполняет операции ввода и вывода с использованием потоков. Поток-это своего рода непрерывный поток данных. В программах Java вам довольно часто нужно читать или записывать данные. Это не самая простая тема для начинающих, и иногда она не часто используется в работе новичков (это действительно зависит от проекта, в котором они работают). Ну, 22,7% людей, которые получили свою первую работу младшего/стажера Java, сказали, что они часто используют потоки ввода-вывода, 31,8% время от времени, 25,8% редко. Таким образом, чуть менее 20% вообще не использовали их в течение своего первого года в роли разработчика Java.
Основные подтемы:
- Потоки байтов (
Поток ввода файлов
,Поток вывода файлов
) - Потоки символов (
Читатель файлов
,Пишущая машинка
) - Стандартные потоки (
System.in
,System.out
)
Многопоточность/параллелизм Java
Здесь у нас есть самая продвинутая основная тема Java из всех. Почти все студенты испытывают трудности с пониманием и использованием многопоточности, но позже, когда они достигают дзен в искусстве жонглирования различными потоками, программисты начинают понимать, насколько хорошо эта технология реализована в Java и насколько эффективной она может быть.
Тем не менее, если вам это очень сложно, многопоточность-это тема, в которую вам не нужно вникать сначала. Так, только 12,1% респондентов отметили, что знали тему на хорошем уровне до своего первого предложения, в то время как 31,8% признаются, что вообще ничего не понимали в этой теме. Большинство (56,2%) опрошенных заявили, что “имели некоторое представление” о многопоточности, когда начинали. Следовательно, многопоточность может стать вашим конкурентным преимуществом на собеседованиях с младшими преподавателями Java. Вам решать, погрузиться в это глубоко или получить первоначальные идеи. Решите некоторые проблемы с кодированием и сосредоточьтесь на других темах.
Основные подтемы:
- Жизненный цикл потока (новый, запускаемый, ожидание, ожидание по времени, завершение)
- Демоны
- Синхронизация потоков
- Обработка взаимоблокировки потоков
- Операции с потоками
Подождите
,уведомить
,уведомИть всех
- Прерывание потоков
Прерывание потоков
В течение первого года работы в качестве стажера или младшего разработчика Java 9,1% часто использовали многопоточность и 36,4% время от времени, в то время как 39,4% использовали ее редко.
Лямбда-выражения
Лямбда-выражения Java появились в Java 8, но новички часто игнорируют этот удобный инструмент. Lambdas расширил Java, сделав концепцию функционального программирования доступной на этом языке. Лямбда-выражение-это функция, которая может быть создана без принадлежности к какому-либо классу, и вы можете передать ее как объект или выполнить по требованию. Только 22,7% респондентов знали лямбды задолго до своего первого предложения о работе, в то время как 48,5% оценили свои знания по этой теме как “близкие к нулю”. “В то же время более 85% новых программистов заявили, что использовали лямбда-выражения в свой первый рабочий год.
Основные подтемы:
- Лямбды, интерфейс с одним методом
- Реализации анонимного интерфейса
- Вывод лямбда-типа
- Параметры лямбды
- Тело лямбда-функции
- Возврат значения из лямбда-выражения
- Лямбды как объекты
- Переменный захват
- Ссылки на методы в виде лямбд
Таким образом, мы можем сказать, что знание базовой Java для любого потенциального младшего специалиста по Java и даже стажера является обязательным. Конечно, вы можете получить предложение, если прекрасно знаете все темы, а многопоточность и лямбда-выражения несколько меньше. Однако эти темы могут стать вашим конкурентным преимуществом при поиске работы. Тем не менее, вам, скорее всего, придется работать с обоими.
В своей практике я встречал парней, которые получали работу, зная только основные понятия — синтаксис Java и ООП. Чаще всего они становились стажерами Java, но иногда я сталкивался с кем-то, у кого почти не было младших навыков Java. С одной стороны, им повезло: они реализовали свою мечту стать программистом и могли учиться непосредственно на рабочих задачах. С другой стороны, работодатели быстро поняли, что их уровень квалификации был слабым, и в течение длительного времени они получали однотипные однообразные задания, что часто расстраивало. Мой совет таким программистам-расти быстрее, пока вам все это не надоест. Решайте практические задачи, читайте — и переходите к следующему этапу.
Где можно изучить основные темы Java
Code Gym – один из моих любимых онлайн-курсов, посвященный ядру Java. Здесь вы можете найти все основные темы Java (кроме лямбд на данный момент) и более 1200 упражнений. Лямбда-выражения на jenkov.com имеет хороший учебник, в котором вы можете найти все, что вам нужно знать о лямбдах. Java на CodeCademy . CodeCademy-одна из самых известных платформ для практического обучения. В этом курсе вы можете найти большинство основных тем Java.
Алгоритмы и структуры данных: Сомнительный
Один из самых спорных вопросов при изучении любого языка программирования заключается в том, должны ли учащиеся изучать стандартные алгоритмы сортировки и поиска. Одна сторона настаивает на том, что все эффективные алгоритмы уже давно написаны и включены в библиотеки. Следовательно, любой может просто использовать их.
Их оппоненты уверены, что написание алгоритмов самостоятельно-отличное упражнение в программистском мышлении, и, кроме того, это тест на его наличие у студента. Я, скорее всего, принадлежу к последнему, особенно учитывая тот факт, что на собеседованиях с младшими студентами Java их часто просят написать тот или иной алгоритм, иногда даже на листе бумаги. Хотя знание алгоритмов не связано со знанием Java как такового, я рекомендую всем будущим программистам поработать над этой темой. Это не будет лишним.
Другое дело, что во время реальной работы программиста вам, скорее всего, не понадобится алгоритм сортировки пузырьков и тому подобное. Гораздо важнее будет знать, в каких библиотеках можно найти стандартные алгоритмы. В ходе опроса 69,6% студентов заявили, что они знали и кодировали алгоритмы сортировки и поиска на хорошем и среднем уровне до получения первого предложения о работе.
Мы уже затрагивали тему структур данных, когда говорили о коллекциях Java. Опять же, я считаю необходимым понять их архитектуру, чтобы знать, где и что использовать и почему. Поэтому я часто прошу своих студентов написать свой собственный класс для той или иной структуры данных.
Опять же, во время работы все обычно используют стандартные структуры данных, и не все из них.
Где изучать алгоритмы и структуры данных
Во-первых, вы можете найти хорошую книгу, такую как Алгоритмы Роберта Седжвика и Кевина Уэйна. Кроме того, у тех же авторов есть онлайн-курс на Coursera . Это один из моих любимых, и он использует Java. GeeksforGeeks – это огромное онлайн-сообщество, где вы можете найти множество лекций и упражнений по алгоритмам.
Модульное тестирование
Каждый хороший программист может тестировать код, и не только свой собственный, поэтому узнайте, как писать модульные тесты для вашего кода. Иногда новички пренебрегают модульным тестированием, предпочитая System.out.println
тип проверки (если вы уже пытались написать код, вы знаете, что я имею в виду). Помните, что модульные тесты гораздо полезнее, чем проверка с помощью вывода на консоль. Модульные тесты также являются первым, чему компании обычно доверяют написание новых разработчиков. Согласно опросу, 57,5% респондентов использовали JUnit до своего первого успешного собеседования, связанного с Java, и более 83% уже использовали модульное тестирование в свой первый год работы.
Где научиться модульному тестированию
Будет, найдите учебник (например, этот видеоурок или этот текстовый учебник ), а затем создайте тесты для всего вашего кода!
Служебные библиотеки и полезные компоненты
Некоторые работодатели ожидают, что будущие программисты будут знать ряд инструментов и библиотек, которые помогут им в работе.
- Сервлеты-это программные компоненты Java, которые расширяют возможности сервера.
- JDBC-это независимый от платформы стандарт взаимодействия между приложениями Java и базами данных. JDBC реализован в виде пакета java.sql, входящего в состав Java SE (стандартная версия).
- log4j-самая известная библиотека для регистрации сообщений. Это позволяет вам писать вызовы библиотек в коде Java, а затем гибко настраивать его, не изменяя уже написанный код.
- Джексон/ДЖСОН. JSON (обозначение объектов JavaScript) является чрезвычайно популярным открытым стандартным форматом файлов и форматом обмена данными, в то время как Jackson является высокопроизводительным процессором JSON для Java.
Более половины респондентов знали эти технологии до того, как получили свою первую работу, связанную с Java. Все новички использовали JSON/Jackson на своей работе, и большинство из них использовали JDBC (84,8%) или log4j2 (83,3%). Две трети респондентов использовали сервлеты в течение первого года обучения в качестве младших и стажеров Java.
- Guava-это набор общих библиотек с открытым исходным кодом для Java, в основном разработанный инженерами Google.
- Apache Commons-это огромный проект Apache, ориентированный на все аспекты многоразовых компонентов Java.
Во время учебы я рекомендую вам посвятить время log4j, JSON, JDBC (вместе с инструментами SQL и баз данных). Однако другие технологии из списка и библиотеки могут быть полезны.
Где можно изучить библиотеки утилит и полезные компоненты
- Текстовое руководство по log4j на tutorialspoint или видеокурс по Udemy
- В Code Gym есть несколько тем JSON, log4j, JDBC и упражнений в их курсе.
- Java-сервлеты на эврике
Весна/Зимняя спячка
Некоторое время назад никто не требовал знания фреймворков от младшего, не говоря уже о стажере. Однако времена меняются, и некоторые компании не будут заниматься этим, если у вас нет понимания этих технологий. Научиться работать с ними самостоятельно очень сложно, хотя и возможно. Однако в этом случае я бы рекомендовал найти курсы и пройти их с наставником.
- Весна — 33,3% респондентов оценили свои знания о Весне как “хорошие или отличные”, в то время как 21,2% ничего не знали об этой структуре.
- Spring Boot — 42,4% респондентов знали Spring Boot (хороший или отличный уровень), а 36,4% об этом не знали.
- Спящий режим — 43,9% знали, что спящий режим находится на хорошем или отличном уровне, в то время как 27,3% никогда его не пробовали.
- Java API для веб — служб RESTful-90,9% использовали его во время работы.
Где учиться весне/Зимней спячке
Как я уже говорил ранее, лучший способ изучить Spring и Hibernate-это найти курсы с небольшой командой и преподавателем, но это не всегда возможно. Я нашел несколько интересных ресурсов для их изучения.
Весенний урок по строительству Весеннее практическое задание Учебник по пружинам и руководство по пружинной загрузке на spring.io Спящий режим и весна на Udemy RESTful API на Udemy
Дизайн и архитектурные шаблоны и принципы программирования
Шаблоны проектирования-это хорошо зарекомендовавшие себя решения для решения некоторых конкретных задач. Если вы их не знаете, вы доставляете своему будущему работодателю головную боль. Найдите время, чтобы прочитать о шаблонах и применить их на практике. Та же история с архитектурными шаблонами, например, MVC. Я всегда прошу своих студентов создавать некоторые программы с использованием MVC. Это становится намного сложнее, но после этого они знают, как это использовать.
Кроме того, было бы полезно прочитать о простом и хорошо читаемом коде в соответствии с принципами KISS, DRY и SOLID. Честно говоря, их легко понять, но требуется время, чтобы использовать их на практике. Вот почему, когда я проводил собеседования с кандидатами на младшие должности, я никогда не требовал, чтобы кандидаты хорошо знали эти принципы, понимая, что они приходят с практикой.
Где можно узнать и прочитать о моделях и принципах
Гуру рефакторинга ТВЕРДЫЙ, ПОЦЕЛУЙ, СУХОЙ, ЯГНИ
Средства автоматизации сборки, Серверы приложений и не-Java
Существуют технологии и навыки, которые большинство ИТ – специалистов должны иметь в своем арсенале. Они не имеют прямого отношения к Java, но я все равно упомяну о них — их нетрудно изучить на начальном уровне. Кроме того, лучше сделать это до того, как вы начнете работать, потому что в этот момент у вас не будет на них времени.
Где можно научиться создавать средства автоматизации, серверы приложений и не-Java
Учебные пособия и руководства по Gradle Maven за 5 минут Введение в Tomcat 7 JBoss SQL , JavaScript , HTML , CSS в w3schools
Выводы
Хмм … Выглядит немного пугающе, не так ли? С другой стороны, если вы любите программирование, интересуетесь технологиями и полны решимости стать программистом, то вам не нужно бояться. Работайте шаг за шагом, практикуйтесь, учитесь, и пусть сила пребудет с вами. Дорогу будет осваивать пеший.
Впервые опубликовано на Лучшее программирование .
Оригинал: “https://www.codementor.io/@johnselawsky/how-much-java-do-you-need-to-learn-to-get-your-first-job-1be9w0rvxb”