golang

Из кладовщика в разработчики

  • вторник, 8 августа 2023 г. в 00:00:15
https://habr.com/ru/articles/752874/

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

Привет! Меня зовут Дима, сейчас мне тридцать. За последние три с половиной года я успел поработать программистом в трех разных компаниях, принять участие в успешном запуске крупного проекта и переехать на ПМЖ на Кипр из Москвы. Сейчас я продолжаю изучать новое, интересоваться технологиями и получать удовольствие от работы программистом.

Образование

Мой путь в эту сферу начался с колледжа. Там я изучал прикладную информатику и познакомился с разными языками программирования. После колледжа я поступил в университет на заочное отделение, но уже на втором курсе решил отчислиться – никакого профита от образования я не видел. На самом деле, я и сейчас считаю, что наличие высшего образования сильно переоценено, по крайней мере для айтишника.

Склад

После отчисления из института начался этап переезда в столицу и поиска себя. Я устроился кладовщиком в магазин одежды, и эта сфера затянула меня на четыре года. Работая на складе, время от времени я задумывался о возможности перейти в IT. Я пробовал кодить мелкие задачки на LeetCode, почитывал книгу «Философия Java» Брюса Эккеля, которую подарил мне мой товарищ и в будущем ментор, но надолго меня не хватало и я бросал это занятие. Однако отсутствие всяких перспектив на складе и ответственность за беременную супругу побудили меня вновь обратить внимание на программирование, и я серьезно занялся обучением кодингу.

Обучение

Все началось с постановки четкой цели изменить свою жизнь к лучшему. Ко мне пришло окончательное понимание того, что у программистов есть огромные возможности для профессионального роста и финансовой стабильности. Это стало мощным мотиватором для активного обучения программированию и стремления к новым горизонтам в карьере.

Я проанализировал рынок вакансий на сайтах по поиску работы, и мой выбор был сделан в пользу языка программирования Java (из-за его высокого спроса и высокой оплаты на рынке труда). Начал я с бесплатных ресурсов: смотрел YouTube-канал Якова Файна и его плейлист Intro to Java, это помогло мне получить базовое понимание языка Java и в целом разобраться в объектно ориентированном программировании. А для более систематического обучения я обратил внимание на платные курсы от JavaRush. Материал подавался очень структурированно, я выполнял много практических задач и получил поддержку опытного комьюнити, при этом цена оказалась очень демократичной. Кроме того, я договорился со своим товарищем, уже состоявшимся программистом, о менторстве.

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

Школа программистов: неудачная попытка и решимость вернуться

После нескольких месяцев моего обучения мы с ментором определили цель – за три месяца я должен был подготовиться и поступить в школу программистов от одной крупной компании. Программа предполагала полугодовое обучение на Java – три месяца теории и три месяца практики на реальном проекте. Это был идеальный вариант, чтобы применить свои знания на практике, поработать в команде со всеми процессами и обрести возможность получить свой первый оффер, так как лучших выпускников брали к себе в штат.

К сожалению, моя первая попытка завершилась неудачей: я не прошел интервью из-за недостатка технических знаний. Но я пообещал себе, что поступлю в следующем году. Так и получилось! К тому времени у меня уже был почти год опыта работы программистом (об этом расскажу далее), хоть и на другом стеке. Я без проблем прошел все этапы собеседования, успешно поступил и закончил эту школу.

Передвижение к IT: смена работы и реальные задачи

Так как я всячески стремился окружить себя атмосферой «программирования», было принято решение о смене работы. У меня было огромное желание быть ближе к миру IT и к разработчикам, чтобы ощутить дух этой тусовки. Я прошел собеседование в компанию, у которой был свой IT-продукт, и принял их предложение стать инженером технической поддержки. Я понимал, что не задержусь на этой должности надолго, ведь моя цель заключалась в крепком сотрудничестве с отделом программистов. И всё же этот этап открыл для меня новые возможности для обучения и взаимодействия с профессионалами в IT-сфере и в конечном итоге стал одним из ключевых шагов на пути к моей карьере программиста.

В обеденных перерывах я любил читать книгу по программированию и почти не выпускал ее из рук, ненароком привлекая внимание коллег. Это привело к тому, что мне предложили задачу для практики – простой, но значимый бот, который должен был помочь автоматизировать рутинную работу. Я написал его за месяц на Java. В процессе разработки этого бота я столкнулся с множеством новых задач и технологий. Этот опыт помог мне углубить свои знания взаимодействия с базой данных и с другими сервисами через API интерфейс. Кроме того, я познакомился с Docker и научился создавать контейнеры для своего приложения, что позволило упростить процесс сборки и запуска приложения. Следующим шагом стал переход на новый язык программирования (Go), так как Java в нашей компании не использовали. Освоив базовый синтаксис Go (примерно за месяц) и успешно решив на нём несколько задач, я привлек внимание тимлида разработки. Мне предложили уделять программированию по 4 рабочих часа в день в рабочее время. Спустя 4 месяца такой работы я получил свой первый оффер в команду разработки, и через две недели у нас с женой родился сын. Так что до рождения сына я достиг своей цели – стать программистом, и это стало для меня значимым достижением для профессионального роста.

Карьера программиста:

  • Первая работа:
    Мой первый проект был связан с разработкой мобильного приложения для ритейла, где я ответственно занимался бэкендом на языке Go. А так же разработкой всевозможных ботов, облегчающих жизнь сотрудникам компании. В процессе работы я активно изучал клиент-серверное взаимодействие, познакомился с основами CI/CD и научился работать с Kubernetes. Параллельно с этим я углублял свои знания в области баз данных, таких как PostgreSQL и MongoDB. Также я получил ценный опыт работы с протоколами HTTP и gRPC, научился работать с RabbitMQ.

  • Вторая работа:
    После полутора лет успешной работы на первом проекте я решил сменить компанию, так как получил хороший оффер и хотел найти новый проект. На новом месте я продолжил развиваться и повышать свою квалификацию – я занимался разработкой корпоративного мессенджера, что-то вроде аналога Slack. Несмотря на то, что я столкнулся с уже знакомыми для меня технологиями, я заинтересовался работой с Apache Kafka и gRPC-stream API, что стало для меня увлекательным источником новых знаний и опыта. На этом проекте я поработал около полутора лет.

  • Текущая работа:
    Я решил искать новые возможности с вариантами переезда в другую страну, хотя знания английского языка у меня еще не было. В результате поисков я нашел работодателя, который предоставил возможность релокации для меня и моей семьи на Кипр. Так я стал частью команды, которая разрабатывает международное приложение по заказу такси. Моя зона ответственности – безналичные платежи. Наша команда преимущественно русскоговорящая, но именно сейчас я понимаю, насколько важен английский язык для программиста.

Советы начинающим:

  • Тебе нужен ментор
    Ментор поддержит, даст ценные советы, направит на путь развития и поможет понять трудные темы. Он сориентирует в процессе обучения, даст возможность почувствовать уверенность и будет следить за твоим прогрессом.

  • Книги
    Если ты твердо решил стать программистом, придется постоянно обучаться. Хочу посоветовать две хорошие книги, которые в свое время помогли мне стать сильнее как профессионалу и гораздо увереннее на собеседованиях:
    «Грокаем алгоритмы», Бхаргава А. – отличная книга об изложении основных алгоритмов и структур данных. Материал подается в очень простой и интересной форме;
    «Совершенный код», Макконнелл С. – база по написанию хорошего кода. Хоть книга и не новая, она не утеряла своей фундаментальной ценности.

  • Напиши простой pet-project
    Создай простой проект c API интерфейсом, примитивной авторизацией и возможностью CRUD-операций в базе данных. Положи его к себе в git и развивай по мере своего роста. Создание такого проекта позволит применить теоретические знания на практике, научиться работать с реальными данными и понять, как организовать взаимодействие с другими системами через API. Это также даст возможность осваивать работу с базой данных – например, выполнять операции чтения и записи данных, что является фундаментальным навыком для программистов.
    Так же полезно будет интегрироваться с каким нибудь публичным API.

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

  • YouTube mock-интервью
    Просмотр mock-интервью перед подготовкой к собеседованиям становится ценным инструментом. Эти видео предоставляют уникальную возможность увидеть, как проходят реальные интервью, какие вопросы задают работодатели и какие подходы используют другие кандидаты. Это помогает осознать свои типичные ошибки и дает понимание того, какие знания стоит подтянуть. Смотря mock-интервью, можно подготовиться к ожиданиям рекрутеров и сделать свои ответы более точными и информативными. Такая практика также помогает снять напряжение перед реальными собеседованиями, повышает уверенность и устойчивость к критике.

  • Ходи на реальные собеседования
    Помимо подготовки, реальные собеседования являются неотъемлемой частью твоего опыта. Проходи собеседования даже в тех компаниях, которые на первый взгляд не кажутся идеальным выбором. Они помогут тебе получить ценный опыт общения с рекрутерами и понять, какие вопросы могут тебя ожидать на реальных интервью. Каждое собеседование – это возможность для роста и улучшения своих навыков. Даже после трудоустройства не переставай ходить на собеседования, хотя бы раз в полгода.

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

  • Продолжай изучать
    Keep going, keep pushing.

Вывод

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

Мой друг и по совместительству ментор, профессиональный программист, сыграл огромную роль в моем развитии . Он постоянно поддерживал и мотивировал меня, не давая сдаться, даже когда у меня возникали моменты отчаяния и лени.

Важным шагом на моем пути стал переход на должность инженера технической поддержки в компанию с отделом разработки. Это позволило мне быть ближе к миру IT и общаться с разработчиками. Здесь я получил возможность практиковаться на реальных задачах, предложенных моими коллегами-программистами. Моя уверенность и мотивация только росли, когда я видел результаты своей работы, помогающей автоматизировать рутинные процессы.

Я мечтал попасть в школу программистов от крупной компании, но не справился со вступительными испытаниями. Однако не сдался и пообещал себе, что я попробую в следующем году. И я сдержал свое слово! Имея год опыта в сфере разработки, я успешно прошел собеседование, поступил и закончил эту школу.

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

Полезные ссылки: