Используете пробелы вместо табуляции? Скорее всего, вы зарабатываете больше

Прокомментировать Просмотры: 4

Разница ровно в 15 390 долларов в год обнаружилась между двумя медианными окладами в публикации дата-аналитика Stack Overflow Дэвида Робинсона, датированной серединой июня 2017 года. Подобный разрыв между новичками и старожилами или между индийскими и калифорнийскими специалистами никого бы не удивил — подобных графиков в сети бесчисленное множество. Однако ажиотаж возник из-за критерия, по которому инженеров разделили на два лагеря: выбора между пробелами и табуляцией для форматирования кода.

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

Откуда взялись цифры

Ежегодное масштабное исследование Stack Overflow в 2017 году охватило более 64 тысяч респондентов. Опубликовав сырые датасеты, компания предоставила аналитикам простор для работы: Робинсон отобрал исключительно практикующих программистов, исключив студентов и бывших спецов, ответивших на вопрос об отступах. Таковых набралось 28 657 человек: 40,7% отдали предпочтение табам, 41,8% — пробелам, а 17,5% использовали оба варианта; при этом уровень дохода указали 12 426 участников.

Картина вырисовывалась следующая: медиана зарплат приверженцев пробелов составила 59 140 долларов против 43 750 у сторонников табуляции. Соотношение показателей дает коэффициент около 1,35, то есть первичный разрыв составлял приблизительно 35%. Группу комбинированного использования Робинсон исключил из основного трека исследования, так как их зарплатные показатели практически не отличались от результатов любителей табов.

Ищите скрытую переменную

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

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

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

Тогда в ход была пущена множественная линейная регрессия, в которую заложили все потенциально влияющие на доход метрики, включая вклад в open source. Модель показала, что использование пробелов коррелирует с прибавкой к зарплате в 8,6% (доверительный интервал варьируется от 6 до 10,4%, p-value ниже 10⁻¹⁰). Для оценки вклада каждого параметра в процентах прогнозировался логарифм дохода, и в пересчете на профессиональный стаж пробелы оказались сопоставимы с дополнительными 2,4 годами опыта.

Здесь полезно оценить масштаб. Первоначальный 35-процентный разрыв после учета всех поправок сократился до 8,6% — иными словами, страновая специфика, стаж и другие стандартные параметры объяснили около трех четвертей дисперсии. Тем не менее, остаточный разрыв никуда не исчез, и с ним пришлось разбираться более детально. Применив показатель в 8,6% к медиане зарплат «табуляторов», получаем порядка 3 760 долларов ежегодно, что при 250 рабочих днях составляет примерно пятнадцать долларов ежедневно — эквивалентно оплачиваемому бизнес-ланчу.

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

Табуляция и ее противники

Данная дискуссия значительно старше большинства участников, а статистику пытались анализировать и до публикации Робинсона. Опрос Stack Overflow образца 2015 года демонстрировал противоположную расстановку сил: тогда табы лидировали с 45% голосов, тогда как пробелы выбирали 33,6%. Тот факт, что за двухлетний период ситуация кардинально изменилась, сам по себе любопытен, поскольку устоявшиеся привычки профессионального сообщества трансформируются не так быстро, а вот демография аудитории респондентов меняется динамично.

Годом ранее, в 2016-м, Фелипе Хоффа из Google проанализировал через BigQuery массив из миллиарда файлов, извлеченных из 400 тысяч ведущих репозиториев GitHub (порядка 14 терабайт исходного кода). Выяснилось, что пробелы доминируют практически во всех языках программирования, за исключением C и Go. В случае с Go всё прозрачно: утилита `gofmt` принудительно форматирует код табуляцией, исключая полемику. У языка C также есть историческое обоснование: принятый в ядре Linux стиль кодирования предписывает использовать табуляцию шириной в восемь символов, а за ядром следует внушительная часть всей экосистемы Си. Заподозрить мейнтейнеров ядра в низком уровне доходов не получается, следовательно, табуляция сама по себе не является признаком неблагополучия.

Ради полноты картины стоит добавить, что этот вечный спор породил бесчисленное количество интернет-мемов и даже вошел в сюжет сериала «Кремниевая долина» от HBO, где главный герой разругался с девушкой из-за отступов. Шоу вышло за год до знаменитого поста Робинсона, поэтому шутки о пророческом даре сценаристов еще долго циркулировали в комментариях.

Альтернативный взгляд

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

Эвелина Габасова подошла к вопросу со стороны open source. Согласно её выводам, участие в проектах с открытым исходным кодом предсказывает более высокий уровень доходов вне зависимости от стажа. Среди контрибьюторов (особенно американских) пробелы пользуются заметно большей популярностью; разработчики из США вне открытого сообщества используют их лишь с минимальным отрывом, в то время как в глобальном масштабе среди не участвующих в open source лидирует табуляция. Общая картина оказалась значительно пестрее, чем у Робинсона: у контрибьюторов со стажем свыше 15 лет сторонники табов зарабатывают больше сторонников пробелов, а у специалистов с меньшим опытом участие в open source никак не коррелирует с зарплатой (тогда как у любителей пробелов такая связь прослеживается). Поскольку open source учитывался в регрессионной модели изначально, списать на него весь эффект не удается, однако нелинейные взаимосвязи между факторами стандартная модель уловить не способна.

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

Что спрашивали и что услышали

Формулировка вопроса в анкете была лаконичной: табы или пробелы. Между тем в подавляющем большинстве современных текстовых редакторов клавиша Tab по умолчанию генерирует последовательность пробелов (два или четыре в зависимости от настроек). Из-за этого специалист может годами нажимать клавишу табуляции, физически не создавая в файле ни единого символа табуляции. То, как человек ответит на этот вопрос, напрямую зависит от его осведомленности о внутреннем устройстве инструментов. Мой редактор настроен подобным образом уже долгие годы, и на этот вопрос я бы ответила «пробелы», хотя сознательно не нажимала пробел ради отступа едва ли не с начала карьеры.

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

Вторая гипотеза представляется более весомой и затрагивает вопрос принятия решений на уровне команды. Во многих современных проектах этот выбор давно делегирован конфигурационным файлам. Стандарт PEP 8 предписывает использовать четыре пробела, линтер `black` форматирует код исключительно пробелами, Prettier по умолчанию поступает аналогично, а Python 3 и вовсе выбрасывает `TabError` при неоднозначном смешении отступов. С другой стороны баррикад находятся `gofmt` и стандарты ядра Linux, жестко требующие табы. В результате для огромной массы разработчиков формат отступов задается регламентом проекта, линтером и CI-системой, которая просто отклонит пул-реквест с некорректным форматированием. Подобная зрелая инфраструктура (автоматическое форматирование, обязательное код-ревью) гораздо чаще встречается в компаниях с выстроенными процессами разработки, а они традиционно предлагают более высокие зарплаты. Робинсон учитывал размер компаний, однако масштаб бизнеса и зрелость процессов коррелируют слабо: небольшой стартап из сорока человек со строгим CI и корпорация на пять тысяч сотрудников с двадцатилетним техническим долгом попадут в разные категории по размеру, но окажутся в перепутанных секторах с точки зрения инженерной культуры.

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

Из этого следует неприятный вывод для тех, кто уже бросился менять настройки своего редактора. Робинсон в своей публикации предельно аккуратен и говорит исключительно о корреляции (пробелы, по его выражению, ассоциируются с более высоким уровнем доходов), поэтому если завтра переключить режим отступов, 2,4 года условного опыта в резюме не появятся, а вот коллеги по команде, привыкшие к иному стилю, незамедлительно отреагируют на ближайшем ревью.

Отступать некуда

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

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

 

Источник

Поделиться:

Похожие статьи

Поиск по играм, новостям и статьям…

Введите не менее двух символов

Введите не менее двух символов