Нам часто задают вопросы про программу обучения: почему мы предлагаем именно такую программу и почему считаем, что именно специалисты, изучившие темы, которые мы рассматриваем на курсе, будут востребованы на рынке.

При подготовке программы курса “Java — разработчик” мы, в первую очередь, отталкивались от требований работодателей на вакантные позиции уровня middle, начало senior на рынке. Мы сотрудничаем с большим количеством крупных IT-компаний: систематизация их требований к специалистам вместе с собственным опытом собеседований Java SE разработчиков позволили нам составить максимально объективную картину потребностей рынка труда и заключить соглашения с компаниями-партнерами о собеседовании лучших студентов на вакантные позиции.

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

Мы пришли к выводу, что кроме core-java нужно обязательно учитывать специальности:

• специалист по веб серверам на java:
• специалист по работе с базами из java приложений;
• специалист по сетевому взаимодействию java приложений и т.д.

В результате у нас получилась таблица уровней знаний java и специальностей: колонки таблицы отражают специальности: core java, DB, web/net, devops; столбцы таблицы: уровни сложности. Программа курса «Разработчик Java» в Otus.ru основана на этой таблице.



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

Программу обучения на первом месяце мы начинаем с настройки окружения и особенностей настройки в различных ОС, обзора работы систем сборки и управления зависимостями, а также с запуска приложений и параметров запуска. Эта тема крайне важна если вы собираетесь создавать приложения с нуля, скажем для своего стартапа. Впрочем, присоединившимся к существующему проекту тоже не помешает навык настройки среды и проекта. Некоторые темы из core java базового уровня мы все же включили в программу и рассматриваем их глубже, чем обычно принято в курсах по Java: мы рассматриваем содержимое jar файлов — метаданные и байткод, подробно разбираем загрузку классов на старте приложения и виды класслоадеров, внутреннее устройство контейнеров и эффективность их алгоритмов. Мы считаем, что глубокое понимание принципов работы JVM, работы с памятью и типами данных важно для специалиста, который претендует на позицию уровня middle, начало senior. На позициях такого уровня специалист должен применять самое эффективное решение из возможных, а для этого необходимо понимать какое решение наиболее эффективно.

Несколько раз в течение курса мы рассматриваем работу сборщиков мусора, организацию памяти и алгоритмы GC. GC это все, что у вас есть для освобождения памяти. Если вы не хотите гадать от чего у вас на сервере раз в час stop-the-world паузы по 5 минут — вы должны понимать какие GC использовать и как их настроить.

От настроек среды разработки и разбора базовых принципов мы переходим к настройкам запуска приложений и вопросам их тестирования. Мы разбираем популярные тестовые фреймворки, принципы их работы и способы использования. Может ли приложение без тестов работать правильно? Может, но только до первой правки. Мы подробно разбираем аннотации, создание своих аннотаций и обработку аннотаций в runtime, на стадии компиляции и при загрузке классов. Аннотации — очень важный элемент работы многих фреймворков: тестовых, для сервлетов и вебсокетов, для работы с базой. Даже инструмент для обработки аннотаций на стадии компиляции понимает настройку аннотациями.

После подробного разбора особенностей языка и платформы Java мы переходим к принципам проектирования приложений и паттернам — разбираем их как в ключе использования в Java, так и независимо от языка. Знание принципов проектирования и паттернов очень важно для разработчика, и, как бы странно это ни звучало, даже не столько для того, чтобы проектировать. Эти знания необходимы для повышения эффективности диалога между разработчиками — если оба знают паттерны, разговор об архитектуре будет проходить на одном языке.

Следующий блок тем курса посвящен взаимодействию с окружением: работе с файлами при помощи IO и NIO, работе с базами при помощи JDBC и ORM фреймворков и работе с особым типом клиента – веб браузером. К теме про файлы мы добавили сокеты, к теме про реляционные базы – NoSQL и кэширование, к теме про веб серверы – то как запуститься в контейнере и как встроить веб сервер к себе в приложение. Само по себе java-приложение (особенно сервер) мало интересно пользователю. Важно чтобы приложение могло отвечать на запросы и взаимодействовать с окружением. В этой теме мы разбираем наиболее распространенные решения задачи взаимодействия с наиболее востребованными системами и серверами.

Последними, и наиболее сложными темами курса, являются темы многопоточности, межпоточного и межпроцессного взаимодействия. Мы разбираем как создавать потоки, как управлять их жизненными циклом, как безопасно организовать взаимодействие потоков при помощи библиотеки и средствами JMM. Современные Java-приложения обычно распределены по серверам в сети и содержат в себе несколько десятков потоков, без понимания принципов работы многопоточных и распределенных систем невозможно сделать их надежными и безопасными.
Курс не включает темы Java EE. Почему? Потому что Java EE мы планируем рассказывать в отдельном курсе :)

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

Заинтересовались? Приходите к нам учиться. Новая группа Java начинает обучение уже 3 июня!