Как стать Java разработчиком — путь специалиста Leantech с нуля до уровня Middle

Привет! Меня зовут Дима, я Java-разработчик. Хочу рассказать как я пришел в профессию, вырос до мидла и перешел из госучреждений в аутсорс компанию по разработке приложений. Рассказ будет полезен джунам и тем, кто хочет изучать Java, но боится потратить время впустую.
Я стараюсь следить за трендами в разработке, чтобы знать какие технологии набирают популярность и не отставать от коллег. Так вот, судя по статистике от Github, Java до сих пор находится в топ-3 самых востребованных языков разработки, хоть и немного сдала позиции за последние пару лет. На первом месте JavaScript, а на втором Python.

Неудивительно, что сейчас многие выпускники и студенты-программисты думают о том, чтобы учить Java. Я этот путь уже прошел, поэтому решил помочь новичкам и рассказать про свой опыт.
Почему я решил стать программистом
Интерес к технологиям у меня был с детства — в 7-8 лет у меня появился плейстейшен, я много играл в игры и мне была интересна сфера IT. В школе мне нравилась математика, и в старших классах я подумал, почему бы не пойти учиться на программиста.
Я не очень хорошо сдал ЕГЭ, у меня было около 150 баллов, но на техническую специальность мне хватило. Сначала я хотел на информатику и вычислительную технику, но решил подать документы на все специальности, связанные с программной инженерией, чтобы наверняка попасть на программирование. В итоге я поступил в ОмГТУ АСОИУ — универ меня заинтересовал агитацией по разработке роботов, сайтов и стажировками в крупных компаниях.
Универ или самообучение?
Для меня главным приоритетом в учебе было получить профессию и стать хорошим специалистом. Я понимал, что для этого нужно много усилий и старался все курсовые и рефераты сдавать сам — это все равно дает какой-то опыт и развивает самостоятельность. У нас в группе была здоровая конкуренция, это тоже помогало нам развиваться.
Универ давал базовые знания, но я понимал, что этого недостаточно. Я старался самостоятельно учиться через YouTube, но в процессе понял, что лучше начать изучение с классических книг по языкам. Потом можно комбинировать с роликами на YouTube, чтобы закрепить информацию. Дело в том, большинство роликов основано именно на этих книгах, а авторы каналов часто пропускают важную информацию — с первоисточником можно заполнить эти пробелы.
Например, у студентов-программистов нет возможности посмотреть, как правильно писать код, все вставляют свои костыли. Преподы смотрят только на результат, а не на то, как реализован код. Чтобы самому разобраться как писать хороший код, можно сначала посмотреть реализацию в книге, потом посмотреть гайды на YouTube и совместить.
Лучше всего смотреть разные источники информации, черпать знания отовсюду — учеба, книги, статьи и видео экспертов, потом все это пробовать на практике.
Вот мой топ книг и каналов для обучения для Java-разработчиков:
Как новичку выбрать язык?
Я не сразу определился, на каком языке хочу писать, поэтому пробовал себя в разных направлениях. Попробовал верстку, PHP, изучил базовый синтаксис C++, и понял, что это все не мое. На втором курсе я начал изучать Java и меня зацепило. У джавы простой синтаксис, она легкая для понимания, выражения мыслей и реализации кода. Если вы не знаете, с чего начать, можно попробовать языки разметки HTML и CSS, потом потестить JavaScript, посмотреть приятно ли на нем писать. Тут нет универсальной формулы, все делается методом проб и ошибок.
Кроме того, нужно опираться на рынок труда в вашем городе. Посмотрите, какие языки и технологии используют компании, куда вы хотели бы попасть, и какие языки вообще востребованы. Попробуйте поизучать их, но если синтаксис не нравится, не нужно себя мучать — лучше переключиться на другой язык. Я с первого курса интересовался компаниями, чтобы выбрать, где проходить практику. Когда я пробовал C++, я посмотрел рынок и оказалось, что тогда язык был не актуальным, это тоже повлияло на меня и я решил сменить направление.

Что делать если после стажировок и тестовых не берут на работу?
Первая моя стажировка была в IT компании и прошла она не очень успешно. Я пришел туда с однокурсниками, нам дали проект — нужно было сделать систему опроса сотрудников на Java. Я не понимал, как это сделать, не знал многих функций и инструментов. Уже на половине практики я понял, что не вытягиваю, для меня это был полный фейл. А друг, с которым я практиковался, знал хорошо и начал делать большую часть работы. В итоге этот провал меня мотивировал совершенствоваться и начать изучать Java глубже. Я читал книжки, смотрел ютуб и понял, что я знаю только базовый синтаксис языка, а там есть еще фреймворки, библиотеки для работы с сетью, форматами передачи данных и т.д.
На второй стажировке я познакомился с паттернами проектирования на Java и научился правильно верстать страницы по макету. Было очень сложно, но очень интересно. Я не пропустил ни одного занятия и не жалею, потому что после этой стажировки у меня остались очень хорошие знания и навыки.
Начинающим разработчикам я советую искать как можно больше стажировок, выполнять все тестовые задания. Даже если по итогу вам откажут в работе, то знания и навыки у вас останутся. Вас научат правильно писать код, покажут нужные инструменты и как ими пользоваться, будут давать реальные задачи и полезный фидбэк. Вы сможете изучить все процессы изнутри и с каждой стажировкой вам будет легче.
Если вы учитесь или работаете, вы все равно можете пойти стажироваться. Помните, что работодатели тоже люди и обо всем можно договориться. Можно, например, попросить дать больше времени на задачу. На стажировках и при выполнении тестовых не стесняйтесь задавать вопросы, даже самые дурацкие — главное разобраться в задании. У меня была ситуация, когда в тестовом было 4 задачи, я сделал две и остальные не понимал из-за ТЗ. Я спросил как это делать, и мне все объяснили, в итоге с задачами я справился.
Многие переживают, что им нечего писать в резюме, так как нет опыта. Напишите, какие курсы и стажировки вы проходили, может быть вы ходили на воркшопы или выполняли тестовые задания — подойдет любой релевантный опыт. Также пишите сопроводительные письма к откликам, HR-ы их читают и они на самом деле даже важнее резюме. Большинство кандидатов просто откликаются на вакансии, поэтому сопроводительное письмо будет вашим преимуществом. В письме можно написать, почему вы хотите работать в этой компании и чем вы будете им полезны.


Как я вырос до Middle и попал в крутую аутсорс компанию
На третьем курсе я искал работу, ходил по собеседованиям, ориентировался на Java и базы данных. Я хорошо оформил резюме, но работу удалось найти только к концу четвертого курса — в областной клинической больнице. Там я работал с Oracle и базами данных. Самыми крупными проектами там для меня были система электронных заявок на тех.поддержку и командная разработка онкологической карточки пациента, также мне очень нравилось решать баги в отчетах. В государственных учреждениях особо развития нет, поэтому я начал искать коммерческие компании.
Потом я перешел в единую службу такси (EST) на специалиста по базам данных, также под Oracle. У меня это хорошо получалось, но все равно хотел перейти в Java разработчика. Компании нужно было реализовать один проект на Java, у них не было джавистов и предложили мне это сделать. Я испугался, потому что не представлял как без наставника самому реализовать проект — там была огромная кодовая база, а у меня не было коммерческого опыта с Java, только учебные проекты. Сначала я отказался, но в итоге меня убедили, что все получится и команда будет поддерживать на новой позиции. Первую неделю я изучал ту часть кода, с которой мне предстояло работать, потом мне стали прилетать задачи от мобильного подразделения. В целом, все оказалось не так страшно, как я думал сначала.
Моей основной мотивацией в основном были даже не деньги, а развитие, я мечтал стать Java разработчиком. В EST были отличные инженеры и мне было с кем обмениваться опытом, но компания не выдержала конкуренции с крупными агрегаторами и у них начались финансовые трудности. Тогда мне написали из Leantech и в 2020 году я пришел туда одним из первых джавистов. Это мой первый опыт в аутсорсе, и я могу сказать, что там развития гораздо больше, чем в продуктовых компаниях. Продуктовые компании хоть и развиваются, но у них может быть устаревший стек и база. А в аутсорс компании есть возможность поработать с разными технологиями и улучшить свои знания. Плюс это возможность работать в команде с разными людьми, а обмен знаниями и опытом это самое важное.
Для меня каждый проект в Leantech становится толчком для развития. Например, у меня была возможность позаниматься небольшим pet-проектом по выгрузке данных из Jira — там я предложил использовать Spark, так как хотел поработать с этим инструментом. В аутсорс компаниях ты можешь предлагать новые инструменты и технологии, а не только пользоваться основным стеком компании — даже если в итоге инструмент не подойдет для задачи.
У меня есть наставники, но я также стараюсь решать задачи самостоятельно и отстаивать свою точку зрения на ревью кода. Сейчас я себя оцениваю как мидл плюс и развиваюсь дальше, компания это приветствует и предоставляет нужные ресурсы.
Подписывайтесь на Leantech в ВК, там мы делимся знаниями, полезными штуками для разработчиков и новостями IT-индустрии. Также в группе можно следить за актуальными вакансиями.
Упорство, мотивация и карьерный трек Хекслета: как я стал Java-разработчиком

Привет! Меня зовут Сергей и благодаря Хекслету я стал Java-разработчиком. Это моя большая история — про университет и армию, несколько попыток попасть в IT, учебу в Хекслете, карьерный трек и стажировку в Ростелекоме.
Профиль Сергея на Хекслете со всеми пройденными курсами можно посмотреть здесь, а код выполненных проектов — на GitHub
Часть 1. До программирования
С программированием я познакомился ещё в школе, там преподавали Pascal. Именно тогда я почувствовал удовольствие от решения задач, думаю, что вы о нём уже знаете, если сейчас учитесь. Вам же знакомо чувство, когда после множества попыток удаётся написать работающий код? Такое ощущение победы. Особенно, если задача изначально казалась вообще нерешаемой. Мне это нравилось и я с удовольствием изучал то, что давали в школе — задачки были простенькие, но когда нет опыта, то и они заставляют серьёзно подумать, чтобы найти верное решение.
Выполнять эти задания было интересно, но о работе программистом я тогда не задумывался. На самом деле, когда-то давно я хотел быть программистом — это была следующая профессия после космонавта и собаковода. Но к моменту изучения программирования в школе это уже подзабылось. Мне просто нравились информационные технологии, я любил разбираться в компьютере, меня даже запомнили специалисты поддержки местного интернет-провайдера после множества вызовов для починки интернета. Наверное, этому способствовала моя любовь к играм — развлекаешься, ищешь новое, что-то ломаешь, чинишь, получаешь опыт.
Мне нравилась информатика, так как она проясняла работу компьютера, но вот математику я не очень любил, и не хотел с ней связываться. При выборе места дальнейшей учёбы я пытался найти такое направление, где математики будет минимум. Даже собирался пойти в гуманитарии, но всё никак не мог определиться с конкретной областью. Затем я сходил на день открытых дверей в технический университет своего города. И мне понравилось увиденное: интересные специальности, современные технологии. По ряду причин я выбрал направление «Инноватика» — это такая специальность, где есть всего понемногу, тут тебе и программирование, и менеджмент, и инженерные дисциплины, типа сопромата и теоретической механики. Обо всём и ни о чём.
Мой план избежать математики в университете провалился, здесь было четыре математических дисциплины, но интерес к информатике был сильнее, поэтому я не унывал. На первом курсе нам преподавали программирование на языке C# — это было второе моё столкновение с программированием. К счастью, мне повезло с преподавателем, он был требователен и сдать ему все лабораторные работы было не так уж и просто. Благодаря ему многие ненавидели эту дисциплину и она считалась одной из самых сложных в нашем университете. Мне же было интересно, я внимательно слушал, что он говорит, а своё дело он знал, имел опыт коммерческой разработки и мог доступно объяснить разные вещи. Хотя для нас программирование не являлось особо важным: этот преподаватель говорил, что нам по специальности достаточно уметь оценить сложность той или иной работы — я получил хорошую основу, множество базовых вещей, которые я изучал в дальнейшем на курсах, были мне уже так или иначе знакомы, что позволяло тратить меньше усилий на понимание материала.
Университет, Python и Java
Именно в университете я задумался о том, что можно было бы стать программистом. После первого курса эта дисциплина закончилась, и я, через некоторое время, решил изучать программирование самостоятельно. При выборе первого языка я немного пострадал, и избрал Python, так как многие его хвалили, он рекомендовался новичкам и был распространен. Я нашёл какую-то книгу по Python и начал читать её, плюс занимался в приложении для телефона Sololearn (неплохая штука, если нужно быстренько познакомиться с каким-либо языков программирования).
Надолго меня не хватило, ведь во время учёбы в универе было ещё много чего интересного, хоть и не всегда полезного. Где-то через годик я опять вспомнил о программировании и что неплохо бы взяться за ум — на этот раз выбрал Java, так как много платят, язык мощный, кроссплатформенность, серьёзные проекты. Снова стал читать книгу и делать задания из неё — книга называлась «HEAD FIRST JAVA».
Дойдя до определенного момента я начал бояться, что не потяну серьёзное программирование — это чувство посещало меня и при изучении Python, но тогда оно было не настолько явно. Я думал, что не справлюсь с такой сложностью, тут нужно очень много знать, я не смогу решать реальные задачи, так как в книжке и универе обучали всяким мелочам, а на реальных проектах делаются ого-го какие вещи. С этими мыслями я в очередной раз оставил занятия программированием. Учёба на бакалавра закончилась и я пошёл в армию, где принял решение не поступать на магистратуру, а начать работать, а потом, если понадобится, отучиться по нужному мне направлению.
Вернувшись из армии я стал искать работу. Я точно знал, что хочу работать в сфере информационных технологий, вот только не мог определиться с направлением. Видел вакансии программиста на C# и думал, что неплохо было бы туда пойти, но у меня были только базовые знания из универа — да и те по большей части забылись, так что я оставил этот вариант. Затем я собеседовался на аналитика, тестировщика, даже чуть не попал на собеседование в колл-центр, но в конце оказался в сфере информационной безопасности. Перед поступлением в универ я рассматривал это направление, его очень круто представили на дне открытых дверей. А тут подвернулась возможность устроиться, к тому же в армии я занимался похожими вещами. Первые пару месяцев вникал в особенности профессии, добывал недостающие знания, в основном из сферы законодательства.
Программирование с ментором
Как-то вечером, листая ленту новостей, я наткнулся на запись о программировании — там было что-то о важности фундаментальных навыков. Меня заинтересовал этот пост, я перешёл в группу, где он был опубликован, почитал другие записи и они нашли отклик в моей душе. Это послужило толчком моему развитию, я вспомнил о своих целях и решил прочно взяться за изучение программирования. Автор тех записей в группе стал моим ментором — я пообщался с ним, рассказал о себе, он дал пару советов, мы определились с курсом развития, который подходит в моей ситуации, и через некоторое время я начал заниматься изучением программирования.
Ментор говорил, что сначала важно развить навык универсального программирования. Я снова решил выбрать Java, но и присматривался к Pyhon и C#. За время учёбы в универе я привык C-подобному синтаксису, но хотелось изучить что-то новое — на C# я писал хотя бы маленькие программки, а на Java и Python особо далеко не продвинулся, потому финальный выбор делал между этими языками. В итоге победа оказалась за Java — строгая система типов и C-подобный синтаксис склонили чашу весов в сторону этого языка. Однако к этому моменту я все-таки успел узнать, что настоящий программист не привязан к одному языку и рано или поздно хорошо бы изучить что-то другое.
Мне потребовалось умение работать с GIT, поэтому ментор дал мне ссылки на несколько материалов, где рассказывали про принципы работы с этим инструментом. Среди них был и бесплатный курс Хекслета по GIT. Мне сразу бросился в глаза текстовый формат уроков — кажется, что в тексте информация даётся более плотно, тут меньше лишнего, если сравнивать с видео. К тому же, в тексте удобно возвращаться к ранее изученному, чтобы уточнить некоторые моменты, либо просто понять что-то сложное. После завершения курса я несколько раз возвращался к нему, чтобы освежить в памяти те или иные команды. Тогда же я решил, что мне как будет полезно знать Linux, поэтому я прошёл курс по основам командной строки, который мне тоже очень понравился, и распрощался с Windows.
Я решал разные задачки, выкладывал их на GitHub, язык осваивал параллельно решению задач. Если есть какая-то проблема, я думаю, как бы её можно решить, а после нахождения алгоритмического решения пытаюсь реализовать его на Java. Здесь я использовал разнообразные сайты о Java: Javarush, Metanit и другие. Потом я пробовал реализовать различные структуры данных, чтобы в них разобраться. Ну а после этого решил, что хочу пойти в веб-разработку на Java, да и ментор сказал, что уже можно спокойно осваивать определённый стек и идти в профессию.
У ментора я спросил совета, куда лучше пойти, чтобы развиваться в выбранном мной направлении. И он посоветовал мне профессию Java-разработчик на Хекслете, так как тут есть много хороших технических материалов, а на профессии ещё и наставник, который проводит ревью кода, что особенно ценно.
Java на Хекслете
Я с удовольствием пришёл на Хекслет. Оставил заявку, мне позвонили, ответили на все вопросы и в августе 2021 года я попал в учебную группу. К моменту начала занятий на Хекслете я изучил основные структуры данных, правила написания хорошего кода и прорешал некоторое количество разнообразных задачек разной сложности.
В первые дни на Хекслете всё казалось сложным, многое было мне в новинку. Slack, Gitlab, утилита для домашних заданий — казалось, что нужно изучить так много, и это всё такое сложное. Однако через несколько дней я привык к местной системе, она оказалась удобной, страшно было только сначала.
Учился я быстро, сказывались уже накопленные знания. Особых проблем с тем, чтобы что-то закодить или решить задачку не возникало, не считая парочки испытаний. Больше времени уходило на чтение документации, разбор инструментов и изучение технологий. Хорошие гайды написаны на английском, у меня уходило немало времени на их перевод, однако я замечал, как мой уровень английского рос и сейчас чтение статей на английском даётся мне гораздо проще.
Теперь немного о проектах: я завершил все пять проектов на Java-разработке.
Они очень хороши, ты изучаешь ту или иную тему на курсах, а после тебе дают проект, где эти знания нужно применить. Если на курсе тебе казалось, что ты всё понимаешь, то проект мог тебя легко в этом разубедить. Здесь ты строишь полноценное приложение с чистого листа.
На первых проектах инструкции максимально подробные, затем информации по настройке окружения и проекта меньше и меньше, всё чаще пользуешься официальной документацией — хотя для настройки окружения я частенько заглядывал в первый проект, где это подробным образом расписано. Проекты научили меня лучше работать с документацией, показали важность хорошей архитектуры, логирования, прокачали навыки работы с гуглом, да и общее понимание устройства приложения тоже заметно выросло. О прокачавшихся навыках программирования я даже говорить не буду.
Во время обучения на Хекслете я почти не ходил на сторонние ресурсы — в основном читал то, что даётся на занятиях: материалы курсов + информация по ссылкам на дополнительные источники (документация, статьи). Однако начал читать книги, которые рекомендовал Хекслет — успел осилить 3 штуки, но это ещё не конец, хочу прочитать всё что там есть.
Как я нашел работу через карьерный трек Хекслета
Поиски работы я откладывал максимально долго. Откладывал так, что даже не успел их начать. Примерно после третьего проекта — где-то через 2,5 месяца после начала обучения на Хекслете, я заглянул на сайты поиска работы и увидел, что почти везде требуется знание Spring. Тогда я подумал, что работу будет проще найти, если эта технология появится у меня в резюме, а это последний модуль в профессии.
С этой мыслью я продолжил свои занятия. Модули 4 и 5 я проходил дольше, чем первые 3, так как там было много новой для меня информации (http, базы данных, ORM и прочие вещи, связанные с вебом). Кроме того, после 3 проекта со мной связалась Алиса Воробьёва из карьерного трека Хекслета. Сказала, что у меня хорошие рекомендации от наставника группы, и она хотела бы порекомедовать меня на стажировку в команды разработки для партнёров Хекслета.
На это я с удовольствием согласился, быстренько написал резюме и передал ей. С тех пор она переодически со мной связывалась и говорила, что передала моё резюме тому или иному партнёру. Закончив очередной проект я добавлял его в резюме, однако активные поиски работы планировал начать лишь после того, как закончу последний проект, где будет использоваться Spring. Когда я работал над последним проектом, мне пришло письмо от Алисы, где она сказала, что передала моё резюме Ростелекому, который искал Java-разработчика, и что они в скором времени могут мне написать.
Я заканчиваю пятый проект, часов 10 вечера, уставший, но довольный своей победой (проект прошёл автоматические тесты), ложусь спать с мыслями о том, как завтра отдам резюме на ревью и начну потом его всем рассылать. Утром моё резюме проверили, указали на вещи, которые нужно поправить — я сидел и корректировал его.
В это время мне вдруг написал HR-Ростелекома — мы пообщались, я узнал о проекте, и мне предложили пройти собеседование. После разговора я испытал серьёзный прилив энергии и радости, однако меня пугало будущее мое первое собеседование, поэтому я стал читать разные советы, пересматривать материалы Хекслета, просматривал всякие статьи, чтобы подготовиться к собеседованию.
Читайте также: Это снова я, резиновая уточка: что такое метод Фейнмана и почему с его помощью так просто изучать программирование
На собеседовании меня попросили решить небольшую задачку, погоняли по SQL, дали вопрос на структуры данных, поспрашивали немного о всяких разные вещах, на всё ушло около часа. Событие это было волнительным, после начала разговора все мои знания быстро разбежались по дальним уголкам сознания и не хотели выходить. На вопросы я ответил, но мне кажется, что сами ответы были не лучшие. Я стал ждать фидбэк, который мне обещали дать через 3 дня. За это время своё резюме я так никуда и не выложил, потому что верил в лучшее. Через пару дней со мной снова связались и пригласили присоединиться к команде. Предложение я, конечно же, принял — ведь я когда собирался искать работу, то особо не рассчитывал попасть на крупный проект, но всё сложилось довольно круто и теперь я в РТК IT.
В Ростелекоме я работаю уже месяц, сейчас идёт испытательный срок, надеюсь, что я успешно его пройду и останусь здесь дальше. За это время у меня стремительно прокачались навыки работы с GIT и базами данных. Задачи иногда выглядят страшно, но пока у меня получается с ними справляться. Я попал в хорошую команду, ребята опытные, всячески помогают, отвечают на вопросы, объясняют те или иные вещи, за что им большое спасибо.
Сейчас я стараюсь изучать SQL и базы данных, так как приходится с этим активно работать, решаю задачки на HackerRank, держу открытой вкладку с уроками Хекслета, переодически возвращаясь к ним, чтобы вспомнить те или иные вещи.
Несколько советов для тех, кто только учится
Думаю, что о хард-скиллах говорить смысла нет, так как всё зависит от выбранного направления, поэтому хочу немного рассказать о софт-скиллах, необходимость которых я уже почувствовал на себе.
Часто можно услышать, что программисту приходится много общаться, но я особо не верил в это, пока не начал работать. Оказалось, что если ты можешь хорошо общаться с другими людьми, то это круто. Ведь приходиться взаимодействовать с командой, аналитиками, тестировщиками и другими сотрудниками, которые участвуют в жизни продукта. Важно уметь ясно доносить свои мысли и понимать другого человека, не бояться выяснять детали задачи, ведь это позволит делать свою работу лучше и качественнее. Новичку особенно не нужно бояться задать вопрос, иногда лучше спросить и показаться глупым, чем накосячить и переделывать.
Читайте также: Навыки командной разработки, опыт с GitHub и умение читать чужой код: зачем нужна стажировка
Во время обучения на меня переодически накатывали волны лени, которые затягивали в пучину прокрастинации. Иногда мысли были такими: «Я уже неплохо продвинулся, в группе один из первых, почему бы и не замедлиться, отдохнуть, забросить всё на недельку». Я старался сдерживать эти порывы, так как понимал, что пользы они не принесут. Хотя иногда у меня бывали дни безделья, но в основном я постоянно учился — и это позволило быстро закончить курсы из профессии.
Для поддержки мотивации я вдохновлялся продуктивными людьми, которые много работают над собой и добиваются успеха — ведь тоже хочу быть крутым и успешным специалистом. Вообще, я частенько вспоминал фразу, которая приведена во многих статьях Хекслета: «Никогда не останавливайтесь: в программировании говорят, что нужно постоянно учиться даже для того, чтобы просто находиться на месте». Я знал, что Хекслет — только начало, здесь я нарабатываю навыки для устройства на работу, но впереди длинный путь, так как я хочу быть сильным программистом.
Частично помогала учёба в группе — я поставил себе цель идти впереди сокурсников и когда я видел, что кто-то меня догоняет, то пытался поднажать. При этом я старался помогать другим, если что-то спрашивали в чате, пробовал ответить, радовался, когда удавалось опередить наставника, а он говорил, что я дал верный ответ.
Порой, самое трудное — заставить себя сесть за работу. В таких случаях я говорил себе, что сяду на пять минуточек просто сделать одну штуку и всё, а потом, после того как начал, продолжить уже гораздо проще.
Кроме того, я старался заниматься ежедневно. Не обязательно уделять учёбе целый день, просто нужно заниматься регулярно. Сначала будет очень сложно, мозг начинает кипеть буквально через час, а может и раньше. Но со временем привыкаешь и можешь заниматься дольше и дольше. Хотя на сложных задачах или моментах моё желание ничего не делать было максимальным, я готов был отвлечься на любую мелочь. Через такие места старался пробираться маленькими шагами, в эти моменты главное не останавливаться, ибо рано или поздно сложностям придёт конец.
А напоследок я бы посоветовал не сворачивать с пути. Если выбор уже сделан, то нужно идти, даже если кажется, что другой язык программирования/технология в чём-то лучше. Потом будет возможность переключиться на что-то другое — это будет проще, так как фундаментальные вещи одинаковы везде. А если постоянно метаться из стороны в сторону, то знания будут поверхностные, а на них далеко не уедешь.
На этом всё, спасибо за внимание. Если тебе удалось дойти до этого места, значит у тебя есть упорство и ты сможешь пройти путь обучения до конца. Удачи!
Никогда не останавливайтесь: В программировании говорят, что нужно постоянно учиться даже для того, чтобы просто находиться на месте. Развивайтесь с нами — на Хекслете есть сотни курсов по разработке на разных языках и технологиях
Личный опыт: как стать Java-разработчиком и устроиться на первую работу в ИТ
Работа в программировании становится всё более востребованной, и государственные инициативы в ИТ-сфере только подтверждают её потенциал. В 2022 году программа «Цифровые профессии» запускает новый набор. А значит те, кто планирует освоить ИТ-профессию в этом году, смогут получить финансовую помощь от государства в размере от 50 до 100% стоимости обучения. Участник прошлогоднего набора программы Александр Вилков только заканчивает обучение на курсе «Нетологии» «Java-разработчик», но уже стал junior-специалистом в ИТ-компании. Он рассказал о том, как освоить новую профессию и устроиться на работу без опыта в программировании.
⏱ Время прочтения — 6 минут
Как решиться на смену профессии
По образованию я экономист. Учился в Московском автомобильно-дорожном университете по направлению «Экономика дорожного хозяйства», затем с отличием окончил магистратуру по менеджменту в МГТУ «СТАНКИН» и пошёл в аспирантуру. Последние два года работал по специальности — был главным специалистом проектного управления в государственном учреждении: анализировал риски, вёл статистику, проверял отчёты и консультировал коллег из регионов. Но в какой-то момент понял, что работать по специальности мне не очень интересно, а хотелось делать то, что действительно нравится.
Программированием я интересовался давно. В школе «перепрошивал» телефоны, а на втором курсе университета пробовал в свободное время изучать C# и писать игры на Unity3D. Но когда начал работать, свободного времени не стало, и мысли о программировании ушли на второй план. И только после окончания аспирантуры я снова задумался о том, чтобы научиться писать программы.
Как выбрать направление и с чего начать
Сначала нужно было выбрать направление, в котором я хочу развиваться. Я изучал профильные ресурсы и пытался определить свои цели. Мне всегда нравилось заниматься оптимизацией процессов, придумывать что-то новое и создавать вещи, которые приносят пользу. Так я понял, что backend-разработка (разработка внутренней части программ) — то, что будет мне интересно.
Поскольку из языков программирования я уже был знаком с C#, то начал именно с него. Но по мере погружения в мир ИТ понял, что устроиться разработчиком на C# будет сложнее, чем на другом языке. Так что выбрал Java: она довольно схожа с C#, но при этом более популярна.
Первые несколько месяцев я учился сам с помощью YouTube и профильной литературы. Потом начал собирать вопросы, которые задают на собеседованиях, и составлять план обучения. Но, если учишься самостоятельно, наступает момент, когда просто не знаешь, за что браться. Изучая одну тему, всё время натыкаешься на другие и пытаешься в них разобраться. Понимаешь, что на это уйдёт несколько месяцев, но не можешь оценить, насколько будут необходимы эти знания. Поэтому я решил найти курсы, которые помогут разобраться, какой стек знаний мне необходим в первую очередь, и где будет компетентный человек, которому можно задать все вопросы.
Как освоить программирование и чего ожидать от обучения
Так как у меня уже была некоторая база знаний и понимание того, что мне нужно от курсов, переплачивать за обучение и затягивать его не хотелось. К тому моменту я уже слышал про программу «Цифровые профессии» от знакомых, и когда прочитал о ней в рассылке «Госуслуг», решил в ней поучаствовать. Программа давала возможность пройти курсы программирования за полцены. Достаточно было заполнить заявку, приложить документы и дождаться одобрения. Так я и сделал.
Среди вариантов обучения были курсы «Нетологии». Они закрывали практически все мои потребности: на них были вебинары с живым общением, задания разной сложности, обратная связь от преподавателя. А возможность оплатить половину цены стала решающим фактором. Я выбрал курс по Java-разработке и начал учиться.
Темп обучения достаточно быстрый: занятия проходят два раза в неделю и после каждого нужно выполнить задание. Поначалу мне было легко, и на выполнение заданий уходило не более часа — сказывалось наличие знаний, приобретённых до курсов. Но когда пошли совсем незнакомые мне темы, стало труднее. Чтобы разобраться в теме требовалось 2−3 часа, а иногда и больше. Но я и не ждал, что будет иначе.
Когда идёшь на курсы, не стоит ждать, что заплатишь деньги и автоматически станешь востребованным специалистом. Приходится много и усердно учиться и ещё больше практиковаться. .
Курсы хороши тем, что помогают ускорить процесс: не приходится долго искать материалы и разбираться, что изучать. Ты сразу получаешь структурированную информацию и задания, на которых можешь её отработать. А дальше уже сам наращиваешь знания, разбираешься в нестандартных задачах и практикуешься.
Но главное — это обратная связь. Когда учишься сам, её очень не хватает. Появляется много вопросов, нужно понять, правильно ли ты выполнил задание и что нужно изменить. На курсах есть преподаватель, который даст ответ и оценит твою работу, а ещё можно посоветоваться в чате с одногруппниками.
Как искать работу в ИТ
Как только началось обучение, я почти сразу стал откликаться на вакансии на hh.ru. Конечно, на тот момент я не обладал требуемыми навыками. Моя цель была получить опыт прохождения собеседований и обратную связь от работодателей. И это мне очень помогло. На собеседованиях я узнал, какие задают вопросы, как правильно на них отвечать и что мне нужно подтянуть. А тестовые задания дали возможность дополнительно попрактиковаться, и понять, с чем придётся работать.
Обычно отбор на вакансию программиста включает:
• тестовое задание,
• собеседование с HR-специалистом,
• техническое собеседование с руководителем.
Зачастую все этапы проходят онлайн, и их последовательность может быть разной: в одной компании сначала потребуется выполнить тестовое, а в другой — пообщаться с HR-менеджером.
Поскольку опыта работы в ИТ у меня не было, мне посоветовали сделать собственный проект, который мог бы показать мои навыки. Я написал телеграм-бота для изучения английских слов. На первый вариант ушло чуть меньше месяца, я попросил посмотреть мой код знакомых с опытом в разработке и всё оказалось достаточно плохо. Пришлось несколько раз всё переписать, но ещё через 2−3 недели я смог сделать работающего бота и добавил свой проект в резюме.
Собственный проект позволяет продемонстрировать работодателю наличие практических навыков ещё на этапе резюме. И повышает шанс получить приглашение на собеседование. .
Менять работу я не торопился, но через 3−4 месяца попыток смог успешно пройти отбор. Сначала выполнил тестовое задание, потом меня пригласили на очное техническое собеседование, а после — на онлайн-интервью с HR-менеджером. На собеседовании спрашивали про объектно-ориентированное программирование, основы Java, Java Collections Framework, инструменты для тестирования и отладки кода. Но проверяли не знание заученных фактов, а понимание. На курсах учили именно этому. Я смог объяснить принципы работы и показать, что действительно их понимаю.
На начальные позиции Java-разработчика чаще всего требуется знания:
• Java,
• принципов объектно-ориентированного программирования (ООП),
• Spring Framework,
• баз данных.
Остальные требования варьируются от компании к компании. Стек технологий тоже будет различаться. Но если кандидат умеет разбираться в документации и глубоко понимает освоенные темы, думаю, работодатель это оценит. Поэтому, если в вакансии есть один пункт, которым вы не владеете, не стоит этого бояться. Это повод попробовать и разобраться.
Уже два месяца я работаю на позиции Junior Java Developer в компании по разработке ИТ-продуктов. Занимаюсь web-проектом: исправлением багов, доработкой уже существующего функционала и тестированием. Первые недели было очень сложно. Никакое тестовое, домашнее задание или даже собственный проект не сравнятся с объёмом информации в рабочем проекте. Но постепенно начинаешь разбираться: просто приходишь пораньше и делаешь.
Параллельно я заканчиваю курс в «Нетологии», и продолжаю учиться в свободное время. По выходным стараюсь уделять время дополнительной практике, пробую новые инструменты и пишу код для себя.
Стоит ли идти в ИТ-сферу
В последние несколько лет идёт повсеместная цифровизация. Сейчас у любой компании есть потребность в цифровых продуктах. Даже малому бизнесу, например, тем, кто делает торты на заказ, хочется иметь свой сайт или телеграм-бота, чтобы привлекать больше клиентов. А у крупных компаний и в государственном секторе потребность в ИТ-специалистах только растёт. Думаю, этот тренд будет сохраняться. А значит будет требоваться больше программистов, которые смогут создавать новые решения и поддерживать существующие.
Но идти в ИТ просто потому, что это популярно, не стоит: любая трудность будет тормозить прогресс, и быстро возникнет желание всё бросить. Нужна личная мотивация и чёткое понимание того, зачем это нужно именно тебе. Меня, например, мотивирует возможность развиваться как специалиста, создавать новые решения и делать продукты, которые будут приносить пользу. И если мотивация есть, то добиться результатов можно в любой отрасли, в том числе и в ИТ.
Читайте также
Вакансии дня
HeadHunter
- О компании
- Наши вакансии
- Реклама на сайте
- Требования к ПО
- Защита персональных данных
- Безопасный HeadHunter
- Этика и комплаенс
- HeadHunter API
- Партнерам
- Инвесторам
- Условия оказания услуг
- Условия использования сайтов
Новости и статьи
- Рынок труда
- Жизнь в компании
- ИТ-проекты
- Рейтинг работодателей России
Сервисы для соискателей
- Готовое резюме
- Все сервисы
- Профориентация
- Продвижение резюме
- Хочу у вас работать
- Производственный календарь
- Экспертная рекомендация
Молодым специалистам
- Карьера для молодых специалистов
- Школа программистов
- Поиск сотрудников
- Помощь
- Пользовательское соглашение
- Каталог компаний
- Работа по профессиям
- Работа рядом с метро
- Уведомления в мессенджер
© 2023 ООО «Хэдхантер»
На информационном ресурсе hh.ru применяются рекомендательные технологии (информационные технологии предоставления информации на основе сбора, систематизации и анализа сведений, относящихся к предпочтениям пользователей сети «Интернет», находящихся на территории Российской Федерации)
Сегодня на сайте 1416100 вакансий , 65542626 резюме , 2079187 компаний и за неделю 3929654 приглашения
Как я в 31 год стал Java-разработчиком
Уже несколько раз на протяжении полугода меня просили написать эту историю, а тут в комментах я сам предложил. Видимо пора.

Надеюсь, что те, кто ради этого подписался еще полгода назад, не сильно обиделись за столь продолжительное ожидание.
Тут не будет истории стоического превозмогания, как я приходил со смены на заводе и ночами учил Яву. Извенити.
Разобью историю на две логические части внутри одного поста: 1. Как учился; 2. Как искал работу.
Будет с небольшими элементами гайда.
Очень много букв.
Итак, на дворе 2020, мне 31 год, я уже около 10 лет работаю в розничной торговле, последние 8 лет в руководящих должностях. Кто-то на этом моменте скажет:

А собака ответит, что ее все заебало. За эти годы я успел поработать в разных компаниях и позициях, но объединяло их одно общее свойство: розница, это кадровая помойка, карнавал некомпетентности и мизантропии. Причем, как правило, вплоть до топов и владельцев бизнеса.
Помимо этого, меня грызло ещё и то, что несмотря на два образования (машиностроение и экономика), я, по сути, не умею ничего. Только продавать и руководить продажами. Так себе наборчик. Притом, что я это ненавижу. Никаких прикладных навыков. В фильмах ужасов таких как я убивают первыми.
Ещё в 2018 пробовал учить JavaScript, но как-то не пошло. Не особо хватало времени, да и язык меня не зацепил (к слову, до сих пор его недолюбливаю).

С такими вводными я входил в 2020 год. А все мы помним, что началось уже через два месяца — пандемия, локдаун. Контора, где работал, сначала посадила всех сотрудников в неоплачиваемый отпуск, а потом начались увольнения. Меня сия чаша миновала, но я подумал, что возвращаться туда уже не хочу. Да и в целом, в розницу не хочу. ИТ выглядело наиболее очевидным вариантом (возможность самостоятельного обучения, потенциал дистанционной работы). Есть жена, которая работает и есть заначка, что позволит какое-то время сконцентрироваться только на обучении. Забегая вперёд, время — это ключевой фактор успеха.
Часть 1. Обучение.

Из всех ИТ-специальностей, как наверное читатель уже догадался, я выбрал программирование. Потому что в целом привлекает сфера, платят хорошо, вроде и я не самый тупой.
Первым вопросом был выбор языка. Я ориентировался на индекс tiobe — https://www.tiobe.com/tiobe-index/ — утрированно, это, с некоторыми оговорками, рейтинг популярности ЯПов. Логично, что чем популярнее язык, тем проще будет найти работу начинающему разработчику. Да, экзотические языки тоже требуются и платят хорошо (иногда даже больше, чем на популярных), но там редко нужны джуны, потому что, чаще всего, это мертвые языки и легаси, а на собеседовании вы услышите, что предыдущий разработчик просто умер от старости.
Есть еще “молодые и перспективные” языки, типа Go или раста, но они уже лет по 10 в этих статусах.

Для сравнения, Java, за первые 5 лет своего существования, стала самым популярным языком. Изучать их лучше уже имея какой-то опыт и понимание, зачем они вам нужны. Но я отвлекся.
Была выбрана Ява. Не рандомом, но расписывать аргументацию мне не хочется. Если стоит выбор языка, то в идеале, надо взять список из нескольких языков, почитать про них, про области применения, посмотреть на примеры кода (вдруг синтаксис не понравится) и уже потом выбирать.
Вторым вопросом была форма обучения. Так как я сидел без работы, работала жена и проедалась подушка безопасности, то о покупке курсов за большие бабки и речи идти не могло. На самом деле, таких мыслей даже не было. Я бы себе не простил, если бы имея кучу свободного времени и навыки пользоваться гуглом, я бы не нашел в интернете всю необходимую информацию самостоятельно. В принципе, я считаю, что если человек не в состоянии, имея время и возможности, найти абсолютно всю необходимую информацию для обучения в интернете, проанализировать ее, структурировать и освоить — ему нечего делать в программировании. Да, так радикально. Есть масса других ИТ-специальностей. Писать код — не ваше, вы разочаруетесь и в отрасли и в себе. Это не означает, что курсы — плохо. Это тоже путь, который может привести к той же цели, но выбирать его имеет смысл только для экономии времени.
Я выбрал самый консервативный (и не самый быстрый) способ для самостоятельного изучения теории — книгу. Достаточно хрестоматийная “Java. Руководство для начинающих” за авторством Герберта Шилдта. 600+ страниц достаточно сухого текста. Если что-то не понимал, то искал информацию в интернете: ютуб, статьи на разных ресурсах типа вертекса или джавараша. Кому как, но прочитанное я воспринимаю и запоминаю намного лучше, чем услышанное. Главный лайвхак (лайвхачище!), который для себя вывел в процессе, это то, что повторение — мать учения. Каждый новый день я начинал с краткой пробежки по пройденной накануне теме. Мозг, видимо, понимает, что такая информация, все-таки нужна и запоминает намного эффективнее.

Из ютуб-каналов по Яве выделю сейчас, наверное, только Алишева. В плане подачи, это топ. Ранее смотрел еще Немчинского, но, сейчас в России не все захотят его смотреть.
А, ну и, конечно, ExtremeCode — маслятки поймут.
Практиковался, также — по-классике: примеры и задания из книг + задачки на LeetCode и CodingBat. Сайтов для тренировок десятки. Спустя месяца 3 начал увеличивать долю практики в обучении, теория пошла медленнее, но таким образом куда лучше набивается рука и пропадает страх перед кодом. Стал искать и делать примеры заданий, которые могут дать в виде тестового перед собеседованием. В основном, это всякие круд-приложения, вроде телефонного справочника (на практике так и оказалось, за некоторым исключением). К этому моменту я уже, естественно, составил свою дорожную карту для изучения Явы (на самом деле просто нагуглил) и поэтому понимал, что только самим языком дело не ограничится и параллельно с Шилдтом пошел, естественно SQL и Git, а следом — алгоритмы и структуры данных (это все необходимо, независимо от выбранного языка). Потом — JPA/JDBC/Hibernate (основы) и коллекции (про это все Шилд решил в этой книге не писать, что, мне кажется странным, зато там есть явно лишнее про сервлеты, javafx и свинг).
Для тех кто в теме — современная Ява, это Spring Framework. За время своего обучения я его почти не изучал и не щупал. О чем, к слову, совсем не жалею, но для минимума надо хотя бы посмотреть курс того же Алишева, так как спрашивают много где. Хотя я считаю, что если совсем еще джуна спрашивают про спринг, то это очень странно.

На обучение я тратил 8-10 часов в день. Почти без выходных. Только иногда позволял себе дни отдыха, и то, когда понимал, что уже не вывожу и котелок перегрелся. Первое время, с непривычки, болела голова каждый вечер. Спустя, примерно, 5 месяцев, не прекращая обучения, я начал смотреть вакансии на HH уже не просто с целью посмотреть требования и необходимые технологии, а уже начинать откликаться.
Часть 2. Поиск работы.
Здесь будет больше в сторону гайда.
@Sapiensbru “На самом известном российском IT ресурсе посчитали, что число стажерских вакансий составляет 0.2% от рынка труда. Очевидно, что желающих намного больше. Например в стажерских вакансиях по java на hh по 500-1000 откликов.”
Скорее всего, так и есть. Стоит понимать, что вакансия стажера, это, само по себе, редкое явление, стажер — это вложение, которое, как и любое вложение, всегда имеет риски. Крупные компании набирают стажеров еще среди перспективных студентов всяких матмехов в хороших ВУЗах, там рисков меньше, а “потанцевал” у таких стажеров — выше. У нас, в Екб, у обеих крупнейших местных it-контор (Наумен и Контур) есть даже свои аудитории в УРФУ. Соответственно, компаниям поменьше будут доставаться те, кто остались, а, следовательно, рисков больше. К тому, же на стажера нужно выделять время и людей на обучение. Чаще выгоднее бывает взять уже что-то умеющего джуна.
Так как я, к тому времени, уже имел существенный опыт взаимодействия с бизнесом, то прекрасно это все понимал. И я не искал стажерские вакансии. Да, если попадались, то откликался, но намеренно не искал. У этой стратегии есть еще один плюс. Большинство самоучек и часть свежих выпускников стараются найти работу именно стажера или джуна за еду, так как боятся ответственности, требований, своей некомпетентности и т.п. Синдром самозванца as is. Из двух одинаковых джуновских вакансии с одинаковыми требованиями, та, где будет выше ЗП, наберет меньше откликов.
Основное место поиска — HH, хабр.карьера, региональные сайты поиска работы. Перед откликом, я всегда изучал вакансию, гуглил про работодателя, писал нормальное персонализированное сопроводительное письмо. Я понимал, что с моими навыками я мало кому нужен, поэтому я всегда выпрашивал дать мне тестовое задание (ИЧСХ часто получал. Настолько часто, что многие даже не стал делать). Этим я убивал сразу четырех зайцев:
1. Демонстрировал свое рвение;
2. Получал на руки реальное тестовое, а не из интернетов, с сомнительной степенью актуальности;
3. В случае успешного выполнения, меня-таки могли бы рассмотреть на вакансию;
4. Как правило, тестовое оказывалось сложнее, чем то, что я делал до этого и это очень стимулировало изучать новое и актуальное.
Все, что имело логически завершенную форму из того, что я писал на Яве — выкладывал в гит. Понятно, совсем хлам не публиковался, но все тестовые пушил на гитхаб. Портфолио, даже такое, просто обязано быть у джуна без опыта.
Вообще, есть масса видео на тему, как правильно оформить свое резюме и что там должно быть. Настоятельно рекомендую.
Не будет лишним нагуглить “какие вопросы задают на собеседовании junior %s developer”. НО. Ни в коем случае не зубрить. Я не встречал, чтобы просто задали вопрос, и после правильного ответа сразу переходили к следующему. Обычно это будет так: “Какую коллекцию будешь использовать если надо, чтобы в ней хранились только уникальные объекты, без дублей? Ага, а почему? А какая у нее сложность записи в О-терминологии? А скорость поиска? И раз уж начали про сложность, то какую бы ты выбрал коллекцию если надо… и т.д.”. Если соискатель просто зазубрит, то, гарантированно, поплывет.

1. Почти сразу мне одна контора выдала тестовое. Оно, как я уже писал выше, было сложнее того, что я уже делал раньше, да и вакансия была даже не джуновская, а просто Java-разработчик. Короче, я взялся за дело.
На эту задачу я уделял, примерно, 3-4 часа в день. Деталей не помню, но что-то типа связанных справочников с парсингом данных из XML, торчащей наружу апихой и какими-то еще фичами, точно уже не помню.
Делал я это задание ровно месяц. Жутко гордился собой. Естественно, выложил в гит и отправил этим ребятам. И… меня пригласили на собеседование. Мое первое собеседование. Блять, как же я волновался.
Это был созвон в Зуме, были HR, тех-лид и опытный разработчик из отдела, куда нужен сотрудник (причем они не только реально смотрели мой код, но и развернули его у себя и потыкались). Общая часть прошла, как всегда, отлично, язык у меня подвешенный, но на технической части я просто обосрался. Я забыл вообще все. Я сидел, слышал вопрос, а у меня просто шум и звон в голове, я ничего не могу вспомнить, отчего начинаю волноваться еще больше. Замкнутый круг. Чтобы вы понимали, я не смог ответить на вопрос “что такое и зачем нужны оболочки типов” и “что такое рекурсивный метод”. Пиздец. Так стыдно мне никогда не было. Естественно, мне вежливо отказали, подумав, наверное, что писал не сам.
2. Примерно через неделю после первого собеседования, меня пригласили на второе. Там тоже было тестовое, но что-то небольшое и простое. На этот раз собеседование очное. Я думал, что раз это уже не первое, то волноваться так не буду и пройдет лучше. В этот момент психика:

Видимо из-за того, что собеседование было очным, я труханул не меньше, чем в предыдущий раз и завалился, на этот раз уже на простейшем задании — написать немного лайфкода с использованием какого-то строкового метода.
Что характерно, в обоих случаях, сразу как только волнение проходило, я вспоминал все ответы и находил решение. Хоть толку от этого, в этих случаях было мало, но меня это осознание успокоило — я понял, что мог пройти оба собеса.
Собственно, еще спустя какое-то время, меня пригласили на третье собеседование, после которого предложили оффер. Да, на собесе я опять волновался, но уже значительно меньше. Ответил на все подготовленные вопросы.
Так я официально стал junior java developer. От начала обучения до трудоустройства прошло почти 9 месяцев. Про впечатления от первой рабочей недели можно написать еще такой же по объему текст. Скажу лишь, что это не идет ни в какое сравнение с тем, что я делал дома и со мной никто не сюсюкался, буквально после того, как ознакомился с проектом, пошли боевые задачи.
Получилось скомкано, ну и пихуй.