Мини-Клондайк начинающего программиста. Часть 2

"Хочу поделиться с вами тем, что я нашёл в процессе обучения, что мне понравилось и что было полезным..."
10 минут23670

Здравствуйте, уважаемые пользователи GeekBrains!

Меня зовут Игорь Филипенко. Ещё в августе я описал свою историю, связанную с программированием. Там же я обещал поделиться полезными материалами, связанными с определёнными областями программирования. Я подумал и решил всё-таки написать мини-гайд для программистов сразу нескольких специальностей. Первая часть моего гайда - здесь

По ранее озвученным просьбам, я решил выложить и вторую часть из цикла статей. Хочу извиниться за задержку. Оказалось, что в случае с изучением конкретного языка не так всё просто. Структурировать ссылки по тематике - задача не из легких. Кроме того, в процессе написания данного материала, я нашёл ещё несколько интересных материалов. Поехали!

За и против

Всем, кто раздумывает о том, чтобы учить Java, я рекомендую взвесить все «за» и «против». Подумайте о том, в какой области вы хотели бы использовать этот язык, а также о перспективах. Потому что периодически всплывают подобные грустные вести:

Вот уже 6 лет идёт долгий бескомпромиссный суд между Google и Oracle за легитимность использования Java в ряде основополагающих пакетов разработки Android. В связи с этим логично, что создатели Android всерьёз рассматривают варианты дальнейшего существования без Java. - https://geekbrains.ru/posts/android_on_swift

Или вот такие:

Прошло два года с момента выпуска Java 8 и многие с нетерпением ожидают выхода Java 9, который отодвинули на март 2017 года. Как сейчас стало известно изданию Ars Technica, компания Oracle вовсе прекратила финансирование и разработку Java EE. - https://habrahabr.ru/post/304812/

Можно предположить, что в скором времени Java утратит свои позиции в тех областях рынка, где она была востребована. На это можно ответить фразой Сергея Немчинского, который в одном из семинаров сказал, что «PHP тоже давненько предсказывали смерть, но он сегодня живее всех живых». Что касается перехода Android на Swift - до сих пор неясно, что для Google будет дешевле: судиться с Oracle или договариваться с Apple. В случае с Java EE я также думаю, что разработка энтерпрайз-решений продолжится, просто этим будет заниматься кто-то другой. В общем, если вас не отпугнули приведённые выше новости, идём дальше.

С места в карьер

А дальше я хотел бы вас немножко шокировать. Прошу ознакомиться с этой ссылкой.

Данный материал, написанный Станиславом Лозенко, на мой взгляд, является одним из самых толковых. Я уже чувствую, как вы напряглись и взгрустнули - литературы там действительно много, как и разных инструментов, которые надо освоить. К сожалению, если вы выбрали путь Java-джедая, придётся в это лезть. И лезть с головой. Тем не менее всему своё время. Перед тем, как вы начнёте учиться, предлагаю сделать следующее. Вы устанавливаете себе Unix-систему: Ubuntu, Linux-Mint, CentOs или Mac - всё равно. Ваша задача начать знакомство с ОС данного типа. Если у вас нет MacBook'а, но есть обычный ноутбук, я рекомендую установить рядом с Windows в качестве второй системы Ubuntu или Linux Mint. Да, придётся попотеть с настройкой и подружить две операционные системы. Но если вы правильно прикрутите Grub, всё будет в порядке. И не стоит изобретать велосипед - в сети есть туториалы на эту тему. Предупреждаю сразу: скорей всего после Windows вам будет совсем непривычно, возможно, даже сильно. Но через 2-3 месяца интенсивного использования вы почувствуете кайф от новой системы. Не забудьте ещё установить менеджер пакетов Synaptic, а также почитайте про apt-get.

При работе с Ubuntu и подобными вещами вашей первичной задачей будет ознакомление с командной строкой - терминалом. Быстро смотрим это и записываем основные команды терминала. Тем, кто проникся и относительно свободен, советую осилить курс от Степика. Параллельно держите в уме статью Станислава Лозенко и по возможности знакомьтесь с книгами по Linux, которые он предлагает. Умение работать с данной ОС требуется во многих компаниях. Особенно часто это требуют у Java-разработчиков. Основная идея состоит в том, что вы будете набивать шишки об Linux, параллельно изучая Java, - это сэкономит много времени. Уверен, скажете мне потом спасибо.

Инструменты

В качестве IDE я рекомендую выбрать InteliJ IDEA. Эта среда разработки уже перегнала Eclipse по популярности. На её базе разработана Android Studio. Вполне возможно, вам придётся столкнуться с другими средами от Jet Brains. Они похожи во многом, так что если разберётесь в одной, осилите и другие.

Далее ваша задача прикрутить к IDE сборщик проектов. Ant, Maven, Gradle - выбирайте. Если сложно определиться, подскажу – хватайте Gradle. Данный выбор объясню следующими аргументами:

  1. Если вы не работали с XML, с Maven может быть непросто. Gradle мне-новичку показался более понятным, потому что с XML я познакомился позже.
  2. Gradle'ом вы будете собирать проекты в Android Studio. Там он идёт по умолчанию.

В общем, я бы начал с Gradle. Поймёте основные моменты, легко сможете “пересесть” на Ant и на Maven. Если вы выбрали Gradle, то разберитесь с тем, как создаётся проект, и с его структурой. Изучите файл gradle.build, научитесь указывать зависимости и подгружать сторонние библиотеки. Для этого смотрим:

По Maven смотрим это:

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

Создайте аккаунт на Гитхабе. Научитесь базовым командам, с помощью которых вы сможете создавать и управлять репозиториями:

После этого, все ваши задания вам следует "коммитить" в ваши репозитории. Причины, по которым стоит это сделать:

  • GIT-практика: устроившись на работу, вы будете пользоваться им регулярно;
  • структурирование кода;
  • насыщение вашего портфолио.

Понимаю, звучит забавно! Какому работодателю будет интересно разглядывать решённые вами простенькие задачки? Однако на одном из собеседований перед стажировкой меня попросили показать примеры моего кода: хотя бы того, что я писал на курсах. Если бы я тогда работал с GIT, то наверняка залил бы в репозиторий несколько решённых задачек и показал бы. А так... Поэтому самые интересные ваши работы я рекомендую заливать на гитхаб.

Итак, вы настроили важные инструменты, которые будете использовать в изучении Java. Конечно, так сложнее, но вы убьёте несколько зайцев одним выстрелом.

Мир Java

Java это полностью ООП-язык, поэтому я и уделил парадигмам ООП внимание в первой статье. После С++ перейти на этот язык программирования большого труда не составит. Знакомство с Java я советую начинать так:

  • Первые 10 уровней javarush.ru бесплатны: регистрируемся, решаем задания, знакомимся с синтаксисом;
  • “Изучаем Java” - книга серии HeadFirst, издательства O’Rilley.

Изучите первые 10 уровней. Дальше решайте сами: нужна ли вам подписка или нет. К этому моменту вы уже получили минимальные знания о синтаксисе. Теперь структурируем и улучшаем их:

  • Этот курс затрагивает те же темы, что вы прошли на javarush, однако многие моменты исследуются подробнее. Более того, в нём показаны некоторые азы, которые вы могли пропустить.
  • Курсы Ивана Головача - преподавателя с огромным опытом и толковыми материалами. К сожалению, я его курсы не осилил из-за своей нетерпеливости. Больше предпочитаю учиться по статьям и книгам, нежели по видео. Однако многие его хвалят.
  • Прекраснейший курс от Mail.ru. К великому сожалению, материалы по практике не выкладываются, но прослушать этот курс я очень рекомендую: улучшите имеющиеся знания и усвоите много нового.

Старт получен! После прохождения вышеперечисленного вы можете записаться на курсы GeekBrains. Насколько я знаю, их ведут Кирилл Ткаленко, Владислав Гасанов, Сергей Лваринов. Под их началом и с уже имеющимися навыками вы ещё сильнее укрепите свои знания. Кроме этого вы можете вернуться в первую часть цикла данных статей и заглянуть в список ссылок. Там есть ещё некоторые курсы по основам Java. Если вам понадобится укрепить базу знаний, вы можете их пройти. Но на первичных этапах вам нужно разобраться и понять Java Core. Также есть смысл пройти курс по Java тут. Как-то я наткнулся на одну из лекций по Java 8, очень понравилось.

В процессе обучения я настоятельно рекомендую заглянуть сюда. Данный портал был создан очень толковым программистом. Вы найдёте всякие полезности и просто хорошие статьи. Также там есть советы, из которых вы узнаете много тонкостей, связанных с Java. Вот ещё ряд ссылочек, с которыми можно ознакомиться:

  • http://www.javaportal.ru/ 
  • http://www.javatpoint.com/ 
  • Этот сайт я настоятельно рекомендую добавить в избранное. Польский программист Йенков (да простит он меня, если я не правильно написал его фамилию) рассказывает о Java, некоторых фреймворках, сборщиках и даже затрагивает веб (html, css, jquery и т.д.). Его туториалы отличаются лаконичностью толковым кодом и ясностью.
  • Сергей Луговой собирает на своём сайте очень полезные ссылки для Java-программистов. У него уже есть свой канал на ютубе, где он разбирает основные вопросы с собеседований. Очень рекомендую ознакомиться.
  • Ворох полезных ссылок на технологии, статьи и инструменты.
  • Ещё одна статья, посвящённая литературе, связанной с Java.

Ну что же, мы плавно подошли к моменту, который проходит каждый Java-разработчик.

Выбор специализации

Сегодня Java-специалисты востребованы в мобильной разработке и в области Enterprise-решений. В сторону десктопных приложений и прочих штук я засматриваться не рекомендую. Нет, всё возможно! Но работу искать придётся дольше. Тут нам очень поможет цикл материалов от Станислава Лозенко. Мне кажется, это лучшие рекомендации программистам по выбору учебной литературы и тактике освоения инструментов для профессиональных программистов Java. Внизу есть список технологий для Enterprise-разработчиков. Теперь ваша задача осуществить выбор профессии. Если вы выбрали мобильную разработку, то следующую часть статьи есть смысл пропустить.

Enterprise

Если вы выбрали эту область, то знакомимся с остальными статьями Станислава Лозенко. С точки зрения практики тут тяжело что-то посоветовать. Что я рекомендую сделать:

  • Напишите свой чат на соккетах. Клиент, сервер: чтобы подключить в 1 сеанс больше 1 клиента, выносите клиента в отдельный поток. Туториалов по этой теме хоть отбавляй, поэтому сложно не будет.
  • В самой первой своей статье, где я рассказал свою историю, есть задачка на написание простого сервера на vert.x. Выполните её.
  • Тут куча задачек, связанных с WEB.
  • Порция задачек для начинающих Java-прогарммистов. Мне понравилось.

Я не знаю, что ещё вам порекомендовать. На мой взгляд, изучение Java Enterprise заключается в написании конкретных проектов с использованием конкретных технологий. Тут уже не надо осваивать какой-то новый синтаксис. Главное - понимать типовые задачи, которые решаются инструментами, применяющимися в данной области. Я думаю, если вы и найдёте какой-то курс, то это будет разработка какого-нибудь приложения, а не решение каких-то мелких задач. Вам нужно научиться писать свои проекты и успешно применять Enterprise-инструменты в них. Что это будут за проекты, я не знаю. Но придумать себе задание вам придётся, иначе нормально вы с этими штучками не познакомитесь. Читать книги - хорошо. Правда без практики они принесут мало пользы. Поэтому создание своего проекта необходимо.

Полезные ссылки про соккеты и не только:

Регулярные выражения

Большинство программистов, так или иначе, сталкиваются с “регулярками”. Если прямо сейчас вы с ними не работаете, то всё равно стоит уделить внимание этой теме. Важно хотя бы в общих чертах понимать, что такое "регулярное выражение" и для чего оно может понадобиться.

XML

Выше я уже косвенно касался данного языка разметки. Желательно посмотреть какие-то книжки по HTML и XML. Основы HTML учим на sololearn. По XML просматриваем:

Опять-таки, я не требую от вас наизусть заучивать XML. Вам просто нужно как следует разобраться в его синтаксисе и тегах.

Базы Данных

По базам есть много хороших книг, но если вы совсем ничего не знали про SQL, начните с книги Бена Форта “SQL за 10 минут”. Ваша основная задача понять, что такое базы данных, что такое СУБД, что с ними можно делать, чего нельзя, что такое JOIN- запросы. Помимо этого по SQL есть много отличных книг, но суть в том, что нет смысла лезть в них с головой, если вы - новичок. Исходите от ваших задач. Смысл в том, чтобы найти какую-то практику по написанию запросов. К сожалению, в этой области я не помогу. Если у кого-то есть полезные ссылки, буду признателен, если поделитесь в комментариях.

Говоря про базы данных и Java нельзя обойти стороной такую прекрасную вещь как JDBC. Без неё вы с базами работать не сможете. Этот интерфейс придётся изучить. Для раскачки читаем это

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

Далее следует почитать про SQL- инъекции. Когда вы поймете, что это за бяка, сразу же просмотрите это.

Дорогу осилит идущий

Ну что же, дорогие друзья. На этом я, пожалуй, закончу данную главу.

Финальная ссылка для этой статьи - не совсем о Java, но познавательно.

Наверное, многого я не охватил. Однако для начала этого будет более, чем достаточно. Повторюсь, не стоит лезть в дебри каждой книжки. На начальном уровне вашими задачами будут:

  • освоение синтаксиса языка;
  • написание простенького проекта;
  • написание проекта посложнее с прикручиванием "свистелок" в виде фреймворков;
  • написание профильного проекта: смотрим требования потенциального работодателя и "пилим" домашний проект, используя стек требуемых им технологий; тут два варианта: махнуть в Enterprise или в мобильную разработку;
  • будет просто великолепно, если вы пристроитесь в какую-нибудь конторку на практику или на стажировку ещё в процессе обучения: вы получите всё самое необходимое для скорейшего роста; да, придётся при этом понервничать, но оно того стоит.

Android - отдельная тема, я могу сделать ещё пост с ссылками на обучающие материалы, если вам это интересно. Не так давно на GeekBrains уже была заметка об этом, поэтому я не знаю, стоит ли по этой теме ещё что-то расписывать. Но если стоит, дайте мне знать в комментариях и я откликнусь.

Также я мог бы рассмотреть ReactJS и поделиться ссылками на изучение данной темы. Кроме того, недавно появилась идея написать что-нибудь по алгоритмам и рефакторингу кода. Пишите ваши просьбы и пожелания в комментариях!

Подводя итог этой статьи, которая писалась тяжело, а сами материалы добывались и вычленялись мной из общего вороха с ещё большим трудом, ещё раз отмечу, что в крайности кидаться не стоит. Всё будет осваиваться вами потихоньку. Не бойтесь пробовать и интересуйтесь предметной областью. Рано или поздно ваш труд и терпение окупятся.

Успехов в учебе!

 

новичкамhtmljavajavascriptphpc++cc#развитиеjava_developer
Нашли ошибку в тексте? Напишите нам.
Спасибо,
что читаете наш блог!