1. Нужно ли это Мне?
Видимо, самый важный пункт. В связи с экономическим кризисом, многие люди пытаются найти способ обеспечить себя финансово. А тут появляется “IT”, в котором все получают много денег за то, что могут написать 10 строк кода. К тому же, “программирование – это легко”.
К сожалению, это не так. Как бы не пытались основатели различных курсов объяснить, что любой может стать разработчиком за 3 месяца, это не так.
В первую очередь, необходимо помнить, что разработчик программного обеспечения – это инженер. Поэтому и требования соответствующие.
Во-вторых, нужно понимать, что именно представляет собой работа программиста? Прежде всего – это перманентное решение проблем. У Вас не будет момента, когда все проблемы будут решены. Это процесс постоянный. Во-вторых – это огромное количество рутинной работы, выполнять которую по 3-4 часа в день без любви к делу, если не невозможно, то уж точно требует огромного усилия над собой.
Итак, если Вы чувствуете, что разработка программного обеспечения – это то, чем бы вы хотели заниматься более 40% времени своей жизни, то идём дальше.
2. Что именно необходимо для того, чтобы называться Java-разработчиком?
Для того, чтобы Вы с гордостью могли назвать Себя Java Developer с больше буквы “J” необходимо иметь, хотя бы, общее понимание следующих вещей:
- Синтаксис языка, а именно – Java Core;
- Основы Объектно-ориентированного программирования;
- Основы баз данных (SQL);
- JDBC;
- Servlets + JSP;
- ORM (например, Hibernate);
- Любой популярный Web – Framework (например, Spring);
- HTML, CSS, JavaScript;
- VCS (GIT, SVN или подобное).
Теперь, пройдёмся по пунктам:
Java Core
Сюда входит знание и понимание иерархии классов в Java, методы класса Object и, конечно Collection Framework. Какие интерфейсы, кто и кого имплементирует и т.д.
Вот эту картинку, java-разработчик должен нарисовать в 3 утра под артобстрелом:
В изучении Java Core помогут такие книги, как:
И конечно же, никуда не деться от
Java Platform API Specification
Здесь материала крайне много, поэтому лучше не прыгать между книгами, а взяться за одну и “долбить” её “до посинения”.
ООП
От новичка не требуется больше, чем знание и понимание трёх принципов ООП (некоторые считают, что их 4, но тут уж как попадёте и это не так существенно).
Умение на практическом примере объяснить каждый из них.
Основы баз данных и SQL
Эта книга легко и доступно объясняет базовые понятия с иллюстрацией примеров и пошаговыми инструкциями.
JDBC
Кроме понимания того, что такое база данных, необходимо понимать, как Ваше Java приложение с ней взаимодействует.
JDBC 4.1 Specification наиболее полно раскрывает все особенности работы JDBC.
Servlets + JSP
В книгах по Шилтда и Эккель Servlet-ы описываются “вскользь”, для более глубокого понимания, что же это такое необходимо изучить что-то посерьёзнее.
Как JDBC, так и Servlets используются разработчиками в повседневной работе только в редких случаях. Но они лежат в основе всех популярных Framework-ов и понимание того, как эти framework-и утроены “внутри” поможет Вам избежать очень многих глупых ошибок, которые допускают те, кто изучал только framework-и.
Hibernate
Книга, которая является гордостью мира Java – это Java Persistence with Hibernate.
Многие разработчики, которые используют другие технологии (в частности C#), читают эту книгу для того, чтобы глубже понять что такое ORM и какие проблемы оно решает.
Если Вы умеете создать отношения one-to-one, one-to-many и many-to-one и написать простой запрос на HQL – ваших знаний хватит для уровня новичка.
Web – Framework (например, Spring)
После того, как освоено всё, что есть выше можно уже замахнуться на Spring. Для начала написать простое CRUD приложение, а потом узнать, что такое Spring Pet Clinic. Теперь Ваших знаний будет достаточно для того, чтобы с пониманием происходящего создавать более или менее пристойное приложение, которое ходит в базу данных, что-то там делает и т.д. и т.п.
Поздравляю, теперь Вы можете написать то, что можно уже и “потрогать” и показать.
Через 5-6 месяцев, Вы захотите удалить этот код и сделать так, чтобы никто не знал, что именно Вы его автор, но пока это хорошо 🙂
HTML, CSS, JavaScript
Здесь всё просто и неинтересно. Обычная вёрстка, которая для back-end разработчика не представляет особого интереса. Это хлеб front-end-щиков.
Но базовое понимание всего этого быть должно.
Этого Вам хватит с головой.
VCS
Любой проект, в котором работает больше 0 разработчиков не делается без СКВ (системы контроля версий). GIT – наиболее удобная и часто применяемая, конкурирует с ней SVN. Будете знать одну из них – и будет Вам счастье.
По итогу можно сказать, что порог, входа в Java, крайне высок. Количество необходимых знаний для того, чтобы устроиться на работу или начать писать более или менее солидные приложения просто огромно. Но на выходе получаете просто невероятные перспективы.
Важно понимать, что спрос на новичков крайне низкий, несмотря на все попытки показать, что программистов не хватает. Не хватает высококвалифицированных разработчиков с опытом работы от 3-х лет, а новичков с избытком.
Для того, чтобы зацепиться и “войти в IT” Вам поможет адский труд в течение от 6 месяцев до 1 года. Но если это Ваше и Вы готовы для этого вложить такое количество усилий, то дерзайте.
Удачи Вам!
Сергей
Действительно так, особенно в части вакансий – для новичков на порядок меньше чем для опытных девелоперов.
Денис Ковпака
Хорошая статья как по мне))), все ключевые моменты для становления программистом описаны верно. P.S. Спасибо за полезные ссылки на материал.
Владислав Волков
Шикарная статья, впрочем, как и сам блог.
Единственное, я бы дополнил это все дело – хорошим уровнем английского (хотя бы, Pre-Intermediate – Intermediate)
Красный властелин
Совсем не обязательно. Не считая, конечно, фриланса и работы в западных компаниях. Для чтения документации и технической литературы достаточно школьного уровня.
Aliaksandr Kavalenka
Полезно ознакомиться с Вашим опытом. Спасибо.
Красный властелин
Единственная сложность это Spring, рекомендую книгу Spring in Action. Все остальное легко учится, описано на множестве сайтов, статей на Хабре, книг из серии “… для чайников”. Если не считать Spring, то порог входа в Java минимален, на уровне C# и Delphi, по которым есть учебники для школьников.
Vadum Hrynchuk
Абстракция. На которую ругаются воспринимающие термин буквально, речь идет о умении эффективно вычленять сущности (насколько лично я понял).