Как стать автором
Обновить

Нужно ли современному программисту уметь создавать алгоритмы?

Время на прочтение4 мин
Количество просмотров13K

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


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


Вот пример одной из них:


/* Простое число — целое положительное число, имеющее только два делителя: 1 и само себя */
function isPrimeNumber(number) {
    /* необходимо реализовать функцию, возвращающую true в случае, если number является простым числом и false в противном случае */
}

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


Немного вводных данных: мы ищем фуллстеков, пишущих на JavaScript/TypeScript. Спектр задач, в зависимости от пожеланий самого разработчика, может быть очень широким: от разработки биллинговой системы, до десктоп-приложения для рисования на скриншотах и загрузки в облако. Соответственно, базовые знания математики (плюс-минус, разделить-умножить, найти среднее арифметическое, максимум-минимум в ряде) нужны, равно как и умение решать прикладные задачи, решения которых может и не быть на stackoverflow. По резюме мы отбираем кандидатов уровня не ниже middle, с соответствующим опытом работы. Разработка — совсем не профильный вид деятельности компании, поэтому нам трудно привлечь мощных разрабов и таких кандидатов очень мало.


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


Помню как я первый раз удивился, когда парень с трёхлетним опытом работы в крупных проектах, сказал что для решения этой задачи нужен какой-то «алгоритмист». И он объяснил почему: у него опыт разработки сервисов, где, в основном, работаешь с данными из базы, очередями — получаешь/передаёшь, вот это вот всё. Тогда я и задумался, что современное программирование — это, наверное, больше про опыт работы с RabbitMQ, MongoDB, чем про вычисление/нахождение чего-то.


Часто кандидаты говорят «я не математик», «у меня с математикой не очень». Первое время я терялся и не знал что ответить, потому что я не вижу тут математики, это задача на поиск. Да и трудно ожидать таких слов от программиста, метящего на зарплату в тысячи долларов. Теперь-то я предлагаю кандидатам поразмышлять: «поскольку любое положительное целое число делится без остатка на единицу и само себя, достаточно найти хотя бы ещё одно число, на которое аргумент можно поделить нацело и вернуть false, а если не нашли, то вернуть true». Но и это не всегда помогает.


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


1. Клиповое мышление


Современное клиповое мышление как-то отразилось на программировании и новоиспечённым разработчикам проще (а может и интереснее) искать решения даже простейших задач на stackoverflow, из-за чего способность «придумывать» алгоритм для решения задачи не прокачивается даже с годами.


Не знаю как происходит процесс программирования у других, может, теперь действительно принято обращаться к stackoverflow не тогда, когда ты не можешь что-то решить, а сразу же, без самой попытки решения? Ни в коем случае не говорю, что это плохой подход, вероятно даже хороший: за счёт такой мемоизации решений, в перспективе, можно создать ИИ, который по ответам на stackoverflow будет кодить без участия человека.


2. Простота и массовость языка


Я уверен, что если бы мы искали Си-разработчика, то такой проблемы не было бы. Но случая проверить эту гипотезу пока не представилось.


Тренд «войти в айти», куча онлайн школ с программами аля «Интенсив по Python», «Стань React-разработчиком за месяц» породили массу людей, которых в программировании изначально привлекала оплата (возможно, только она) труда. Но и эти разработчики очень востребованы. Например, фронтендеров появляется сейчас очень много, но их всё равно не хватает: без работы не останется никто, главное уметь в React. Нужны ли тут алгоритмы? Я скажу «да, конечно», и, вероятно, ошибусь.


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


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


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


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

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Как вы считаете, нужно ли современному программисту уметь разрабатывать алгоритмы?
82.85% Да, нужно343
17.15% Нет, не нужно71
Проголосовали 414 пользователей. Воздержался 51 пользователь.
Теги:
Хабы:
Всего голосов 16: ↑11 и ↓5+12
Комментарии119

Публикации

Истории

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань