Письмо Начинающему (Back-End) Разработчику
Итак, дорогой читатель, тебя заинтересовала профессия Back-End разработчика и сейчас находишься в самом начале своего пути.
Неважно, откуда ты пришел. Возможно ты еще учишься или только окончил школу и думаешь чем заняться дальше. Возможно последних 5 лет ты работал в банке или маркетинговом агенстве и решил сменить род деятельности. Возможно у тебя уже есть небольшой опыт программирования в других областях, но сейчас ты заинтересовался разработкой серверных приложений.
В наши дни существует огромное количество онлайн и оффлайн курсов, на которых обещают сделать из тебя крутого специалиста за пол года. Это хороший вариант для обучения, однако далеко не у всех есть возможность потратить деньги на оплату этих курсов, или достаточно времени на их посещение.
Правда в том, что обучится данному ремеслу можно самому и это вполне реально. Огромное количество различных материалов, статьей и видео в бесплатном доступе делает этот процесс не сложным и интересным.
Лично я никогда не посещал курсы и не учился этому в университете. Я самоучка, мне 19 и мой заработок в несколько раз превышает среднюю зарплату по Киеву.
Короче говоря, стать высокооплачиваемым специалистом без профильного образования в наши дни абсолютно реально.
Однако при таком подходе важно правильно подойти к структуризации своего обучения, и это письмо должно тебе с этим помочь!
Надеюсь, последующие советы будут для тебя полезны, помогут выбрать правильный вектор профессионального развития и избежать возможных ошибок, которые начинающие специалисты часто допускают.
Также я поделюсь с тобой материалами, которые, на мой взгляд, идеально подходят для освоения нужных топиков.
Скорее всего ты уже понимаешь, чем занимаются Back-End специалисты, но давай еще раз по этому пройдемся.
Когда ты заходишь, к примеру, на медиум, ютуб или инстаграм, умные алгоритмы подгружают в твою ленту самые актуальные статьи/видео/публикации.
Сама визуальная часть (веб сайт или мобильное приложение) — это Front-End приложения, которые занимаются отрисовкой и визуализацией данных, которые они получают от своего Back-End’a с помощью API (Application Programming Interface).
Все данные (видео/статьи/публикации/аккаунты и тд) хранятся на серверах, и в большинстве случаев, вся бизнес логика работы с этими данными реализована на стороне сервера.
Описанная выше модель называется клиент-серверная архитектура, которая наиболее часто встречается в современных приложениях.
Короче говоря, бэкендщики разрабатывают серверную часть, создают большую часть логики и “магии” приложений, которая скрывается за красивыми интерфейсами.
Разобрав сферу экспертизы бекенд разработчика, давай перейдем непосредственно к шагам на пути к его становлению.
Начни с азов
Как и в любой сфере деятельности, начинать стоит с азов.
Нас не учат решать интегралы, пока мы не усвоили как решать простые уравнения с одним неизвестным.
Так же и тут, ты не начнешь проектировать и разрабатывать высоконагруженные системы, не разобравшись с базисом разработки.
Под азами я имею ввиду:
- Базовые конструкции языка программирования (об этом чуть позже)
- Алгоритмы и структуры данных
- Модель памяти компьютера
Это самые базовые вещи, с которых стоит начинать свой путь в программировании. Они заложат фундамент, на котором вы продолжите изучать более сложные концепции.
Для изучения вышеуказанных тем, я крайне рекомендую просмотреть курс от Гарварда CS50, который нацелен на абсолютных новичков, которые хотят изучить компьютерные науки.
Познакомиться с базовыми алгоритмами и моделью памяти компьютера вам поможет книга от Бхаргава А. “Грокаем Алгоритмы”.
Она обьясняет все необходимые алгоритмы и структуры данных человеческим языком, используя примеры из реальной жизни и является одной из лучших книг по алгоритмам, которую я держал в руках.
Выбери один язык
На сегодняшний день существует множество языков программирования, которые популярны в мире бэкенд разработки, например Java, Python, Ruby, Golang, C#, JavaScript, PHP и много других.
В начале своего пути я грешил частой сменой ЯП (языка программирования), прыгав между ними и изучая лишь базовые конструкции.
Возможно, такой подход на самом начале поможет тебе понять различные подходы между языками, и выбрать тот, который больше всего приглянулся.
Однако когда ты уже сделал выбор, не сбивайся с курса. Изучи один язык, изучи его достаточно хорошо. Пройди по нему курс, изучай open-source проекты на GitHub, написаны на этом языке (об этом далее).
Стань экспертом конкретно в этой выбранной технологии и постоянно оттачивай свои навыки.
Рекомендую ознакомиться с видеороликами от Travesty Media. У него есть много практических серий и коротких видеороликов в формате “Выучи за час” которые помогут ознакомиться с основными технологиями на рынке, понять их азы и выбрать ту, которая наибольше приглянулась.
Та и в целом, YouTube — замечательная образовательная площадка, на которой можно найти множество полезных видеоуроков на абсолютно различные тематики.
Пользуйся этим.
Одного знания языка не достаточно
Ну а теперь время сказать, что на сегодняшний день одних лишь знаний языка не достаточно.
Сфере разработки уже несколько десятков лет, с каждым годом она развивается семимильными шагами.
Сегодня на рынке существует множество готовых решений, технологий, библиотек и фреймворков. Все они призваны помочь разработчикам не изобретать заново велосипед, а сфокусироваться на решении конкретных задач.
Современные приложения — это сложные системы, которые состоят из множества различных связанных между собой компонентов.
Поэтому знать лишь язык не достаточно. Необходимо понимать и уметь работать с базами данных, фреймворками и библиотеками для выбранного языка программирования, различными сторонними API, очередями сообщений и облачными технологиями.
Чтобы хорошо понимать “матчасть”, будет круто в свободное время написать свой HTTP/FTP сервер, поисковый движок или очередь сообщений. Но на реальных проектах ты будешь использовать уже готовые решения.
Наша с тобой задача как разработчиков — воплощать в жизнь требования от бизнеса, как можно быстрее и качественнее.
Бизнесу не важно, написал ли ты свой поисковый движок или использовал ElasticSearch. Ему нужна рабочая и надежная система.
Поэтому параллельно к изучению языка, займись освоением следующих тем:
- Linux & работа в терминале (Bash)
- Системы Контроля Версий (Git)
- Базы Данных (SQL & NoSQL)
- Очереди Сообщений (Kafka, NATS, RabbitMQ etc.)
- Облачные Технологии (AWS, GCP, Azure)
- Практики Развертывания (Деплоя) Back-End Приложений
- Монолитная и Микросервисная Архитектуры
От теории к практике
Я замечал за множеством моих знакомых, достаточно толковых ребят, то как они застревали в вечном изучении теории.
Не пойми меня не правильно, учить теорию необходимо.
Но можно годами учить теорию, толком ничего не разрабатывая. И от этого будет мало толку. Это контрпродуктивно.
Мы быстрее всего учимся, решая реальные задачи и сталкиваясь с реальными проблемами.
Ищи интересные проекты, которые будут тебя вдохновлять и мотивировать.
Не волнуйся на счет того, что ты не знаешь как сделать ту или иную часть своего проекта. Я никогда не осознавал до конца как я реализую все компоненты системы перед тем как начинал работать над своими небольшими проектами.
В ходе разработки ты будешь сталкиваться с проблемами, биться головой об стену и искать решения в сети. И это, на мой взгляд, самый отличный и быстрый путь к развитию своих навыков разработчика.
Поэтому, изучив азы, начинай думать над тем как ты можешь их применить. Подумай что бы ты хотел разработать. И берись за работу!
На самом деле, ты убиваешь одним выстрелом двух зайцев.
Работая над своими проектами, ты быстрее учишься и получаешь реальный опыт. Но также, ты создаешь себе портфолио, которое очень важно для начинающего разработчика.
Показав свои проекты потенциальным работодателям, ты демонстрируешь свои навыки, а также страсть и интерес к разработке, что значительно увеличивает твои шансы устроиться джуниором в свою первую компанию.
По этому создавай!
Пусть ты начнешь с примитивных калькуляторов, но ты будешь учиться мыслить как разработчик, писать и дебажить код, фиксить баги и создавать с нуля проекты.
Изучай Open-Source проекты
Твой код по началу будет говном. Это факт.
Недостаточно лишь изучить синтаксис и семантику языка чтобы писать качественный продукт.
У каждого языка есть свой набор лучших практик и правил хорошего тона.
Качественный код должен обязательно быть хорошо задокументированым (содержать комментарии) и покрыт тестами.
Чувство и понимание этих вещей приходит с опытом и изучением кодовой базы различных проектов.
И у нас с тобой есть замечательная возможность изучать исходный код, который находиться в открытом доступе на GitHub.
Поэтому регистрируйся там и ищи интересные проекты, написаны на выбранном тобою языке.
Изучай подходы, которые используют другие разработчики. Это даст тебе понимание того, как структурировать проекты, оформлять код и писать юнит тесты.
Верь в себя
Верь в себя и в свои силы. Это далеко не самый последний пункт.
Я уверен, что при должном, дисциплинированном подходе, уже за 6–12 месяцев ты можешь устроиться на свою первую работу.
Составь план на несколько месяцев вперед, базируясь на вышеуказанных пунктах.
Изучай технологии и пробуй создавать параллельно свои небольшие проекты.
Это может быть небольшой веб сайт (прийдется разобраться с версткой и JS, но там нету ничего сложного) или какое нибудь API.
Это может быть простой бот в телеграмм.
Это может быть что угодно, предел зависит лишь от твоей фантазии.
Изучай проекты в открытом доступе.
И пробуй! Ходи по собеседованиям, проверяй свои силы. Демонстрируй свои проекты и наработки.
Конечно, у тебя сразу может не получиться. Не расстраивайся, это вполне нормально. Ты проверишь уровень своих знаний и поймешь, что нужно подтянуть.
Я уверен что следуя советам выше, ты сможешь в максимально короткое время устроится джуниором в свою первую компанию.
Как только ты попадешь на реальные проекты, в коллектив к другим, более опытным разработчикам, уровень твоих навыков будет расти экспоненциально.
Я надеюсь ты подчерпнул для себя достаточно полезной информации и заряд мотивации чтобы начать двигаться к своей мечте.
Если вы только начинаете свое знакомство с Go, советую вам эту книгу, который покрывает все основные концепции языка для уверенного старта разработки.
Чтобы не пропускать интересный материал по разработке, подписывайтесь на мой Telegram канал, в котором я делюсь знаниями и опытом.
Чести и удачи!