Как учить язык программирования Java

Каждый неофит Java ставит перед собой вопрос, как ему освоить данный язык? Ответов в сети предостаточно, я же попытаюсь объединить часть из них и приправить все это своим опытом. Как говорится летс гоу:

  1. В чем залог успеха изучения языка программирования?

В понимании того, зачем вам это нужно. Тут такие дефиниции как «программировать круто» или «буду делать компьютерные игры» или «ща выучу по быстрому и буду бабки нормальные получать» не прокатит. Нужна мощная мотивация и выход из зоны комфорта, которые помогут вам избежать прокрастинацию и лень. Нужна четкая цель с пошаговым планом и с датами. Лучше потратить на такую проработку неделю, чем просто начать хвататься за все подряд. На своем примере скажу — выучить язык мне мешает моя текущая профессия, просто не каждый синиор девелопер в нашей стране получает такой зароботок — поэтому для меня это пока хобби, а от сюда соответствующие результаты.

  1. Хочу стать программистом чтобы зарабатывать много денег.

Не хочу вас огорчать, но заработать МНОГО денег став, например, маркетологом, брокером, финансистом, предпринимателем, блогером ГОРАЗДО вероятнее. Если вы думаете что, став программистом вы тут же разработаете какую-нибудь игру-хит или популярную интернет платформу для бизнеса/пользователей и будете программировать сидя на пляжу где-нибудь на Бали, а бабки будут течь вам рекой, то вы зря так думаете. Даже если у вас есть суперидея, не надо становится программистом, надо становится организатором — предпринимателем, наймите или уговорите исполнителей и запустите свою идею в продакшен. В России в программировании НЕТ БОЛЬШИХ БАБОК для исполнителей!!! Ну станете вы синиором через 10 лет, если повезет — будете получать свои 250 000-300 000 руб. в мес. А став предпринимателем, брокером, маркетологом, блогером вы сможете те же бабки года через 3 получить, а если свой бизнес попрет, то через 10 лет вы будете зарабатывать в разы больше чем синиор программист. В нашем мире организаторские и менеджерские способности вознаграждаются больше чем исполнительские. И да, я написал где больше вероятность, при этом в любой профессии вы можете стать заурядным винтиком со средней ЗП в 100-150 тыс. руб., все будет зависеть от вашего упорства и усердия. Еще раз, за деньгами в эту профессию не стоит ходить, да, в ней есть средняя и высокооплачиваемая зп, но все равно, потолок заработка не космический, а умственного труда требуется уйму. В доказательство — чувак занимается «арбитражем» и получает 5 000 баксов в месяц:

 

  1. Что лучше: учить самостоятельно, записаться на курсы или найти ментора?

Мое мнение — надо задействовать максимум возможных способов обучения исходя из вашего свободного времени. Можно конечно возразить, дескать, зачем проходить на курсах то, что написано в учебнике или в официальной документации, да еще и денег в десятки раз больше отдать. НО, не забывайте, что повторение — мать учения, кроме того, на курсах вам сто процентов сделают акцент на какой-нибудь важный нюанс, который вы пропустили при самостоятельном обучении. Еще на курсах вы сможете найти себе будущего партнера на реализацию собственного проекта, пусть и в учебных целях, но все же согласитесь — хороший бонус. Ментор (персональный наставник) это вообще самый отличный путь из всех возможных. Еще хотелось бы сказать, что если вы учитесь самостоятельно по книгам, то, в принципе, вы сможете выучить язык на требуемом уровне, а вот ходить на курсы и не читать книги — не получится. Итак, еще раз, учим ВСЕМИ возможными способами:

  • Читаем книги и документацию (обязательно!!!).
  • Ходим на курсы/вебинары (если нет денег — качаем в записи).
  • Консультируемся у ментора (дорого, зато эффективно).
  • Пишем свои мини программы (обязательно!!!).
  • Участвуем в open source проектах на java.
  • Устанавливаем обучающие программы на свой смартфон.
  • Помогаем отвечать на вопросы других неофитов java.
  • Заводим блокнот, в который записываем все то, что дается вам сложно.
  • Участвуем в онлайн соревнованиях по решению задачек на языке.
  • Смотрим обучающие видео в интернете и подписываемся на тематические группы в социальных сетях.
  • После первых же пройденных занятий начинаем отвечать на вопросы, которые задают на собеседованиях на junior java программиста (в интернете куча вариантов).
  • Окружаем себя всем тем, что поможет вам изучить язык, хоть магнитики на холодильник вешайте, главное, чтобы помогало.

Страшно? Не бойтесь, далее обо всем поподробней.

  1. Столько много литературы по теме, с чего начать, что читать?

Книги это ваш основной источник знаний. О том, что без книг не обойтись я уже сказал. Книги по Java, условно, можно поделить на две группы — для профессионалов и для новичков. Книги для профессионалов обычно содержат в себе информацию по узкоспециализированному вопросу языка, например «Лямбда-выражения в Java 8», или описывают принцип работы (архитектуру) виртуальной машины, где рассказывается почему разработчики языка стали использовать такой подход в решении вопроса, а не иной. Понятно, что они нам не подходят. Наша цель — книги для новичков. Тут лидерами являются 3 книжки:

  • Java 8. Полное руководство. (Java: The Complete Reference, Ninth Edition) / Герберт Шилдт. — 9 издание. — 2016 — 1376 с.

  • Java. Библиотека профессионала. Том 1. Основы. (Core Java Volume I — Fundamentals) / Кей С. Хорстманн. — 2016 — 864 с.

  • Изучаем Java. (Head First Java ) / Кэти Сиерра, Берт Бейтс. — 2016 — 720 с.

Шилд показался более структурированный в части последовательности подачи материала. У Хорстманна часто дается код с комментарием «это вы узнаете в следующей главе», зато примеры более сложные и близкие к реальности. Выбирая между этими двумя книгами я бы сказал так — если вы никогда ничего не слышали про программирование — то ваш выбор Шилд (хотя я советую Head First Java). Если вам не надо читать в википедии что такое «цикл», «переменная», «оперативная память» и вообще у вас математический склад ума и вы всегда интересовались техникой и IT отраслью — то я бы посоветовал Хорстманна (более сжатая и информация, меньше времени потратите на учебу). «Изучаем Java» — книга в первую очередь для визуалов и гуманитариев, хотя я лично планирую обучаться далее по ней. Книга похожа на конспект лекций по программированию от дизайнера. На каждой странице будут смешные запоминающиеся картинки с принципами написания кода. По ходу текста присутствуют вставки с наиболее часто встречающимися вопросами и заблуждениями учащихся по описываемой теме. Кроме того, в конце каждой главы есть тестовое задание и / или кроссворд из терминов пройденного материала.

  1. Где найти книги, на каком языке читать?

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

  1. Какие курсы посоветуешь?

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

  1. В интернете встречал(а) много лекций и пошаговых обучалок, их достаточно для изучения Java?

Нет. Еще раз, полное описание языка есть только в книгах и официальном мануале. На многих ресурсах такие обучалки содержат тонну ошибок, вдобавок они плохо структурированы. Из всего многообразия посоветую https://www.tutorialspoint.com/java/ Хотя, материала по данному языку ежегодно выходит море и все на отследишь. Не могу утверждать, что не появилось что-то более адекватное и стоящее. Если вбить в гугл learn java или java tutorial, то просто глаза разбегаются, все пересмотреть просто невозможно! Вот еще два блога, которые мне понравилсь, правда их уже почти не ведут http://pr0java.blogspot.ru/p/blog-page.html и http://kostin.ws/java/

  1. В смартфонах тоже есть приложения обучающие программированию?

Куда же без смартфонов. У меня Android и я установил для себя с десяток программ, большая часть из них представляет собой какие-то нарезки из официальной документации с ужасным интерфейсом и шрифтом. В целом могу посоветовать вам следующие: SoloLearn, Learn Java, JavaSamples, Enki, Algorithms. Уверен что и на iOS можно будет найти похожий арсенал ПО.

  1. Стоит ли смотреть видеоуроки? И если да — то какие?

Как говорится «лучше один раз увидеть, чем сто раз услышать». Визуальная картинка всегда воспринимается лучше. Кроме того, на видео вы можете подсмотреть различные фишки работы с IDE или с каким-либо уникальным инструментом разработчика. На том же youtube куча каналов и видео посвященных java. Единственное, чего я советую избегать — каналов для профессионалов (в основном видео с конференций для программистов) и каналов, где, обычно, стоит мужик на фоне маркерной или меловой доски и что-то там рассказывает на протяжении нескольких видеороликов подряд, периодически что-то чертя на доске. Обычно в таком виде встречаются видеолекции для студентов (ну и презентации с конференций), они нудные и мало информативны, точнее они обычно про теорию, а нам нужна ПРАКТИКА, на видео должен быть представлен КОД.

  1. Как-то нудно все, есть ли интересные формы обучения java?

Тадам, вам повезло, за окном 21 век и все смотрят в сторону поколения Z, а оно, как известно, без игровой формы вообще мало что переваривает :) Искали? Держите!

https://javarush.ru
https://www.codewars.com
https://www.codingame.com
https://www.hackerrank.com

Вот вам ещё парочка достаточно известных сайтов с задачками, но уже не в игровой форме:

www.codeabbey.com
www.codingbat.com

  1. А почему все ресурсы в интернете ссылаются на какой-то github?

Хотите вы того или нет, а современное программирование не представляет свою жизнь без системы контроля версии. Она позволяет делать ответвления в программном коде (вилки в разработке), облегчает работу в команде, а так же позволяет вернуться к сохранной точке в программном коде (если вы вдруг поняли, что направление которое вы выбрали — тупиковое, и надо вернутся к коду, который был 3 часа назад). Гитхаб — это как раз такой оналйновый сервис. Опять же для смурфпрограммистов как я есть игровой сайт-обучалка:

https://www.git-game.com/

  1. Вы советовали отвечать на вопросы новичков в программировании на Java, но я же сам только начал учить язык!

Нет лучшего способа что-то запомнить, чем научить этому кого-то другого. Смело топаем на такие форумы и площадки как :

cyberforum.ru
programmersforum.ru
codeby.net
sources.ru
ru.stackoverflow.com

И пытаемся отвечать на вопросы пользователей

  1. Где на просторах интернета можно взглянуть на вопросы на вакансию junior java программиста? С ответами кАнеШнА :)

Начните с этой статьи:

https://javarush.ru/groups/posts/2002-23-voprosa-chasto-zadavaemihkh-na-sobesedovanijakh

Да пожалуйста:
http://javastudy.ru/category/interview/
https://javatalks.ru/topics/9373?page=1
http://wizardjava.com/java/java-voprosy-na-sobesedovanii-i-otvety-chast-1
http://wizardjava.com/java/java-voprosy-na-sobesedovanii-i-otvety-chast-2

Тут вроде нет ответов:
http://becomejavasenior.com/blog/2015/07/01/327-interview-questions-java-developer/

  1. Какие материалы и ресурсы в интернете еще можно посмотреть, почитать, изучить?

Их много, все и не перечислишь. Можно порыться на coursera.org плюс udemy.com или посмотреть лекции от MIT.

  1. Что учить после того, как я выучу Java Core?

Java core это приблизительно 30% от того, что надо знать уважающему себя java программисту :))) К тому моменту как вы закончите обучения Java Core, вы уже сами будете знать что учить дальше. А дальше идет развилка технологий — все зависит от того чем вы хотите заниматься. Тут есть несколько основных направлений:

    • работа на корпоративный сектор — изучать стек технологий относящихся к спецификациям JavaEE (Enterprise Edition — почитайте по ссылке абзац с перечнем технологий). Основным инструментом тут является Spring Framework. Понятно, что данное направление ориентировано на написания серверной части проектов — backend.
    • разработка под мобильную платформу android — не секрет, что приложение для данной платформы пишутся именно на java (в данный момент популярность набирает язык Kotlin). При выборе данного направления изучается свой отдельный набор технологий. Самым популярным фреймворком для андройда являеся Dagger.
    • создание игр — а вот тут я вас хочу огорчить, для этого редко используется Java. Практически все игры в наше время пишутся на игровых движках. Самые популярные из бесплатных (платить придется за дополнительные модули) Unity и Unreal Engine, самое смешное, что первый использует для написания кода C# а второй С++ и визуальный скриптовый язык блупринтов. То есть java в игровой индустрии в пролете!!!

Как вы заметили java не очень популярна в части frontend языка. Кроме вышеперечисленного вам в любом случае придется изучать SQL запросы (какое направления вы бы не выбрали), а так же html/xml/css т.к. без веба в наши дни никуда. Программировать в наши дни без знаний паттернов проектирования тоже сложно. Хорошим подспорьем будет изучение основ javascript, т.к. этот язык находится на буме своей популярности и его пихают во все щели (и сайты на нем пишут, и игры, и приложения для мобилок, и уже на сервер портировали благодаря Node.js), короче быть НЕ КОРПОРАТИВНЫМ программистом и не сталкиваться с javascript в наши дни невозможно.

На этом все. Обещаю постепенно дописывать статью, а вы не стесняйтесь — задавайте вопросы, по возможности отвечу :)

2 комментария

  • Татьяна

    Отличная статья! Разложили все по полочкам и ещё привели ресурсы в помощь. Спасибо!

  • Валентина

    Помимо Stack Overflow, задавать вопросы по Java можно в специальном разделе “Помощь” на JavaRush. В этом сообществе студенты просят подсказки, помогают преодолеть препятствия и делятся ответами и советами. Кстати, вы тоже можете помогать другим студентам с их вопросами — это очень полезно. Такая взаимопомощь поможет учиться быстрее и запоминать больше информации.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *