NokiMo
Осознанная Меркантильность | Антон Назаров
Осознанная Меркантильность | Антон Назаров

boosty


Без алгоритмов ты не программист

Это текстовая расшифровка стрима на моем канале. Если ты уже смотрел стрим, нового ты не узнаешь.

Без алгоритмов ты не программист

Таймкоды:
0:00 - Настраиваем стрим
4:55 - О чём этот стрим
5:24 - Виктор рассказывает о себе
6:47 - Никита рассказывает про алгоритмы
10:28 - Нужно ли спрашивать алгоритмы на собеседовании
19:35 - Алгоритмы в яндексе
28:51 - Что проверяют алгоритмы
51:01 - Алгоритмы и мышление: есть ли связь
57:03 - Плохой найм ведёт к плохому продукту
1:11:09 - Как проверить качество интервью?
1:34:28 - Зачем нужно работать в ФААНГЕ
1:38:49 - Фреймворки и база
1:42:20 - О пользе алгоритмов
1:53:20 - Подпишись
Алгоритмы в айти давно стали темой жарких споров. Одни на них яростно молятся, считают универсальным решением всех проблем и некой обязательной «базой», смысл которой не требует доказательств. Другие люди задаются резонным вопросом, почему алгоритмы лучше и важнее всего остального, а если их не знаешь и не понимаешь, то становишься человеком второго сорта в глазах «настоящих специалистов»? Вместе с Никитой Козловым и Виктором Карповым решили разобраться в теме, чтобы уйти от алгоритмической мистики и найти для себя конкретные ответы. 
На собеседованиях алгоритмы нужны, если кандидат будет работать с ними в повседневных задачах. Но это не значит, что обходить граф или дерево должны уметь без исключения все разработчики с первого дня на работе. 
Популярна точка зрения, будто знание алгоритмов это некая непреложная истина, и они стопроцентно дают понять общий уровень пригодности кандидата. Такой подход порождает проблемы, когда из-за перекошенной системы отбора можно, например, получить от алгоритмических гениев примитивные ошибки в UI. Вспоминается пример Go Daddy, где разработчик ошибся с регулярным выражением, и ссылка на сайт не воспринимала двоеточия. 
В защиту алгоритмической части есть релевантные аргументы:
• Самые популярные примеры — бинарный поиск или обход дерева, выучить не слишком сложно
• Суть алгоритмических собесов в том, что компании важно понять, как ты пишешь и проверяешь код, работаешь с ошибками и находишь решения, нежели просто спросить зазубренные тобой теоретические ответы 
• Существует и олимпиадная составляющая: можно сидеть и решать задачки на LeetCode без планов найти работу — ведь тебе это просто интересно. Как хобби алгоритмы ничем не хуже шахмат или пробежек 
Для гигантов FAANG, алгоритмический этап стал хорошей метрикой и способом сужения воронки кандидатов. Такие компании могут делать, что вздумается — в них хотят все. Другой вопрос, насколько обосновано часто слепое копирование этой тактики найма компаниями меньшего размера, и в чём его польза? 
Если взять бигтех в РФ и посмотреть на Яндекс, то нестыковки найма уже стали мемом: на 3 из 4 этапов ты тупо решаешь алгоритмические задачки на время, хотя алгоритмам как будто выделен только один этап — но всем пофиг. Часто в подобных случаях процесс изначально сломан из-за отношения к нему собеседующих. Они не подготовлены и не знают, что нужно от кандидата, поэтому постоянно дают решать избитые задачи на скорость. Проблема в том, что человек по ту сторону экрана — зачастую вовсе не нанимающий менеджер, а рядовой разработчик, которого оторвали от дел и погнали проводить собеседование.
Мнение, что алгоритмические задачи объективно проверяют умение писать качественный код однозначно не выглядит убедительным. Например, зачем проверять тебя на знание бинарного поиска, если вместо этого можно дать задачку на неизвестную функцию с входными и выходными данными, а затем попросить написать на неё тесты? Но для этого нужно будет самому придумать условие и составные части ТЗ — а задачи c LeetCode уже написаны. Их нужно только взять, кинуть в кандидата, и вы прекрасны.
Лень в найме и желание вместо качественного задания надёргать задач с литкода вносит перекос во всю систему. Некачественный хайринг ведёт к набору не самого подходящего персонала, а тот в свою очередь снижает качество продукта — проигрывают все. Так год за годом вместо перезагрузки системы мы идём по пути наименьшего сопротивления. Хороших специалистов нанять всё сложнее? Сделаем алгоритмические задачи ещё труднее, дадим на них меньше времени и будем щекотать кандидата раз в 5 минут, чтобы ему точно не было легко. Экономия на интервью с нежеланием отбросить алгоритмическое болото и пересмотреть процесс приёма на работу приводит к тому, что продукты вроде Go Daddy становятся дрянью — зато какие алгоритмы!
Куда лучше инерции алгоритмических собесов выглядит практика «бери ноутбук и приходи на один день в офис поработать». Она позволяет работодателю и сотруднику лучше узнать друг друга, дать новичку пару небольших заданий и составить о нём полноценное впечатление. Но позволить себе такую практику могут только небольшие компании — у крупных игроков всё сразу превратится в логистический ад.
Другая альтернатива алгоритмам, которая приходит на ум — дать новичку задачу из текущего спринта. Понятно, что никто не будет предоставлять все доступы и пускать в проект незнакомого человека. Но всегда есть маленькие баги, которые затрагивают одну-единственную функцию или небольшой кусок кода — из них получится отличное тестовое. В таком случае сохраняется возможность, что кандидат скопирует решение или попросит кого-то решить для себя. Но здесь и должен включаться собеседующий — задай вопросы по проделанной работе и обсуди, почему кандидат решил задачу именно так. 
Когда ты занимаешься наймом и хочешь проверить новый процесс интервью на практике, лучшую обратную связь дают текущие сотрудники компании. Попроси пару коллег протестировать собеседование, и если они его не пройдут — скорее всего, процесс устроен неэффективно. 
Если хочешь перестать сопротивляться алгоритмам и решить с ними разобраться для прохождения собеседований, попробуй несколько полезных техник:
• Начни решать задачи на LeetCode от самых простых к более сложным
• Веди дневник с заметки о том, что выучил и что пока непонятно
• Набравшись сил, не иди на собеседование в компанию мечты, а потренируйся на мок-интервью или на собесах с менее важными для тебя компаниями
• Пользуйся помидорками или любой другой техникой тайм-менеджмента, чтобы не закапываться в сложные задачи и сутками от них не сходить с ума
Пользой усердного решения задач будет то, что ты выработаешь дисциплину и научишься легче решать запутанные проблемы, которые требуют направлять внимание в русло математики и логики.
Привычно в первую очередь об алгоритмах говорят в контексте FAANG. Помимо культового статуса и высоких зарплат в компаниях-мамонтах есть много интересного.  Там можно познакомиться с процессами, исследованиями, кучей талантливых людей и культурой гигантской корпоративной машины. Но как обычно все плюсы уравновешиваются минусами, которые разрушают ванильный образ компании-мечты. Часто вместо работы людям в корпорациях приходится заниматься политикой и странным нетворкингом, качая личный бренд, сама компания становится ожидаемо неповоротливой из-за размеров, а процессы со временем становятся всё более ржавыми. Главное — не думать, что разработчики в FAANG принципиально отличаются от своих коллег в других компаниях и решают невероятные задачи. У всех одна рутина, которая занимает большую часть времени, и ни один продукт не строится без неё.
Не нужно относиться к алгоритмам как к высшему знанию, которое по ценности перекрывает всё остальное. Они полезны, но не универсальны, и вполне вероятно, что даже не понадобятся тебе на будущей работе. С другой стороны, каждый дополнительный навык в твоей копилке расширяет воронку доступных вакансий и делает поиск работы легче. В таком случае знание алгоритмов станет дополнительным плюсом и добавит чуть больше компаний в твой список потенциальных работодателей.
P.S. От Антона: я пробовал дрочить алгоритмы один раз, когда ты был в Кремниевой долине. Раз уж приехал, хотел быстренько на собеседования в FAANG походить. Из Фейсбука мне ответили "сорян, нанимаем от 5 лет", после этого LeetCode был мною на веки закрыт. Мое краткое мнение: если ты хочешь в FAANG обращайся в компании, которые занимаются подготовкой к собеседованиям туда, и дрочи алгосы. Если нет, выучи самую частую базу типа бинарного поиска, а на остальное смело забивай хуй. Ты найдешь работу без них.
Смотреть в Телеграме (Чат ОМ: Волки)


Related Creators