Цитата |
---|
Bayda пишет:
какой-то нелюбитель алгоритмов-шмалгоритмов |
Ну Bayda вынудил ты меня утомить пальцы!

Опять же,
мое личное мнение, конструктивное обсуждение приветствуется.
Вся моя писанина ниже - это мой личный протест об алгоритмах на интервью для опытных девелоперов!
Т.е. суть мысли в том, что если вы интервьюируете выпускника CS специальности - алгоритмы это единственное, что есть смысл спрашивать, но девелопера с 10 годами опыта, спрашивать алгоритмы - это имхо идиотизм!
Что есть девелопер?
Ленивых и безалаберных тоже хватает. За то, что конкретно ты описал, нужно бить девелопера палками, пока сознание не потеряет.

Простое прогугливание даст пару вариантов решения задачи. Любой алгоритм можно прогуглить и найти подходящий для твоей задачи. Это часть того, что бы быть хорошим девелопером. Значит, просто ваш чувак, был хреновый девелопер, по определению, и знание или не знание алгоритмов тут в принципе не причем. Я же сомневаюсь, что 90% девелоперов на планете могут написать свой/новый алгоритм лучше того, что уже было предложено, или знать все алгоритмы на свете. Зачем? Пусть PhD's в компьютер сайенс и математике этим занимаются - изобретают новые алгоритмы и оптимизируют старые. А мы, простые смертные, будем им с благодарностью говорить 2 раза "Ку" и использовать.
Про хардвер.
Мне как-то год назад, довелось имплементоровать гарбадж коллектор в виртуальной машине. До того момента слово "граф" ввергало меня в мелкую дрожь, но я с удовольствием разобраться как это работает и имплементировал mark & sweep алгоритм на основе BFS прохождения несвязного графа в хипе. Но, опять же, написать это на доске, под давлением интервью, за 5 минут и без ошибок - вряд ли смогу. Я уже молчу, что математика стоящая за теорией графов - вообще за приделами моего восприятия реальности. Что это говорит обо мне? Что я плохой девелопер?
Спрашивать алгоритмы на интервью - бессмысленное занятие
Хрень все это! Умение программировать задачки по программированию, в академическом компьютер саенс, так же далеки от реального софтвер девелопмента, как теоретическая физика, от любой прикладной инженерной специальности. И вовсе не факт, а за частую, совсем не факт, что щелкающий алгоритмы, как орехи, кодер может писать хоть мало мальски приличный код. Я периодически тусуюсь на хакерранке, от скуки, решаю то да сё, потом смотрю код других. Да в 80% случаев, я нахожу более элегантные алгоритмы и учусь у этих гениев. Но, осмелюсь сказать, что 50% кодеров в топе имеют код который просто не возможно читать. Как курица лапой - все в кучу и никакого стиля. Для академической компьютер саенс достаточно? Да! Для девелопмента реального софта? Нет!
Личный пример #1
Недавно, я - "низкоквалифицированный" кодер из стартапа, интервьюировал "высококвалифицированного" гуглокодера 1.0. К его большому разочарованию и круглым глазам, я спрашивал его не о бинарных деревьях и графах, а спрашивал реальные вещи, нужные в реальном мире, когда девелоперы реально разрабатывают реальный софт. Чувак не знает и не понимает элементарных вещей языка программирования, который, якобы, его основной инструмент! Он не знал элементарных вещей: - как правильно использовать const, как сделать мемори алаинмент, битовую арифметику, операции с поинтерами. Ну и нахалеру мне такой гуглокодер? Пусть дальше в гугле работает. Наверное выучил наизусть книжку по алгоритмам и так попал в гугл.
Он в конце, очень разнервничался и даже выпалил мне - почему это вы меня не спрашивали про деревья и алгоритмы? А я ему так же прямо ответил, что мне эта академическая [сработал фильтр мата] абсолютно по барабану! Мне нужен человек который
умеет программировать и не решать задачки компьютер саенс.
Личный пример #2
Был у нас в позапрошлой компании, в моей команде, один китайский сениор инженер. Хоть и сениор, но даже понимание простого связного списка для него было практически не постижимой задачей. Я, конечно, удивлялся какого хрена он вообще инженер. Но для него нашлась своя ниша. Он искал и фиксил баги в легаси коде под DOS. Работу, которую никто не хотел делать, без преувеличения чертовски хорош в этом. Реально, находил баги как бог! Но новый код, писать не мог в принципе. Ему никто и не давал. Вот, он очень органично вписался в эту модель. Я согласен, что вероятно, он не должен быть инженером, в принципе, но вот факт есть факт.
Головоломки.
Головоломки перестали спрашивать не потому что они устарели, а потому, что было проведено серьезное исследование и выявлено, что нет абсолютно никакой корреляции между - как хорошо ты решаешь математические пазлы и головоломки и тем, что ты хороший кодер. Именно по этому, мелкомягкие, эплы, гуглы и остальные перестали спрашивать эту хрень на интервью. Имхо, тоже станет и с алгоритмами!
Заключение.
На интервью нужно спрашивать то, что ты будешь использовать каждый день по 100 раз в день. const я например использую минимум по 10 раз в день в коде. Операции с поинтерами каждая 2я строка. Битовая арифметика - каждая 3я строка. Дизайн API - минимум 2-3 раза в месяц. Нужно давать код на листочке с багом, нужно просить показать пример своего кода и так далее...
Сколько, за мои 15 лет девелоперской карьеры, я имплементировал:
- рекурсивный Фибоначчи (излюбленный вопрос на интервью) - НОЛЬ!
- переворачивание деревьев, списков - НОЛЬ!
- sqrt функция (любимый вопрос в гугле) - НОЛЬ!
- алгоритмы сортировки - НОЛЬ!
- найти к-тый меньший/больший элемент в массиве - НОЛЬ!
- array partitioning - НОЛЬ!
- itoa и atoi функции - НОЛЬ!
- strstr функция (любимый вопрос везде) - НОЛЬ!
- графы - 1 раз - 1 год назад для гарбедж коллектора.
- хэш таблицы - 1 раз - 5 лет назад, для мемори аллокатора под чистый С, а так - STL в помощь.
- деревья - 1 раз - 10 лет назад когда нужен был хафман енкодер/декодер.
- линкед лист - нужны постоянно, на каждой новой работе имплементирую свой intrusive linked list.
Ну и вот скажите мне, нахалеру спрашивать все это г*вно?
Хохма.
Культура интервью в индустрии меня на столько раздражает, что я даже на эту тему, сочинил хохму.
Что было бы, если бы водителей автобусов и троллейбусов брали на работу так же, как софтвер инжеренров?
Интервьюер "И"
Кандидат "К", //*> - мысли вслух кандидата
И: - Нам нужен гениальный, высококвалифицированный водитель автобуса, способный думать за привычными рамками.
К: - Да, я именно то что вам нужно!
И: - Хорошо, сколько лет у вас опыта вождения автобуса?
К: - Почти 15 лет за рулем!
К: - А выыы можете водить танк?
И: - Хм! Нет, но если нужно, можно научиться. //*> Идиоты!
К: - Понятно

Так может, вы можете водить БТР?
И: - Нет, к сожалению! Нооо, принцип такой же, я быстро учусь. //*> Полные идиоты!
К: - Мда!

Ок, нуууу может быть вы можете управлять спейс-шатлом?
И: - Нет! //*> Ё*та... (Пип) Мл*ть! Только если рулежка по полосе!
К: - Ок, попробуем с другой стороны. Напишите на доске дифференциальное уравнение движения автобуса!
И: - Яяяя не математик, я водитель автобуса! //*> Ё*та... (Пип)
К: - Ну хорошо, давайте тогда рассчитаем передаточные числа трансмиссии для 1й передачи. Хотябы!
И: - К сожалению! //*> Ё*та... (Пип)
К: - Как вы думаете, почему мы должны нанять именно вас?
И: - Нууу, у меня 15 лет опыт вождения, без аварий, на автобусах именно такой модели, которую вы используете!
К: - Ну это понятно, но почему именно в нашей компании?
К: - Я вас очень люблю и всю жизнь мечтал у вас работать! //*> Ё*та... (Пип) Да мне пох, я просто хочу водить автобус! Я люблю это делать!
И: - Ну и напоследок. У вас пробито колесо. Запаски нет, инструментов нет, телефона нет, вы не встретите другого водителя никогда. Что вы будите делать?
К: - Наполню автобус воздушными шариками, он взлетит и я за веревочку пойду с ним по дороге. //*> Ё*та... (Пип) Сниму автобус с ручника и лягу под колеса!
И: - О! Отличный ответ!

Я даже сам об этом не подумал!
И: - Как Вы представляете свое положение через 5-10 лет?
К: - Хочу стать директором всей компании! //*> Ё*та... (Пип) Я просто хочу водить автобус! Нравится мне это!
И: -

Замечательно!
И: - Спасибо, мы с вами будем на связи!
Итог: автобусы не ездят, троллейбусы не ездят, все ходят мл*ть пешком, потому что профессура автомобиле-строительно факультета БГУ, служившая в армии танкистами, не очень то рвется работать водителями автобусов и троллейбусов.
Может немного утрированно, но вот так уж навеяло!
