![](https://habrastorage.org/webt/jc/io/ni/jcioni3uirthdrazsx4ciw5jjqg.png)
Насколько правомерно утверждение, что 199 из 200 соискателей вакансий в сфере программирования по факту программировать не умеют? Откуда взялось это утверждение, и какие основания под собой имеет?
Заголовок получился громоздкий, но в его основу легло более лаконичное название статьи «Why Can’t Programmers…Program?», в начале которой автор приводит выдержку из ещё одного поста:
Как и я, его автор столкнулся с тем, что 199 из 200 соискателей на любую вакансию программиста не умеют писать код. Повторюсь: они не могут писать код ни в каком виде.
И хотя Джефф разместил эту статью в 2007 году, она по-прежнему широко обсуждается. Вот её обсуждение из 2020 года, вот её перепост в HackerNews в 2021 году, а вот цитирование этой статьи на корпоративном сайте.
Меня как-то просили писать более сжато, так что приведу короткую версию моей статьи. Надеюсь, она убедит вас, что:
- Статистика «199 из 200» не имеет под собой оснований.
- Даже если бы основания у неё были, она бы применялась только к соискателям, а не к программистам в целом.
- Если вы можете решить FizzBuzz, это ещё не означает, что вы готовы к собеседованиям по программированию.
▍ Что меня подтолкнуло к написанию
На мой взгляд, сейчас в программировании есть две совершенно разные проблемы: с одной стороны, эту профессию усердно продают как лёгкий способ заработать денег, а с другой, наоборот, наблюдается склонность к элитаризму и излишней зашоренности.
Я уже писал о статье Джеффа Атвуда ранее, на что получил довольно критический ответ. И вместо того, чтобы отвечать напрямую, я решил сфокусироваться конкретно на утверждении про «199 из 200 соискателей». Если бы существовало твёрдое доказательство того, что в 2007 году 199 из 200 соискателей на любую вакансию программиста вообще не умели писать код, о чём заявил Реджинальд Брейтвейт (Raganwald), то мои личные чувства в отношении элитаризма и зашоренности оказались бы неуместны перед лицом холодных и неоспоримых фактов.
Немного истории:
- 27 января 2005 года сооснователь StackOverflow Джоэл Спольски написал статью, названную им просто «News».
- В январе 2007 года разработчик ПО Имран Гхори (сегодня занимается венчурными вложениями) написал, что большинство выпускников факультетов компьютерных наук не могут решить задачку FizzBuzz.
- Тогда же в январе 2007 года Raganwald, являющийся разработчиком ПО и писателем, заявил, что 199 из 200 соискателей на любую вакансию программиста не умеют писать код. В качестве источника он указал ссылку на вышеупомянутую статью Джоэла Спольски.
- В феврале 2007 года сооснователь StackOverflow, наконец, написал статью «Why Can’t Programmers…Program?», в которой связал всё воедино. Он процитировал Raganwald, который, в свою очередь, ссылался на Джоэла Спольски.
Почему я не стал обсуждать статью Джоэла Спольски? Потому что по факту в ней не утверждается то, что утверждает Raganwald. Вот выдержка из неё:
Все считают, что нанимают лучший 1% специалистов.
Мартин Фаулер: «Мы по-прежнему усердно стремимся нанимать только топовых разработчиков (наша цель – это лучшие 0,5 – 1%).
Я: «Мы получаем от 100 до 200 резюме на вакансию».
Помню, когда я начал работать на Дэвида Шоу, он сказал нам, что их компания наняла только «1 из 200».
И я слышу это практически из каждой компании по разработке ПО: «Мы нанимаем лучший 1% или ещё меньше».
— Источник
Спольски не приводит никаких свидетельств того, что 199 из 200 соискателей не могут программировать, как и не утверждает этого. В своей статье он размышляет о том, что если все будут стремиться нанимать лучшие 0,5%, то самые грамотные кандидаты с рынка труда исчезнут. И тут нет чего-то неправильного, это просто интересно. Но сей факт также подтверждает, что указанное число было гипотетическим. Позднее Raganwald написал ответ, в котором объяснил свои расчёты, но по факту он описал мысленный эксперимент о том, что большинство лучших «кандидатов», как и в случае со свиданиями, просто не ищут собеседований. Это размышление не вызывает противоречий, но оно очень далеко от статистики «199 из 200 соискателей».
▍ Прочие обсуждения
И я не единственный, кого это смутило. На эту статью был опубликован короткий и ясный ответ на Quora:
Я прочёл все три указанных автором источника и сделал вывод, что он ошибается или неверно толкует их смысл. Однако при этом он не связывает все те три статьи. Так что, возможно, вы просто неверно поняли суть, которую он пытался донести.
В первом источнике говорится, что 199/200 людей не получают работу, и что компании нанимают этого 1 из 200 не потому, что нанимают лучший 1%, а потому что нанимают 1% соискателей, которые не находятся постоянно без работы. Здесь ничего не говорится относительно FizzBuzz.
— Дэвид Ши, взято из этого обсуждения.
А на StackExchange пользователь с ником DJClayworth написал:
Это просто смесь утверждений. В первичном источнике (Имран) сказано лишь, что «Большинство выпускников факультетов компьютерных наук не могут реализовать FizzBuzz за пару минут». Это сильно расходится с утверждением, что 199 из 200 программистов вообще не могут её реализовать. Соотношение 199/200 взято из проведённого Джоэлом абсолютно гипотетического анализа найма, и в нём нет ни слова про FizzBuzz.
— Источник
Ещё один пользователь, Джимми, написал следом за предыдущим:
Последовавшее за статьёй «объяснение» расчётов никак не стремится эти расчёты в действительности прояснить, а лишь использует «мысленный эксперимент», сводящийся к тому, что «хорошие программисты уже при деле, поэтому работу ищут только те, кто не умеет программировать». Таким образом, автор оправдывает своё утверждение про 199 неспособных соискателей из 200. Без возможности просмотреть оригинальные результаты теста по реализации FizzBuzz это утверждение выглядит подозрительным или как минимум не поддающимся проверке.
— Источник
▍ Альтернативы FizzBuzz
Когда я впервые об этом написал, к моей статье оставил комментарий пользователь под именем Джеймс. Он сказал (я немного перефразирую):
«Если вы считаете, что умение решить FizzBuzz говорит о ваших высоких навыках, то неверно понимаете смысл теста. Его задача — не увидеть степень квалификации, а отсеять тех, кто не квалифицирован в принципе. Если вы решаете FizzBuzz, то мне это говорит немногое, но если вы не можете этого сделать, то с вами всё ясно».
Как человек, который закончил университет в 2016 году, лично мне не доводилось видеть FizzBuzz, но я встречал много похожих задачек. Например:
- Сжатие строк (string compression). Я вижу, что на LeetCode эта задача имеет среднюю сложность, но это, скорее всего, из-за того, что её надо решать на месте. В противном случае она бы идеально соответствовала Cracking The Coding Interview 1.6 (и неважно, что на LeetCode условие задачи сформулировано столь запутанно).
- Правильные скобки (valid parenthesis) (подсказка: какая структура данных окажется полезной для решения этой задачи?)
- Сопоставление строк (string question). Не помню точно условий этой задачи, но, по-моему, в ней нужно взять две равных по длине строки и возвращать
True
, если их буквы совпадают, иFalse
в противном случае. Хотя это вопрос с собеседования для технического писателя, так что к нашей теме он, возможно, не подходит.
Что такое FizzBuzz в наше время? Возможно, «задача по инвертированию бинарного дерева», но только потому, что сейчас она уже стала чем-то вроде мема.
▍ Заключение
На собеседованиях вас не всегда спрашивают по части программирования. Я получал уточняющие вопросы о проектах, тематические вопросы вроде «Чем отличаются
dynamic_cast
и reinterpret_cast
?». Было ещё несколько тестов, в которых мне не позволяли выбирать язык программирования. А один раз собеседующий даже предоставил файлы HTML/CSS/JavaScript и попросил при нём реализовать новую функциональность UI.Вот ещё несколько головоломок, которые я встречал на собеседованиях:
- 3 1 3 6 = 8. Расставьте операторы (только + — * /) и скобки так, чтобы равенство оказалось верно. Я уже публиковал этот вопрос ранее, поэтому сразу уточню: порядок значений менять нельзя https://www.careercup.com/question?id=1691
- «Дано три ящика. В одном находятся только яблоки, в другом только апельсины, а в третьем и яблоки, и апельсины. Эти ящики ошибочно подписали так, что ни одна из надписей не отражает содержимое своего ящика правильно. Вы открываете один из ящиков и, не глядя в него, достаёте один фрукт. Как, взглянув только на этот фрукт, вы можете сразу правильно подписать все ящики?» (Источник)
Узнавайте о новых акциях и промокодах первыми из нашего Telegram-канала ?
![](https://habrastorage.org/webt/os/g2/ms/osg2msglmcba81cfkh0vl0nlnu4.jpeg)