👩💻 Программирование — это путь, полный вызовов и возможностей для роста. Я начал этот путь в 2010 году как Junior-разработчик и на данный момент достиг позиции Tech Lead, продолжая развиваться в профессии. Накопленный опыт позволяет мне с уверенностью говорить о тех шагах и подходах, которые я опишу в этой статье.
За все время разработки мне довелоcь работать с различными языками программирования, такими как Delphi, JavaScript, PHP и Go. И с разными доменами Cassine, CMS, Billing, Gamblink, Marketplace
В этой статье я хочу поделиться своим опытом, который может оказаться полезным новичкам, которые хотят войти в IT но не знают с чего начать. Надеюсь, что мои советы помогут вам быстрее адаптироваться в мире программирования и избежать некоторых ошибок, с которыми я сталкивался на своем пути.
📚 Образования
Наличие образования в сфере IT не гарантирует, что вы станете программистом. Говорю это с уверенностью, опираясь на опыт своей группы в университете, только 20% выпускников действительно стали работать по професии. Поэтому, если вы решите поступать на IT-специальность, это, конечно, облегчит ваш путь, у вас будет 5 лет, чтобы пройти через 5 стадий принятия неизбежного ;)
Если у вас нет IT-образования — это хорошо, ведь для вас существуют IT-курсы. За 3-6 месяцев вам обещают, что вы станете программистом. Однако, имея опыт работы преподавателем в одной из таких IT школ, могу уверенно сказать, что процент тех, кто действительно становится программистом после таких курсов, ещё ниже — всего около 5% (по моим индевидуальным подсчетам).
Почему так происходит? Время на обучение ограничено, домашние задания делать некогда, уже есть основная рабата и большинство студентов просто не успевают пройти через все пять стадий принятия. 50% остаются на стадии отрицания, осознав, что программирование — это не для них, 20% застревают на стадии гнева. На стадии торга — всего 10%, еще 10% — на стадии депрессии, и только 10% доходят до стадии принятия.
✨ Типы разработки
Выбор направления разработки часто зависит от ваших интересов и целей, будь то создание веб-приложений, мобильных приложений или игр. Разсмотрим что у нас есть.
Web разработка
Frontend разработка — это создание того, что видит и с чем взаимодействует пользователь. Она включает работу с HTML, CSS, JavaScript.
Backend разработка — это создание серверной логики, управление базами данных и взаимодействие с API.
Fullstack разработка — это сочетание навыков frontend и backend, то есть разработка как пользовательского интерфейса, так и серверной части.
Мобильная разработка - программирование приложений для телефонов
Game разработчики - программирование игор
Application разработчики - программирование програм для ОС
Embedded разработчики - программирование микроконтроллеров и встроенных систем
👅 Выбор языка
В зависимости от направления, которое вас интересует, существуют языки, которые наиболее подходят для решения конкретных задач и разработки приложений. Давайте рассмотрим, какие языки программирования лучше всего подходят для различных типов разработки, чтобы помочь вам сделать осознанный выбор.
☁️ Web-разработка
Frontend разработка:
JavaScript — основной язык для создания интерактивных интерфейсов.
HTML и CSS — для разметки и стилизации веб-страниц.
Backend разработка:
PHP — популярен для веб-приложений и работы с CMS.
Python — часто используется с фреймворками, такими как Django и Flask.
Node.js — JavaScript на серверной стороне.
Java — для крупных и надежных приложений.
Ruby — используется с Ruby on Rails.
📱 Мобильная разработка
iOS разработка:
Swift — основной язык для разработки приложений на iOS.
Objective-C — старый язык, который всё ещё используется в некоторых проектах.
Android разработка:
Kotlin — предпочтительный язык для Android-приложений.
Java — также широко используется в Android-разработке.
Кроссплатформенные приложения:
JavaScript (с React Native), Dart (с Flutter) и C# (с Xamarin).
🎮 Game разработка
C# — используется с Unity.
C++ — широко применяется в разработке игр, особенно с Unreal Engine.
💻 Робототехника
Python — часто используется в робототехнике благодаря своей простоте и большому количеству библиотек для работы с аппаратным обеспечением, машинным обучением и обработкой данных.
C/C++ — популярны для программирования микроконтроллеров и встраиваемых систем, поскольку они обеспечивают высокую производительность и прямой доступ к аппаратным компонентам.
ROS (Robot Operating System) — это набор библиотек и инструментов, разработанных для облегчения создание робототехнических приложений, поддерживающий множество языков, включая Python и C++.
📼 Разработка приложений (Application разработка)
C# — для разработки приложений на Windows (с .NET).
Java — для кроссплатформенных приложений и Android.
Python — для создания настольных приложений и сценариев.
Delphi — используется для разработки настольных приложений под Windows, особенно в бизнес-приложениях.
⚙️ Embedded разработка
C и C++ — основополагающие языки для разработки встроенных систем.
Python — используется для прототипирования и разработки простых решений.
Также важно не забывать про уровень сложности и порог входа в язык. Некоторые языки проще для начинающих, в то время как другие требуют более глубокого понимания концепций программирования и разработки. Работа в сфере разработки игр - может звучать заманчиво, но нужно понимать что С++ освоить будет сложнее чем PHP.
Вот таблица языков программирования, отсортированных от простых к более сложным:
Уровень сложности
Язык
Простой
HTML, CSS, JavaScript, Python, Ruby
Средний
PHP, Java, C#, Swift, C, Kotlin
Сложный
C++, Rust, Delphi, Haskell
👦 Junior. Начало пути
Для примера мы возьмем среднестатистического человека, который увлекается веб-разработкой, но еще не определился с выбором специализации. Он решает стать fullstack-разработчиком, чтобы освоить два направления одновременно и повысить свои шансы на рынке труда. Перечислим шаги которые нам нужно пройти чтобы стать успешным разработчиком
📚 Обучения
Выбор IT школы
Помочь заложить фундамент может посещения IT школы, чтобы выбор был успешным и полезным для вас стоит учитывать несколько ключевых факторов:
Репутация школы и отзывы студентов
Преподаватели с опытом в IT
Насыщеная программа обучения
Большей процент практического обучение
Менторинг и обратная связь от преподавателей
Трудоустройство или хотябы стажировка в IT компании
Стоимость и длительность обучуния.
Самообучения
Самообучение — это один из самых эффективных способов освоить программирование, особенно если у вас нет возможности или желания проходить формальные курсы. Вот несколько ключевых советов чтобы освоить профессию:
Участие в сообществах: вступай в онлайн-сообщества (Telegram, Slack, Discord) и участвуй в обсуждениях.
Местные встречи: если возможно, участвуй в местных IT-мероприятиях или хакатонах.
🔨 Инструменты
Для Junior PHP разработчика важно освоить ключевые инструменты, которые помогут эффективно писать, тестировать и развёртывать приложения. Вот список основных инструментов, которые стоит изучить:
Этот список даст вам хорошую базу для того, чтобы стать успешным Junior PHP разработчиком. Начните с основ, таких как PHP, Git и базы данных, и постепенно углубляйтесь в более сложные инструменты.
🦾 Хард скилы
Хард скиллы — это технические знания и умения, которые необходимы Junior PHP разработчику для успешной работы в команде и выполнения поставленных задач. Эти навыки охватывают широкий спектр технологий и инструментов, начиная с основ программирования на PHP и заканчивая знанием фреймворков, баз данных и инструментов разработки. Вот список основных инструментов, которые стоит изучить:
Софт скиллы — это навыки, связанные с межличностным общением и личной эффективностью, которые играют ключевую роль в успешной карьере разработчика. В отличие от хард скиллов, которые сосредоточены на технических знаниях, софт скиллы помогают разработчику эффективно работать в команде, общаться с коллегами и клиентами, а также адаптироваться к изменяющимся условиям. Вот список основных, которые стоит освоить:
Коммуникационные навыки
Работа в команде
Готовность к обучению и изменениям
Умение справляться с неопределенностью
Эффективное планирование и оценка задач
Умение подходить к задачам с разных сторон
Способность понимать и управлять своими эмоциями
Настойчивость и мотивация
Организационные навыки
Навыки разрешения конфликтов
Гибкость и адаптивность
💼 Практика
Практика — это ключевой элемент в обучении и становлении разработчика. Теоретические знания, хотя и необходимы, не могут полностью подготовить вас к реальным вызовам, с которыми вы столкнетесь в процессе работы. Вот список мест где ее можно прокачать
Портфолио должно демонстрировать ваши навыки, опыт и подход к разработке, а также помогает выделиться на фоне других кандидатов. Вот что важно учесть при создании портфолио:
Контактная информация и фото: укажите актуальные контакты и добавьте профессиональное фото.
Выполненные задания: включите проекты, выполненные в IT-школе или на хакатонах.
Личный сайт или блог: создайте платформу для демонстрации своих навыков и мыслей.
Страница на GitHub: убедитесь, что ваш код хорошо структурирован и оформлен.
Стажировка: укажите роль и обязанности, которые вы выполняли.
Курсы, которые вы прошли: перечислите курсы, связанные с вашей профессиональной деятельностью.
Полученные сертификаты: добавьте информацию о сертификатах, подтверждающих ваши навыки.
Отзыв или рекомендация: наличие положительного отзыва будет плюсом.
🎯 Поиск работы
Поиск работы может быть сложным процессом, особенно для Junior PHP разработчика, но не стоит огорчаться. Нужно быть готовым к отказам и готовность к прохождению 100+ интервю. Существуют различные стратегии и платформы, которые могут помочь вам в этом:
Правильная подготовка поможет вам уверенно представить свои навыки и опыт, а также продемонстрировать, что вы подходите для выбранной позиции. Вот несколько советов, как подготовиться к собеседованию:
Изучение компании:
Узнайте о миссии, ценностях и культуре компании
Ознакомьтесь с последними новостями и проектами компании
Изучение требований и обязанностей:
Внимательно изучите описание вакансии и ключевые обязанности
Обратите внимание на необходимые навыки и квалификации
Подготовка примеров из своего опыта:
Подумайте о конкретных примерах из вашего прошлого опыта, которые демонстрируют ваши достижения и навыки
Изучение стандартных вопросов:
Подготовьтесь к часто задаваемым вопросам на собеседовании, таким как "Расскажите о себе" или "Как вы справляетесь с трудностями?"
Подготовка теории:
Освежите знания по технологиям и методологиям, которые могут быть актуальны для интервью
Изучите новые тренды и разработки в вашей области
Подготовьте краткий рассказ о себе и своем опыте:
Создайте четкий и лаконичный рассказ о себе, который включает ключевые моменты вашего опыта и достижений
Подготовьте вопросы, которые вы хотели бы задать:
Сформулируйте вопросы о команде, проектах и перспективах развития в компании
Практика собеседований (с друзьями или в группе):
Проводите симуляции собеседований с друзьями или коллегами, чтобы почувствовать себя более уверенно
Обратите внимание на невербальную коммуникацию:
Практикуйте уверенную осанку, зрительный контакт и открытые жесты
Подготовьте все необходимые документы:
Убедитесь, что у вас есть копии резюме, портфолио и других важных документов
Узнайте о формате собеседования:
Проверьте, будет ли это техническое интервью, собеседование с HR или панельное интервью, чтобы подготовиться соответствующим образом
💰Получение оффера
Поздравляю! Вы прошли все этапы собеседования и произвели хорошее впечатление на работодателя. Что делать дальше?
Проверьте компанию:
Исследуйте репутацию компании (отзывы сотрудников, новости и успехи)
Обратите внимание на корпоративную культуру и ценности
Внимательно изучите оффер:
Ознакомьтесь с условиями работы, включая зарплату, бонусы и льготы
Убедитесь, что все важные аспекты (график работы, удалёнка, отпуска) четко прописаны
Сравните с другими предложениями:
Проанализируйте другие офферы, если они есть, и оцените преимущества и недостатки каждого
Подготовка к новой роли:
Исследуйте технологии, инструменты и методологии, которые используются в компании
Начните изучать документы, если они доступны, и общие требования к роли
Планирование переходного периода:
Определите, как будете уходить с текущей работы, уведомите своего руководителя и команду
Подготовьте свои проекты к передаче, чтобы минимизировать последствия своего ухода
Обсудите дату начала работы и предварительные задачи:
Уточните дату начала работы и обсудите, какие задачи нужно будет решить в первые дни
Если возможно, уточните, кто будет вашим наставником или куратором на новом месте
Обсудите возможности карьерного роста:
Уточните, какие возможности для развития и продвижения доступны в компании
Проверьте условия контракта:
Убедитесь, что все условия, касающиеся увольнения, конфиденциальности и несоперничества, ясны и приемлемы
Выводы
Каждый шаг на пути к становлению разработчиком требует времени и усилий. От выбора учебных материалов и самообучения до участия в хакатонах и подготовки к собеседованиям — все эти этапы имеют свою продолжительность и значимость. Важно понимать, что процесс обучения и поиска работы — это не гонка, а скорее путь, который требует внимательного планирования и последовательного выполнения задач.
Сколько времени может уйти на каждый из них, зависит от ваших личных обстоятельств, уровня мотивации и доступных ресурсов. У кого-то этот путь может занять год, а у кого-то — несколько лет. Но конечный результат, безусловно, стоит всех затраченных усилий!
👨 Middle/Middle+. Развитие
Прошло 2-3 года и мы получили свой первый опыт в програмировании на позиции Junior. Однако, чтобы перейти на следующий уровень и стать Middle разработчиком, необходимо не только укрепить свои знания, но и развивать навыки, которые сделают вас ценным членом команды.
Давайте забежим на перед и обсудим позицию Middle+.
К сожалению, в современных реалиях некоторые компании вместо найма Senior разработчиков предпочитают занижать оценки, классифицируя опытных специалистов как Middle+. Это приводит к искажению понимания карьерного роста и может снизить мотивацию профессионалов.
Поэту Если вы в себе действительно чутвуете силы чтобы перейти на следующий уровень и стать Senior, вам нужно достаточно углубить свои технические навыки.
Сейчас мы поойдем еще один курс и все будет хорошо. Курсов для Junior разработчиков гораздо больше, чем для Middle. Нужно ставить цель на на практический опыт. Много информации и ресурсов доступно в виде книг, статей, видеоуроков они помогут углубить свои знания в специфических областях. Также некоторые компании предлагают индивидуальные или специализированные тренинги для команд. Вот список того как можно развивать свои навыки самостоятельно:
Изучить новый язык программирования и понять его особенности
Освоить новый фреймворк и интегрировать его в свои проекты
Постоянно обучаться новым технологиям и подходам в разработке
Писать тесты (Unit, Functional, Integration) и учиться тестировать свой код на разных уровнях
Продолжать развивать свой GitHub аккаунт, пополняя его новыми проектами и улучшая существующие
Участвовать в open-source проектах для опыта работы с реальным кодом и сообществом
Улучшать навыки коммуникации на работе, участвуя в обсуждениях и предоставляя обратную связь
Попробовать себя в роли ментора для Junior разработчиков, передавая свой опыт
Получить дополнительные сертификаты для подтверждения навыков
Участвовать в конференциях и митапах, заводить новые знакомства и получать свежие знания
Изучать принципы архитектуры и паттерны проектирования, применять их в своих проектах
Работать над soft skills (управление временем, эмоциональный интеллект, работа в команде)
Постепенно осваивать DevOps практики, такие как автоматизация, CI/CD и контейнеризация
Попробовать себя в роли спикера на конференциях, выступая с докладами
Чтение технической литературы, блогов и участие в онлайн-курсах для расширения знаний
Следуя этим шагам и постоянно развивая свои навыки, вы сможете успешно перейти на уровень Middle разработчика.
👴 Senior. Экспертность
Прошло 5+ лет как мы в IT. Но переход от Middle разработчика к Senior может оказаться более сложным, чем переход с уровня Junior на Middle. Основная причина заключается в том, что на уровне Senior от специалистов требуется не только глубокое знание технологий, но и широкий спектр других навыков и качест.
Таким образом, переход с позиции Middle на Senior — это не просто шаг в карьерной лестнице, а значительный рост как профессиональных, так и личных навыков. Этот путь требует времени, терпения и постоянного саморазвития, что делает его настоящим вызовом для многих разработчиков.
Не менее важным аспектом является восприятие Senior-ролей в самой компании. Если коллеги и руководство привыкли видеть вас в роли Middle-разработчика, может возникнуть стереотип, который затруднит ваш переход. В таких ситуациях лучше сменить работу, так как в новой компании вам будет проще начать с чистого листа и зарекомендовать себя как Senior-разработчика.
Также стоит отметить, что в некоторых компаниях карьерный рост на уровне Senior может быть ограничен. Нехватка вакансий, высокая конкуренция и неопределенность в отношении ожиданий от Senior-разработчиков могут добавить сложности в этот процесс.
Так кто же он такой этот Senir? Это безусловно человек который обладает такими пунктами как
Soft skills
Постоянное самообучение и стремление к профессиональному развитию
Следуя этим шагам и постоянно развивая свои навыки, вы сможете успешно перейти на уровень Senior разработчика.
👀 Уровневая градации
Наконец, хочу сказать несколько слов о уровне градации. Различия между уровнями Junior, Middle и Senior в разработке программного обеспечения обычно отражают опыт разработчика, набор навыков и ожидаемые обязанности в их ролях. Важно помнить, что уровень специализации очень субъективен и зависит от масштаба и культуры компании, в которой вы работаете. Например, если вы занимаете позицию Senior в компании X, это не означает, что вас будут воспринимать так же в компании Y, где могут применяться другие стандарты и требования. Это нормально, и важно понимать, что каждая организация имеет свои собственные критерии для оценки навыков и опыта.
Заключение
На пути к мастерству как разработчик важно помнить, что успех — это не только набор технических навыков, но и постоянное стремление к развитию, умение работать в команде и адаптироваться к изменениям. Стремитесь к обучению, пробуйте новые подходы и не бойтесь выходить за пределы своей зоны комфорта.
Не забывайте, что мастерство — это процесс, а не конечная точка. Каждый новый проект, каждая ошибка и каждая победа — это шаг к вашему совершенству. Верьте в себя, и ваш путь к мастерству приведет вас к успеху!