Джуниор разработчик что должен знать
Что нужно Junior’у, чтобы успешно устроиться
Не так давно я отвечал на Хабровопрос по поводу того, что нужно знать, чтобы устроиться после ВУЗа программистом, после чего мне был задан вопрос в личку, а также Вконтакте, а что же собственно нужно в подробностях.
В данной статье я постараюсь рассказать, что должен знать молодой специалист, который ищет работу. Я немного разбираюсь в данном вопросе, т.к. год назад, после 3 курса, задался проблемой трудоустройства и успешно нашел свое место, которое смог совмещать с учебой. И я все еще помню о чем разговаривал на собеседованиях (которых было мало, но они были успешными).
Сразу стоит отметить, что данная статья не подходит тем, чья цель работать исключительно в так называемых Major Players (Google, Yandex, Microsoft и т.п.).
Кому интересно — добро пожаловать под кат (под катом вакансии для Москвы и Казани из комментариев, а также предложение о стажировки для Питера).
Итак, Junior — это программист, который должен уметь и все и ничего одновременно.
Подробнее о каждом из утверждений.
Junior должен уметь все
Человек, который пришел устраиваться на должность младшего программиста должен знать язык, на котором собирается писать (знать — не означает уметь абсолютно все, но чувствовать себя уверенно, если попросят что-нибудь написать). Также стоит разбираться в специфике конкретной области интересов (если вы собираетесь кодить под сети — стоит иметь представление о сетях, что там и как).
Junior должен уметь ничего
В то же время если ищут Junior’а — значит готовы учить. Вы можете не уметь писать грамотный код, уметь хорошо его комментировать и прочее, да и честно говоря, вряд ли человек без опыта продакшина будет это уметь.
Вроде ничего нового я не сказал, да и конкретики никакой нет, но ее и не может быть. Нет определенных общих требований для Junior’ов, есть конкретные требования на вакансию, можно поискать на hh.ru, там написано.
Теперь о вещах, которые помогут Вам найти свое место
Если Вы студент — значит похвастаться опытом работы не получится, а Ваши студенческие успехи вряд ли интересуют работодателя, если это конечно не супер-пупер достижения на олимпиадах, конкурсах и пр. Но Вам никто не мешает заниматься собственными проектами, о которых можно поговорить (я на собеседованиях на Junior’a почти все время рассказывал о своем проекте), это дает работодателю шанс понять, что хотя опыта коммерческой разработки нет — есть опыт работы над задачей, опыт формулировки задач, возможно опыт работы в команде, это ценится больше, чем курсовик по предмету «Программирование на C++» на 5 семестре.
Еще одним очень важным вопросом является — Алгоритмы и структуры данных. Так уж сложилось, что при устройстве на вакансию Junior’a многие компании готовы простить Вам незнание этих вещей, ведь ваша задача как Junior’а скорее всего, к сожалению, будет жарить код.
Вывод: пишите что-нибудь для себя, пишите полезные утилиты, пишите с друзьями, участвуйте в сторонних проектах. Такой опыт позволит Вам лучше узнать свой язык программирования, научиться писать лучше и понятней.
В заключение
Я не сказал ничего нового в этой статье, я лишь попытался рассказать, что ничего особенного знать не нужно, нужно просто знать и быть уверенным в себе, уметь решать задачи, уметь ставить задачи. А опыт работы заменять опытом участия в различных проектах.
Что должен знать Junior-разработчик
После обучения многие выпускники начинают активно искать работу по специальности. Диплом IT-специалиста чаще всего наводит только на один путь – устраиваться разработчиком в своей области. Для многих вакансия с припиской Junior кажется чем-то непонятным. Джуниор – кто это вообще?
Junior-программист (его еще часто называют джуном) – базовая позиция в IT-компании. Это специалист с минимальным опытом, у которого есть перспективы в развитии.
Что должен знать джун, где искать работу и на какую заработную плату он может рассчитывать – об этом и поговорим в сегодняшней статье.
Градации программистов
Если вы решились стать разработчиком, то будет полезно узнать о градации программистов. Всего их четыре: Junior, Middle, Senior и Intern (стажер).
Одно из главных отличий этих уровней – заработная плата, которая у стажера чаще всего сводится к нулю, а у синьора к максимуму. В разных IT-компаниях требования к программистам могут отличаться – так, например, в одной компании вы можете проходить как Junior, а в другой уже как Middle.
Intern
В некоторых компаниях практикуется брать на работу студентов старших курсов или просто людей без опыта работы. Часто стажеры работают бесплатно и набираются опыта – например, им дается несколько месяцев, чтобы под руководством опытного специалиста дорасти до джуна.
Есть ряд универсальных требований к интернам:
На практике вышеперечисленные знания, конечно, подтягиваются, но в первую очередь нужно надеяться только на себя. Если вы не хотите расти, то никто вам в этом не поможет, а вакансия стажера закончится поиском новой работы.
Junior
Спустя несколько продуктивных месяцев стажер перерастает в Junior-разработчика – это младший специалист, который самостоятельно выполняет приходящие задачи. Если разрабатывается какое-то приложение для десктопа, то он должен запрограммировать один из его кусков. И это не означает, что все будет идеально – джуны могут ошибаться. Зачастую они даже не знают план реализации продукта – все это обсуждается с тимлидом, который также проверяет весь код на наличие ошибок и неточностей.
Качества Junior-разработчика – все те, что у интерна, но с добавлением нескольких пунктов:
Начало пути всегда начинается с малого, поэтому будет тяжело, но помните, что Гугл – ваш помощник. Практически все задачи можно загуглить или найти на них ответы в документации.
Middle
И вот мы подошли к середине, откуда начинаются пути ответственных и успешных программистов. Middle-разработчик – это тот специалист, который понимает требования бизнеса и переводит их в технические решения.
Из этого вытекают следующие качества:
Помимо всего вышесказанного, Middle может рассчитывать на хорошую заработную плату, однако в некоторых компаниях зарплаты джуна и мидла могут быть одинаковыми.
Senior
Гуру программистов, старший разработчик или просто синьор. Это человек, который повидал огромную кучу кода, натыкался на множество ошибок и смог их решить. Его основная задача – принимать правильные решения в ходе проекта. То есть те решения, которые приносят максимум пользы с минимальными вложениями. Если Middle-разработчик четко понимает, над чем работают члены команды, то Senior думает о том, какие задачи в глобальном плане сможет решить текущий проект.
Синьор – это тот специалист, который решает проблемы еще до их появления. Звание Senior невозможно получить быстро. Следует наработать огромный опыт и понять, как выглядит «идеальный» продукт и чем он отличается от недоделанного. Умение принимать важные и правильные решения – одно из важнейших его качеств. Если в итоге что-то будет сделано не так, то вся вина на синьоре.
Резюмируя, можно сказать, что Senior-разработчик – один из главных участников команды, который знает, как будет работать продукт и что нужно для его реализации.
Теперь вы знаете, из каких участников состоит команда в IT-компании. Давайте вернемся к Junior-разработчику – поговорим о том, где ему искать работу.
Как найти работу
Как и в любой другой сфере, можно сказать, что главное – это желание. Просматривайте биржи вакансий, оставляйте отклики, звоните и проходите собеседования. Может быть, у ваших знакомых на фирмах есть вакансии программиста – поспрашивайте их. Практикуйте посещение форумов и помогайте на них другим пользователям. Спустя некоторое время может найтись тот, кто позовет вас в свою компанию, однако для этого нужно потратить немало сил.
Также стоит сказать немного о резюме – не указывайте информацию об опыте, не связанном с профессией. Пишите кратко, но по делу, постарайтесь рассказать о себе так, чтобы работодателю было интересно пригласить вас на собеседование.
Есть еще один лайфхак – оставлять отклики на заявки Middle- и Senior-специалистов. Речь не идет о том, чтобы претендовать на высокие звания – просто узнайте в сопроводительном письме, не нужен ли компании Junior-разработчик. Вас могут позвать на собеседование.
Зарплата Junior-разработчика
Заработная плата джунов сильно разнится, поэтому я укажу лишь приблизительные цифры, на которые можно ориентироваться при поиске первой работы:
Хотя на биржах часто встречаются вакансии, на которых джунам предлагают и вовсе 15-20 тысяч рублей, особенно в регионах, далеких от Москвы и Санкт-Петербурга.
Итог
Junior-разработчик – начинающий программист, который знает базовые вещи и понимает принципы работы своего инструмента. Даже если вы только недавно начали изучать программирование, то уже можете претендовать на звание джуна – в худшем случае это будет вакансия стажера, что неплохо для начала. Помните, что при постоянном совершенствовании своих навыков, вскоре вы получите звание Middle. Удачи!
Как проходит собеседование начинающего разработчика на С++: что нужно знать и как подготовиться
В разных компаниях собеседования проводятся по-разному в зависимости от стандартов, продуктов, позиций. Но есть базовые вещи, повторив которые, вы сможете подготовиться к любому собеседованию.
В этом посте я собрал подборку понятий и терминов, которые у вас могут спросить на собеседовании на вакансию Junior С++ разработчика, и описал, к чему в принципе вам стоит готовиться. Предупрежден — значит вооружен. Вкратце о себе: меня зовут Турмец, я работаю в Яндексе, параллельно учусь в Школе Анализа Данных и занимаюсь ревью кода на курсе «Разработчик С++» в Практикуме.
Мы опустим, как именно попасть на собеседование и предположим, что вы уже интересны компании как потенциальный работник и у вас уже назначена дата интервью.
Оценка soft skills
Первая часть собеседования — это знакомство и разговор о вашем образовании и прошлом опыте. Советую перед собеседованием пробежаться по своему резюме, повторить основные проекты и пройденные курсы, чтобы на самом собеседовании не пришлось судорожно вспоминать их.
Образование. Расскажите о том, где учитесь или учились. Если вы прошли дополнительные курсы в Практикуме, на Coursera или еще где-то, обязательно упомяните их. Также не стоит забывать о дополнительном офлайн-образовании. Если у вас в копилке есть какой-нибудь пройденный интенсив или достижения на олимпиадах по программированию, поделитесь и этим.
Предыдущий опыт. Рассказывая о своем опыте, не стоит скромничать, но и не нужно преувеличивать свои достижения. Некоторые люди не хотят показаться наглыми или невоспитанными и стесняются говорить «я написал», «я внедрил», «я спроектировал», но это ошибка. На собеседовании вам нужно на примерах показать, чем вы занимались и какую пользу это принесло.
Говорить нужно только правду, ведь интервьюер может углубиться в тему и задать пару вопросов о проекте. Вы должны быть способны ответить на уточняющие вопросы.
Если у вас мало опыта в коммерческой разработке, расскажите про учебные проекты, которые вы выполняли, pet-проекты, упомяните участие в хакатонах и конкурсах, профильных конференциях.
Помните, что важно рассказывать про опыт, который будет полезен для вакансии. Например, стоит рассказать о владении разговорным английским, но не стоит говорить, что вы ходили на курсы по дайвингу. Не связанные с вакансией вещи вы потом расскажете своим будущим коллегам на кофе-брейке.
В этом блоке важно показать, что вы готовы брать ответственность, умеете работать в команде и можете проявить инициативу.
Заранее продумайте, как вы ответите на такие вопросы.
Случались ли у вас провалы? Расскажите о самом большом из них. Ответ на этот вопрос покажет, как вы умеете рефлексировать над ошибками, какие выводы делаете после неудач.
Какими проектами вы гордитесь? Выберите один-два проекта и в деталях расскажите, как вы участвовали в них: в чем была сложность, как вы подошли к решению, какие проблемы возникали в работе, как вы их решали, какие получились результаты.
Какая была самая сложная ситуация, которую вам удалось разрешить? Ответ на этот вопрос покажет, готовы ли вы брать инициативу, насколько вы самостоятельны, умеете ли работать в стрессовой ситуации, не теряетесь ли в сложных условиях.
Оценка hard skills
В разных компаниях собеседования проводятся немного иначе, но чаще всего после знакомства вы перейдете к технической части. Она бывает разная, обычно это решение какой-то задачки и общение на тему алгоритмов и структур данных.
Еще могут быть вопросы, которые касаются специфики вакансии, например, если вы собеседуетесь на разработчика Qt, то вас спросят, что вы о нем знаете. Если предполагается работа над игровым движком, стоит ожидать вопросов по математике.
Задачи. Интервьюер предложит вам задачку легкого или среднего уровня, по типу такой. Скорее всего, вас попросят решить ее на бумаге или доске, но бывает, что можно решить и на компьютере в каком-нибудь простом текстовом редакторе.
Выслушав условие, не спешите писать код, уточните, верно ли вы поняли задачу, разберите ее на нескольких примерах с собеседующим, подумайте, какие подводные камни возможны, и по необходимости уточните условие. И только если вы уверены, что правильно понимаете задачу, приступайте. Хорошая практика — задавать вопросы по задаче, это показывает интервьюеру, как вы думаете над проблемой, насколько вы способны видеть ее узкие места.
Итак, вы точно поняли задачу, пора решать. В процессе решения рассуждайте вслух: так же как и с вопросами, в этот момент интервьюер делает выводы о вашем подходе к задаче. Я стараюсь идти по следующему пути при решении задачи: 1) предложить самое простое решение; 2) попытаться улучшить узкие места. Если чувствуете, что, скорее всего, сможете решить лучше, так и скажите: «Вот идея навскидку, но будет лучше». То есть идите от простого к сложному.
Давайте предположим, что вам досталась задачка сложного уровня и у вас нет идей. В этом случае снова задавайте вопросы, можете попросить подсказку. Помните, что просить помощи не значит провалить собеседование. Задавать вопросы — это нормально.
Вы придумали решение, что дальше? Нужно его проанализировать и написать. Проанализировать — это значит посчитать асимптотику по времени и памяти. То есть вы должны уметь спрогнозировать, насколько итоговая программа будет быстро работать и сколько памяти ей нужно. Хорошее решение предполагает оптимальное использование времени и памяти.
«Написать» означает, что вы должны реализовать ваше решение без багов, с корректным синтаксисом и адекватным кодстайлом. То есть программа должна компилироваться, правильно работать на всех возможных входах, код должен быть читабельным.
Если вы использовали какие-то алгоритмы из stl (стандартная библиотека шаблонов), вас тоже, скорее всего, попросят оценить, как быстро программа будет работать и сколько ей нужно памяти. Вы должны понимать, как работают функции, которые вызываете, даже если их написали не вы. Иначе вы не сможете подсчитать результирующую асимптотику вашего кода.
Для подготовки к этому этапу я рекомендую прорешать как можно больше задач на сайте leetcode.com — это сайт, на котором собраны сотни задач, похожих на те, что дают на собеседованиях. Вы решаете задачу, сайт автоматически проверяет решение и показывает скорость, с которой это решение выполняется. Кроме этого, на сайте можно обсудить решение с другими разработчиками.
Алгоритмы. Я составил список популярных алгоритмов, которые с большой вероятностью понадобятся на собеседовании. Вас могут спросить непосредственно о них, они могут использоваться в задаче.
Программа минимум: что должен знать начинающий C# программист
Авторизуйтесь
Программа минимум: что должен знать начинающий C# программист
Рассказывает Мош Хамедани, автор курсов по C# на Udemy
Мои студенты часто задают вопросы такого рода:
Мош, меня только что приняли на должность Junior C#-разработчик. Что ты посоветуешь? Что мне необходимо выучить?
Итак, если вы ищете первую работу в качестве C#-разработчика или недавно её получили, эта статья расскажет вам, какие навыки являются необходимыми. Я постарался объединить их в единый «путь», который подойдёт желающим разрабатывать как декстопные, так и веб-приложения.
Прежде чем я углублюсь в детали, я проясню кое-что: вы — джуниор, вам не нужно знать всё на свете! Никто не знает всего, даже матёрые разработчики. Мир программирования огромен и постоянно растёт. Поэтому каждый разработчик силён лишь в определённых областях, в зависимости от тех проектов, над которыми он работал.
Каждый навык будет сопровождаться одной или несколькими ссылками на полезные ресурсы.
Базовые навыки
Вне зависимости от выбранной сферы разработки существует несколько моментов, которые стоит знать.
Структуры данных и алгоритмы
Если у вас нет степени в Computer Science, я очень рекомендую потратить месяц на изучение структур данных и алгоритмов. Это основы программирования. Конечно, вы можете пропустить их и заняться веб-разработкой, но поверьте, разница между изучавшим этот вопрос программистом и пропустившим его заметна.
Вы можете удивиться, но крупные компании наподобие Microsoft, Apple и Amazon уделяют на интервью много времени именно проверке знания структур данных и алгоритмов, а не ASP.NET 5 или WPF! Они просто хотят понять, можете ли вы мыслить, как программист.
Вот неплохая книга для начала изучения: Data Structures and Algorithms Made Easy
Если вы в чём-то не разобрались — не отчаивайтесь! Просто убедитесь, что вы поняли, что такое списки, стеки, очереди, деревья и хеш-таблицы, и умеете их реализовывать на чистом C#. Реализуйте несколько алгоритмов поиска и сортировки.
Базы данных
T-SQL — это язык запросов, используемый в SQL Server. Освойте функции SELECT, INSERT, UPDATE, DELETE, JOIN и GROUP BY.
Вот полезные материалы:
Когда вы работаете с РСУБД, то часто используете системы объектно-реляционного отображения для работы с объектами в базе данных. Существует много таких систем, но самой популярной является Entity Framework.
Материалы для изучения:
Веб-разработка
Создание веб-приложений кардинально отличается от разработки десктопных. Веб-приложение содержит как минимум две части: клиент, запускаемый в браузере пользователя (фронтенд), и сервер, обрабатывающий все действия пользователя в клиенте (бэкенд).
Поэтому все веб-разработчики делятся на 3 группы:
В зависимости от ваших предпочтений стоит выбрать один из двух путей. Full-stack-разработчики обычно более востребованы.
Фронтенд
Если вы собрались заняться фронтендом, то вам нужно познакомиться с основами HTML, CSS и Javascript.
HTML — это язык разметки веб-страниц. В отличие от языков программирования (таких как C#), у него нет логики. Для декорации нашей страницы мы используем CSS. И, наконец, JavaScript — язык, отвечающий за поведение веб-страницы.
Материалы для изучения:
Бэкенд
ASP.NET MVC — это доминирующий среди C#-разработчиков фреймворк для создания серверных веб-приложений. Для работы с ASP.NET MVC вам всё равно потребуется базовое знание HTML, CSS и Javascript. Поэтому я советую вам начать изучение с фронтенда и затем перейти к бэкенду, изучив весь спектр веб-разработки.
Вот моё руководство, в котором мы создадим простое приложение с использованием ASP.NET MVC5 и Entity Framework 6: A Step-by-Step ASP.NET MVC Tutorial for Beginners
Десктоп-разработка
Если вы хотите заняться разработкой приложений под Windows, вам понадобится отличный от предыдущего набор навыков (хотя и они, как ни странно, могут пригодиться). Большинство заданий потребует от вас знания XAML, WPF или Windows Forms.
Что прокачать джуниор разработчику, чтобы стать мидлом за год
Авторизуйтесь
Что прокачать джуниор разработчику, чтобы стать мидлом за год
Реальные требования к кандидатам в плане инструментов разработки сильно различаются в зависимости от компании и задач. В этой статье поговорим про фундаментальные навыки, которые актуальны для роста в бэкенд-разработке и разработке в целом.
Роман Моисеев, менеджер продукта на программе «Мидл Python-разработчик» в Яндекс.Практикуме, рассказывает, над чем стоит работать, если вы джуниор, который хочет стать мидлом.
менеджер продукта на программе «Мидл Python-разработчик» в Яндекс.Практикуме
Четыре грейда джуниор-разработчика
В индустрии нет единого понимания грейдов джуниор–мидл–сениор. Некоторые считают, что так разработчиков делить нельзя. Тем не менее, чтобы рассуждения в этой статье были структурированными, необходимо понимание, кто такой джун.
Ниже вы найдёте условное разделение джуниорства на несколько этапов. Это деление отражает не только эволюцию начинающего разработчика, но и разницу во мнениях разных людей, что должен уметь джуниор.
Первый — стажёр. Это ещё не полноценный джуниор-разработчик, скорее его MVP. На этом уровне человек знает основы языка программирования, его не нужно учить синтаксису. Однако применять этот язык программирования для решения реальных задач он ещё не умеет. Чтобы дать ему задачу в работу, её нужно расписать по шагам: «сделай A, B и С, возьми такую технологию и используй вот эту вот функцию».
Стажёры обычно занимаются задачами, которые не критичны для проекта. Это может быть техдолг, оставшийся с прошлых спринтов, или что-то относящееся к внутренним проблемам, а не фичам конечного потребителя. Если стажёр ошибётся, компания не потеряет деньги. Но если сделает то, на что не хватает времени у более старших разработчиков, принесёт ощутимую пользу проекту.
Второй — джун-новичок. Первая стадия развития джуна: первый оффер на фултайм, первый рабочий месяц и первые боевые задачи. Такой разработчик обладает достаточным набором теоретических (академических) знаний, чтобы делать простые задачи без супердетального описания. Он знает, как работать с документацией и найти в ней ответ на свой вопрос.
Тем не менее процесс коммерческой разработки он знает скорее теоретически, поэтому ошибается на разных этапах написания кода. Он часто приходит к старшим коллегам и говорит: «У меня что-то поломалось. Не могу это сделать. Помоги!» И это нормально.
Главная задача джуниор-разработчика — набивать собственные шишки и учиться на них. Здесь лучше вовремя задать вопрос, чем не показать никакого результата.
Третий — средний джун. Уже прошёл испытательный срок, освоился в компании и процессах командной разработки. Например, знает, какие agile-ритуалы используют в команде и почему. Теперь ему можно давать задачу и не контролировать её выполнение в рамках одного рабочего дня.
Самостоятельно декомпозировать задачи такой разработчик ещё не умеет, но вопросы задаёт более глубокие и конкретные: «Я попробовал сделать так и так, но не вышло, выдаёт ошибку. Нужна помощь, чтобы понять, что идёт не так и где ещё поискать решение».
Четвёртый — крепкий джун. В эту категорию обычно записывают ребят, которые по формальным техническим навыкам уже мидлы или очень близки к ним. Единственный их пробел — нет большого опыта в решении бизнес-задач. Сюда же попадают и выпускники топовых технических вузов. Они многое умеют, и хотя коммерческого опыта разработки у них нет, они быстро дорастут до сильных мидлов за счёт крепкой академической базы.
В качестве отправной точки для роста за год я буду рассматривать джуна-новичка. По двум причинам:
Эволюция сложности задач
На каждом грейде задача, которая попадает разработчику, становится всё менее детализированной. Давайте рассмотрим процесс постановки задачи на немного банальном, но хорошем примере — приготовление яичницы. Для стажёра старший разработчик разложит все ингредиенты на столе, разогреет сковородку и даст чёткую инструкцию, что делать:
Если вдруг стажёр разобьёт яйца, и скорлупа попадёт на сковородку, сениор объяснит, что так делать нельзя.
По мере роста уровня разработчика растёт уровень самостоятельности. Мидлу уже достаточно сказать: «Нужно сделать яичницу». Он уточнит, какой вид яичницы нужен, например, нужно ли добавить сыр и помидоры, найдёт все ингредиенты и приготовит вкусный завтрак.
Утверждение про рост самостоятельности верно не только для роста с джуна до мидла, но и для роста в разработке в целом. Чем более сложную задачу человек способен решить самостоятельно, тем выше его уровень.
Кто такой мидл
Как я уже говорил, главное отличие мидла от джуна — первый умеет решать свои проблемы самостоятельно. Когда у него есть задача, он всегда сначала пытается решить её самостоятельно. Если появляется проблема, которую не получается решить, и есть риск не уложиться в сроки — он успеет это понять и обратиться за помощью к старшим коллегам. В идеале — со своим предложением, как сделать так, чтобы уложиться в дедлайн.
Чисто сениорских задач в разработке мало. Большинство компаний решает достаточно стандартные задачи. И вот с этими задачами мидл должен уметь справляться самостоятельно. Для этого нужен достаточный опыт и накопленный багаж совершённых ошибок.
Hard skills мидла
Перед тем, как перейти непосредственно к списку требований, обозначу три важные вещи:
Какие качества ждут от мидл-разработчика
Понимание используемых технологий
Для мидла инструменты, которые он использует в работе, и разработка в целом не должны быть магией. Джуниору простительно не задумываться над тем, как работают какие-то конструкции языка, а просто писать рабочее решение. Мидл должен задаваться вопросом, как работает программа, которую он пишет. Он должен уметь объяснять её простыми словами, чтобы другой человек понял.
Чтобы прокачать этот навык, как можно чаще задавайте себе вопрос, как работают вещи, которые вы используете. Вопросы должны начинаться со слов «как» и «почему». Приведу пример с базой данных:
Каждый новый вопрос будет уводить вас на уровень ниже и давать понимание, как устроена разработка. Как глубоко копать? Универсального ответа нет, всё зависит от того, на каком уровне вы хотите разобраться с технологией. Попробуйте начать с двух–трёх вопросов и посмотрите, как пойдёт.
Прохождение и проведение code-review
Прохождение код-ревью — в большей степени джуниорский навык. Технических требований там нет, скорее софтовые: уметь принимать обратную связь, не обижаться на критику и вытягивать из фидбека полезные для себя вещи.
Код-ревью — важная практика для роста разработчика. Если у вас в компании нет ревью кода, найдите человека, который будет давать обратную связь на то, что вы делаете. Идеально, если этот человек будет уровнем выше. Без практики код-ревью вы не сможете адекватно оценивать, насколько хороший код пишете.
Проведение код-ревью, напротив, — во многом техническая задача. Умение разобраться в чужом коде распадается на два навыка: понять общую структуру программы и увидеть места, где решение можно сделать более оптимальным, лаконичным и красивым. А ещё код-ревью — это отличная возможность поделиться своим опытом.
Полезно делать код-ревью собственного кода, когда рабочее решение, выполняющее поставленную задачу, уже написано. Вернитесь к коду, подумайте над другими возможными реализациями. Почему они лучше или хуже?
Умение декомпозировать задачи
У начинающих разработчиков часто есть желание начать писать код сразу, как они получат задачу. Мидл должен сначала остановиться и подумать, как он будет выполнять задачу: разбить её на несколько последовательных этапов и ответить на вопрос, почему он сделал именно такой план. Обычно на написание кода у мидла уходит больше времени, чем у джуна.
Кроме улучшения качества кода, такой подход имеет два косвенных эффекта. Во-первых, вы тренируетесь аргументировать свои решения. Когда вас спросят, как работает ваш код, у вас уже будет готовый ответ. Во-вторых, понимание структуры своего кода помогает разбираться в чужом — ведь это обратные процессы. В первом случае вы делаете структуру, потом её реализуете. Во втором получаете реализацию и раскладываете её на отдельные компоненты.
Насмотренность
Следите за тем, что сейчас происходит в индустрии. Какие технологии и как развиваются, где и почему применяются, какие есть хорошие практики и почему они работают. Смотрите не только за успехами, но и за ошибками — это источник вашего роста. Сеньор за свою карьеру совершил и увидел много ошибок и знает много способов, как делать не надо. Кругозор начинающего разработчика уже и сфокусирован больше на том, чтобы найти хотя бы пару способов сделать так, чтобы сработало.
Развивайте насмотренность через образование, собственные проекты, технические статьи и обмен опытом с коллегами по цеху. Чтобы принимать хорошие решения самому, надо увидеть много плохих и хороших решений других разработчиков.
Понимание алгоритмов и области их применения
Алгоритмы ― это очень холиварная тема, потому что в повседневных задачах они используются очень редко. Тем не менее это единственная фундаментальная вещь, которая остаётся неизменной в быстро меняющемся мире разработки.
Рассматривайте алгоритмы и структуры данных именно как фундаментальную базу. Не мучайте себя академическим подходом — приземляйте алгоритмы на практику, изучайте их применение в коммерческих технологиях. Понимайте причинно-следственные связи, почему те или иные вещи работают именно так, как работают. Не зазубривайте бинарный поиск просто потому, что «надо знать алгоритмы».
Умение писать скучный код
Задумайтесь, насколько код, который вы пишете, будет понятен человеку, который видит его впервые. Помогут ли ему ваши нестандартные решения? Мидл всегда выберет простое решение, вместо того чтобы выпендриться.
Soft skills мидла
Что такое мягкие навыки в разработке? Самый простой ответ: все навыки, которые нужны в работе, но не связаны напрямую с написанием кода. Опасность такой формулировки в том, что можно подумать, будто софты — это что-то вторичное и не очень важное. На самом деле это не так.
Сейчас время командной разработки. Рынок требует хорошие, масштабируемые технические решения в довольно сжатые сроки. Это невозможно вытянуть в одиночку. Команда в долгосрочной перспективе всегда обойдёт гения-одиночку. Именно поэтому пробелы в софтовой части могут нивелировать ваши технические навыки в глазах работодателя.
Какие мягкие навыки ждут от мидл-разработчика
Самостоятельность
Это ключевой навык мидл-разработчика. Вы должны уметь самостоятельно решать свои задачи и проходить полный цикл написания кода: получение задания и уточнение требований, декомпозиция подзадачи, реализация в коде, тестирование, прохождение код-ревью. Принятые решения по задаче мидл должен уметь аргументировать и отстоять перед другими разработчикам.
Мидл не требует микроменеджмента. Контроля раз в день с формулировкой «как у тебя дела, что делаешь сейчас?» достаточно, чтобы быть уверенным, что задача будет выполнена.
Умение видеть проблему бизнеса в технической задаче
Мидл должен понимать, что его главная задача ― не просто писать код. Разработчику платят за техническое решение бизнес-задачи.
Бывают ситуации, когда нужно донести до команды факт, что задачу делать вообще не нужно. Или нужно, но не с поставленными изначально требованиями.
Например, вы видите, что на реализацию текущих требований команда бросает много важных ресурсов, но есть более простое решение. Чтобы донести свои мысли до коллег, понадобится не просто умение доказывать свои технические решения другим разработчикам. Нужно будет получить информацию от нетехнических участников команды и объяснить им технические ограничения.
Увлечённость разработкой
Покажите будущему тимлиду, что разработка вас драйвит. Объясните, почему вы делали проекты и задачи, которые записаны у вас в резюме. Даже тривиальные и обыденные вещи можно раскрыть через призму выводов и полученного опыта, а не с позиции «я просто писал код на Django на последней работе».
Как рассказать о задачах, которые вас действительно не драйвили, и не обмануть собеседника? Расскажите о том, какими задачами вы точно не хотите заниматься. Это тоже выводы и опыт, которые показывают вашу осознанность. Это ещё и возможность показать свои собственные pet-проекты, где вы реализовывали интересные вам задачи.