что нужно знать middle python
100+ вопросов по Python для Junior, Middle и Senior
Хочешь знать больше о Python?
Подпишись на наш канал о Python в Telegram!
Представляем перевод списка типичных вопросов по Python, которые задают на собеседованиях кандидатам. Этот список собрала редакция сайта DOU.UA, пообщавшись с разработчиками, которые проводят технические собеседования Python-специалистов.
Вопросы для Junior-разработчика
Джуниор должен знать и уметь применять базовые структуры данных и модули, делать простые запросы к базам данных, знать простейшие команды системы контроля версий и тому подобное.
Общее для Computer Science и Web Development:
1. Что такое инженерия и процесс разработки в целом?
2. Какие знаете принципы программирования?
3. Чем отличаются процедурная и объектно-ориентированная парадигмы программирования?
4. Каковы основные принципы ООП (наследование, инкапсуляция, полиморфизм)?
5. Что такое множественное наследование?
6. Назовите шесть этапов разработки продукта в Software Development lifecycle и расскажите, в чем разница между Agile и Kanban.
7. Какие есть методы HTTP-запросов и чем они отличаются друг от друга?
8. Как выглядят HTTP-request/response?
9. Что такое авторизация и как она работает?
10. Что такое cookies?
11. Что такое веб-уязвимость?
12. Какие классические базы данных вы знаете?
13. Как читать спецификацию в конкретном языке (например, PEP8 в Python)?
14. Как происходит взаимодействие клиента и сервера?
15. Какие есть подходы к проектированию API?
16. Как использовать паттерны программирования?
17. Что такое Acceptance Testing и зачем его используют?
18. Что такое модульные и интеграционные тесты, API-тесты?
19. Как писать unit-тесты?
20. Какие есть best practices в написании автотестов?
21. Каковы базовые команды системы контроля версий?
22. Как использовать Git?
23. В чем разница между хешированием и шифрованием?
Python:
24. Python — интерпретируемый язык или компилириуемый?
25. Какие есть изменяемые и неизменяемые типы данных?
26. Что такое область видимости переменных?
27. Что такое introspection?
29. Разница между __init __() и __new__()?
30. В чем разница между потоками и процессами?
31. Какие есть виды импорта?
32. Что такое класс, итератор, генератор?
33. Что такое метаклассы, переменная цикла?
35. Чем отличаются друг от друга staticmethod и classmethod?
36. Как работают декораторы, контекстные менеджеры?
37. Как работают dict comprehension, list comprehension и set comprehension?
38. Можно ли использовать несколько декораторов для одной функции?
39. Можно ли создать декоратор из класса?
40. Какие есть основные популярные пакеты (requests, pytest, etc)?
41. Что такое lambda-функции?
42. Что означает *args, **kwargs и как они используются?
43. Что такое exceptions,
44. Что такое PEP (Python Enhancement Proposal), какие из них вы знаете (PEP 8, PEP 484)?
45. Напишите hello-world сервис, используя один из фреймворков.
46. Какие есть типы данных и в чем разница между list и tuple, зачем они?
47. Как использовать встроенные коллекции (list, set, dictionary)?
48. В чем заключается сложность доступа к элементам dict?
49. Как создается объект в Python, для чего __new__, зачем __init__?
50. Что знаете из модуля collections, какими еще built-in модулями пользовались?
51. Что такое шаблонизатор и как в нем выполнять базовые операции (объединять участки шаблона, выводить дату, выводить данные со стороны сервера)?
52. Как Python работает с HTTP-сервером?
53. Что происходит, когда создается виртуальное окружение?
Базы данных:
54. Каковы базовые методы работы с SQL-базой данных в Python?
55. Что такое SQL-транзакция?
56. Как сделать выборку из SQL-базы с простой агрегацией?
57. Как выглядит запрос, выполняющий JOIN между таблицами и к самим себе?
58. Как отправлять запросы в SQL-базу данных без ORM?
Алгоритмы:
59. Что такое алгоритмы (например, Big-O notation)?
61. Что такое Bubble Sort и как это работает?
62. Что такое линейная сложность сортировки?
Вопросы для Middle-разработчика
Если джуниору все надо подсказывать и помогать, то мидл может самостоятельно взять что-то новое и быстро его изучить и понять. У него накоплено достаточно знаний и опыта, чтобы быстро овладевать новыми. Он может прийти и обсудить что-то с опытным разработчиком, проконсультироваться, но окончательных решений не принимает.
Обычно у мидлов спрашивают:
63. Ориентируетесь ли вы в *nix, можете писать скрипты/автоматизацию для себя и коллег?
64. Что такое многопоточность?
65. Что такое архитектура веб-сервисов?
66. Как работает современное нагруженное веб-приложение (нарисовать и обсудить примерную архитектуру, например, Twitter или Instagram)?
67. Что нужно для сайта/сервиса среднего размера (redis\celery\кэш\логирование\метрики)?
68. Как написать, задеплоить и поддерживать (микро) сервис?
69. Как масштабировать API?
71. Что такое абстрактная фабрика, как ее реализовать и зачем ее применяют?
72. Что такое цикломатическая сложность?
Python:
73. Async Python: как работает, зачем, что под капотом?
74. Сравните асинхронные web-фреймворки.
75. Что такое модель памяти Python?
76. Что такое SQLAlchemy (Core и ORM частей) и какие есть альтернативы?
77. Принципы работы и механизм Garbage collection, reference counting?
78. Как работает thread locals?
79. Что такое _slots_?
80. Как передаются аргументы функций в Python (by value or reference)?
81. Что такое type annotation?
82. Для чего используют нижние подчеркивания в именах классов?
83. Статические анализаторы: Flake8, Pylint, Radon.
Базы данных:
84. Разница между SQL и NoSQL?
85. Как оптимизировать SQL-запросы?
86. Какие есть уровни изоляции транзакций?
87. Какие есть виды индексов?
88. Точечные вопросы по выбору БД, двигателей БД.
89. Front-end: есть ли опыт работы с «современным» JS (Babel, Webpack, TS, ES)?
90. DevOps: работали ли вы с Docker-контейнерами? Объясните основные термины K8s (кластер, pod, node, deployment, service). Что такое Kibana?
91. Алгоритмы: что такое временная сложность алгоритма (time complexity)?
92. Углубленные знания Linux: как зайти на внешний сервер, работать с пакетами, настроить среду и выполнять операции?
93. Специфично для Data Science: как работать с пакетами для обработки и визуализации данных (NumPy, Pandas и другие)?
Вопросы для Senior
На собеседованиях с сеньорами обычно мало говорят о теоретической стороне технологии, больше обсуждают конкретный опыт разработчика. Поэтому формализованных вопросов здесь нет. Однако примером могут быть:
94. Что такое @property?
95. Каким образом можно запустить код на Python параллельно?
96. Как работать с stdlib?
97. Какие задачи решали с помощью метаклассов?
98. Что такое дескрипторы?
99. Знание других языков, кроме Python (опыт).
100. Каковы технологические особенности реализации распределенных систем?
101. Какие есть низкоуровневые особенности языков и фреймворков?
102. Способы и методы управления памятью.
Бонус. практические задания
1. Спроектировать клон Instagram. Это сервис, который понятен практически любому кандидату, даже если у него нет аккаунта. На высоком уровне он очень прост: картинки, описания, комментарии. Поэтому что-то минимальное сможет описать и джуниор. Если кандидат претендует на высокие позиции, можно бесконечно копать вглубь, касаясь API, тротлинга запросов, защиты от фрода, построения фидов пользователя и тому подобное.
2. Дано рекурсивное определение чисел Фибоначчи, надо написать функцию, которая реализует это определение.
3. Есть база данных из трех таблиц — стандартная many-to-many схема. Нужно написать запрос, который объединяет три таблицы и возвращает определенный результат.
4. Дайте ТЗ какого-то полезного микросервиса (сокращалка url-ов, поиск дубликатов картинок, поиск тегов в текстах) или функции (rate limiter). Просим кандидата рассказать, как бы он его реализовал. Это дает возможность узнать, что привык использовать специалист, а также насколько глубоко он знает и понимает различные технологии.
5. Написать какой-нибудь несложный декоратор (выводит аргументы функции на экран или, например, измеряет сколько времени выполнялась функция).
6. Джуниору можно предложить реализовать задачу FizzBuzz test.
7. Для Middle+ я люблю давать несложные задачки на рекурсию. Например, есть вложенный список чисел и нужно что-то на нем посчитать (скажем, найти максимум). Также можно предложить написать аналог deepcopy для конкретной структуры данных (tree, graph).
8. Для сеньора — игра «спроектировать за 5 минут …» Это может быть Google, FB, Twitter, высоконагруженный интернет-магазин, сервис поиска, продажи и бронирования билетов, сайт новостей и тому подобное. Такая задача помогает понять, как кандидат решает проблемы, ход его мыслей, умеет ли отделять главное от второстепенного, понять, какого он типа ( «в глубину» или «в ширину»).
9. Игра «у юзера что-то не работает». На примере спроектированной системы интервьюер придумывает ошибку с «дикими симптомами», которую очень сложно понять и воспроизвести. Но нужно быстро решить проблему.
10. Задание, демонстрирующее знание и понимание list и dict comprehensions.
11. Задача. Есть три функции, в которых выполняются базовые операции (сортировка, фильтрация, возведение массива в квадрат). Нужно упорядочить эти три функции в порядке возрастания времени, идущего на их выполнение.
То есть на входе все функции имеют одинаковые данные, на выходе выдают одинаковый результат. Но из-за того, что внутри операции выполняются в разном порядке, время выполнения будет отличаться. Здесь нужно ориентироваться в алгоритмах и понимать, что происходит с твоими данными в процессе. Эту задачу может решить Junior, а может не решить и Middle. Казалось бы, такая мелочь, но когда мы работаем с большим количеством данных, важно, чтобы код был оптимизирован и программа выполнялась максимально быстро.
12. Простые задачи на статистику или логику. Например, определить угол между стрелками часов, которые показывают 8:40.
Junior, Middle, Senior: чего мы ждем от кандидатов на позиции Python-разработчиков
Прежде всего, хочу заметить, что в DataArt мы смотрим на традиционную систему грейдов немного по-своему, используя 6 уровней: Junior, Strong Junior, Middle, Strong Middle, Senior, Expert. Промежуточные грейды позволяют дать более точное представление об уровне профессиональной подготовки кандидата или коллеги. Например, Strong Middle — состоявшийся разработчик с 3-4 годами опыта, которому расти до уровня Senior остается совсем немного. Внимательный читатель сразу заметил и уровень Expert — он обозначает человека, достигшего определенного дзена. Эксперт чувствует себя в теме, как рыба в воде, его опыту могут позавидовать многие. Такой человек строил свою карьеру, глубоко погружаясь в технологию и работая несколькими фреймворками в различных направлениях. Важно, что он может успешно решать задачи и в смежных технологиях.
Но в этой статье я поговорю о классических уровнях и о том, чего мы ожидаем от ребят, претендующих на соответствующие вакансии. Достроить необходимое для промежуточных — не так сложно. Конечно, важно, что на каждой позиции от человека требуются не только теоретические и практические знания технологии, но и так называемые софт скиллы. Последние практически не зависят от специализации, зато тесно связаны с личными качествами.
Чтобы внести ясность, сразу напомню, что Python — язык многогранный. С его помощью можно эффективно решать задачи по анализу данных, веб-разработке, машинного обучения, отчасти системному администрированию и веб-скрейпингу и даже автоматизации тестирования. Поэтому список вопросов и тем для обсуждения на собеседовании, конечно, будет меняться от проекта к проекту. Но в несколько упрощенном виде он будет выглядеть примерно так, как я опишу ниже. В основном поговорим о том, какими навыками должен обладать кандидат.
Junior
Мы предполагаем, что кандидат прошел стажировку в DataArt или имеет опыт работы в другой компании не менее полугода. Такой специалист уже должен принимать участие во внутренних встречах, сотрудничать и общаться с командой, уметь выходить из конфликтных ситуаций. Мы ждем, что он или она может самостоятельно выполнить задание по четко сформулированной инструкции, но не требуем дополнительного анализа требований или дизайна решения. Джуниор должен самостоятельно оценить объем работы, который потребуется для решения несложной задачи.
С точки зрения технологий от кандидата ожидается знание объектно-ориентированного программирования, понимание теории и некоторый опыт практического взаимодействия с основными шаблонами проектирования и тестированием. Конечно, мы будем рады видеть знание и опыт работы с базовыми конструкциями языка, понимание принципов работы простых алгоритмов и начальное представление о непрерывной доставке кода.
Соискатель должен понимать устройство HTTP-протокола и веба в целом, иметь хотя бы теоретическое представление о REST API. Крайне желателен опыт с одним веб-фреймворков. Поскольку в информационном мире нельзя обойтись без баз данных, мы обязательно беседуем с кандидатами об основах SQL, обсуждаем JOIN, взаимосвязи сущностей и запросы. Если человек хорошо подготовлен и не спал на парах в университете, можем обсудить принципы разработки ПО. Некоторый опыт работы с GIT мы считаем обязательным, опыт с HTML, CSS, JS, а также базами данных засчитываем как плюс в карму.
Middle
С этим грейдом все немного сложнее, так как кандидат должен обладать и всеми знаниями, нужными джуниору, но на более глубоком уровне. При этом мы ждем от него навыков, которые на начальном этапе карьеры можно назвать необязательными. Приблизительный опыт мидл-разработчика составляет 2-3 года. Он готов к встречам не только внутри команды, но и с заказчиком. Как правило, у него уже появляется начальный опыт руководства или наставничества. И конечно, он уже готов работать самостоятельно и решать поставленные задачи, не требуя детализированной инструкции.
По технической части мы ожидаем базового опыта работы с параллельными вычислениями, понимания отличий и принципов работы потоков и подпроцессов, знания, что такое GIL, зачем он нужен и как работает. На уровне Middle уже необходимо не только теоретическое представление, но и практический опыт работы с серверами приложений, юнит-тестированием, алгоритмами и структурами данных. Кандидат должен хорошо понимать проблемы безопасности: CSRF, CORS, XSS, SQL-инъекция, и оптимизации: профилирование, EXPLAIN ANALYZE, N + 1.
Кроме того, мы рассчитываем на базовое понимание жизненного цикла приложения и представление о ключевых компонентах: балансировщике нагрузки, сервере приложений (uwsgi, gunicorn), воркеров. Предполагаем некоторую практику c контейнеризацией: Docker, Docker compose, и наличие опыта работы с системами мониторинга ошибок и состояния системы.
Механизм баз данных нужно понимать уже достаточно глубоко: знать продвинутые запросы и их механику, понимать, что такое нормализация/денормализация и транзакции (хотя бы в теории), иметь практический опыт с работой индексов. Приветствуются базовые знания и опыт работы с микросервисной архитектурой, а также отложенным выполнением задач: Celery, RQ, Airflow.
Senior
Обычно такие кандидаты уже имеют 4-5 лет опыта в разработке, они должны уверенно чувствовать себя на встречах с заказчиком и быть в состоянии отстоять свое решение. Синьорные разработчики могут самостоятельно (или почти самостоятельно) работать над задачами любого уровня сложности. В принципе такой человек должен быть способен без постороннего вмешательства реализовать дизайн-решение и провести аналитическую работу, включая исследования, нужные для более эффективного выполнения проектных задач.
По техническим навыкам, соискатель должен хорошо разбираться во внутреннем устройстве Python, реализации GC, иметь опыт работы с AsyncIO, синхронными и асинхронными фреймворками. Важно иметь глубокие знания в сфере оптимизации решения, будь то веб, ETL-решение или фреймворк для тестирования.
Обычно мы обсуждаем опыт кандидата в построении SPA-приложений, работу с SQL и NoSQL базами данных, опыт оптимизации и работы с транзакциями. Приветствуется практические навыки работы с бессерверной архитектурой и интеграции с облачными провайдерами, горизонтального/вертикального масштабирования. Хорошо, если человек способен оценить риски решения до начала реализации. Плюсом будет опыт работы с фронтенд-фреймворком, таким как React, Angular или Vue.js.
Общие рекомендации
Стоит помнить, что интервью это не экзамен. Это беседа, позволяющая выявить, насколько компания и кандидат подходят друг другу. Конечно, инициатива и самые каверзные вопросы исходят от потенциального работодателя, но и соискателю не стоит стесняться спрашивать и отстаивать свою точку зрения. Будьте готовы, что минут десять нужно будет потратить на написание кода — например, решить небольшую задачу на знание языка или баз данных.
Основные рекомендации простые:
Помните, выучить и запомнить все невозможно, да и не нужно, а люди, которые проводят собеседование, тоже могут допускать ошибки. Готовьтесь к интервью — ведь это время — ваше и других участников процесса, его нужно использовать с пользой и по назначению. Будьте собой, не волнуйтесь и чувствуйте себя уверенно — тогда все получится.
Грядущие обновления грейдов
Подходы к градации, которые я описал выше, направлены, скорее, на классических web-разработчиков. Раньше Python в основном и использовался для построения web-приложений и, скажем, анализ данных затрагивал в меньшей степени. Сейчас ситуация изменилась: на рынке востребованы и ETL-разработчики, и дата-сайентисты, и DevOps, которые в качестве главного языка используют Python.
Определить грейды таких разработчиков по существующей системе может быть довольно проблематично.
Например, разработчик, который хорошо знает Python, но занимается в основном обработкой Big Data, может столкнуться с некоторым дискомфортом, если оценивать его будут как web-разработчика — ведь речь в его случае идет о несколько иных технологиях, подходах и представлениях. Такого специалиста, скорее, стоило бы назвать Senior Python-разработчиком с упором на ETL. То же касается и дата-сайентистов.
Недавно ко мне обратились HR-специалисты с просьбой проверить, вырос ли Python-левел коллеги, который занимается Data Science. Пообщавшись с ним, я понял, что уровень знания Python за 10 месяцев у него вырос с Junior до Strong Junior. Обычно такое движение происходит быстрее. Но позже мы встретились с этим коллегой в другом проекте, где он отлично справлялся с задачами как дата-сайентист уровня Strong Middle. Ясно, что по-прежнему числить его Strong Junior Python-разработчиком неправильно, сейчас мы занимаемся системным решением, которое устранит подобные несоответствия.
Python растет и уже стал третьим по популярности языком программирования. Он развивается и охватывает все больше доменных зон. В связи с этим мы в DataArt ведем работу по расширению и развитию нашей градации специалистов, разрабатываем стратегию обновления грейдов в соответствии с текущими и будущими изменениями. Как только обновления будут готовы, мы обязательно поделимся с вами новым видением. Оставайтесь на связи!
16 вопросов мидлу: что должен знать Middle-разработчик
Что должен знать Middle-разработчик? Этот вопрос актуален как для тех, кто претендует на вакансию мидла, так и для тех, кто посматривает в сторону продвижения.
Стоит отметить, что несмотря на то что в IT выработана шкала для оценки программистов (trainee, junior, middle, senior, lead), с которой более или менее все согласны, с точным определением каждого уровня общего мнения среди компаний пока нет. Поэтому каждая компания устанавливает внутренние требования к навыкам каждого уровня.
Тем не менее есть основной набор знаний и навыков, по которому в целом можно ориентироваться, оценивая себя. Многие специалисты утверждают, что сегодня требования к мидлам несколько завышены:
Позиция Middle-разработчика предполагает не только уверенное знание языка программирования, но и широчайшие познания в смежных технологиях. Позиция Middle накладывает на специалиста ответственность не только программировать «всё что угодно», но и обучать, оптимизировать код, разбирать и поддерживать чужой код, как будто родной. Фактически сейчас для вакансий Middle-разработчика предъявляются требования, как несколько лет назад для Senior.
Мы выяснили, что должен знать Middle-программист в 2020 году, и собрали общие вопросы с собеседований, по ответам на которые работодатели определяют, «дорос» кандидат до мидла или нет.
Hard skills
Каков ваш уровень владения языком программирования и сопутствующими инструментами?
От программиста-джуна ожидается знание всех конструкций языка, знание большей части стандартной библиотеки. Знакомство с фреймворками (хотя бы с одним), инструментами коллективной разработки (систем контроля версий, таск- и баг- трекеров, естественно, IDE и др.). Требования к мидлам существенно выше. Как правило, ожидается доскональное знание базы (в том числе синтаксиса используемых языков), опыт работы и уверенные теоретические знания стандартных библиотек, необходимых фреймворков и инструментов.
В каких проектах вы участвовали? Сколько из них вели сами?
Не стоит удивляться: опытные джуниоры уже вполне могут вести свои проекты. Не без поддержки более опытных коллег, но это не отменяет самостоятельности младшего разработчика. Так что если вы продвигаетесь по карьерной лестнице, в вашем портфолио уже должны поселиться свои проекты.
Показывайте решения, которые лучше других продемонстрируют ваши знания и навыки. Выбирайте самые сложные и комплексные таски, рассказывайте, как вы их выполняли и как планировали выполнение.
Каков ваш навык работы с базами данных?
Работаете с бэкендом? В таком случае вы должны свободно обращаться к базам данных, иметь навыки работы с одной или несколькими СУБД.
Знать и уметь строить оптимальную архитектуру БД. БД зачастую является самым узким местом производительности проекта. Менять архитектуру БД на живом проекте очень проблематично и дорого.
Это основное из того, что должен знать Middle-разработчик. Не стоит забывать и о нормализации, денормализации и характеристиках каждой нормальной формы.
Расскажите о своём уровне владения выбранной IDE
Нужно уметь без проблем подключать к проекту библиотеки, знать главные преимущества и недостатки среды, свободно настраивать и использовать горячие клавиши. Это то, что должен знать Middle-разработчик на уровне IDE.
Другие технические навыки
Тут всё зависит от конкретной специальности, но эксперты сходятся в том, что знания должны быть продвинутыми: больше, чем одна библиотека и пара хинтов.
Что касается технических навыков Middle-разработчика по frontend JavaScript, то специалист такого уровня должен:
Также есть дополнительные навыки, которые дают преимущества. Большим плюсом в работе будут:
Самое важное для мидла, это знать, как изнутри работает используемая тобой технология, твой фреймворк. Не то, как он производит рендер (с помощью VDOM и т. п.), а как код написан, как происходит магия. Открой GitHub, посмотри исходники React, как, например, this.setState заставляет компонент делать рендер.
Какие методологии разработки вы знаете? По каким из них работали?
Одной теории недостаточно. Вы уже должны были участвовать в проектах «под ключ» и понять, как работает та или иная методология. Хорошо, если у вас был опыт работы по нескольким методологиям: если так, обязательно проведите сравнение плюсов и минусов, исходя из практики.
Что ещё должен знать Middle-разработчик
Soft skills
Насколько вы коммуникабельны?
Если в случае с Junior-программистом коммуникативные навыки просто важны, то для Middle-разработчика они обязательны.
Думаю, что Middle-программист не должен принимать решения по архитектуре проекта, согласовывать требования с заказчиком и решать вопросы по блокерам, так как это входит в компетенции аналитика, PM и сеньора.
Несмотря на это, во многих компаниях перед мидлом часто ставится задача самостоятельно разобраться, чего хочет заказчик, как решить его проблему и какую архитектуру построить. На базе этих сведений формируется полноценное ТЗ, которое затем передаётся команде разработчиков.
Ваши навыки работы в команде
С точки зрения soft скиллов Middle-разработчику, конечно, нужно осваивать компетенции: ведение переговоров, общение с командой, иметь представление об управлении командой. Эти навыки пригодятся в дальнейшем карьерном росте.
Умеете ли вы разрешать конфликты?
Этот навык также является частью коммуникации. Разногласия могут возникнуть и с заказчиком, и внутри команды. Если вам поручили роль наставника над младшими специалистами в проекте — в обязанности войдёт и урегулирование конфликтов.
Несмотря на то что мы, разработчики, чаще сами по себе и сами в себе — нужно развивать коммуникации и другие мягкие навыки. Не во всех компаниях есть менеджер, который выполняет роль медиатора между отделами — чтобы тебя поняли и чтобы ты просто смог нормально рассказать о своей работе, нужны — эмпатия, умение договариваться, гибкость в процессах.
Каков ваш уровень английского языка?
Уровень владения английским языком Middle-программиста должен быть не ниже Upper-Intermediate, так как этот специалист постоянно участвует в созвонах, конференциях, должен свободно читать и составлять техническую документацию.
Способны ли вы доступно доносить свои идеи, убеждать в их правильности?
Что касается «софтскиллс», они необходимы для выполнения многочисленных ролей в команде — разработчик, ментор, докладчик, тимлид и другие. Что для этого понадобится специалисту? Убеждать коллег и клиентов. Иногда даже продавать — идеи, решения, преимущества. Презентовать свои идеи. Обучать. Планировать свою деятельность, ставить задачи перед подчинёнными, контролировать их выполнение. Для этого и много другого нужно развивать соответствующие навыки.
Можно ли вас охарактеризовать, как внимательного человека?
Очень хорошее качество, которое надо развивать разработчику, — это внимательность. Она позволит вовремя заметить, что с «канарейкой» что-то не то. Грамотный Middle-разработчик должен непрерывно отслеживать «жизненные показатели» проекта, чтобы вовремя понять, что «чирикает» после недавнего коммита он уже не так бодро.
Если возникла проблема, как вы будете её решать?
Перед разработчиком среднего уровня стоит задача самостоятельно находить, обрабатывать и использовать информацию, и только в самых сложных ситуациях обращаться к коллегам-сеньорам.
На первом месте здесь стоит умение искать информацию. Перед собеседованием вспомните основные источники информации, к которым вы обращаетесь в первую очередь (после документации, разумеется).
Можете ли вы оценить время выполнения задачи?
Это то, что должен уметь Middle-разработчик, особенно если речь идёт о работе в команде: в этом случае необходимо оценить время, исходя из знаний и навыков каждого участника проекта. Следует учиться правильно определять сроки выполнения работы.
Мидл уже имеет достаточный опыт работы, что позволяет ему декомпозировать задачи более-менее правильно. Мидл умеет декомпозировать, а значит он может точнее оценивать задачи. Он должен уметь соблюдать сроки. Это умение нельзя переоценить.
Планируете ли вы развиваться до сеньора или тимлида?
Плох тот солдат, что не мечтает стать генералом. Перефразируем: плох тот мидл, что не мечтает стать сеньором/архитектором/тимлидом. Мидл должен всегда хотеть развиваться. Жажда саморазвития будет вытаскивать мидла из его рутины (а у него будет рутина) и отправлять развиваться дальше.
Выводы
Так завышены ли сегодня требования к мидлам? На этот счёт мнения расходятся, но почти все специалисты сходятся во мнении, что каждая компания диктует свои правила, и то, что должен знать Middle-разработчик, будет напрямую зависеть в том числе от должности, на которую он претендует.
Не завышены ли требования к мидлам? Возможно, кто-то из IT-специалистов сталкивался с тем, что, уже несколько лет будучи мидлом, на собеседовании в какой-либо компании его оценивают как джуниора. Связано это, как правило, с двумя факторами: первое — разные требования в разных компаниях. Второе — часто в уровень квалификации, кроме перечисленных выше hard и soft skills, ещё включают погружённость сотрудника в предметную область, знание специфики бизнеса. Эти знания делают сотрудника ценным для текущей организации, но могут значить меньше в новой для него организации.
Подводя итоги, Middle-разработчик должен свободно плавать в теории, хорошо знать необходимый стек технологий и иметь по нему богатый опыт, не просто коммуницировать, но также оценивать трудозатраты, сроки, обучать и управлять ходом разработки. Опыт работы с базами данных, Git и уверенное владение английским языком обязательны по умолчанию.