?‍? Программирование — это путь, полный вызовов и возможностей для роста. Я начал этот путь в 2010 году как Junior-разработчик и на данный момент достиг позиции Tech Lead, продолжая развиваться в профессии. Накопленный опыт позволяет мне с уверенностью говорить о тех шагах и подходах, которые я опишу в этой статье.

За все время разработки мне довелоcь работать с различными языками программирования, такими как Delphi, JavaScript, PHP и Go. И с разными доменами Cassino, CMS, Billing, Gambling, 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 компании

  • Стоимость и длительность обучуния.

Самообучения

Самообучение — это один из самых эффективных способов освоить программирование, особенно если у вас нет возможности или желания проходить формальные курсы. Вот несколько ключевых советов чтобы освоить профессию:

  • Четкое планирование и постановка целей

  • Выбор учебных материалов (YouTube, ChatGPT, Книги)

  • Подписка на уважаемых людей в вашей сфере (Robert C. Martin, Martin Fowler,...)

  • Изучение кода других разработчиков (GitHub)

  • Чтение документации и технических блогов (Stack Overflow, Medium, Reddit,Habr)

  • Практика, практика, практика

 ? Сообщество и Networking

  1. Участие в сообществах: вступай в онлайн-сообщества (Telegram, Slack, Discord) и участвуй в обсуждениях.

  2. Местные встречи: если возможно, участвуй в местных IT-мероприятиях или хакатонах.

? Инструменты

Для Junior PHP разработчика важно освоить ключевые инструменты, которые помогут эффективно писать, тестировать и развёртывать приложения. Вот список основных инструментов, которые стоит изучить:

Этот список даст вам хорошую базу для того, чтобы стать успешным Junior PHP разработчиком. Начните с основ, таких как PHP, Git и базы данных, и постепенно углубляйтесь в более сложные инструменты.

? Хард скилы

Хард скиллы — это технические знания и умения, которые необходимы Junior PHP разработчику для успешной работы в команде и выполнения поставленных задач. Эти навыки охватывают широкий спектр технологий и инструментов, начиная с основ программирования на PHP и заканчивая знанием фреймворков, баз данных и инструментов разработки.  Вот список основных инструментов, которые стоит изучить:

  • Веб-серверы (Apache/Nginx)

  • Понимание основ фронтенд-технологий (CSS, HTML, JS (на базовом уровне))

  • Основы PHP (Знание синтаксиса и базовых конструкций языка) 

  • Основы работы с популярными фреймворками, Laravel, Symfony или CodeIgniter.

  • Работа с базами данных: MySQL/PostgreSQL

  • Тестирование: PHPUnit

  • Отладка: Xdebug

  • Основы веб-технологий (RESTful API)

  • Основы безопасности (SQL-инъекции, XSS, CSRF)

  • Знание принципов Agile (Scrum, Kanban)

? Софт скилы

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

  • Коммуникационные навыки

  • Работа в команде

  • Готовность к обучению и изменениям

  • Умение справляться с неопределенностью

  • Эффективное планирование и оценка задач

  • Умение подходить к задачам с разных сторон

  • Способность понимать и управлять своими эмоциями

  • Настойчивость и мотивация

  • Организационные навыки

  • Навыки разрешения конфликтов

  • Гибкость и адаптивность

? Практика

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

? Создание портфолио

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

  • Контактная информация и фото: укажите актуальные контакты и добавьте профессиональное фото.

  • Выполненные задания: включите проекты, выполненные в IT-школе или на хакатонах.

  • Личный сайт или блог: создайте платформу для демонстрации своих навыков и мыслей.

  • Страница на GitHub: убедитесь, что ваш код хорошо структурирован и оформлен.

  • Стажировка: укажите роль и обязанности, которые вы выполняли.

  • Курсы, которые вы прошли: перечислите курсы, связанные с вашей профессиональной деятельностью.

  • Полученные сертификаты: добавьте информацию о сертификатах, подтверждающих ваши навыки.

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

? Поиск работы

Поиск работы может быть сложным процессом, особенно для Junior PHP разработчика, но не стоит огорчаться. Нужно быть готовым к отказам и готовность к прохождению 100+ интервю. Существуют различные стратегии и платформы, которые могут помочь вам в этом:

  1. Сайты по поиску вакансий (LinkedIn, Indeed, Glassdoor)

  2. Платформы для фриланса (Upwork, Freelancer, Fiverr)

  3. Конференции и митапы

  4. Хакатоны

  5. Обращение в компании напрямую

  6. Стажировки и практики:

  7. Поиск ментора

  8. Социальные сети

  9. Профессиональные сообщества и форумы:

  10. Агентства по трудоустройству:

  11. Обновление резюме и портфолио:

☎️ Подготовка к собеседованию

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

  1. Изучение компании:

    • Узнайте о миссии, ценностях и культуре компании

    • Ознакомьтесь с последними новостями и проектами компании

  2. Изучение требований и обязанностей:

    • Внимательно изучите описание вакансии и ключевые обязанности

    • Обратите внимание на необходимые навыки и квалификации

  3. Подготовка примеров из своего опыта:

    • Подумайте о конкретных примерах из вашего прошлого опыта, которые демонстрируют ваши достижения и навыки

  4. Изучение стандартных вопросов:

    • Подготовьтесь к часто задаваемым вопросам на собеседовании, таким как "Расскажите о себе" или "Как вы справляетесь с трудностями?"

  5. Подготовка теории:

    • Освежите знания по технологиям и методологиям, которые могут быть актуальны для интервью

    • Изучите новые тренды и разработки в вашей области

  6. Подготовьте краткий рассказ о себе и своем опыте:

    • Создайте четкий и лаконичный рассказ о себе, который включает ключевые моменты вашего опыта и достижений

  7. Подготовьте вопросы, которые вы хотели бы задать:

    • Сформулируйте вопросы о команде, проектах и перспективах развития в компании

  8. Практика собеседований (с друзьями или в группе):

    • Проводите симуляции собеседований с друзьями или коллегами, чтобы почувствовать себя более уверенно

  9. Обратите внимание на невербальную коммуникацию:

    • Практикуйте уверенную осанку, зрительный контакт и открытые жесты

  10. Подготовьте все необходимые документы:

    • Убедитесь, что у вас есть копии резюме, портфолио и других важных документов

  11. Узнайте о формате собеседования:

    • Проверьте, будет ли это техническое интервью, собеседование с HR или панельное интервью, чтобы подготовиться соответствующим образом

?Получение оффера

Поздравляю! Вы прошли все этапы собеседования и произвели хорошее впечатление на работодателя. Что делать дальше?

  1. Проверьте компанию:

    • Исследуйте репутацию компании (отзывы сотрудников, новости и успехи)

    • Обратите внимание на корпоративную культуру и ценности

  2. Внимательно изучите оффер:

    • Ознакомьтесь с условиями работы, включая зарплату, бонусы и льготы

    • Убедитесь, что все важные аспекты (график работы, удалёнка, отпуска) четко прописаны

  3. Сравните с другими предложениями:

    • Проанализируйте другие офферы, если они есть, и оцените преимущества и недостатки каждого

  4. Подготовка к новой роли:

    • Исследуйте технологии, инструменты и методологии, которые используются в компании

    • Начните изучать документы, если они доступны, и общие требования к роли

  5. Планирование переходного периода:

    • Определите, как будете уходить с текущей работы, уведомите своего руководителя и команду

    • Подготовьте свои проекты к передаче, чтобы минимизировать последствия своего ухода

  6. Обсудите дату начала работы и предварительные задачи:

    • Уточните дату начала работы и обсудите, какие задачи нужно будет решить в первые дни

    • Если возможно, уточните, кто будет вашим наставником или куратором на новом месте

  7. Обсудите возможности карьерного роста:

    • Уточните, какие возможности для развития и продвижения доступны в компании

  8. Проверьте условия контракта:

    • Убедитесь, что все условия, касающиеся увольнения, конфиденциальности и несоперничества, ясны и приемлемы

Выводы

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

Сколько времени может уйти на каждый из них, зависит от ваших личных обстоятельств, уровня мотивации и доступных ресурсов.  У кого-то этот путь может занять год, а у кого-то — несколько лет. Но конечный результат, безусловно, стоит всех затраченных усилий!


? 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

  • Постоянное самообучение и стремление к профессиональному развитию

  • Адаптивность к изменениям и гибкость мышления

  • Критическое мышление и аналитический подход

  • Самостоятельность и самодисциплина

  • Способность создавать и поддерживать качественную документацию

  • Умение эффективно работать в команде

  • Решение проблем и поиск оптимальных решений

  • Менторство, лидерство и управление командой

  • Коммуникативные навыки и умение передавать знания

  • Эмоциональный интеллект и управление конфликтами

  • Способность брать на себя ответственность за решения и их последствия

Hard skills

  • Глубокое понимание языка программирования и владение его тонкостями

  • Опыт работы с популярными фреймворками (например, Symfony, Laravel)

  • Написание и тестирование собственного кода

  • Разработка Unit, Functional и Integration тестов

  • Знание SQL и опыт работы с реляционными базами данных (например, MySQL, PostgreSQL)

  • Опыт работы с NoSQL базами данных (например, MongoDB, Redis)

  • Большие языковые модели (LLM)

  • Умение проектировать и реализовывать RESTful и GraphQL API

  • Понимание архитектуры и основных паттернов проектирования

  • Философия DDD (Domain-Driven Design) и её применение

  • Понимание принципов "чистого кода" и "чистой архитектуры"

  • Владение лучшими практиками кодирования (SOLID, DRY, KISS и т.д.)

  • Знание основных принципов безопасности приложений (OWASP, шифрование, аутентификация)

  • Умение анализировать и оптимизировать производительность приложений

  • Вклад в open-source и участие в профессиональном сообществе

  • Понимание DevOps практик (CI/CD, контейнеризация, оркестрация)

  • Опыт работы с облачными платформами (AWS, Google Cloud, Azure)

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

? Уровневая градации

Наконец, хочу сказать несколько слов о уровне градации. Различия между уровнями Junior, Middle и Senior в разработке программного обеспечения обычно отражают опыт разработчика, набор навыков и ожидаемые обязанности в их ролях. Важно помнить, что уровень специализации очень субъективен и зависит от масштаба и культуры компании, в которой вы работаете. Например, если вы занимаете позицию Senior в компании X, это не означает, что вас будут воспринимать так же в компании Y, где могут применяться другие стандарты и требования. Это нормально, и важно понимать, что каждая организация имеет свои собственные критерии для оценки навыков и опыта.

Заключение

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

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

Комментарии (6)


  1. GennPen
    30.10.2024 16:48

    • C# — для разработки приложений на Windows (с .NET).

    Он уже давно не только Windows, но и Linux.


    1. AlexXYZ
      30.10.2024 16:48

      Пока только разве что как backend. GUI до сих пор не прикрутили.


      1. GennPen
        30.10.2024 16:48

        1. AuToMaton
          30.10.2024 16:48

          Пожалуй напрасно Вы хотите этих уточнений. Статья для новичков, причём не для новичков в программировании вообще, а для новичков стремящихся работать по найму. Поэтому и возможности JavaScript можно было бы пошире сделать, и Julia с Racket не забыть, и Avalonia к месту была бы. Но с точки зрения работы по найму - как написано, так оно и есть.


  1. QtRoS
    30.10.2024 16:48

    Такое ощущение, что статья целиком сгенерирована ChaGPT: все тезисы изложены буллитами, а говорится в них обо всем и ни от чем одновременно. Ценность под вопросом.


    1. dykyi_roman Автор
      30.10.2024 16:48

      Статья и рассчитана для новичков, чтобы бы дать базу. В стате изложено основные поинты без воды и лишних мыслей. По каждому из пунктов можно было написать много текста и растянуть на новую статью так как темы довольно обширные затронуты. Цель ее показать какие есть типы разработок, языки, и инструменты.