16 вопросов мидлу: что должен знать Middle-разработчик
Разобрались, что должен знать Middle-разработчик, какими hard и soft skills он обладает и не завышены ли требования сегодня.
Как считаете, завышены ли сегодня требования к Middle-разработчикам?
В пределах нормы
Они даже занижены
Что должен знать Middle-разработчик? Этот вопрос актуален как для тех, кто претендует на вакансию мидла, так и для тех, кто посматривает в сторону продвижения.
Стоит отметить, что несмотря на то что в IT выработана шкала для оценки программистов (trainee, junior, middle, senior, lead), с которой более или менее все согласны, с точным определением каждого уровня общего мнения среди компаний пока нет. Поэтому каждая компания устанавливает внутренние требования к навыкам каждого уровня.
Тем не менее есть основной набор знаний и навыков, по которому в целом можно ориентироваться, оценивая себя. Многие специалисты утверждают, что сегодня требования к мидлам несколько завышены:
Позиция Middle-разработчика предполагает не только уверенное знание языка программирования, но и широчайшие познания в смежных технологиях. Позиция Middle накладывает на специалиста ответственность не только программировать «всё что угодно», но и обучать, оптимизировать код, разбирать и поддерживать чужой код, как будто родной. Фактически сейчас для вакансий Middle-разработчика предъявляются требования, как несколько лет назад для Senior.
Мы выяснили, что должен знать Middle-программист в 2020 году, и собрали общие вопросы с собеседований, по ответам на которые работодатели определяют, «дорос» кандидат до мидла или нет.
Hard skills
Каков ваш уровень владения языком программирования и сопутствующими инструментами?
От программиста-джуна ожидается знание всех конструкций языка, знание большей части стандартной библиотеки. Знакомство с фреймворками (хотя бы с одним), инструментами коллективной разработки (систем контроля версий, таск- и баг- трекеров, естественно, IDE и др.). Требования к мидлам существенно выше. Как правило, ожидается доскональное знание базы (в том числе синтаксиса используемых языков), опыт работы и уверенные теоретические знания стандартных библиотек, необходимых фреймворков и инструментов.
В каких проектах вы участвовали? Сколько из них вели сами?
Не стоит удивляться: опытные джуниоры уже вполне могут вести свои проекты. Не без поддержки более опытных коллег, но это не отменяет самостоятельности младшего разработчика. Так что если вы продвигаетесь по карьерной лестнице, в вашем портфолио уже должны поселиться свои проекты.
Показывайте решения, которые лучше других продемонстрируют ваши знания и навыки. Выбирайте самые сложные и комплексные таски, рассказывайте, как вы их выполняли и как планировали выполнение.
Каков ваш навык работы с базами данных?
Работаете с бэкендом? В таком случае вы должны свободно обращаться к базам данных, иметь навыки работы с одной или несколькими СУБД.
Знать и уметь строить оптимальную архитектуру БД. БД зачастую является самым узким местом производительности проекта. Менять архитектуру БД на живом проекте очень проблематично и дорого.
Это основное из того, что должен знать Middle-разработчик. Не стоит забывать и о нормализации, денормализации и характеристиках каждой нормальной формы.
Расскажите о своём уровне владения выбранной IDE
Нужно уметь без проблем подключать к проекту библиотеки, знать главные преимущества и недостатки среды, свободно настраивать и использовать горячие клавиши. Это то, что должен знать Middle-разработчик на уровне IDE.
Другие технические навыки
Тут всё зависит от конкретной специальности, но эксперты сходятся в том, что знания должны быть продвинутыми: больше, чем одна библиотека и пара хинтов.
Что касается технических навыков Middle-разработчика по frontend JavaScript, то специалист такого уровня должен:знать один из популярных JS-фреймворков (Vue, Angular), а также популярную библиотеку (React);знать SASS/SCSS/Less/PostCSS;уметь самостоятельно настроить систему сборки проекта Grunt/Gulp/Webpack, работать с голым JS (ES5, ES6, ES7);знать и понимать RESTful интерфейсы;уметь пользоваться средствами совместного использования кода (Git + GitFlow).
Также есть дополнительные навыки, которые дают преимущества. Большим плюсом в работе будут:опыт разработки серверного кода под Node.js, TypeScript;понимание SOLID, Dependency Injection, знание Linux (Debian-like);опыт работы с TDD/BDD, тест-фреймворки (Mocha, Should, Chai, Jest);знание Docker (большим плюсом будет Kubernetes/Docker Swarm);опыт в PostgreSQL/MySQL etc.
Самое важное для мидла, это знать, как изнутри работает используемая тобой технология, твой фреймворк. Не то, как он производит рендер (с помощью VDOM и т. п.), а как код написан, как происходит магия. Открой GitHub, посмотри исходники React, как, например, this.setState заставляет компонент делать рендер.
Какие методологии разработки вы знаете? По каким из них работали?
Одной теории недостаточно. Вы уже должны были участвовать в проектах «под ключ» и понять, как работает та или иная методология. Хорошо, если у вас был опыт работы по нескольким методологиям: если так, обязательно проведите сравнение плюсов и минусов, исходя из практики.
Что ещё должен знать Middle-разработчик
Знать и уметь писать оптимальные запросы по выборке данных (DML-запросы).Немного знать про ACID, понимать, что это такое и зачем нужно.Знать три столпа ООП (наследование, полиморфизм и инкапсуляция).Знать, что такое шаблоны проектирования и зачем они нужны. Понимать различия между ними.Понимать, что такое SOLID и когда он уместен.Знать и понимать, что такое тестирование кода и как оно реализуется.Желателен опыт в написании тестов. Это заставляет мозг разработчика генерировать совершенно другой код. Я специально поставил этот пункт ниже SOLID и шаблонов проектирования: сначала SOLID и шаблоны, а только потом тесты. Тогда будет получаться код, который будет легче покрываться тестами.
Soft skills
Насколько вы коммуникабельны?
Если в случае с Junior-программистом коммуникативные навыки просто важны, то для Middle-разработчика они обязательны.
Думаю, что Middle-программист не должен принимать решения по архитектуре проекта, согласовывать требования с заказчиком и решать вопросы по блокерам, так как это входит в компетенции аналитика, PM и сеньора.
Несмотря на это, во многих компаниях перед мидлом часто ставится задача самостоятельно разобраться, чего хочет заказчик, как решить его проблему и какую архитектуру построить. На базе этих сведений формируется полноценное ТЗ, которое затем передаётся команде разработчиков.
Канадская компания выпустила AR-очки для пловцов
Ваши навыки работы в команде
С точки зрения soft скиллов Middle-разработчику, конечно, нужно осваивать компетенции: ведение переговоров, общение с командой, иметь представление об управлении командой. Эти навыки пригодятся в дальнейшем карьерном росте.
Умеете ли вы разрешать конфликты?
Этот навык также является частью коммуникации. Разногласия могут возникнуть и с заказчиком, и внутри команды. Если вам поручили роль наставника над младшими специалистами в проекте — в обязанности войдёт и урегулирование конфликтов.
Несмотря на то что мы, разработчики, чаще сами по себе и сами в себе — нужно развивать коммуникации и другие мягкие навыки. Не во всех компаниях есть менеджер, который выполняет роль медиатора между отделами — чтобы тебя поняли и чтобы ты просто смог нормально рассказать о своей работе, нужны — эмпатия, умение договариваться, гибкость в процессах.
Каков ваш уровень английского языка?
Уровень владения английским языком Middle-программиста должен быть не ниже Upper-Intermediate, так как этот специалист постоянно участвует в созвонах, конференциях, должен свободно читать и составлять техническую документацию.
Способны ли вы доступно доносить свои идеи, убеждать в их правильности?
Что касается «софтскиллс», они необходимы для выполнения многочисленных ролей в команде — разработчик, ментор, докладчик, тимлид и другие. Что для этого понадобится специалисту? Убеждать коллег и клиентов. Иногда даже продавать — идеи, решения, преимущества. Презентовать свои идеи. Обучать. Планировать свою деятельность, ставить задачи перед подчинёнными, контролировать их выполнение. Для этого и много другого нужно развивать соответствующие навыки.
Можно ли вас охарактеризовать, как внимательного человека?
Очень хорошее качество, которое надо развивать разработчику, — это внимательность. Она позволит вовремя заметить, что с «канарейкой» что-то не то. Грамотный Middle-разработчик должен непрерывно отслеживать «жизненные показатели» проекта, чтобы вовремя понять, что «чирикает» после недавнего коммита он уже не так бодро.
Если возникла проблема, как вы будете её решать?
Перед разработчиком среднего уровня стоит задача самостоятельно находить, обрабатывать и использовать информацию, и только в самых сложных ситуациях обращаться к коллегам-сеньорам.
На первом месте здесь стоит умение искать информацию. Перед собеседованием вспомните основные источники информации, к которым вы обращаетесь в первую очередь (после документации, разумеется).
Можете ли вы оценить время выполнения задачи?
Это то, что должен уметь Middle-разработчик, особенно если речь идёт о работе в команде: в этом случае необходимо оценить время, исходя из знаний и навыков каждого участника проекта. Следует учиться правильно определять сроки выполнения работы.
Мидл уже имеет достаточный опыт работы, что позволяет ему декомпозировать задачи более-менее правильно. Мидл умеет декомпозировать, а значит он может точнее оценивать задачи. Он должен уметь соблюдать сроки. Это умение нельзя переоценить.
Планируете ли вы развиваться до сеньора или тимлида?
Плох тот солдат, что не мечтает стать генералом. Перефразируем: плох тот мидл, что не мечтает стать сеньором/архитектором/тимлидом. Мидл должен всегда хотеть развиваться. Жажда саморазвития будет вытаскивать мидла из его рутины (а у него будет рутина) и отправлять развиваться дальше.
От новичка до тимлида: гайд по продвижению
Выводы
Так завышены ли сегодня требования к мидлам? На этот счёт мнения расходятся, но почти все специалисты сходятся во мнении, что каждая компания диктует свои правила, и то, что должен знать Middle-разработчик, будет напрямую зависеть в том числе от должности, на которую он претендует.
Не завышены ли требования к мидлам? Возможно, кто-то из IT-специалистов сталкивался с тем, что, уже несколько лет будучи мидлом, на собеседовании в какой-либо компании его оценивают как джуниора. Связано это, как правило, с двумя факторами: первое — разные требования в разных компаниях. Второе — часто в уровень квалификации, кроме перечисленных выше hard и soft skills, ещё включают погружённость сотрудника в предметную область, знание специфики бизнеса. Эти знания делают сотрудника ценным для текущей организации, но могут значить меньше в новой для него организации.
Подводя итоги, Middle-разработчик должен свободно плавать в теории, хорошо знать необходимый стек технологий и иметь по нему богатый опыт, не просто коммуницировать, но также оценивать трудозатраты, сроки, обучать и управлять ходом разработки. Опыт работы с базами данных, Git и уверенное владение английским языком обязательны по умолчанию.
Что должен уметь мидл в разных компаниях
Хотите работать в продуктовой компании, но не знаете, как туда попасть? Мы всё выяснили за вас. Мы связались с разработчиками из Тинькофф, «Вконтакте», «Проксиматики», PetShop и EPAM и узнали, кого они видят в качестве мидл-фронтендера у себя в компании.
Во всех компаниях фронтендеры выполняют разные задачи. Где-то они разрабатывают интерфейсы, где-то программируют логику работы веб-приложений, а где-то совмещают обе задачи — в статье мы посмотрим на общую картину.
Общие навыки
Если вы претендуете на позицию мидла, у вас должны быть хорошие знания HTML и CSS. Нужно знать семантическую вёрстку, уметь создавать адаптивные интерфейсы, строить сетки на таблицах, флексах и гридах, а также правильно выбирать метод построения сеток под конкретную задачу.
Ещё обязательно знать ванильный JavaScript, TypeScript и минимум один фреймворк. Самый популярный — React, его используют во всех компаниях. В Тинькофф некоторые команды программируют ещё и на Angular, а во «Вконтакте» — на Vue. В EPAM выбор ещё шире: здесь мидлы должны владеть React, Angular или Vue.
Из софт-скиллов особенно важны ответственность и самостоятельность, навыки коммуникации и командной работы. Мидлы не должны бояться просить совета у коллег, если столкнулись с проблемой. Им нужно работать быстро, качественно и с минимальным руководством. А ещё важны навыки наставничества. Ведь когда в компании появляются новички, им нужно помочь быстрее влиться в работу и освоить новые технологии.
Petshop
Petshop — крупнейший интернет-магазин товаров для животных в России. Чтобы устроиться сюда разработчиком, нужно хорошо владеть React и Redux: не только знать правила и ограничения библиотек, но и понимать, с чем они связаны. Здесь важно разбираться в SSR — он не играет ключевую роль на собеседовании, но для работы понадобится. Ещё разработчики должны уметь читать чужой код, а при написании своего нужно следовать принципам SOLID и KISS.
Если говорить о софт-скиллах, то в Petshop важна коммуникабельность. Нужно не стесняться уточнять информацию в техзадании, уметь рассуждать над задачей и давать качественную обратную связь — без оценочного суждения и с конкретными предложениями или замечаниями.
У мидла должны быть хорошие знания по тем технологиям, которые мы используем в проекте. А опыта достаточно, чтобы самостоятельно качественно и осознанно решать большинство типовых задач.
Владимир Турецкий, фронтенд-разработчик Petshop
Что нужно знать: HTML, CSS, JS, React, TypeScript, SSR, Redux.
Проксиматика
«Проксиматика» создаёт ПО для банков и бизнеса: умные интернет-банки, инструменты для обмена информацией и маршрутизации платежей. Чтобы работать над такими проектами, фронтендер должен знать GraphQL и уметь организовать Rest API. Он должен понимать, что такое реляционная база данных: как делать выборки и обновлять информацию в таблицах, как таблицы связаны между собой.
Разработка здесь ведётся на React, поэтому фронтендер должен разбираться в функциональных компонентах. А вот в классовых — необязательно, их стараются не использовать. Ещё нужно знать маршрутизацию, управление состоянием, SSR и организацию взаимодействия с бэкендом.
Мидл — это человек, который может прочитать техническое задание и осознать его, провести декомпозицию задачи на компоненты и изготовить эти компоненты. Причём он всегда может обратиться за помощью к коллегам, если нужно что-то оптимизировать или использовать наработки, которые он не знает.
Волков Максим, генеральный директор «Проксиматики»
Что нужно знать: HTML, CSS, JS, React, TypeScript, GraphQL, Rest API, SSR.
Тинькофф
В Тинькофф своя система грейдов: здесь есть джун-, джун и джун+, мидл-, мидл и мидл+, а ещё сеньоры. Уровень разработчика проверяется по двум матрицам компетенций: для софт-скиллов и хард-скиллов.
Софт-скиллы. Софтовая матрица едина для всех. По ней мидлами считают активных и самостоятельных людей, которые могут сами выполнить задачу и, если что-то пойдёт не так, не стесняются задавать вопросы.
Хард-скиллы. Хардовая матрица у каждой команды своя. В Тинькофф нет должности фронтенд-разработчика — вместо него JavaScript-разработчик, и это направление делится на React, Angular и Node. js. Соответственно от того, в какой команде фронтендер, зависит то, такие технологии он должен знать. Но есть и общие навыки для всех команд. Например, мидлы должны понимать браузерный рендеринг и API, работать со сборщиками webpack и Babel.
Тестирование. Все разработчики компании пишут тесты. Джунам достаточно знать основы, а вот мидлы должны понимать, как работает тестирование в целом приложении и как писать стабильные тесты. Они знакомы с пирамидой тестирования и придерживаются её.
Мидлы должны разбираться в производительности и оптимизации приложений. Знать хотя бы на базовом уровне про безопасность: XSS-атаки и CORS, отличать авторизацию от аутентификации. Нужно понимать веб-архитектуру и хотя бы немного разбираться в том, как работает мониторинг: читать логи, искать ошибки и исправлять баги.
Если ты претендуешь на уровень «мидл+», то дополнительно проходишь собеседование на веб-архитектуру. Здесь нужно понимать архитектурные особенности, что такое микрофронтенды, зачем они нужны, как с ними работать, как работать с CDN и нужен ли он. Но если ты мидл и участвовал в запуске нового проекта, ты хотя бы на минимальном уровне всё это знаешь
Николай Тихонов, фронтенд-разработчик Тинькофф
Что нужно знать: HTML, CSS, JS, React, Angular или Node. js, TypeScript, Redux, юнит-тесты, JS Core, Rest API.
EPAM Systems
EPAM — крупная международная IT-компания. Здесь производят ПО для финансовых, торговых, медицинских, медиа- и других организаций.
В EPAM тоже есть матрица компетенций, по которой проверяются навыки мидла, сеньора и тимлида. Требований много. Например, если говорить о базовых навыках, то фронтендеры-мидлы должны очень хорошо знать JavaScript:
- понимать, что такое хойстинг и какая разница в хойстинге переменных, объявленных при помощи разных ключевых слов;
- хорошо знать синтаксис создания функций: понимать разницу между функциональным выражением и объявлением функции;
- уметь решать задачи на всплытие переменных и функций, понимать замыкания и области видимости;
- разбираться, как парсится JS и как работает токенизация;
- понимать, как назначается и теряется контекст выполнения функции;
- как работают методы call() , apply() и bind() ;
- писать кастомный bind;
- понимать асинхронность и промисы;
- решать задачи с then() , catch() и finally() ;
- подключать скрипты c атрибутами async и defer , при этом понимая разницу между ними.
Ещё у них должно быть общее понимание работы приложения и взаимодействия с бэкендом, представления о сборке проекта.
Если вы подумали, что все эти навыки могут быть и у джуна — то вы отчасти правы. Разница в степени погружения: мидлы должны глубже разбираться в конструкциях JS и применять их без ошибок.
И это ещё не все. Чтобы устроиться в EPAM, нужен английский уровня A2 или B1. Без него никак, потому что часть собеседования проходит на иностранном языке. А при повышении грейда проводится комиссия уже полностью на английском — здесь нужен уровень владения языком B1 или B1+.
Что нужно знать: английский язык, HTML, CSS, JS, JS Core, OSI, протоколы, React, Angular или Vue.
«Вконтакте»
Во «Вконтакте» нет формального деления разработчиков на сеньоров, мидлов и джунов — считается, что в такой системе принижается ценность мидлов. Вместо этого здесь младшие разработчики, разработчики и старшие разработчики.
Младшие — фронтендеры, которым нужны чёткие требования и поддержка на каком-то из этапов, чтобы довести задачу до конца. А разработчик — это полноправный опытный программист, который сам справляется со всеми задачами, если они понятно описаны. Он знает, как писать простой поддерживаемый код и хорошо разбирается в своей области.
Чтобы устроиться сюда, нужно знать Redux, webpack, Immer, уметь проводить тестирование и работать со Storybook. Разные команды используют разные инструменты, причём младшие и старшие разработчики обычно находятся в одном стеке разработки.
Что нужно знать: HTML, CSS, JS, TypeScript, webpack, React, Immer, Storybook, юнит-тесты, React Redux, Vue. js (Vuex).
Заключение
У каждой компании свой набор требований и своя сетка грейдов. Но есть технологии, которые требуются почти на любой работе: HTML, CSS, JavaScript, TypeScript и реактивные фреймворки. Советуем хорошо изучить их, чтобы подходить максимальному числу работодателей. А если хочется попасть в конкретную компанию, заранее узнайте, какой там стек, и прицельно изучайте эти технологии.
Что должен знать middle c
LoftSchool: Я уже middle? А сейчас?
Деление специалистов на junior, middle и senior – обычное дело в IT. Senior – это high-level, поэтому о нём мы не говорим. А вот как понять, что ты уже middle? Руководители IT-компаний поделились с Loftschool мнением о том, чем junior отличается от middle, когда претендовать на повышение и какие навыки прокачивать.
Подогнать под одно определение всех middle-разработчиков невозможно. Если по меркам одной компании ты крепкий middle, то в другой, более продвинутой, потянешь лишь на сильного junior-разработчика. Требования по рынку крайне нестабильны. Можно попытаться вывести некие общие критерии, но лишь примерно.
Middle-разработчик должен знать на хорошем уровне язык, на котором он пишет. Возможно, без совсем уж редких тонкостей, нюансов и глубокого понимания реализации. Но знание базовой библиотеки основного языка должно быть на уровне знания таблицы умножения. Разумеется, надо и свободно применять на практике дополнительные библиотеки, которые являются стандартом в области.
Кроме того, middle-разработчику нужен опыт, а вместе с ним – умение анализировать поставленные задачи и находить оптимальные пути для их решения. И даже если так сложилось, что для решения трудной задачи пришлось прибегнуть к коллективному разуму в лице Stack Overflow (что, несомненно, происходит крайне редко), то разработчик сможет не только отыскать подходящий кусок кода и скопировать его, но и понять, как его доработать под конкретную задачу.
Middle-разработчик непрерывно отслеживает «жизненные показатели» проекта.
Также очень хорошее качество, которое надо развивать разработчику, – это внимательность. Она позволит вовремя заметить что-то неладное. Грамотный middle-разработчик должен непрерывно отслеживать «жизненные показатели» проекта, чтобы вовремя понять, что после недавнего коммита он работает уже не так бодро.
Еще один важный скилл – умение давать жизнеспособную оценку по трудозатратам. Middle-разработчик, прочитав ТЗ/ФТ, должен корректно оценить время на реализацию, запросить всю требуемую или недостающую информацию, согласовать работы с другими участниками разработки и в итоге выдать результат, за который не стыдно.
Можно также упомянуть и об умении проектировать отдельные части системы, над которыми ведётся работа в рамках поставленных задач. Разумеется, проектирование системы – это задача сеньора или архитектора, но в формате «здесь и сейчас» middle-разработчик должен уметь принимать взвешенные и осмысленные решения об использовании тех или иных подходов.
Я не буду перечислять конкретные библиотеки, фреймворки, подходы и прочие подробности. В целом важно лишь понимание того, что ты делаешь и зачем, а пробелы в знаниях легко заполнить, если есть крепкий фундамент. Частности же зависят исключительно от области, в которой предстоит работать.
Чётких критериев для разработчика между грейдами нет. Они разнятся в зависимости от специфики отрасли, рынка, конкретной компании.
Я могу выделить некоторые общие показатели:
1. Самостоятельное выполнение задачи и проекта небольшого размера.
Junior-разработчику дают решать конкретные задачи. Причём по мере продвижения по задаче разработчик обычно обращается к старшим коллегам, чтобы узнать, как решить тот или иной момент.
Отличительной чертой middle является то, что разработчик уже умеет самостоятельно решать задачу. Безусловно, у него возникают вопросы, но значительно реже.
2. Самостоятельная поддержка небольшого проекта.
Если уже есть готовый проект, который требует лишь небольших доработок, то middle-разработчику не сложно такой проект поддерживать.
3. Решение более абстрактных задач и их декомпозиция.
От junior-разработчика ожидается решение конкретных задач, ему расписывается, где найти решение и, возможно, описывается, как решить задачу. Например, задача может быть описана в формате: «Надо добавить кнопку в компонент Х. Пример добавления лежит тут. Не забудь проверить в продовской сборке».
Middle же получает более абстрактные задачи. Например, формата: «Добавить корзину на сайт. Макеты – тут». Он знает, какие детали уточнить у заказчика. Далее разработчик уже сам выделяет этапы разработки, делает декомпозицию задачи.
4. Ответственность за результат.
Тут всё просто: если junior совершает даже серьёзную ошибку, то ответственность за это по большей части на себя берёт senior или teamlead. После повышения до middle-разработчика ответственность за принятые решения переходит к нему.
5. Несколько видов решения задачи и выбор наиболее подходящего для данного случая.
В зависимости от ситуации middle знает различные методы решения задачи и в силах аргументированно обосновать выбранное решение. Например, если нужно быстро починить ошибки в коде, то он находит самое быстрое решение проблемы. И даже если это влечёт за собой дальнейшие переделки (техдолг), он понимает, что важней быстро доставить фикс и в дальнейшем уже заниматься техдолгом.
Middle знает различные методы решения задачи и в силах аргументировать выбранное решение.
Чтобы понять, как вырасти до middle, пообщайтесь со своим руководителем и выясните, что конкретно в вашей компании необходимо делать, чтобы достичь этого уровня. Можно прямо спросить: «Хочу быть middle-разработчиком, чего мне сейчас не хватает для этого?». Руководитель заинтересован в том, чтобы вы выросли, поэтому честно расскажет, чего не хватает. В одних компаниях разработчика назначают middle только после 2-х лет работы, в других после прохождения сертификации.
Ещё один совет: посмотрите, какие ожидания стоят в вакансиях middle-разработчиков. Всё будет расписано, скорее всего, туманно, но общую канву вы поймёте.
Junior – новичок в программировании, который ещё не обладает практически никакими навыками разработки и взаимодействия с командой. А middle уже обладает некоторым уровнем экспертности, которая помогает самостоятельно решать несложные конкретные задачи.
Чётко определить грань, когда начинающий разработчик готов стать middle, сложно. Для этого необходимо проявлять больше ответственности, брать на себя задачи сложнее, заниматься ресёрчем. Благодаря этому появится понимание, как решить одну задачу разными способами.
Необходимо проявлять больше ответственности, брать на себя задачи сложнее, заниматься ресёрчем.
На начальном этапе мы подробно описываем junior-разработчику, что необходимо сделать и как, помогаем искать подходы и решения в интернете. Со временем он начинает понимать проект и уровень проработки задач снижается. И вот тогда он готов стать middle.
Кроме практики, необходимо прокачивать и знания теории – языка и подходов проектирования. Для оценки своего уровня рекомендую периодически мониторить рынок вакансий и проходить интервью в другие компании.
Отличия между junior и middle не настолько очевидны, как, например, между junior и senior. Есть три способа понять, что вы готовы перейти на другую ступень:
Первый – спросить teamlead
Второй – отправиться на собеседование на должность middle-разработчика и оценить с помощью рекрутеров или даже тестовых заданий, насколько вы готовы.
Третий – замерять параметры: время, затрачиваемое на выполнение стандартных задач; количество вопросов, которые вы задаете по своим задачам коллегам; размер кода, которым вы решаете стандартные задачи (оптимальность и КПД).
Один из главных навыков middle-специалиста – это тайм-менеджмент.
Из главных навыков для middle я бы назвала тайм-менеджмент, умение расставлять приоритеты и желание максимально всё оптимизировать. По сути, это некое бизнес-мышление, когда специалист начинает понимать, что его время стоит денег и он должен синхронизироваться с глобальными задачами компании.
Главным и неизменным признаком middle является способность решать типовые задачи самостоятельно без посторонней помощи. В то время как junior, скорее всего, станет искать готовое решение на том же Stack Overflow, middle, вероятнее всего, уже имеет схожий опыт и выдаёт решение самостоятельно. Тем не менее, это не значит, что, становясь middle, разработчик перестаёт обращаться к подобным ресурсам. Он просто начинает использовать их как источник вдохновения или как метод ускоренного повышения качества своего кода за счет «красивых» решений, найденных другим разработчиком, вместо того, чтобы тратить огромное количество времени на поиск похожего решения своими силами.
В числе более узких критериев я выделю понимание общих принципов работы большей части «нативного» SDK или хотя бы его основной и чаще всего используемой части, а также общее представление о существовании и назначении его «менее популярных» частей. Это позволит в случае необходимости быстро ознакомиться с соответствующим разделом документации и приступить к реализации функциональности.
Кроме этого, важными навыками middle-программиста являются:
— способность переложить требования к функциональности на способ её реализации в условиях возможностей и ограничений платформы;
— найти и предложить альтернативное решение задачи, например, в случае невозможности реализации изначального варианта из-за ограничений платформы или требований различных «соглашений»;
— понимание и осознанное следование общепринятым практикам «хорошего» кода;
— представление о существующих архитектурных и прочих решениях в рамках платформы, под которую он разрабатывает.
Как из junior превратиться в middle? Можно следить за статьями более опытных разработчиков, просматривать их код, пытаясь понять, почему что-то сделано так, а не иначе, анализировать свой код, стараясь упростить и улучшить его. Я не имею в виду, что стоит слепо следовать их подходам к разработке. Важно анализировать найденные решения и корректировать собственное представление и стиль, чтобы сначала сделать его чуть лучше, затем ещё лучше и так до бесконечности.
Анализируйте найденные решения и корректируйте собственное представление и стиль.
Разница между junior и middle чувствуется в процессе работы. Если вы начали ощущать, что задачи решаются быстрее, необходимость разделять код уже не вызывает чувства растерянности и непонимания, а, смотря на код, вы неосознанно замечаете места, где можно было бы сделать «гораздо лучше» и представляете, как этого достичь, видимо, пора ставить вопрос повышения своему наставнику.
Каких-то четких стандартов в этом вопросе в индустрии нет, всё разнится от компании к компании. Обычно junior – это студент, недавно закончивший обучение или стажировку. У него есть общие знания в теории программирования, computer science, знание 1-2 языков программирования. Хорошо, если есть pet project – какая-то разработка (сайт, библиотека и т. п.), которую он запустил и развивает ради собственного интереса. От middle-разработчика его отличает отсутствие опыта в создании реальных проектов, поэтому он работает под присмотром более опытных коллег и первое время набивает руку на простых задачах.
Хорошо, если у junior есть pet project – какая-то разработка, которую он запустил и развивает ради собственного интереса.
Middle-разработчик, в первую очередь, понимает свою зону ответственности и способен самостоятельно принимать решения по реализации в рамках своей компетенции. Ему не нужно разжёвывать задачу, приводить подробную декомпозицию. И он понимает рабочие процессы внутри компании.
Вообще разделение «junior-middle-senior» веcьма условно. Чаще всего компании делят своих разработчиков по стажу работы. Junior – это новичок, который не понимает цели проекта и может работать над задачами только под чьим-то руководством. Middle – это junior, набравшийся опыта, а senior– это руководитель команды, который может раскидать часть полномочий и полностью видит архитектуру системы.
Причем всё это работает только на уровне больших компаний. А на уровне стартапов часто бывает так, что фаундер – он и teamlead, и senior, который руководит junior-разработчиками. Или, наоборот, горизонтальная структура: над стартапом коллективно работает команда middle-специалистов. А ведь ещё есть фулстек-разработчики, которых вообще сложно втиснуть в какую-то категорию.
Так что эти названия – это не то чтобы условность, но границы у них довольно расплывчатые и понимание может отличаться от компании к компании.
Что делать junior, чтобы дорасти до middle? В текущем темпе развития IT, наверное, очень мало спать
Когда человек способен принимать решения по проекту самостоятельно, а не просто кодить по ТЗ, то он готов к повышению.
А если серьезно, то уметь воспринимать критику и постоянно учиться новому. Но этот совет подходит любому специалисту. Какой-то четкой грани, которая отделяет junior от middle нет. Но я бы сказал, что когда человек способен принимать какие-то решения по проекту самостоятельно, а не просто кодить по ТЗ, то он готов к повышению. Например, видит какие-то пробелы в техзадании или «костыли» в коде и может внятно объяснить, как сделать лучше.
Junior-разработчикам для общего развития я бы советовал пытаться делать свои небольшие проекты и доводить их до возможности использования и дальнейшей поддержки. Если сможет – значит готов к повышению.
Разработчик C++
![]()
Разработчик на C++ — это специалист, обладающий уникальными навыками в области программирования и разработки программного обеспечения на языке C++. Он считается одним из наиболее мощных и гибких языков программирования, поэтому разработчики, которые кодят на нем, играют важную роль в создании различных приложений, игр, сервисов и систем.
Задачи разработчика на C++ включают в себя создание и оптимизацию кода, реализацию алгоритмов, обеспечение высокой производительности и надежности программного продукта. Они могут заниматься разработкой ядра операционных систем, созданием графических приложений, встраиваемых систем, а также разработкой ПО.
Закажите бесплатную консультацию по вашей вакансии
Что нужно знать разработчику на C++
«Твердые» навыки (технические):
- Знание C++ и его стандартов. Разработчик должен быть в совершенстве знаком с языком C++ и его стандартами, включая C++11, C++14, C++17, C++20.
- Алгоритмические навыки. Понимание алгоритмов и структур данных, нужные, чтобы выбрать правильный алгоритм для определенной задачи.
- Оптимизация кода. Умение оптимизировать код для увеличения производительности и эффективности приложения.
- Управление памятью. Использование указателей, сборку мусора и RAII (Resource Acquisition Is Initialization).
- Работа с многозадачностью и потоками в C++ (например, стандартная библиотека std::thread и std::async).
- Знание библиотек и фреймворков: Qt, Boost и STL (Standard Template Library).
Мягкие навыки (межличностные и коммуникативные):
- Способность анализировать сложные задачи и находить эффективные решения.
- Умение работать в команде и эффективно общаться с другими членами коллектива.
- Готовность к обучению и гибкость к новым технологиям и методологиям.
- Навык чтения, понимания и создания технической документации и комментариев к коду.
- Способность эффективно решать конфликты и адекватно воспринимать конструктивную критику.
- Умение работать над проектами самостоятельно и добиваться поставленных целей.
- Постоянное желание и стремление к обучению и совершенствованию своих навыков в области C++ и программирования в целом.
Какие плюсы и минусы быть разработчиком на C++
Ищете работу?
Заполните заявку
Хотите попасть в интересный проект? Будем рады помочь найти для вас работу мечты в офисе или удаленно.
Татьяна Малиновская CEO Employ City
Виолетта Белобрусова Account Manager
Анастасия Багунова Team Lead
Артем Осипов Middle IT Recruiter
Юлия Кудряшова IT Recruiter
Анна Балан Account Manager
Мария Переверзева Team Lead
Где нужны разработчики на C++
Разработчики на C++ находят применение в различных сферах, где требуется высокая производительность систем, полный контроль над аппаратными ресурсами и эффективная работа с памятью.
Разработка игр.
Игровая индустрия активно использует C++ для создания высококачественных и высокопроизводительных продуктов. Разработчики могут заниматься разработкой игровых движков, графической части, физического моделирования и оптимизацией игровых приложений.
Системное программирование.
Разработчики C++ могут работать над операционными системами, драйверами устройств и другим системным программным обеспечением, где требуется максимальное управление аппаратными ресурсами.
Финансовая индустрия.
В финансовой сфере C++ используется для создания высокоэффективных финансовых систем, алгоритмической торговли и анализа рынков.
Блокчейн и криптография.
Разработчики могут работать над проектами, где критически важны высокая безопасность и производительность.
Графические приложения.
C++ используется для создания компьютерной анимации, компьютерного зрения и программ для работы с графикой и 3D-моделями.
Телекоммуникации.
В сфере телекоммуникаций C++ применяется для разработки сетевых приложений и протоколов.
Авиационная и автомобильная промышленность.
Разработчики могут работать над системами управления и встроенными системами в нишевых продуктах.
Медицинская техника.
В медицинской сфере C++ применяется для разработки медицинских устройств, анализа данных и обработки изображений.
Как выглядит рабочий день разработчика на C++
Рабочий день разработчика на C++ может различаться в зависимости от компании, проекта и специфики работы. Но общий пул задач обычно унифицирован.
Подготовка и планирование
Начало рабочего дня может начаться с просмотра писем, сообщений и обновлений в системе управления задачами. Разработчик планирует задачи на день, определяет приоритеты и устанавливает цели.
Работа с кодом
Основная часть дня обычно связана с написанием, изменением и отладкой кода на C++. Разработчик решает конкретные задачи, исправляет баги, разрабатывает новые функции или оптимизирует существующий код.
Тестирование и отладка
Разработчик проводит тестирование написанного кода, а также отлаживает его, чтобы устранить ошибки и обеспечить правильную работу программы.
Коммуникация
В течение рабочего дня разработчик может общаться с членами команды, включая других разработчиков, дизайнеров, тестировщиков и менеджеров проекта. Встречи и обсуждения задач, ревью кода и демонстрации результатов являются важной частью рабочего процесса.
Исследование и самообразование
Грамотный разработчик должен выделять время на изучение новых технологий, фреймворков и методологий, чтобы оставаться в курсе последних трендов и улучшать свои навыки.
Документация
Разработчик может вести техническую документацию, комментарии к коду и создавать инструкции для других членов команды.
Насколько востребована профессия
Профессия разработчика на C++ остается высоко востребованной. C++ является мощным и универсальным языком программирования, который находит применение в различных областях: от игровой индустрии до медицины и финансов. Высокая производительность и полный контроль над аппаратными ресурсами делают C++ неотъемлемой частью разработки критически важных и высоконагруженных приложений.
С развитием технологий и увеличением объема данных спрос на опытных разработчиков на C++ лишь растет. Кроме того, в связи с появлением новых платформ, умных устройств и технологий интернета вещей профессия разработчика на C++ продолжает находить новые области применения.
Средняя зарплата разработчика на C++
Отвечая на вопрос, сколько в среднем зарабатывает разработчик на C++, нужно иметь в виду, что зарплаты в IT-индустрии зависят от многих факторов: грейда, страны, специализации компании и прочих.
Рассмотрим зарплаты C++ разработчиков в США, России, Европе и других странах. Важно учитывать, что и стоимость жизни в этих странах сильно отличается, и уровень зарплат меняется каждый день.
Какие карьерные перспективы у разработчика на С++
С ростом по карьерной лестнице можно стать техническим лидером. В этой роли разработчик имеет больше ответственности за техническую стратегию проекта и руководит технической стороной разработки. Техлиду важно уметь взаимодействовать с другими отделами для достижения общих целей.
Другой путь карьерного роста — архитектор программного обеспечения (Software Architect). Такие специалисты создают высокоуровневую архитектуру приложений и определяют структуру и взаимодействие компонентов. Это более стратегическая роль, где важно иметь глубокое понимание не только C++, но и всего программного стека.
С накопленным опытом и экспертизой можно стать преподавателем или консультантом по C++. Это позволяет делиться знаниями и опытом с другими разработчиками и способствует развитию профессионального сообщества.
В зависимости от интересов и навыков можно попробовать перейти на путь управления проектами и командами разработки, где опыт в программировании на C++ будет полезен для принятия стратегических решений.
В крупных технологических компаниях разработчики на С++ могут стать специалистами по исследованиям и инновациям, которые занимаются созданием новых технологических продуктов и исследованием передовых технологий.
Карьерные перспективы для разработчиков на C++ могут быть разнообразными и зависят от целей, уровня опыта и учебных усилий. Развивая навыки и стремясь к самосовершенствованию, разработчик может добиться больших успехов в этой профессии.
Популярные вопросы
- Кто такой разработчик на C++?
Специалист, который владеет языком программирования C++. Он занимается разработкой программного обеспечения с полным контролем над аппаратными ресурсами и памятью. Разработчики на C++ работают в различных сферах, от игровой индустрии до системного программирования и финансовой сферы, обеспечивая производительность и надежность программных продуктов.
Чтобы стать разработчиком на C++, нужно начать с освоения языка программирования C++. Изучить основы синтаксиса, структуры данных и алгоритмов на C++, используя онлайн-курсы, учебники и практические задания.
Созданием высокоэффективных программных приложений, обеспечением полного контроля над аппаратными ресурсами, что позволяет создавать высокопроизводительные приложения для разных областей, включая игровую индустрию, системное программирование, финансы и другие.
Остались вопросы?
Задайте их в комментариях ниже — наши эксперты ответят вам. Вы также можете поделиться своим опытом с другими читателями.
Спасибо! Ваш комментарий будет опубликован после проверки
- © 2023 Employ.City
- Карта сайта
- Политика конфиденциальности
Индивидуальный предприниматель Малиновская Татьяна Александровна, ИНН 481106343604, ОГРНИП 3214 82700034124