javascript

Почему программисты не могут программировать

  • четверг, 18 мая 2017 г. в 03:14:36
https://habrahabr.ru/post/328864/
  • Совершенный код
  • Программирование
  • Алгоритмы
  • JavaScript


Я был недоверчив, когда прочитал это наблюдение у Реджинальда Брейтуэйт:


Как и у меня, у автора возникают проблемы с тем фактом, что 199 из 200 претендентов на каждое задание программирования не могут писать код вообще. Повторяю: они не могут писать никакого кода вообще.

Автором, которого он имеет в виду, является Имрана Гхори, который, очевидно, отворачивается от многих программистов, которые не могут написать простую программу:


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

Поэтому я решил разработать вопросы, которые могут идентифицировать такого рода разработчиков, и придумал класс вопросов, который я называю «Вопросы FizzBuzz», в честь игры, в которую дети часто играют (или их заставляют играть) в школах Великобритании. Примером проблемы Fizz-Buzz является следующее:

Напишите программу, которая печатает числа от 1 до 100. Но для кратных трём значений «Fizz» вместо номера и для кратных пяти «Buzz». Для чисел, одновременно кратных трём и пяти — «FizzBuzz».

Большинство хороших программистов должны иметь возможность написать на бумаге программу, которая делает это за пару минут. Хотите знать что-то страшное? Большинство выпускников компьютерных наук не могут. Я также видел, что кандидаты на старшего программиста потратили более 10-15 минут, чтобы написать решение.

 
Дэн Кегель имел аналогичный опыт найма программистов начального уровня:


Удивительно большая доля претендентов, даже обладающих степенями магистра и докторов наук в области компьютерных наук, терпит неудачу во время интервью, когда их просят выполнить основные задачи программирования. Например, я лично опросил выпускников, которые не могут ответить «Напишите цикл, который считает от 1 до 10» или «Какой номер после F в шестнадцатеричной системе?» Менее тривиально я брал интервью у многих кандидатов, которые не могут использовать рекурсию для решения реальной проблемы. Это базовые навыки; любой, у кого их нет, вероятно, недостаточно много программировал.

Выступая от имени инженеров-программистов, которые должны взять интервью у потенциальных новых сотрудников, я могу с уверенностью сказать, что нам надоело разговаривать с кандидатами, которые в программировании ни в зуб ногой. Если вы можете успешно написать цикл, который идет от 1 до 10 на каждом языке вашего резюме, может сделать простую арифметику без калькулятора и может использовать рекурсию для решения реальной проблемы, вы уже опережаете многих!

 
Между Реджинальдом, Дэном и Имраном я начинаю немного волноваться. Я более чем готов сократить ограничения для молодых разработчиков программного обеспечения в начале своей карьеры. Все должны начать где-то. Но меня беспокоит и возмущает то, что любой так называемый программист будет претендовать на работу, не имея возможности писать простейшие программы. Это пощечина каждому, кто зарабатывает на жизнь программированием.


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


Чтобы вы не подумали, что тест FizzBuzz слишком прост и ослепительно намеренно легкий, комментатор к сообщению Имрана отмечает его эффективность:


Я бы не хотел, чтобы интервьюеры отклонили тест [FizzBuzz] как слишком легкий. По моему опыту, действительно поразительно, сколько кандидатов неспособны к простейшим задачам программирования.

 
Может быть, глупо начинать интервьюировать программиста, не глядя вначале на его код. В Vertigo нам требуется образец кода, прежде чем мы перейдем к этапу собеседования по телефону. И наше собеседование на месте включает небольшое упражнение по кодированию. Ничего сложного, просто базовое упражнение, позволяющее проработать задание о создании небольшого приложения за час или около того. Несмотря на то, что было одно или два заметных всплеска, по большей части эта стратегия работала хорошо для нас. Это позволяет нам сосредоточиться на реальной разработке программного обеспечения в интервью, не прибегая к утомительным вопросам-головоломкам.


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


PS


Предлагаю попробовать решить приведенную ниже задачу на JavaScript, засекая потраченное время. Опрос-то анонимный, обманывать совсем нет смысла. Правильный вариант ответа тут. Признаюсь, что у меня ушло 67 минут, применяя гугление. Правда какую-то часть времени высиживал по японской методе — самые нелепые предположения и примерка их к задаче, наверняка есть более изящное решение. Еще какую-то часть времени потратил на причесывание индусского кода. Действительно ли нас так много? :)


Write a program that prints into console the numbers from 1 to 100. But for multiples of three print "Miss" instead of the number and for the multiples of five print "Kiss". For numbers which are multiples of both three and five print "MissKiss". Each print must be asynchronous call console.log function with a 50ms delay.