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

Команда исследователей направления анализа данных изучила текущие требования к уровню знаний по SQL среди разработчиков. Мы выяснили у действующих профессионалов, для каких задач чаще всего нужен этот язык и какие конкретно темы желательно подтянуть кандидатам на вакансии, чтобы легче войти в рабочий процесс. 

Как исследовали?

Мы поговорили с целевыми сегментами респондентов:

  • Менеджерами и руководителями команд разработки, которые принимают решения о найме (10 респондентов)

  • Действующими разработчиками уровня мидл и выше (11 респондентов)

  • Студентами и выпускниками курсов Python-разработчик и Java-разработчик (20 респондентов).

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

Кому нужен SQL и для каких задач?

Язык структурированных запросов могут использовать специалисты с разными ролями в командах: программисты, аналитики, инженеры данных, QA и даже дизайнеры. Чаще всего возможностями SQL пользуются бэкенд-разработчики, аналитики и инженеры данных. На графике можно увидеть, как между нашими респондентами распределились языки программирования. 

SQL в основном используется для следующих задач: 

  • Работа с данными: добавление, изменение, удаление; выборки (в том числе рекурсивные), составление отчётов, написание скриптов для выгрузки из БД.

  • Организация хранения данных: проектирование схемы данных, модификация БД, работа с моделью данных, написание расширений; задачи по уменьшению места, которое занимают данные, переезд из одной БД в другую.

  • Оптимизация запросов: отладка запроса, сгенерированного ORM; ускорение алгоритма, по которому производится выборка. 

  • Поиск аномалий/ошибок: оценка объектов в БД и связей между ними, устранение поломок в БД; работа с latency, прогноз поведения системы.

  • Таблицы: создание, агрегирование данных из нескольких таблиц, добавление и удаление колонок.

  • Индексы: создание, добавление, удаление.

  • Визуализация: создание дашбордов по запросу, представление данных по необходимости.

  • А также такие задачи, как написание и отладка представления, работа с транзакциями, миграциями, джейсоном; работа с временными и географическими данными.

Насколько важно знать SQL кандидату-разработчику?

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

Исследование показало, что и нанимающая сторона, и сами разработчики считают SQL вторичным навыком. Две трети респондентов на позиции мидл и выше сказали, что не готовятся к собеседованиям по этой части. 

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

Только 20% респондентов отдельно предлагают сеньорам на собеседовании кейсы на построение архитектуры, вопросы по устройству баз данных (БД) и организации хранения данных. 

Сходство и отличия SQL для аналитиков и разработчиков

Респонденты сходятся во мнении, что аналитики являются пользователями БД, а разработчики — их менеджерами. Следовательно, первые нацелены на получение информации из БД, а вторые — на управление этой информацией. Разработчикам  важнее оптимальность и скорость работы SQL-запроса, так как он является частью более масштабной системы. Аналитики же могут позволить себе более тяжеловесные и сложные запросы.Разработчик должен понимать архитектуру БД и специфику работы той или иной СУБД (системы управления базами данных), аналитикам данных же в этом ключе может быть актуально понимание только специфики написания отдельных SQL-запросов к конкретной СУБД. 

Мы проанализировали пересечения по скилсету SQL среди обеих групп. Базовые знания («фундамент») у всех одинаковые: селекты, группировки, джойны, подзапросы, оконные функции, сортировки. Поэтому для обучения специалисты разных сфер могут использовать одинаковые источники информации, а затем — работать над навыками в тех темах, которые нужны для конкретных рабочих задач. Например, базу знаний можно сформировать на нашем курсе по SQL.

Самые важные навыки разработчика в SQL

На основании ответов работодателей и профессионалов-разработчиков мы определили самые важные области знаний по исследуемой теме:

  • Синтаксис и команды SQL. Разработчики часто пишут SQL-запросы через ORM. Это даёт возможность обращаться к БД на основном языке программирования. Однако и разработчики, и руководители отмечают важность понимания того, как запрос, написанный таким способом, будет выглядеть на SQL. Дело в том, что ORM иногда генерирует неоптимальные запросы или допускает ошибки. Без знания SQL разработчик не сможет разобраться в причинах неудачи и исправить ситуацию. Кроме того, ORM не совершенны и плохо работают со сложными, многосоставными запросами. 

  • Общие знания по устройству БД. К этому пункту относится понимание специфических особенностей разных баз данных и связанных с ними технологий. Важно разбираться в том, как хранить данные в БД, уметь организовать структуру хранения, минимизировать занимаемый объём. Если на проекте нет роли дата-инженера, то приходится погружаться в вопросы проектирования хранилища и построения ETL. Обычно эту функцию на себя берут сеньор разработчики.

Также мы описали два уровня владения навыком. Отметим, что разделение условно и основано на том, какой функционал используют разработчики разных уровней на проектах, отличающихся по сложности. 

  • Базовый SQL. На этом уровне разработчик может уверенно использовать селекты; операторы WHERE, GROUP_BY, UPDATE, INSERT; подзапросы. Он умеет отлаживать ORM-запросы через EXPLAIN, проводить фильтрацию и создавать отчёты, таблицы и колонки, индексы и внешние/внутренние ключи. Важно знать базовые оконные функции. Большая часть задач может выполняться через ORM.

  • Продвинутый SQL. На этом уровне чаще используется прямой, нативный SQL. Он включает в себя все навыки базового SQL. В зависимости от задач могут добавиться: более глубокая работа с индексами; PL SQL-процедуры; организация миграций; агрегатные, аналитические, оконные функции; вложенные запросы; проектирование схемы данных; OLAP-преобразования.

Ниже в таблице мы систематизировали данные о том, какие операторы и функции используют чаще всего. 

Какие знания в SQL будут плюсом, но не обязательны?

На работодателей производит хорошее впечатление тот факт, что разработчик разбирается в устройстве БД, физических способах хранения данных, а также имеет представление о транзакционной модели. Опытные кандидаты нередко демонстрируют эти знания на собеседованиях, что вызывает положительную реакцию. Респонденты отметили, что такие соискатели быстрее подбирают оптимальные решения. Они точнее определяют стоимость технического долга и предугадывают проблемы. Так, при работе над продуктами, где нагрузка взлетает в десятки и сотни раз, хорошее понимание устройства БД и краевых случаев производительности помогает решать критические задачи.На основании ответов респондентов мы составили чек-лист для кандидатов. В него вошли навыки по SQL, которые пригодятся сотруднику на новом рабочем месте. Если есть возможность, лучше «прокачивать» их заранее:

  • Специфические особенности сферы. Например, в картографических сервисах будет преимуществом знание географических операторов, документации PostgreSQL и Postgis. Для платёжных систем и банковской сферы актуальна работа с транзакциями.

  • Демонстрация уверенности понимания базового SQL. На собеседовании это может выражаться в том, что кандидат не сомневается в своих ответах на вопросы, может объяснить практическую разницу между двумя операторами SQL.

  • Особенности синтаксиса SQL-движка, на котором предстоит работать, или специфические особенности БД.

  • Знания математической логики и реляционной алгебры — они помогают быстрее осваивать SQL.

  • Интерес к тому, как устроено хранение данных, архитектура, разные СУБД. Программист может расти, получая знания из области DE, ETL, OLAP-преобразования, проектирования структуры хранилища. Эти навыки ценятся в продуктах, где нет выделенной позиции дата-инженера, и соответствующую функцию отдают сеньор разработчикам.

Основные выводы

SQL в среде программистов выполняет роль серого кардинала: специалисты часто не уделяют ему особенного внимания, когда думают о повышении компетенций. Отчасти это объясняется тем, что многие работодатели считают язык структурированных запросов вторичным навыком, и на собеседованиях он проверяется поверхностно. Тем не менее базовые знания по SQL можно отнести к гигиене программирования. Это рабочая необходимость, поэтому многие так или иначе осваивают эту сферу уже после трудоустройства.

Уровень владения SQL у разработчика чаще всего зависит от проектов, на которых ему пришлось работать. Чем больший объём данных использован на проекте, чем выше нагрузка на систему — тем более продвинутый SQL нужен разработчикам. Так, 30% профессионалов отметили, что хотели бы больше знать о процедурах и функциях в SQL, транзакциях, оптимизации запросов и устройстве индексов в этом контексте, а также масштабировании решений. Такая же часть респондентов уровня мидл и выше намерена «прокачаться» в специфических особенностях PostgreSQL (сложные индексы, оптимизация, работа с координатами).

Что касается джуниор разработчиков, то учитывая большую конкуренцию среди новичков, большим плюсом для них будет умение писать запросы с самого начала. Помимо кода, важно развивать навыки в логических связях (как работает запрос, в какой последовательности выполняются операторы). Начинающему специалисту желательно «набить руку» на разных видах джойнов, выборок и группировок. Это позволит чувствовать себя более уверенно не только на собеседованиях, где проверяют SQL, но и в реальных задачах на испытательном сроке. Заблаговременное освоение SQL позволит высвободить время, которое придётся так или иначе потратить на обучение, и направить его на другие задачи, например, связанные с основным языком программирования. 

Исследование проводили: 

  • Александра Амбражейчик (продуктовый исследователь) 

  • Антон Моргунов (продуктовый исследователь) 

  • Софья Аксёнова (руководитель группы продуктов в направлении анализа данных) 

  • Александр Сушков (автор, лид учебной программы, преподаватель направления анализа данных)

  • Ирина Ефимова (руководитель исследований в направлении анализа данных)

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


  1. vagon333
    00.00.0000 00:00
    +6

    Похоже, у Яндекса масса лишних пиастров, чтоб заказывать такое исследование в составе 5 чел.


    1. MockBeard
      00.00.0000 00:00

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


  1. Trabant_Vishnya
    00.00.0000 00:00
    +2

    Повальное увлечение оконными функциями на собесах уже достало, если честно.

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


  1. am-habr
    00.00.0000 00:00
    +1

    - Слово "исследование" можно было поставить в ковычки или совсем убрать, это понятие подчиняется определённому ряду требований.

    - Не совсем понятно, на каком языке написана статья.
    "сеньор" - форма вежливого упоминания по отношению к мужчине в Испании.
    "мидл" - московский весовой завод.
    "кейс" - небольшой чемодан. "Сеньорам на собеседовании выдают кейсы" - очень интересный вид собеседования.
    "селект" - поставщик оборудования для систем отопления.
    "глубокая работа с индексами" - понятие глубокой работы есть, но на русском ассоциации возникают неправильные.
    "Программист может расти, получая знания" - не указано, на сколько сантиметров.

    - Из первого графика следует, что 14 респондентов используют python, 2 java. Но опрошенных выпускников курсов было 20. Получается 4 выпустились, ничему не научившись, либо научились чему-то другому.