Эта тема многократно поднимается в сообществах разработчиков, есть те кто поддерживает данный вид собеседований и те кто против. Вот и я, рискуя быть раскритикован сообществом, решил высказаться :)

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

Объективно, где мы используем в работе алгоритмы?

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

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

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

Аналогичная ситуация повторилась и дальше, только кандидат кликал мышкой.

Наверняка Вы скажите, что нужно задавать нестандартные вопросы или просить примеры из практики по проекту - это верно в случае, если подбираем middle и выше, а если нужен junior+ или middle-?

На мой взгляд польза от простых алгоритмических задач - кандидат может показать свое мышление и простейшее отличие и необходимость использования в работе HashMap и ArrayList.

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

Для себя я выделил плюсы и минусы умения решать алгоритмические задачи:

Плюсы:

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

  2. Объективная оценка: В отличие от некоторых других видов собеседований, где оценка кандидата может быть субъективной, алгоритмические собеседования обычно предоставляют более объективные критерии оценки. Результаты основаны на том, насколько хорошо кандидат решает задачи, а не на личных предпочтениях интервьюера.

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

Минусы:

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

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

  3. Ограничивает разнообразие кандидатов: Некоторые талантливые кандидаты, которые могли бы быть отличными разработчиками, могут отсеяться из-за недостаточного опыта в решении алгоритмических задач или низкой скорости мышления.

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

Комментарии (115)


  1. petropavel
    08.04.2024 06:53
    +27

    То есть плюсы алгоритмического собеседования в том, что кандидат сразу слился? Так можно начинать разговор с фразы "спасибо, вы нам не подходите" — будут сливаться ещё быстрее.


  1. konst90
    08.04.2024 06:53
    +27

    Дав простейшую задачку с LeetCode на работу с массивом кандидат мгновенно "сдулся"

    Проезжая мимо станции, у меня слетела шляпа


  1. Timyrlan
    08.04.2024 06:53

    Спасибо за статью, попробую покритиковать)

    1. Ваше решение - это ответ на конкретный кейс, когда соискатель накидал шпаргалок. Т. Е. вы предлагаете целое собеседование дополнительное ради решения только одной конкретной проблемы. В разработке это называется костыль)

    2. Я пришёл к мысли от необходимости алгоритмического собеседования, когда раз за разом в команде сталкивался с тем, что люди не думают об алгоритмической сложности своего кода. Например, человек (очень неглупый) берёт массив пользователей из (10к) и для каждой записи делает отдельный запрос к БД. И таких проходов по массиву пользователей - N в секунду. БД ложилась под нагрузкой, хотя тяжёлых запросов не было. И таких кейсов много.

    3. Если бы я проводил алгоритмические собеседования, не нанял бы человека (см выше). А этот человек реально тащит.

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


    1. friend001002
      08.04.2024 06:53
      +8

      "Если бы я проводил алгоритмические собеседования, не нанял бы человека (см выше). А этот человек реально тащит."

      Это как? Если он делает без надобности столько запросов к БД, то как он может тащить? А если он тащит, то как он может без надобности делать столько запросов к БД? Если имелось ввиду, что он тащит в каких-то других аспектах, тогда ладно.


      1. Timyrlan
        08.04.2024 06:53

        перформит, решает наиболее сложные задачи, помогает другим


    1. michael_v89
      08.04.2024 06:53
      +5

      Например, человек берёт массив пользователей из (10к) и для каждой записи делает отдельный запрос к БД.

      К тому, что называют знанием алгоритмов, это не имеет никакого отношения.


      1. mayorovp
        08.04.2024 06:53
        +1

        Но сильно коррелирует. Если, конечно же, программист алгоритмы умеет составлять, а не просто вызубрил.


        1. michael_v89
          08.04.2024 06:53

          Ну судя по тому, что обычно говорят, как раз наоборот, алгоритмы он выучил, а о таких вещах не задумывается. Сложность цикла O(N) в обоих случаях. А не делать ресурсоемкие операции в цикле нас учили еще в университете без всякой связи с алгоритмами.


          1. mayorovp
            08.04.2024 06:53

            Сложность сложностью, но писать алгоритм и не задумываться о стоимости каждой операции очень странно.


          1. Sulerad
            08.04.2024 06:53

            Ну там O(N) по операциям с памятью как ни крути и сверху либо O(1), либо O(N) по запросам к БД. Тут сразу ясно что лучше =)

            Как-то в университете была лаба, где как раз сравнивались алгоритмы сортировки на предмет количества сравнений/свопов/памяти и приходили к интересным выводам (если надо посортить книги человеку руками, то внезапно каждый своп оказывается очень дорогим)


    1. wl2776
      08.04.2024 06:53
      +1

      Один и тот же человек из раза в раз повторяет одну и ту же ошибку? Или это разные люди? Если один и тот же, то откуда характеристика "очень неглупый"?

      А пробовали над проблемой работать? Например, лекцию прочесть, порешать олимпиадные задачки?


      1. Timyrlan
        08.04.2024 06:53

        Нет, не один и тот же) Каждому человеку достаточно один раз дать линейкой по рукам. Но на проекте у меня 8 бекеров, и если каждый сделает каждую ошибку... привет декартово произведение

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


        1. wl2776
          08.04.2024 06:53

          Людям свойственно ошибаться, а команду надо развивать (привет, Кэп!). Это Ваша обязанность как тимлида - развивать своих людей и исправлять их ошибки.

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


  1. serjeant
    08.04.2024 06:53
    +14

    А почему вы не смотрите в сторону задач по разбору и поиску ошибок в коде? Это же ближе к практике и тому чем человеку придется на работе за ниматься.


    1. Mrchoozy
      08.04.2024 06:53

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

      П.с. узнал тебя по аватарке.


  1. maxzh83
    08.04.2024 06:53
    +2

     как правило разработчики используют стандартные или дополнительные библиотеки, которые закрывают подобные потребности

    И правильно делают. За редким исключением, это лучший вариант.

    я услышал аккуратный шелест листочков

    Вместо задачек с LeetCode можно просто спросить в контексте того, чем человек занимался до этого и порассуждать о чем-то. Типа писал запросы к БД, можно спросить как можно было ускорить и т.д. Человеку в стрессовой ситуации (а собеседование это почти всегда стресс) на знакомую тему рассуждать заметно проще.


    1. AndreySitaev
      08.04.2024 06:53
      +3

      В среде соискателей под овечей шкурой простоватых мидлов прячется стая волков-вкатывальщиков. Их конек - выдуманные / подслушанные и зазубренные процессы и кейсы из их "опыта работы". В тч по методологии STAR (Situation - ошибка 504, ..., Resolution - оптимизировал запрос).


      1. maxzh83
        08.04.2024 06:53

        Таким ребятам ничего не стоит запомнить пару десятков задач с leetCode.

        Их конек - выдуманные / подслушанные и зазубренные процессы и кейсы

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


        1. AndreySitaev
          08.04.2024 06:53
          +2

          Таким ребятам ничего не стоит запомнить пару десятков задач с leetCode.

          Ничего, что на сайте 3108 задач?
          Несмотря на то, что многие (далеко не все) задачи основаны на ограниченном подмножестве алгоритмов (типа "два указателя"), нужен ВЫДАЮЩИЙСЯ талант к абстракции и алгоритмизации, чтобы "запомнить пару десятков задач" с leetCode, и потом решить одну / две задачи "Medium" из пула в 2000+ задач.


          1. doctorw
            08.04.2024 06:53

            Я думаю, те кто даёт задачи с leetcode, выбирают их не случайным образом, а ориентируется на какие-то критерии, вроде топ-N задач на тему X. Вызубрить первые M <= N решений задач по сильно ограниченному набору тем, существенно проще, чем вызубрить всё.


            1. AndreySitaev
              08.04.2024 06:53
              +1

              Я с вами категорически не согласен.

              1. на сайте есть фильтры + кнопочка Pick One - это для супер-ленивых собеседующих. Как ни крути, выборка будет из нескольких сотен задач, минимум

              2. что если собеседует не вкрай обленившийся сотрудник?

              3. Вы можете "вызубрить" хотя бы 200 задач? Вы - уникум! Напомню, основная масса задач - не детский сад вида "определить, является ли строка палиндромом".


              1. Abbadosha
                08.04.2024 06:53

                Адепт алгоритмических собеседований детектед. В целом какой-нибудь вайтишник может посидеть пару месяцев потыкав в тот же leet по вечерам и уже существенно повысить вероятность прохождения собеса.

                Сделает ли его это нормальным разрабом? Не знаю.


                1. iboltaev
                  08.04.2024 06:53
                  +1

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

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


  1. Pardych
    08.04.2024 06:53
    +7

    Алгосы - такая же зубрежка как все остальное.


    1. AndreySitaev
      08.04.2024 06:53
      +2

      Нет


      1. Pardych
        08.04.2024 06:53
        +8

        Неуча ответ. Вы видимо мало учили алгосов и структур, например не учили их в институте. Они точно так же там сдавались ПО БИЛЕТАМ на которые мы писали ШПАРГАЛКИ. Ей-богу, детский сад.


        1. AndreySitaev
          08.04.2024 06:53
          +4

          Речь идет об алгособесы, а не конкретно те алгоритмы, что вам давали в ВУЗе. Фиг вы что зазубрите так, чтобы решить случайно взятую задачу с приличной вероятностью.

          Задачи не сводятся к воспроизведению "типового" алгоритма. В некоторых случаях "типового" алгоритма в чистом виде не существует - пример - DP. А задач этих - тысячи.


          1. Pardych
            08.04.2024 06:53
            +3

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


            1. AndreySitaev
              08.04.2024 06:53
              +4

              И какой мистический навык, скажите-ка мне, нужно соискателю развить чтобы сходу на собесе решить задачу из неизвестного ему раздела?

              Это решает для себя автор поста, я не комментирую ценность алго-собеса.

              типовые обходы, проблематику и область применения, чтобы хотя бы знать в какую сторону копать? Что это как не зубрежка

              Это не "зубрежка". Зубрежка - это запомнить пять параграфов текста из учебника истории, например. Банально, просмотром и "заучиванием" - хотя бы и 1000 - решений задач подобного рода необходимый навык не получить. Решать, в конечном итоге, придется самостоятельно.

              А вот, скажем, решить 10 задач из учебника математики - это не "зубрежка". Это именно что творческий поиск решения, основанный на знании ряда подходов, продемонстрированных на примерах.

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


              1. Pardych
                08.04.2024 06:53
                +2

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

                У вас походу чисто терминологическая претензия к "зубрежке". Она по-вашему не сопровождается разбором теории и практическими занятиями. Но это далеко не так. Вы изучаете раздел с алгоритмами на тех же графах или, я не знаю там, вычислительные методы решения системы дифференциальных уравнений. Читаете теорию, решаете задачи. Со временем из памяти без применения оно выветривается и вы идете и повторяете все это в более сжатом виде (потому что досканально повторять все - долго), попутно вспоминая что и зачем. И вот тут механизм аналогичен зазубриванию, не конкретных, естественно, задач, а теории раздела.

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

                То как кандидат решает подобные задачи показывает его знание самого раздела алгоритмов и структур: теории, основных подходов и проблематики.

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

                Часть навыков (оценка краевых) будет действительно наработанным общим для всех разделов. Тут кстати смешной момент. Сталкивался с тем что с ней на собесе и у собеседующего не всегда хорошо. Скажем любящие спрашивать на собесе даже такую бесхитростную вещь как RLE не всегда готовы к алгоритму не нуждающемуся в явной проверке краевых условий. Даже если им объяснили почему так. Хотя казалось бы задача максимально простая, пишется за 5 минут и благоволит тому чтобы по-быстрому все аспекты выяснить.


                1. AndreySitaev
                  08.04.2024 06:53

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

                  Я бы дополнил - и наличие способностей решать задачи, требующие умения оперировать абстракциями. Сейчас в IT пытаются вкатиться в тч те, кого иные пренебрежительно называют "гуманитариями" - вот такие кадры, вероятней всего, при всем желании собеседование по алгоритмам a-la leetCode не пройдут.

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


            1. sdramare
              08.04.2024 06:53
              +1

              Никакой не нужно развивать. Алгособесы это буквально тестирование вашего умение решать незнакомые задачи, что зависит от ваших природных качеств. Примерно в той же плоскости что тест IQ.


              1. Pardych
                08.04.2024 06:53

                Интересное мнение. Но нет, ни IQ ни алгосы - не черепомерка, а задачи на приобретаемые навыки. От природы вы ни читать, ни писать, ни говорить не умели.


                1. sdramare
                  08.04.2024 06:53
                  +1

                  Причем тут писать и читать? Какая еще "черепомерка"? Почитайте что такое G-Factor, что такое fluid intelligence и чем он отличается от crystallized intelligence и заодно что такое шкала бине и как из нее был разработан тест IQ. Почитайте хоть что-нибудь по данной теме и тогда вы сами поймете что показывает умение решать незнакомые алгоритмические задачи и почему данный вид тестов активно используется в процесса отбора в крупных ΙΤ компаниях.


                  1. Pardych
                    08.04.2024 06:53

                    > что показывает умение решать незнакомые алгоритмические задачи

                    то что они вам незнакомы

                    в крупные компании таки ищутся те кому они знакомы

                    а IQ-тест и вся вышеперечисленная лабуда себя скомпрометировали задолго до конца прошлого века


                    1. sdramare
                      08.04.2024 06:53

                      а IQ-тест и вся вышеперечисленная лабуда себя скомпрометировали задолго до конца прошлого века

                      Шариков.jpeg


                      1. Pardych
                        08.04.2024 06:53

                        "Щас неизвестную алгоритмическую задачу без подготовки решу, в гугол возьмут, и миллион денег дадут" - вот Шариков.жпг


                      1. sdramare
                        08.04.2024 06:53

                        на хабре буквально был пост от сотрудника гугла, который объясняет зачем они дают алгоритмы на собеседовании, почитайте - https://habr.com/ru/articles/779512/


                      1. Pardych
                        08.04.2024 06:53

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

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


              1. JekaMas
                08.04.2024 06:53

                Почему бы тогда не дать задачу на органический синтез?


                1. sdramare
                  08.04.2024 06:53
                  +2

                  Потому что задача на органический синтез проверяет ваш crystallized intelligence, насколько хорошо вы можете запомнить и повторить информацию. А алгоритмическая задача проверяет ваш fluid intelligence, насколько вы хорошо можете найти решение незнакомой для вас задачи, используя логику, умение находить паттерны и скорость мышления. Заучивание алгоритмов от вас не требуется, более того, если собеседующий видит что вы данную задачу уже знаете как решать("это я помню, тут надо в стек все сложить"), то он сменит задание или добавит условия, чтобы задача была для вас не знакомой.


                  1. Tony-Sol
                    08.04.2024 06:53
                    +1

                    Кмк вы оба правы, просто немного о разном говорите: кажется fluid и crystallized не существуют в отрыве друг от друга. Так, например чтобы успешно решать алгозадачи на собесах, нужен и fluid, чтобы понять на что задача похожа из того, что уже знаешь и собственно сам багаж знаний и умений - crystallized, который как раз зазубривается.

                    Т.е. решаем (задрачиваем) условные 100500 зачад на списки/массивы/работу с указателями с литкода - тем самым и зазубриваем варианты решения = формируем crystallized intelligence, и научаемся сходу определять «а о чем конкретно эта задача» = формируем fluid intelligence.


              1. michael_v89
                08.04.2024 06:53

                Mergesort появилась в 1945 году, Quicksort в 1960, а Timsort в 2002. До Timsort за 42 года никто не догадался, почему вдруг обычный человек, который не знаком с этой сортировкой, должен сделать это за время собеседования?


                1. sdramare
                  08.04.2024 06:53
                  +2

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


                  1. michael_v89
                    08.04.2024 06:53

                    Ну вы сказали "умение решать", то есть не решил значит не умеет. В задачах на алгоритмы искать обычно нечего, либо догадался, либо нет. Даже если разбить Timsort на 10 шагов, то на 1 шаг можно ожидать примерно 4.2 года, это сильно больше времени на собеседование.

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


                    1. sdramare
                      08.04.2024 06:53
                      +1

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


                      1. michael_v89
                        08.04.2024 06:53

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


                      1. sdramare
                        08.04.2024 06:53
                        +1

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


                      1. ptr128
                        08.04.2024 06:53

                        одному человеку чтобы научиться базовой игре на гитаре 3 аккордами нужен день, а другом неделя. И не смотря на одинаковый конечный результат, мы можем сделать вывод что у первому изначально лучше музыкальные способности.

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

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


                      1. michael_v89
                        08.04.2024 06:53

                        мы можем сделать вывод что у первому изначально лучше музыкальные способности

                        Ну так о том и речь, что не можем. Может быть так, что хотя бы 1-2 аккорда он знал заранее, а другой человек не знал.


                  1. AndreySitaev
                    08.04.2024 06:53

                    Я соглашусь с @michael_v89:

                    • IMHO, задачи leetCode хорошо поддадутся уму чуть выше среднего, перерешавшего несколько сотен подобных задач

                    • либо - выдающемуся интеллекту, специально подобные задачи не решавшему.

                    Вот пример: https://leetcode.com/problems/maximum-gap/description/
                    Задача уровня Medium. Таких за час надо решить две.

                    Положим, вы не слышали про алгоритм Pigeonhole sort. Решили бы вы такую задачу?


                    1. sdramare
                      08.04.2024 06:53

                      Решили бы вы такую задачу?

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


                      1. AndreySitaev
                        08.04.2024 06:53

                        Pigeonhole sort - то же, что и блочная сортировка. Думаю, разница между этими алгоритмами - в контексте задачи - не существенна. В любом случае, если соискателю незнаком ни один из этих алгоритмов (pigeonhole / radix), маловероятно, что он решит задачу.

                        P.S. В моем университетском курсе ни одного из упомянутых алгоритмов не было.


                      1. sdramare
                        08.04.2024 06:53

                        Я соглашусь что конкретно эта задача не самая лучшая. Так же как например поиск цикла в связанном списке https://leetcode.com/problems/linked-list-cycle/ Мне порой сложно оценивать, потому что у меня в универе все это было еще на первых курсах, но наличие нескольких не самых хороших задач не опровергают сам метод, это остается на совести собеседующего.


                1. wataru
                  08.04.2024 06:53

                  И не должен. Продвинутые алгоритмы никто и не спрашивает. И сортировки писать обычно не просят. Благо вы знаете, что вот есть сортировка, работающая за O(n log n) и что она в вашем языке, допустим std::sort называется.

                  Более того, и оптимизацию по константе никто не ждет. Придумали вы какой-то алгоритм за O(n log n), никто не будет ждать от вас какие-нибудь эвристики, укоряющие его на 20% в половине случаев.


                  1. michael_v89
                    08.04.2024 06:53

                    Было утверждение "тестирование вашего умения решать незнакомые задачи". Это означает, что человек не знает алгоритм, но может догадаться, как его написать. Неважно, весь или какую-то часть. Если не написал, значит не решил. Это единственное, чем задачи на алгоритмы отличаются от обычного программирования, которое тоже показывает умение решать незнакомые задачи. Любая программа решает какую-то задачу, и можно найти незнакомые для конкретного человека без привлечения алгоритмической сложности.


                    1. wataru
                      08.04.2024 06:53

                      Это означает, что человек не знает алгоритм, но может догадаться, как его написать.

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


                      1. michael_v89
                        08.04.2024 06:53

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


                      1. wataru
                        08.04.2024 06:53

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

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

                        Никто ни на каких интервью не ожидает, что кандидат придумает новый алгоритм. Ждут декомпозицию задачи, построение модели, выбор применимых алгоритмов и их применение.


                      1. michael_v89
                        08.04.2024 06:53

                        выбор применимых алгоритмов

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


                      1. wataru
                        08.04.2024 06:53

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

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

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

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


                      1. michael_v89
                        08.04.2024 06:53

                        Мало знать список алгоритмов. Надо их понимать и уметь строить модель задачи.

                        Я именно об этом и говорю. Мало знать список библиотек, надо их понимать и уметь строить модель задачи. Мало знать список фреймворков, надо их понимать и уметь строить модель задачи. Никаких отличий.
                        А изначальное утверждение указывало на отличие алгоритмов от этих вариантов, и было явное указание на незнакомство. То, о чем вы говорите, может быть и верно, но к изначальному утверждению не относится.

                        Вы же программиста код писать ищите - так что надо обязательно убедится, что кандидат может свои мысли в код перевести

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

                        И к тому же более менее релевантный, ибо иногда понадобятся

                        "Более менее релевантный" это когда "более менее часто", а не иногда. Если "иногда", то и способ "иногда релевантный". Что у вас более менее часто встречается, то и надо проверять.

                        это самый простой, формализуемый, помехоустойчивый и масштабируемый способ

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


                      1. wataru
                        08.04.2024 06:53

                        Мало знать список фреймворков, надо их понимать и уметь строить модель задачи

                        И где там модель задачи? Что за задача вообще?

                        Я именно об этом и говорю, для этого подойдет любой код, а не только алгоритмы.

                        Да, вот только какой? FizzBuzz? Задачу с прода не предлагайте - как только вы начнете ее абстрагировать, чтобы не объяснять кандидату весь контекст целый час, то у вас получится easy с литкода.

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

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


                      1. michael_v89
                        08.04.2024 06:53

                        И где там модель задачи? Что за задача вообще?

                        Там же, где и в применении алгоритмов для решения задачи.
                        Задача аналогична задаче на применение алгоритмов для ее решения. Только тут будет применение фреймворков и библиотек.

                        Да, вот только какой?

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

                        Первое принципиально от алгоритмических задачек ничем не отличается

                        Отличается тем, что инструменты для решения задачи кандидату знакомы, и ему не надо изобретать новый инструмент за 10 минут. Я несколько раз уже про это написал.

                        второе очень сложно сочинять, проверять и легко считерить

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


                  1. AndreySitaev
                    08.04.2024 06:53

                    Продвинутые алгоритмы никто и не спрашивает. И сортировки писать обычно не просят

                    А вы - ну или какой-нибудь мозговитый кандидат - не потративший год на дриллинг подобных задач - решили бы эту задачу:

                    https://leetcode.com/problems/kth-largest-element-in-an-array/description/

                    не зная алгоритма Fast Select?


                    1. friend001002
                      08.04.2024 06:53

                      А зачем её решать? Если я вижу, что кандидат думает в правильном направлении и может со временем написать нечто правильное и не слишком вычислительно затратное, то я и не буду требовать полного решения задачи.


                    1. wataru
                      08.04.2024 06:53

                      Не за линию, конечно, а за O(n log k) кучей запросто. Когда-то давно, пока эта задача не стала баянистой, я ее даже пару раз в гугле спрашивал. И любое решение быстрее "отсортировать, взять k-ый" принималось.


    1. wataru
      08.04.2024 06:53
      +3

      Тоже несогласен. Зубрежка, это если вы кокретные задачи выучили, с кодами решения и ключевыми словами в объяснении. Если вы выучили 5-6 подходов, то это не зубрежка. Это понимание темы. Ибо вы абстрагируете подходы от задач. Вы научиваитесь комбинировать эти подходы, применять их части там где они нужны. Без этих навыков, простой зубрежкой вы не сможете лишь с очень маленькой вероятность решить задчу почти точно идентичную одной из нескольких выученных.


      1. Pardych
        08.04.2024 06:53
        +1

        А когда у вас 56 разделов и на каждый 5-6 подходов то это уже опять зубрежка. Вот как-то так. Потому что вы не сможете это держать в голове вечно, вам потребуется для этого какой-то конспект, который вы будете время от времени механически повторять.


        1. wataru
          08.04.2024 06:53
          +1

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

          Примечание

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

          5-6 алгоритмов и столько же структур данных надо понять и вот вы покрыли 95% всех задач с собеседований.


          1. Pardych
            08.04.2024 06:53
            +1

            Ну окей. Сдаюсь. Термин выбран неудачно, а с 56 я пытаюсь реабилитирвоаться за неудачно выбранный термин. Сам всегда говорил что сижу зубрю, но это было именно попыткой разобраться. Повторять, разбираясь заново в том что когда-то знал, но забыл, для меня такая же унылая и бессмысленная затея как зубрежка. Но это субъективное моё, так что возражения по поводу зубрежки принимаю.

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


  1. starik-2005
    08.04.2024 06:53
    +1

    В работе больше нужны навыки того самого листания/кликания, чтобы найти нужный ответ. Умеешь находить ответ - уже джун, ну, конечно, если ответом способен воспользоваться. Когда ты находишь достаточное количество ответов, то через какое-то время начинаешь отвечать сам. Вот тогда становишься мидлом, ну и учишься отличать плохой ответ от хорошего. А еще через какое-то время начинаешь отличать мидлов от джунов по первым пяти минутам болтовни за житие. Вот тогда ты уже синьор-помидор. А если ты синьор уже давно, то становишься тимлидом, если ты, конечно, хоть немного способенвыйти из своих интровертных границ.

    А алгоритмы - да, это когда мидл набирает джунов. Что он вообще может им предложить-то, чтобы себя проявить?


    1. AndreySitaev
      08.04.2024 06:53

      Свести навыки и квалификации разработчика к типовым ответам на типовые вопросы - это несерьезно.

      Что он вообще может им предложить-то, чтобы себя проявить?

      1. тест на умение реализовать принципы ООП на практике (лайвкодинг)

      2. аналогичный тест на знание и умение применить архитектурные паттерны

      3. опрос на знание технологий, содержащий наводящие вопросы

      4. упомянутый выше поиск ошибок и неоптимальностей в коде

      Само собой, с поправкой на уровень собеседование - п2, например, можно и пропустить для джуна.


  1. Vladimirsencov
    08.04.2024 06:53
    +2

    Можно банальным лайвкодингом заменить. Чтобы задача была близкая к тому чем человек обычно занимается.


  1. akakoychenko
    08.04.2024 06:53
    +4

    Не удивлён, что пост в минусе, - не любят тут такое. Хотя, лично я, прособеседовав >100 инженеров (причём, большинство из них - синиоров), заметил очень чёткую корреляцию - все инженеры, кто круто себя проявил на алгоритмической части, показывали очень высокую эффективность на реальных задачах в последствии (да, с некоторыми звездами были вопросы с софт скиллами, когда человек мог, но не хотел, но это уже выходит за рамки треда). Причём, задачи у меня были не с литкода, и не на знание конкретных алгоритмов.

    Hidden text

    Топ 2 задача в списке моих любимых:

    Предложите реализацию структуры, в которой будет хранить данные текстовый редактор для больших файлов. Требования: поддержка файлов на десятки ГБ при условии, что на машине хватает RAM для хранения как самого файла, так и вспомогательных структур; быстрые операции чтения, вставки, удаления строки по порядковому номеру строки от начала файла (зачёт по самой медленной из этих 3х).

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


    1. michael_v89
      08.04.2024 06:53
      +1

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

      Это не то, что обычно подразумевается под знанием алгоритмов. Задачи на алгоритмы другие, и спор как раз о том, нужны ли они в таком виде.


      1. akakoychenko
        08.04.2024 06:53

        А вот я тут с вами не то, чтобы согласен. Правильный ответ подразумевает или знание конкретной очень редкой структуры (которую, про-литкодеры знают, но "нормальные" люди не слышали о ней никогда), или переработку идеи бинарного дерева во время собеседования с созданием алгоритма с 0. Стандартные структуры именно эту задачу решать не умеют. Ну, или, если совсем туго в эту сторону, то хотя-бы инженерное, а не алгоритмическое решение с партиционированием и управлением этим хозяйством.


        1. michael_v89
          08.04.2024 06:53

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

          Если весь файл помещается в RAM, я бы сделал список указателей на строки, со сдвигом следующих указателей при вставке в середину (не linked list). Но в файле может быть одна большая строка на десятки гигабайт, поэтому можно сделать второй уровень разбивки обычных строк на псевдо-строки например по 100 Кб. 2 уровня соответствуют 2 координатам скроллинга. Конечно в реальной задаче я бы подумал пару часов, попробовал реализовать, и возможно что-нибудь поменял. Для практических целей этого будет достаточно, поэтому с моей точки зрения это задача не на алгоритмы, ее можно сделать, не зная редких структур.


          1. akakoychenko
            08.04.2024 06:53
            +1

            Если б мы были на собеседовании, то я бы сказал примерно следующее:

            Сдвиг указателей -> O(N).

            O(N) это очень плохо. Если это 10 гигабайт коротеньких строк, то при добавлении строк в начало будут ощутимые тормоза, и пользоваться будет неприятно. Давайте подумаем над реализацией, при которой будет оценка лучше O(N) для всех 3 операций. Ну и да, для того, чтобы ограничить условия задачи, считаем, что все строки по длине до 2048 символов.

            А вот, после этого, я бы уже посмотрел, как Вы думаете, какие перебираете идеи, как быстро отсекаете очевидно плохие


            1. michael_v89
              08.04.2024 06:53
              +1

              Это то же самое, что одна длинная строка, только по другому измерению. Добавляем еще 1 уровень для вертикального направления, разбиваем по N указателей. По крайней мере это то, с чего я бы попробовал начать реализацию.

              Но дело не в этом, а в том, что без предварительного знания такие задачи за 20 минут не решаются, а с предварительным это обычная зубрежка, которая ничего не показывает. На практике потратить 2 дня на изучение для нестандартной задачи считается нормально.


              1. akakoychenko
                08.04.2024 06:53
                +1

                На практике лет собеседований сначала senior C#, затем senior Python, за минут 10 совместного обсуждения хорошие кандидаты выходили на хорошее алгоритмическое решение O(log N), либо на инженерное решение с партициями, у которого сложно задать сложность формулой, но задачу комфортного пользования оно решает тоже. Понятно, что то, что мы обсудили на пальцах, это не прод решение. Там не было корнер кейсов с намеренно ломающими алгоритм сценариями использования


                1. michael_v89
                  08.04.2024 06:53
                  +1

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

                  за минут 10 совместного обсуждения хорошие кандидаты выходили

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


  1. temabed
    08.04.2024 06:53

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

    Кстати, можете подсказать, как мне определить свой уровень? Мой стэк: Python, ООП, GIT, Linux, Docker, SQL, Flask, многопроцессорное и многопоточное программирование, автотесты (unittests). Т.е. могу написать приложение на Flask, поработать с процессами и потоками, прикрутить БД, покрыть тестами, и задеплоить всё это на сервак как с докером, так и без. У меня еще куча тем на изучении, прежде чем осмелюсь на первый собес. Но всё же.

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


  1. longclaps
    08.04.2024 06:53

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

    Вы сами-то какого полёта птица, с реализацией АВЛ-дерева справитесь без привлечения сторонних библиотек? А с привлечением? (шучу, конечно).

    Нет ответа. Только уха лопух на КДПВ.


    1. wataru
      08.04.2024 06:53

      Вы сами-то какого полёта птица, с реализацией АВЛ-дерева справитесь без привлечения сторонних библиотек? А с привлечением? (шучу, конечно).

      Может где-то и есть идиоты, которые такое спрашивают, но обычно реализацию дерева никто ни на каком собеседовании не ждет. Досаточно, что кандидат, намриер, впендюрил std::map вместо std::vector. И смог объяснить, почему. Если же есть какая-то задача, проверяющая, что кандидат сможет удержать в голове 2 указателя на левого и правого ребенка и способен осознать рекурсию, вроде знаменитой задачи о развороте дерева, то там не надо никакого балансирования, и решение - в 3 строки весьма простого кода.


      1. longclaps
        08.04.2024 06:53

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

        Что понял он - пока не известно, вы же поняли нечто совершенно своё. Так бывает.

        Во избежание дальнейших недоразумений давайте прекратим наш разговор. Как собеседник вы меня не интересуете.


  1. souls_arch
    08.04.2024 06:53

    Алгоритмические != логические и/или умственные. Я надеюсь, вы знаете в чем разница. На тех же олимпиадах по математике и информатике задачи в первую очередь НЕ Алгоритмические. И именно это подчеркивает остроту ума и умение выбраться даже из безвыходной ситуации. Более того, для этого нередко нужно мыслить АЛОГИЧЕСКИ! И только так их можно решить. Вы же набираете стадо баранов, которые не умеют ни в код ни мыслить нестандартно! Похвастались...


    1. Pardych
      08.04.2024 06:53
      +1

      Уважаемый. Программирование и вообще инженерия это не изобретение бесконечных эвристик. По большей части это сведение к "известной задаче", знаете анекдот про математика и чайник? Ну тот в котором он воду выливает из чайника потому что алгоритм заварки с чайником без воды ему уже известен. Вот оно. Но в несколько иной форме. Ну и знание инструментов. Чаще даже не само по себе знание, а знание об их существовании и сфере применения, благо никто не мешает порисечить что лучше подходит в каждом конкретном случае.

      Олимпиадные задачи по программированию равно как и по математике именно что придуманы так что решения без эвристики для них нет. Нужно вскрыть неявную закономерность, потому что для решения в лоб там просто недостаточно данных. А дальше применять подход (вот тут базовые знания нужны) характерный для этой закономерности - уже в лоб. Я в спешал олимпикс по программирования например никогда не участвовал, но в математику - был в олимпиадном кружке. В основном вся магия нестандартности сводится к тому что ты заучиваешь множество разнообразных базовых вещей чтобы видеть их там где хотя бы кончик уха от них торчит.


    1. AndreySitaev
      08.04.2024 06:53

      Алгоритмические != логические и/или умственные.

      Я бы поставил знак равенства. В таких задачах применятеся логика, там нужны умственные способности - в зависимости от сложности задач - как минимум, не ниже среднего.

      Вы же набираете стадо баранов, которые не умеют ни в код ни мыслить нестандартно!

      Очень смелое заявление. Если кандидат способен решать подобные задачи, "бараном", который не умеет мыслить "нестандартно", его не назовешь.

      Вы сами, осмелюсь спросить, смотрели на leetCode? Посмотрите пару задач навскидку: вы уверены, что их можно решить с мякиной в голове, но с большим упорством, вызубрив "десяток / другой" задачек?


    1. dididididi
      08.04.2024 06:53

      До 9 класса. А потом также зубрить разные типы Олимпиадеых задачек, с целью чтоб увидеть что-то знакомое на Олимпиаде.


  1. Shado_vi
    08.04.2024 06:53

    почему обычно используются "академические" алгоритмические задачи которые по сути проверяют насколько человек подготовился к собеседованию(зачастую способность зубрёжки/запоминания)?
    а не способности человека к разработке? а именно способности к логике и решения практических задач?

    условно, вместо того что бы искать тех кто будет реально решать ваши задачи вы(те кто так набирает) ищите тех то займёт место больше "для галочки".


    1. petropavel
      08.04.2024 06:53

      Да я не знаю, карго-культ какой-то. Когда нанимают бегуна — его просят пробежать дистанцию, а не перечислить пять способов шнуровки кроссовок. А если программиста — то сразу начинается вот это всё.


      1. Didntread
        08.04.2024 06:53
        +1

        если кандидату далее придется каждый день брать из базы, раскладывать по мапкам, потом отдавать dto, то почему бы умение раскладывать по мапкам не проверить при приеме на работу


  1. Batalmv
    08.04.2024 06:53
    +2

    Однако, все изменилось в один день) мне потребовалось подобрать пару-тройку разработчиков в команду, и проводя пятое или шестое собеседование мне попался кандидат, который идеально отвечал на все теоретические вопросы (базовые и не очень)

    Возможно у вас банально перебор с теорией. Как по мне, мучить кандидата теорией смысла мало то двум причинам:

    • есть риск отбраковать хорошего спеца, который просто забыл/не знал, но активно использует

      есть риск потратить много времени на то, что не надо в итоге

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

    Простой пример (тоже больше архитектурный, но и разраба не грех спросить). Расскажите о преимуществах микросервисов ... получаем стандартный набор штампов, после чего просим пояснить, почему условный монолит потребляет больше CPU. Тут обычно думающий человек сам идет в детали, и можно в диалоге понять глубину погружения и опыт, либо "шпора" закончилась и станет сразу понятно, то дальше википедии народ не копал. Правильного ответа на вопрос навернео нет, но вскрывается опыт и направление мысле кандидата.

    Ну или попросить порассуждать на тему синхрона и асхинхрона, а потом попросить смоделировать асинхронное на HTTP. Вполне есть риск словить ответ вроде "невозможно", после чего начинаешь думать, понимает ли человек, либо знает только теорию/живет с шорами. Хотя тут вообще поле для дейтельности огромное

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

    Из технологий с последнего опыта забавно было в очередной раз узнать, что все пишут в резюме SQL, но написать простой запрос с вложением - уже непосилюьная задача. Зачем писать и тратить иместо, если знание ограничивается select ... from ... where? На этом примере как по мне не надо копать далеко и глубоко. Найдите себе пару задач на грани "чуть дальше базы" и дайте на лайф кодинг, так чтобы можно было даже писать код в "блокноте".


    1. 1dNDN
      08.04.2024 06:53
      +3

      Зачем писать и тратить иместо, если знание ограничивается select ... from ... where?

      Чтобы фильтр по ключевым словам от HR пройти


  1. Zara6502
    08.04.2024 06:53
    +6

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

    1. Сделать самому

    2. Не получилось - искать в интернете

    3. Не получилось - спросить у коллег

    4. Не получилось - спросить у меня

    Через месяц он перестал спрашивать у меня и все вопросы решал сам.


    1. longclaps
      08.04.2024 06:53

      И что же, так 25 лет и живёте душа в душу? Прикольно.

      Ну что он у коллег перестал спрашивать как-то проконтролировать можно. А вот насчет искать в интернете - как вы ему по рукам дали?


  1. michael_v89
    08.04.2024 06:53

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

    Классический подход вообще-то подразумевает проверку практических навыков.

    это верно в случае, если подбираем middle и выше, а если нужен junior+ или middle-?

    А вы его подбираете, чтобы он вам теорию рассказывал, или практический код писал?
    Для кандидатов с маленьким опытом наоборот должно быть больше практических задач. Тестовое задание до собеседования и несколько небольших задач на собеседовании.

    однако, знание простых алгоритмов позволит раскрыть истинное знание кандидата.

    Знание простых алгоритмов позволит раскрыть только истинное знание кандидатом простых алгоритмов.


  1. gun_dose
    08.04.2024 06:53
    +2

    Ни алгоритмы, ни теоретические вопросы на собесах не нужны. Если хорошо владеешь своим стеком, всегда можно придумать несколько вопросов, где человеку надо просто порассуждать, и сразу будет видно, что он из себя представляет. А если не можешь придумать такой вопрос, значит сам ещё не дорос, чтобы проводить собеседования.


  1. bascomo
    08.04.2024 06:53

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


    1. SergejSh
      08.04.2024 06:53

      Тот кого он отшил. Был возможно очень не плохим кандидатом. Ну просто перестраховался чуть. А задачу не смог решить потому что растерялся.


  1. SergejSh
    08.04.2024 06:53
    +1

    Не смогу решить даже на собеседовании ту задачу которую решил бы в другой обстановке.


  1. 9241304
    08.04.2024 06:53

    Почему именно задачка на литкоде, а не партия в шахматишки?)


  1. ptr128
    08.04.2024 06:53
    +1

    А не эффективней ли дать код и послушать рекомендации по его оптимизации? Уж не оптимального кода в PR по разным причинам всегда хватает. Зато и решать кандидат будет именно такой тип задач, с которым он у Вас столкнется.


  1. Hivemaster
    08.04.2024 06:53

    То есть у вас были одни шаблонные вопросы, на которые можно написать шпаргалки, и вы их заменили на другие шаблонные вопросы, для которых шпаргалок нужно писать больше и листочками шуршать дольше? Замечательная идея, Уолтер, надёжная, как швейцарские часы!


  1. Chelyuk
    08.04.2024 06:53

    Собеседование - нужно проводить под позицию. Конечно интервьюверу. проще написать список стандартных вопросов и идти по ним.
    Но толку от таких собеседований мало.
    Я стараюсь учитывать все аспекты. Что реально нужно будет делать, состав команды, какие области нужно будет закрыть, бизнес домен и т.д.
    Можно получить факап по любой из этих причин. Например, сильный алгортмист, но на проекте это не нужно, от слова совсем. И девопсов выделенных нет, а он ни в кубернетс не умеет, ни с облаками не работал и терраформ не знает. Да и банально не может поставить пайплайн с юнит-тестами, сборкой и развёртыванием.
    Ну и наоборот бывает, человек всё умеет, а ему никто прав не даст, все построено и девопсов целая команда, а от него нужно только код хороший писать с глубоким погружением в архитектуру.
    Или всё классно, но человек только приложения делал, а тут embedded а он даже даташит со схемой прочитать не может.
    Или моё любимое, медицинский домен. Можно иметь кучу знаний и всё уметь, но запороть проект недооценив важность процессов. И закомитив, что-то до подписания всех необходимых бумаг.


  1. coodi
    08.04.2024 06:53

    Решение алгоритмических задач с литкода на собеседовании может лишь показать, насколько хорошо кандидат прорешал литкод. Всё на этом.


    1. iqp
      08.04.2024 06:53

      Решение алгоритмических задач с литкода на собеседовании может лишь показать, насколько хорошо кандидат прорешал литкод. Всё на этом.

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


      1. coodi
        08.04.2024 06:53

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


  1. pseudotech
    08.04.2024 06:53

    Интересно, а для какой конкретно задачи вам понадобились алгоритмисты? Что требовалось реализовать?


  1. fatalitirar
    08.04.2024 06:53

    Самая беда с алгоримическими собесами, это то, что интервьюер в какой-то момент ждет что собеседуемый знает решение с низкой O() сложностью, под конкретную задачу.


  1. FroseMan
    08.04.2024 06:53

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


  1. NihilPersonalis
    08.04.2024 06:53

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


  1. slavaRomantsov
    08.04.2024 06:53

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


  1. foxez
    08.04.2024 06:53

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

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