Привет! Меня зовут Захар. Несколько лет назад я работал в театре и учился на философском факультете, но однажды решил изменить свою жизнь и стать разработчиком. В статье расскажу, что помогло мне начать путь в ИТ и почему я выбрал бэкенд на Java. Мне всегда были интересны компьютеры и программы, но, когда думал о смене сферы с гуманитарной на техническую, начинал сомневаться: какой из меня разработчик?  Было несколько попыток начать программировать: пробовал изучать C# и Python, даже собрал калькулятор по учебнику. Но на этом все заканчивалось, не хватало базы и структуры. Будто садят за руль автомобиля без подготовки и говорят: «Едь», — параллельно подсказывая, какую педаль нажимать и какой рычаг дергать.  В интернете я наткнулся на курс Гарварда CS50. Все семестры в открытом доступе на английском языке. Есть и русская озвучка курса 2015 года, однако каждый год программа курса слегка меняется. Я начал проходить курс по приколу, но потом втянулся: там была именно та вводная, которой не хватало. Мы проходили С, основные алгоритмы и структуры, потом добавился Python. Важно, что была не только теория, но и задачи, ясно дающие понять, с каким видом деятельности придется сталкиваться в будущем. Проверить решения задач можно было в интернете. А в конце курса — проект: игра на Lua, сайт на Java Script, либо мобильное приложение на Java. Но их я уже не делал. Курс Гарварда помог разобраться в устройстве памяти и взаимодействии с ней, ясно показал работу указателей. Также получилось быстро освоить основные алгоритмы и структуры данных. Курс помог войти в тему и определиться со сферой разработки. Ещё за 5-6 лет до момента обучения, я полностью окунулся в англоязычную среду: поменял язык программ, смотрел youtube-блогеров и стримы, читал блоги. Этот опыт помог быстро адаптироваться к обучению на английском языке.  Также мне было важно укрепить фундаментальные знания — для этого нужно что-то емкое и подробное, поэтому искал учебники. Пособия для более высокоуровневых языков или инструментам к ним часто представляют собой алгоритм: нажми сюда или туда, чтобы получилась вот такая программа. Но после такого подхода не остается знаний и глубокого понимания.  Мне сильно помогли учебники А.В. Столярова, преподавателя МГУ по компьютерным наукам и программированию. Эти учебники дают более глубокое понимание работы с компьютером и программированию в целом. Кому-то нравится верстать сайты и делать интерфейс, а кому-то строить серверную архитектуру, организовывать код. Можно оптимизировать алгоритмы, работать с микроконтроллерами, делать приложения для смартфонов. Каждый из видов деятельности вызывает разные ощущения. Например, работа с интерфейсом или приложениями часто нравится людям, так как в результате можно что-то потрогать, использовать, показать. Меня больше притягивает организация, доставляет особое удовольствие перестраивание кода в порядок, в котором он понятен с первого взгляда. Тогда коду ничто не мешает в работе, не происходит конфликтов, и разные части могут работать без ошибок. Я начал смотреть вакансии для бэкенда, чтобы выбрать язык программирования. Выбрал Java — язык требовался во многих вакансиях, плюс он решает задачи, которые мне интересны. К учебе подходил вдумчиво и не торопился: читал внимательно, доучивал материал и старался доводить проекты до конца. Начал конспектировать учебник по Java для начинающих на 900 страниц: изучал по 40 страниц в день (Г.Шилдт — «Java. Руководство для начинающих»). А практиковался в решении задач на курсе Java Rush. Параллельно смотрел лекции и читал книгу по алгоритмам и структурам. Изучал фреймворки, которые понадобятся для работы с Java — это в основном Spring, Hibernate («Spring in Action», «Spring 5 для профессионалов», «Java persistence with JPA and Hibernate»). Также в этой сфере никуда без знания SQL, в том же CS50 есть хорошая вводная. Также нужна работа с какой-нибудь реляционной БД, например, PostgreSQL. На учебниках тоже не останавливался, есть отличные сайты с информацией по этим технологиям (baeldung.com, mkyoung.com) и официальная документация. Когда переходишь в ИТ из гуманитарной сферы, важно не только рассказать, что умеешь, но и доказать это проектами. Я не знал, сколько буду делать проект, поэтому решил делать маленькие приложения, выстраивая их в цепочку, которую можно продолжать до бесконечности. Простые микросервисы.  Начал я с приложения с реляционной базой данных, в схеме которой был очень простой магазин. Приложение читает по запросу данные и отдает по протоколу SOAP. Затем я поставил второе, которое запрашивает у первого данные, кеширует в Redis и отдает через REST api. Также там была сделана авторизация с JWT Token.  Начал делать третье, но не успел закончить, оно так и осталось незавершенным. По задумке это было веб-приложение с интерфейсом, в котором есть админка для магазина и она общается по api со вторым приложением. Я уверен, что так можно строить проекты до бесконечности.  Портфолио залил на гитхаб и подробно описал на английском, как оно работает. Здесь можно посмотреть, как гитхаб выглядел тогда — я его не менял.  Я откликался на вакансии junior-разработчика на HH, но мне не отвечали. Тогда я начал отправлять резюме напрямую на почту в HR-отделы компаний. Отправил в восемь компаний, мне ответили три, из которых я выбрал Naumen, потому что компания большая и задачи для меня интересные. Чтобы подготовиться, на ютубе слушал, как составлять резюме: на что смотрят, как проходят тестовые интервью, советы по организации гитхаба с pet-проектами, выписывал примеры. На хабре читал «частые технические вопросы на собеседованиях по Java». Несмотря на то, что по пути много раз хотелось сдаться и, казалось, что ничего не получится, не стоит сдаваться раньше времени — учитесь, делайте pet-проекты, ходите на собеседования. Главное — упорство и терпение.