Программирование — это путь, полный вызовов и возможностей для роста. Я начал этот путь в 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, где могут применяться другие стандарты и требования. Это нормально, и важно понимать, что каждая организация имеет свои собственные критерии для оценки навыков и опыта.
Заключение
На пути к мастерству как разработчик важно помнить, что успех — это не только набор технических навыков, но и постоянное стремление к развитию, умение работать в команде и адаптироваться к изменениям. Стремитесь к обучению, пробуйте новые подходы и не бойтесь выходить за пределы своей зоны комфорта.
Не забывайте, что мастерство — это процесс, а не конечная точка. Каждый новый проект, каждая ошибка и каждая победа — это шаг к вашему совершенству. Верьте в себя, и ваш путь к мастерству приведет вас к успеху!