{"id":14271,"url":"\/distributions\/14271\/click?bit=1&hash=51917511656265921c5b13ff3eb9d4e048e0aaeb67fc3977400bb43652cdbd32","title":"\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043d\u0430\u0442\u0438\u0432\u043e\u043a \u0438 \u0441\u043f\u0435\u0446\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0432 vc.ru \u2014 \u043d\u0430\u0439\u0434\u0438\u0441\u044c!","buttonText":"","imageUuid":""}

Найм программистов. Советы от программиста

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

Мои впечатления? Я в печали... Почти все материалы, на мой взгляд, напоминают «вредные советы».

В особенности «порадовала» последняя прочитанная статья: «25 классических вопросов, которые HR-ы задают программистам на собеседованиях» ( ссылка ), после прочтения которой и возникло желание написать данный материал.

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

Итак...

Первая встреча, собеседование без тех специалиста

HR-ы, не обманывайте себя. Вы никогда не поймёте на сколько хорош программист

Разве что только когда сможете воткнуть электроды ему в ухо и запустить end-to-end теститрование. Но пока таких технологий нет, всё что Вы можете оценить — это адекватность и, хотя бы отчасти, мотивацию человека сидящего перед Вами.

И поверьте, этого достаточно.

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

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

Что ещё можно спросить на первом этапе? Зависит от специфики вакансии.

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

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

Собранной на первом этапе информации хватит чтобы отсеять 80% - 90% кандидатов.

Часть вторая. Собеседование с тех специалистом

НЕ НАДО СПРАШИВАТЬ ТЕОРИЮ!

Пожалуйста, великие гуру найма и технари, любящие спрашивать теорию, объясните мне в комментариях в чем смысл Ваших вопросов?

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

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

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

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

Что же, по моему, нужно спрашивать у кандидата?

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

По тому, как человек рассказывает, будет понятно:

  1. Реально ли он разбирается в вопросе или просто придумал эти пункты для набивания себе цены.
  2. На сколько его опыт и знания подходят для текущей вакансии.
  3. Сможет ли он справиться с будущей работой.
  4. Сможет ли он научиться, если не имеет подобного опыта.

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

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

Для дискуссий приглашаю в комментарии.

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

0
453 комментария
Написать комментарий...

Комментарий удален модератором

Развернуть ветку
Степан И.

Мудаком будет уже априори из-за написания велосипеда.

Ответить
Развернуть ветку

Комментарий удален модератором

Развернуть ветку
Степан И.

Golang используют активно в гугле. Сомневаюсь что они пишут что-то отличное от
https://golang.org/pkg/sort/

Ответить
Развернуть ветку

Комментарий удален модератором

Развернуть ветку
DEVVEB Constantine
Автор

Если бы у гугла всё падало из-за криворукости отдельного кодера, то его бы уже давно не существовало.
Есть тесты от юнит до end-toend, есть DevOps, есть CI/CD, dev и test сервера, есть всякие докера с кубернетсами. Там при всём желании трудно будет всё положить разом.

Ответить
Развернуть ветку
Иван Горовой

откуда такая инфа?

Ответить
Развернуть ветку
Bulat Ziganshin

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

Ответить
Развернуть ветку
Alex Bonel

Невероятно, правда? Особенно при том, что и сам язык и библиотечную реализацию сделал разработчик из Гугла.

Ответить
Развернуть ветку
Иван Горовой

а вы бы такой на собесодовании - ИЗИ! - sort($array);

Ответить
Развернуть ветку
Степан И.

Ну как минимум std::sort.
Для остальных алгоритмов сортировки есть 100500 библиотек покрытых тестами и проверенных на продах.
Это если речь о сортировке идет.

Ответить
Развернуть ветку
Иван Горовой

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

Ответить
Развернуть ветку
Степан И.

Достаточно на собеседовании спросить про отличия и преимущества известных соискателю методов сортировки.

Ответить
Развернуть ветку
Make Luv

Как вы заебали с этой сортировкой. Ни разу за 5 лет разработки сначала под мобайл, потом бэкенд мне не потребовалась никакая сортировка, кроме стандартной дотнетовской linq. Ну знаю я, что есть пузырьковая, быстрая, вставкой и ещё какие-то, но хули толку от этого? Важнее для современной разработки знать лучшие практики типа DI, mvc, mvvm и т.п., чем всю эту шелуху, которая при надобности гуглится и изучается за 5 минут.

Ответить
Развернуть ветку
Nikita

Про сортировку начали писать противники теоретических вопросов. Речь изначально была про теорию в целом. Вопросы DI, MVC, MVVM это тоже теория. Например, мало кто понимает, что такое DI и приравнивает концепцию к DI container. С MVC тоже не все просто, мало кто может правильно распределить код между M, V и C, и на практике получаются толстые контроллеры или вью с логикой модели.

Ответить
Развернуть ветку
Андрій Заметалов

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

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

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

Ответить
Развернуть ветку
Nikita

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

Ответить
Развернуть ветку
Андрій Заметалов

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

Ответить
Развернуть ветку
DEVVEB Constantine
Автор

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

Ответить
Развернуть ветку
Nikita

Но ведь это не проблема вопросов про теорию в целом, а проблема выбора правильных вопросов.

Ответить
Развернуть ветку
DEVVEB Constantine
Автор

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

Ответить
Развернуть ветку
Nikita
портал с [...] блокчейном

Это как?

Ответить
Развернуть ветку
DEVVEB Constantine
Автор

Ну например golos.io - блокчейн блог платформа.

Ответить
Развернуть ветку
Nikita

Я не знаю как это работает, но если там нет пиров, то и блокчейн там бесполезен. А если есть, то это не портал, а просто веб-клиент.

Ответить
Развернуть ветку
DEVVEB Constantine
Автор

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

Ответить
Развернуть ветку
Nikita

Где вы тут холивар увидели? Вы привели странный пример на странное заявление.

Ответить
Развернуть ветку
pavel romanov

Странные примеры на странные заявления - это и есть черта холивара :D

Ответить
Развернуть ветку
DEVVEB Constantine
Автор
то и блокчейн там бесполезен

А они утверждают что полезен. Кто прав?

Ответить
Развернуть ветку
Nikita

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

Ответить
Развернуть ветку
DEVVEB Constantine
Автор

При чем тут Я? Я всего лишь привел пример.

Ответить
Развернуть ветку
Nikita

Ваше второе предложение отвечает на первое. Вы привели пример - вы за него отвечаете.

Ответить
Развернуть ветку
Shoo

И правильно делают.

Ответить
Развернуть ветку
DEVVEB Constantine
Автор

Олимпиадников Вам в команду =)

Ответить
Развернуть ветку
Shoo

Их тут хватает, всё хорошо.

Ответить
Развернуть ветку
Степан И.

Чтоб в ограниченных условиях выбрать наиболее эффективный алгоритм.

Ответить
Развернуть ветку
Make Luv

Ну за 5 лет в энтерпрайзе и стартапах у меня не возникло такой потребности. У вас она часто возникает? Именно когда сортировка из стандартной библиотеки не подходит.

Ответить
Развернуть ветку
Bulat Ziganshin

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

ну и выбор идёт скажем так: hashtable c hash chains - 10 обращений к памяти при lookup. вычёркиваем. кукушка - 2 обращения. уже лучше. робин гуд - одно, но реализовать гораздо сложнее. берём!!!

Ответить
Развернуть ветку
Alexey Rusanov

А можно ссылку на ваш алгоритм? Статья есть? Правда интересно.

Ответить
Развернуть ветку
Bulat Ziganshin

сжатие: https://web.archive.org/web/20170205090944/http://freearc.org:80/Research.aspx
здесь были и статьи но часть из них протухла

Рид-Соломон: https://github.com/Bulat-Ziganshin/FastECC/blob/master/ReedSolomonFFT-ru.md
это ссылка на статю

Сортировка: https://cs.stackexchange.com/questions/93563/fast-stable-almost-in-place-radix-and-merge-sorts
это тоже по сути статья

Ответить
Развернуть ветку
Bulat Ziganshin

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

Ответить
Развернуть ветку
Nikita

А это не вопрос про теорию?

Ответить
Развернуть ветку
Степан И.

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

Ответить
Развернуть ветку
Nikita

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

Ответить
Развернуть ветку
Валерий Позднев

А вдруг нет? Меня вот на быстрый тест попросили сделать вроде сортировки и выдачи неповторяющихся символов, я за 5 минут написал .distinct()+.sort(), и собеседующий возрадовался:"сколько мне тут циклов лепили, сколько строк бесполезного кода писали!". Не угадаешь.

Ответить
Развернуть ветку
Bulat Ziganshin

есть такая порфессия - писать эти алгоритмы. не всем дано быть кодерами )))

Ответить
Развернуть ветку
450 комментариев
Раскрывать всегда