Что сейчас изучать? (языки, фреймворки, порядок изучения)

By 06.08.2019 Август 13th, 2019 Вопросы, Основы
Эта статья — ответ на многие вопросы, которые приходят на почту:
  • «Что сейчас изучать?»
  • «Какие языки/технологии нужны?»
  • «Какая последовательность изучения?»

Решил собрать все в одном месте.

Небольшое отступление.
Чтобы стать профессиональным программистом, нужно соблюдать простые правила:
  • Каждый день тратить минимум 2 часа на свое обучение (каждый час делать перерыв на 5-10 мин). Хороший вариант: вставать рано утром в 5-6 и позаниматься до основной работы, если она у вас есть. Утром мозг «впитывает» в 2-3 раза быстрее (не у всех, нужно проверять).
  • Изучать материалы последовательно, без прыжков (чтобы знания «наслаивались» друг на друга и был крепкий фундамент) — этот принцип работает в любом деле (вы не сможете поднять штангу сразу в 100 кг, начинаете с 10-15 кг)
  • Все новые знания сразу применять на практике (создайте свой проект по шагам с нуля, изучите более сложные чужие проекты, например на GitHub). Просто так читать книги или статьи не нужно — сразу пытайтесь реализовать все своими руками.

Последовательность изучения материалов

Основы Java

C этого нужно начинать в любом случае, иначе НИКОГДА не станете профессиональным программистом (останется много пробелов в знаниях).
  • ООП, организация кода, объекты, связи
  • Работа с любой реляционной БД, например MySQL (JDBC, SQL)
  • Желательно — понимание и применением основных паттернов проектирования
  • Работа в IDE (например, IntelliJ IDEA) — сокращения, быстрое создание кода, шаблоны
  • Разработка 5-6 Java проектов с нуля (можно консольных, но еще лучше Swing или JavaFX, чтобы вы могли создать минимальный UI (user interface) для десктоп — внешний вид с кнопками, формами)
Вы можете посмотреть раздел «Основы Java» на нашей странице с курсами, там как раз примерно такая последовательность.
Swing и JavaFX
Swing и JavaFX сейчас, мягко говоря, не сильно популярны (уступили место более современным фреймворкам), но вам и не надо становиться в них профессионалом. Их можно быстро выучить за 1-2 дня.
Вам эти технологии нужны для собственного опыта, набить руку. Не нужно ими «хвастаться» на собеседованиях — это только для вас, чтобы было интереснее.
Кстати, многие принципы оттуда «перекочевали» и в современные фреймворки, поэтому в любом случае будет польза.
Но если вам удобно — можно и попрактиковаться просто в консольных приложениях, главное понять основные принципы ООП и научиться работать с БД.
Проверьте себя, у вас хорошие основы Java?
Если хотя бы на 1 пункт ответили нет — лучше вернитесь и закройте пробел:
  • У вас есть опыт разработки любых 5-6 проектов на Java с нуля своими руками
  • Умеете применять ООП: принцип «абстракция-реализация», инкапсуляция, наследование, композиция, объекты
  • Вы можете спроектировать функционал в свободной форме в виде схемы (на бумаге) и перенести ее в код (создать объекты, связи, правильную структуру кода)
  • Вы умеете создавать универсальный код (который можно легко расширять и дорабатывать) с помощью ООП
  • Умеете создавать несложные структуры таблиц и правильно их организовывать (разбивать, упрощать)
  • Умеете отправлять SQL запросы и обрабатывать результаты (с помощью JDBC)
На изучение основ Java уходит примерно 1-2 месяца (если заниматься 2-3 часа в день).

Веб разработка

Многие разработчики идут в Java для того, чтобы создавать именно веб проекты (enterprise, корпоративные проекты). За них хорошо платят и они нужны в любой крупной/средней компании.
Поэтому сразу после основ можете переходить к вебу.
И здесь вас ждет большая «вилка», которая не дает спать многим новичкам — что изучать?
Во-первых нужно понимать, что у веб проектов есть backend (сервер) и frontend (клиент).
Часто на крупных проектах программистов разделяют — одни занимаются только бэкендом (работа с БД, логикой), другие фронтендом (визуальная часть, с помощью которой отправляются запросы на сервер и показывается результат клиенту).
В идеале конечно вы должны знать обе стороны, чтобы понимать как создавать полностью проект.

 

Backend это может быть:
  • JavaEE — стандартный/изначальный стек технологий
  • Spring Framework — самый популярный Java фреймворк для веб проектов
  • Hibernate — промежуточный ORM слой для работы с БД (вы работаете с таблицами как с объектами)
  • RESTful сервисы (или другие веб сервисы) — для предоставления своего функционала
  • База данных — возможно NoSQL-решение  (например, MongoDB) — можно использовать вместо реляционной БД.
  • И другие доп. технологии, которые облегчают создание серверной части
Frontend это:
  • Все современные JavaScript фреймворки (Angular от Google, React от Facebook, Vue.js и пр.) — позволяют создавать красивый UI. Хотя при желании на них можно создавать и backend (сервер Node.js)
Фреймворки на JavaScript развиваются семимильными шагами и хотят закрыть вообще все направления (веб, мобильные, контроллеры и пр.) — поэтому их изучать сейчас нужно всем веб разработчикам.
Также, нужно знать стандартные: HTML, CSS (можно понять за 1-2 вечера) — для отображения веб страниц.
TypeScript
Вместо JavaScript сейчас часто используется язык TypeScript — его доработанная версия (строгая типизация, возможности ООП, похож на Java/Kotlin, поэтому сможете без проблем выучить) — будет отдельная статья.
Конечно, каждый сам выбирает удобный для себя инструментарий, но для Java разработчиков вырисовывается примерно такая связка:
Фронтенд (Angular/React/TypeScript) + бэкенд (Java/Spring/Hibernate/RESTful)
по такому принципу сейчас работают многие крупные компании.
Фронтенд показывает страницу клиенту, обрабатывает его запросы, отправляет их на бэкенд (RESTful сервисы), получает обратно результат (например, в формате JSON) и снова отображает страницу.
И главное — везде используются знания из 1-го блока «Основы Java», который описан выше (ООП, БД, SQL) — без этого никуда.
Здесь я не говорю про другие языки и технологии (PHP, ASP.NET, Python/Django, Ruby on Rails и пр.), а делаю упор именно на Java и связанные технологии (вообще я вам не советую зацикливаться только на одном языке, в свободное время изучайте все новое и современное для расширения кругозора).

Нужен ли JavaEE/JSP/JSF?

  • Сервлет — одна из первых первых попыток отображения веб страниц на Java сервере (сейчас используется только для небольшого функционала)
  • JSP — Java Server Pages — вместо написание веб страниц в коде Java (сервлеты) тут можно создавать отдельные веб страницы и в них реализовать всю логику отображения
  • JSF — Java Server Faces — пришел на смену JSP и более удобен в использовании. Многие проекты из 2000-х годов до сих пор «сидят» на нем и успешно работают.
Это стандартные/изначальные технологии для веб проектов, но они как и Swing/JavaFX сдают свои позиции.

НО!

Многие государственные структуры в СНГ до сих пор используют JavaEE и не торопятся переходить на современные фреймворки (из-за договоров, требованиям к безопасности и т.д.)
Поэтому вы должны в любом случае хотя бы на минимальном уровне знать как работают эти технологии, создать несколько проектов на JSP/JSF. Тем самым — это во-первых будет вашим трамплином для изучения современных фреймворков, а во-вторых расширяет ваш диапазон для поиска работы.
Если у вас время не ждет — не нужно становиться профессионалом в JavaEE и тратить на него много времени (если это только не требуется по работе). Хотя, как обычно — многие принципы из JavaEE перекочевали в современные фреймворки.
***
Итого, вы должны уметь создавать как backend, так и frontend — тогда сможете создавать комплексные веб проекты.
Что изучать для backend:
  • Spring Framework — самый популярный Java фреймворк для серверных решений (куча возможностей и удобств)
  • Hibernate — для работы с БД как с объектами (принципы ORM, JPA)
  • RESTful сервисы — могут использоваться другими программами и также фронтендом
  • Реляционная БД (MySQL) или NoSQL (MongoDB) — для хранения данных — оба подхода нужно знать и уметь использовать.
  • JavaEE — (необязательно, если того не требует ваша работа или вы не хотите устроиться в гос. структуру) минимально знать как работает JavaEE, из каких компонентов состоит его стек технологий.
Что изучать для frontend
  • HTML, CSS — отображение веб страниц со стилями
  • JavaScript фреймворк (Angular, React) — самые трендовые технологии #прямосейчас. Можно начать с Angular, т.к. он более понятен для новиков и много функционала доступно «из коробки».
  • TypeScript — обязателен к изучению, сможете легко выучить, если хорошо знаете Java. Используется во фреймворках
  • JSP/JSF (необязательно, если того не требует ваша работа или вы не хотите устроиться в гос. структуру) — несколько проектов + любая БД

Мобильные приложения

В этот раздел многие переходят, минуя веб разработку. Зависит от того, что вам интересней.
Но в любом случае знания основ Java (ООП, БД, SQL) нужны.
Родные технологии:
  • Язык Java/Kotlin для Android. Весь Android потихоньку переходит на Kotlin (по сути — доработанный язык Java, на нем можно создавать и веб приложения)
  • Язык Swift для операционных систем Apple (iOS, macOS, watchOS, tvOS) — похож на Kotlin, пришел на смену языка Objective-C, у которого порог вхождения очень высокий.
Вообще все последние языки берут друг у друга все лучшее, поэтому часто принципы похожи. Выучив один язык, легко сможете выучить другой.
Например, я вначале изучил Java, затем сел за Kotlin. Понял его основные возможности, затем легко выучил Swift и TypeScript — у них много схожих принципов.
Нативные приложения с помощью фреймворков Angular Ionic / React Native / Vue Native
Современные JavaScript фреймворки позволяют также создавать не только веб, но и нативные (native — родные) мобильные приложения. Можно реализовывать приложения на языке TypeSсript, и они будут запускаться  как на ОС Android, так и на iOS. Принцип «пишете код один раз, а запускаете везде». Т.е. не нужно будет создавать отдельные приложения, каждая на своем языке.
В данный момент у React более удобная библиотека для мобильных приложений (React Native) по сравнению с Angular и Vue.
У такого подхода есть как плюсы, так и минусы, об этом будет отдельная статья.

PWA (progressive web applications)

Вы также можете создавать PWA (progressive web applications), которые могут выглядеть как обычное мобильное приложение. Оно также устанавливается, имеет ярлык, может отправлять push-уведомления. По сути вы даже не сможете отличить что у вас работает — нативное приложение или PWA.
По сути вы пишете одно веб приложение, и оно же становится мобильным приложением.
Как утверждают аналитики, за PWA — будущее, по крайней мере ближайшее. Конечно, у них меньше возможностей, чем у нативных приложений, но граница потихоньку уже стирается.
Многие крупные компании перешли на эту технологию (Facebook, Uber и пр.) и значительно ускорили работу своих приложений. Примеры можно посмотреть тут.
Что изучать:
  • Самый короткий путь — если вы изучили веб разработку — то можете использовать TypeScript + ReactNative и принципы PWA приложений. Таким образом, не нужно изучать новые языки (Kotlin и Swift) для создания нативных приложений Android/iOS
  • В идеале я вам советую поочередно сначала выучить Android/Kotlin, затем iOS/Swift и потом уже React/PWA
***
Подытожим, какие языки сейчас нужно знать, чтобы вы могли реализовать практически любую задачу.
  • Java — обязательно
  • TypeScript — обязательно
  • Дополнение к TypeScript — реактивное программирование (RxJS) — обязательно, хотя бы основные возможности (используется во всех фреймворках для работы с данными)
  • Kotlin — желательно (а через год-два обязательно) — может начать заменять Java
  • Swift — желательно (сможете создавать любые приложения для семейства Apple)
С их помощью вы можете создавать любые типы приложений. Я лично сделал упор именно на них, остальные языки — по интересу или по возможности.
* Реактивное программирование — использование т.н. потоков, подписок, слушатели изменений значений — хорошее дополнение ко всем современным языкам (будет отдельная статья), в том числе есть на Java, TypeScript и пр.

Фреймворки, технологии:

  • Spring Framework — создание серверного кода
  • Hibernate — работа с БД
  • Базы данных: реляционные (MySQL) или NoSQL (MongoDB)
  • RESTful и JSON — предоставление и получение данных
  • Angular/React — нужно знать оба, тем более, что язык у них один — TypeScript
С помощью них сможете создавать все, что угодно.
Это то, к чему я пришел в данный момент за более, чем 15 лет разработки.

Вопросы

Сколько времени уйдет, чтобы стать Junior/устроиться на работу/начать зарабатывать деньги?
Если начиняете с нуля, то как показывает практика моих учеников — в среднем около полугода (у кого-то быстрее, у кого-то дольше).
Где тут Xamarin (Visual Studio, C#)?

Сейчас эта технология сильно начала отставать от React Native (если даже посмотреть по статистике запросов), поэтому отдельно ее выделять не стал. Я в свое время немного изучал Xamarin, но остался не сильно доволен.
Есть ли у вас курсы по этим темам?
Да, можете посмотреть на этой странице.
Может ли Java умереть из-за JavaScript?
В ближайшие десятилетия точно нет, особенно если вы выучите Kotlin. Серверные приложения еще долго будут делать на Java (не JavaScript), т.к. все технологии протестированы уже на миллионах проектов. Что касается JavaScript — то он сейчас выигрывает на стороне фронтенда (Java на этом поле давно уже не играет).
Какую IDE используете?
В основном IntelliJ IDEA (кроме iOS разработки, там своя среда XCode).
P.S. Пишите свои вопросы в комментариях, буду добавлять их в статью
Нажмите на кнопки ниже, чтобы поделиться с друзьями:

Author Тимур Батыршинов

Основатель обучающего центра «JavaBegin». Главный тренер. Обучил более 46000 человек (онлайн и оффлайн), провел более 900 онлайн-вебинаров. Опыт разработки на Java и других языках — более 15 лет. Автор более 50 курсов по разным направлениям Java: основы, веб, Android, Spring, iOS, Angular, React и многие другие. Все курсы автора

More posts by Тимур Батыршинов

19
Оставить комментарий

  Подписаться  
Уведомление о
Николай Фоменко

Начал изучать angular и там постоянно используется «реактивное программирование», раньше даже не касался его. Нужно ли знать RxJS или можно обойтись без него?

Николай

Здравствуйте.

А когда у вас выходят курсы по Angular/React/TypeScript?

oleg

А как насчет React Native? он когда будет?

jobmaster

спасибо, очень полезно

зачем мы тогда тратили столько времени на изучение JavaEE, а сейчас он никому не нужен?

Роман

Знакомы ли с языком Dart? Видите ли перспективы для него?
Спасибо за статью!

Вит

А как же такие технологии как Spark который в скорее вроде вытеснит спринг только гост структуры … как вы считаете …

Игорь Веретенников

Какую IDE обычно используете?

Марат Зом

просто смотрите вакансии на hh или других сайтах — там можно понять, что сейчас востребовано

Олег

Сейчас изучаю Rust и Go. Про них ни слова не сказали. Как по вашему, они нужны? До этого работал на C#