Здравствуйте, a.v.v, Вы писали:
AVV>понял, вот это конечно более тревожный знак чем невозможность написать код
Я отношу их к второстепенным, хозяйке на заметку. Напирмер, если идентификаторы сильно безграмотные, можно что-нибудь по-английски спросить, а то вдруг он еще английского не знает.
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Handie, Вы писали:
H>Первое что мне сказали когда я пришел в IBM — Do not think, do ask.
Какая должность-то?
H>Я бы сразу задал вопрос — устраивает ли решение из STL. Умные задают дополнительные вопросы — дураки сразу "понимают".
Кому что. Кому нужны кодеры, чтобы можно было дать разжеванное задание и вперёд, а кто ищет инженеров, которым дают хотелку и ожидают хоть какой-то прототип, который можно увидеть и пощупать, который легко рефакторится по ходу в законченный продукт. В общем это и есть отличие миддлов и синьоров.
H>Знаменитая история. Джоел спольски любил задавать вопрос — нарисуйте дом. Вы рисуете квадратик с шапочкой, может даже окошком и дверцей. И когда закончили, Спольски говорил — да, совсем забыл. Домик-то для двуголовых жирафов. Что, размеры не те? чего не уточняли? все, до свиданья.
Бред какой-то. Размеров на рисунке же нет, а количество голов у жирафа на форму дома не влияет. Если что, можно потом и отрефакторить, стирательную резинку в софтостроении использовать не зазорно.
H>>>std::reverse(list.begin(), list.end()) .>>Если в некой конторе будут ожидать такое решение, то лучше оттуда бежать, ибо требование знания наизусть функций стандартной библиотеки ни о чём хорошем не говорит. H>Это лучшее решение. В конторе где прогеры пишут реверс листа сами — очень многое говорит о неумении эффективно работать
Так оно находится не мыслительным процессом, а 2-х минутным гугленьем. Какой смысл такого вопроса на интервью? Я вот сходу не скажу есть ли стандартная функция реверса, например, в javascript и не помню наизусть хедер <algorithm>, хотя несколько лет С++ опыта есть.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>2. Если сраз нафиг, то как грамотно построить интервью, чтобы дать эту задачу в самом начале, не слишком сильно человека шокировав, и распрощаться втечение пяти минут, не слишком обидев?
Соврать, знамо дело. "У Вас отличное резюме, я уж для порядка Вам простенькое дам, иначе HR меня заругает". Не сделал — пять минут о погоде и великом и прощаться. Только не критиковать и не учить, как делать правильно — собеседование не для этого. Сделал — можно и признаться, что обманули человека и отсеиваете идиотов И собеседовать дальше.
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, Flying Dutchman, Вы писали:
FD>>Однажды я у удивлением узнал, что ведущий программист нашего проекта со многими годами опыта на C совершенно не знал функций стандартной библиотеки C для чтения/записи из/в файл. Это дало мне повод усомниться в его компетенции. Но потом я понял, что никакой проблемы в этом нет. Мы работали в среде операционной системы pSOS, и у нас даже не было файловой системы. А все, что касалось нашего проекта, этот программист знал хорошо.
ПМ>Поэтому проверка справочных знаний ни о чём не говорит. Возьмёт этот ваш ведущий программист справочник и прочитает, какие функции используются для чтения/записи. Важно только то, как человек пишет код, проектирует систему (если это архитектор) и т.д. Справочные знания могут устрать еще до того, как они выдет к вам на работу.
Конечно, я с этим полностью согласен. Просто тогда я был несколько моложе и не настолько мудр, как сейчас
Re[12]: Задача на собеседовании - обращение списка.
Здравствуйте, elmal, Вы писали:
E>Здравствуйте, Паблик Морозов, Вы писали:
ПМ>>Ну да. Еще можно случайно выбирать элемент в диапазоне 0 — l ( := length — 1), обменивать его с крайним элементом массива l = l — 1, повторить. Тогда будет от O от кол-ва элементов, но исходный массив испортится. Вообще, для решения этой задачи надо задать больше уточняющих вопросов (например, что значит "случайных", какие требования к распределению и т.п.) E>Шеф, признавай, что облажался даже покруче меня с квадратичной сложностью . Я конечно понимаю, что ты задание не понял, но пример показателен. И ведь задание вполне однозначное, никаких требований к распределению не подразумевает. Был массив 1,2,3. Нужно получить из него 10 случайных элементов — пожалуйста, 1 из вариантов — 1,3,2,2,2,2,1,3,1,1. И в чем сложность ?
Скорее всего задача именно та, какую я пытаюсь решить. И gandjustas тоже пытается что-то подобное сделать.
Re[11]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, gandjustas, Вы писали:
G>>Да, но ты почему-то уверен что это знание выводится из умения разворачивать список на месте. G>>Хотя это неверно.
ПМ>Я вообще не понимаю о каких знаниях ты сейчас говоришь, если честно.
G>>Это будет O(длина массива), а не O(кол-во элементов)
ПМ>Ну да. Еще можно случайно выбирать элемент в диапазоне 0 — l ( := length — 1), обменивать его с крайним элементом массива l = l — 1, повторить. Тогда будет от O от кол-ва элементов, но исходный массив испортится. Вообще, для решения этой задачи надо задать больше уточняющих вопросов (например, что значит "случайных", какие требования к распределению и т.п.)
ПМ>Ну и в каком месте он O(кол-ва элементов)??
Давай ты просто в википедии найдешь этот алгоритм. Его толи Кнут, толи Дейкстра описывал.
G>>Только ты его не знаешь и склонен преувеличивать сложность задачи.
ПМ>Опять телепатия. Где я что преувеличивал? Я написал, что не знаю, что это за задача, и что у LCS сложность больше O(n). (http://en.wikipedia.org/wiki/Longest_common_subsequence_problem)
А причем тут LCS я вообще не о ней. Я о других задачах, которые ты случайно не знаешь. Ты решение за 5 минут не написал, несмотря на то что оно очень простое и ты скорее всего его видел. Оно минимум в паре известных книг по программированию фигурирует.
Ты же суть поста моего уже понять должен был:
1) Простой код != простой алгоритм.
1) Не всегда простой код может написать человек, который его не писал за последние полгода.
3) Нет смысла на собеседовании спрашивать написание такого простого кода, так как оно совершенно непоказательно.
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, a.v.v, Вы писали:
AVV>Здравствуйте, зиг, Вы писали:
зиг>>никто нигде не пишет реверс лист сам. зиг>>это просто задача на интервью чтоб выявить тех кто не знает что такое список, как такое быстро и красиво закодить, и т.д.
AVV>безапелляционность утверждений не есть признак ума
ваше утверждение безапелляционно!
Re[12]: Задача на собеседовании - обращение списка.
Здравствуйте, elmal, Вы писали:
E>Здравствуйте, Паблик Морозов, Вы писали:
ПМ>>Ну да. Еще можно случайно выбирать элемент в диапазоне 0 — l ( := length — 1), обменивать его с крайним элементом массива l = l — 1, повторить. Тогда будет от O от кол-ва элементов, но исходный массив испортится. Вообще, для решения этой задачи надо задать больше уточняющих вопросов (например, что значит "случайных", какие требования к распределению и т.п.) E>Шеф, признавай, что облажался даже покруче меня с квадратичной сложностью . Я конечно понимаю, что ты задание не понял, но пример показателен. И ведь задание вполне однозначное, никаких требований к распределению не подразумевает. Был массив 1,2,3. Нужно получить из него 10 случайных элементов — пожалуйста, 1 из вариантов — 1,3,2,2,2,2,1,3,1,1. И в чем сложность ?
Не, задача как раз не такая. например ряд чисел от 1 до 10, а нужно 3 (N) случайных выбрать. Естественно выбранные элементы массива должны быть разными.
Но суть не в этом, а как раз в том что товарищ Морозов не узнал "в лицо" классическую задачу, обсосанную всеми кому не лень, кроме Джоэла.
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, зиг, Вы писали:
зиг>Здравствуйте, Handie, Вы писали:
H>>>>std::reverse(list.begin(), list.end()) .>>>Если в некой конторе будут ожидать такое решение, то лучше оттуда бежать, ибо требование знания наизусть функций стандартной библиотеки ни о чём хорошем не говорит.
H>>Это лучшее решение. В конторе где прогеры пишут реверс листа сами — очень многое говорит о неумении эффективно работать зиг>никто нигде не пишет реверс лист сам. зиг>это просто задача на интервью чтоб выявить тех кто не знает что такое список, как такое быстро и красиво закодить, и т.д.
А зачем если в итоге такое все равно не пишут?
Re[12]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Давай ты просто в википедии найдешь этот алгоритм. Его толи Кнут, толи Дейкстра описывал.
Ты его скорее всего переписал с ошибкой. Потому что если взять n = 1, то в худшем случае он сделает k итераций. И рассказывайте мне теперь, что умение писать алгоритмы не нужно, потому что все алгоритмы есть в Интеренете. Этот есть, и фигали толку?
G>Ты решение за 5 минут не написал, несмотря на то что оно очень простое и ты скорее всего его видел. Оно минимум в паре известных книг по программированию фигурирует.
Извини был занят, проверял, умеет ли очередной соискатель обращать списки.
G>Ты же суть поста моего уже понять должен был: G>1) Простой код != простой алгоритм.
Согласен. Поэтому спрашиваю именно простой алгоритм.
G>3) Нет смысла на собеседовании спрашивать написание такого простого кода, так как оно совершенно непоказательно.
Очень даже показательно. Есть те, кто могут и те, кто нет. Те, кто не могут даже из интеренета алгоритмы неправильно переписывают, или делают неверные утверждения относительно их характеристик.
Re[13]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Не, задача как раз не такая. например ряд чисел от 1 до 10, а нужно 3 (N) случайных выбрать. Естественно выбранные элементы массива должны быть разными.
Оххх, господи, совсем уж склероз. У тебя неотформатировано, и я i как k прочитал . А сходу б не подумал, что такое можно таким малым количеством кода сделать настолько изящно. Хотя решение в этюдах черти сколько лет назад вроде видел, задача действительно известная.
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>А как? Домашние задания? Не хотят.
Т. е. они не готовы потратить 2 часа, чтобы попробовать себя, понять чем придется примерно заниматься, создать повод для обсуждения, а хотят сразу подвергуться допросу? Не верю. Может проблема в самом ТЗ или в неправильной его подаче? Коряво сформулированное ТЗ и отсутствие ответа на вопрос — зачем оно, тоже странный ход со стороны работодателя. Было тут у кого-то задание: написать веб сервер. Ниче так заданьице, да?
ПМ>Жесткий отсев по резюме? ПМ>Во-первых писать их толком не умеют, во-вторых аббривеатур себе навписывать много ума не надо. Давать компьютер и закрывать в комнате на 3 часа, пока не напишет сапёр — издевательство. Небольшая задача, которую можно сделать прямо на собеседовании вместе с кандидатом — самый гуманный вариант ИМХО.
А ты всерьез ожидаешь от людей, которые даже не могут написать резюме, каких-то фундаментальных знаний?
А>>Знакомо до боли, не правда ли?
ПМ>Нет, у меня никогда такого не было.
Ну, значит у меня просто плохая карма.
ПМ>Да, и первый пост в теме как раз об этом, не правда ли? (заметьте, в моём случае кандидату не понадобилось тратить два часа на выполнение тестового задания)
Ему не пришлось, зато тебе пришлось. Насколько я понял, проблема как раз в твоем времени, а не во времени кандидата. Если на интервью попадают 9 из 10 тех кого надо отсеять, тут ведь явно что-то не так? У меня кстати вот тоже такого никогда не было.
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, Ахмед, Вы писали:
А>Т. е. они не готовы потратить 2 часа, чтобы попробовать себя, понять чем придется примерно заниматься, создать повод для обсуждения, а хотят сразу подвергуться допросу?
Показать им чем именно они будут заниматься можно только на рабочем месте, людей ведь в проект берут а не на пустое место. Всё остальное — будет лишь каким-либо приближением, "близость" которого можно оценить весьма условно.
А>Может проблема в самом ТЗ или в неправильной его подаче? Коряво сформулированное ТЗ и отсутствие ответа на вопрос — зачем оно, тоже странный ход со стороны работодателя.
Опять же т.з. Уточнения будут при любом т.з.: за примером далеко ходить не надо — в сосденей ветке выяснилось, что задачу "выбрать N элементов из массива случайным образом" люди понимают поразному. Когда речь идёт о тестовом задании, возможности уточнять задание как правило нет. И еще эта схема не работает, когда отдел HR сам ищет сотрудников. Звонок от HR и фраза: "мы посмотрели ваше резюме, оно нам понравилось, напишите-ка нам тестовое задание" — немного странно будет звучать.
А>Было тут у кого-то задание: написать веб сервер. Ниче так заданьице, да?
И лично мне совершенно не понятно, что плохого в этом задании? А каким должно быть нормальное? Чем написание веб-сервера хуже написания какой-нибудь записной книжки на джаве, или еще что-нибудь в этом роде?
А>А ты всерьез ожидаешь от людей, которые даже не могут написать резюме, каких-то фундаментальных знаний?
Да. Моё резюме выглядит ничуть не лучше, чем резюме людей, которых приходится собеседовать. При этом необходимый минимум знаний у меня есть.
А>Ему не пришлось, зато тебе пришлось. Насколько я понял, проблема как раз в твоем времени, а не во времени кандидата. Если на интервью попадают 9 из 10 тех кого надо отсеять, тут ведь явно что-то не так?
Ну да, согласен. Было бы интересно узнать хорошие методики. Таки тестовые задания? И как тогда осуществлять активный поиск с использованием тестовых заданий?
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
H>>>>>std::reverse(list.begin(), list.end()) .>>>>Если в некой конторе будут ожидать такое решение, то лучше оттуда бежать, ибо требование знания наизусть функций стандартной библиотеки ни о чём хорошем не говорит.
H>>>Это лучшее решение. В конторе где прогеры пишут реверс листа сами — очень многое говорит о неумении эффективно работать зиг>>никто нигде не пишет реверс лист сам. зиг>>это просто задача на интервью чтоб выявить тех кто не знает что такое список, как такое быстро и красиво закодить, и т.д.
G>А зачем если в итоге такое все равно не пишут?
чтобы проверить способность писать аналогичное. работа не состоит из набора простых шагов, часто бывает что нужно что-то нестандартное или нетривиальное сделать.
с тем же успехом можно было дать реальную задачу из жизни, но тогда пришлось бы потратить кучу времени на объяснение деталей предметной области, все это ни к чему — лучше давать такие абстрактные задачи, требующие минимум вводных данных, показывающие возможность кандидата думать и быстро писать хороший код
Здравствуйте, minorlogic, Вы писали:
M>Потому что ваши HR работают ОЧЕНЬ плохо ?
А что должен сделать HR? Они присылают нам резюме, мы смотрим, там всё прекрасно: опыт работы (правда не в гуле/яндексе, но всё равно); весьма часто — неплохое образование; внушительный список технологий. Начинаем спрашивать, выясняется, что на техническом уровне дофига пробелов. Плюем на технику, начинаем спрашивать "а как вы думаете?" "а если бы надо было сделать такое, то как бы вы сделали?" — выясняется, что и фундаментальных знаниях пробелы (или просто человек не соображает) и решение из рук вон плохое.
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Потому что это задача не практическая, как и программирование сортировки. Все уже давно в либах есть и на практике никогда (в смысле вообще никогда) не приходится её писать. G>А если человек не делает что-то постоянно, то просто теряется навык.
А что — практическая задача? Навернуть экран linq-гуана, который автор без супер-мега-профайлера оптимизировать вообще отказывается, в качестве подтверждения корректности предлагает два с половиной юнит-теста, которые не покрывают даже всех 5 особых ситуаций, зато с понтом используют NMock c динамикой — это практическая задача? А аккуратно подвигать итератором — не практическая? Кажется, я понимаю, почему топик-стартер держится от таких "практиков", валящихся на детских задачках, по возможности подальше... Я б тоже держался подальше
Забанен с формулировкой "клинический дисидент".
Re[13]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, gandjustas, Вы писали:
G>>Давай ты просто в википедии найдешь этот алгоритм. Его толи Кнут, толи Дейкстра описывал.
ПМ>Ты его скорее всего переписал с ошибкой. Потому что если взять n = 1, то в худшем случае он сделает k итераций.
Может ошибся в о\О нотации. Алгоритм проверил по работающей программе.
ПМ>И рассказывайте мне теперь, что умение писать алгоритмы не нужно, потому что все алгоритмы есть в Интеренете. Этот есть, и фигали толку?
Действительно нету. Ведь ты умудряешься спрашивать на собеседовании один алгоритм, а сам другие, довольно известные, не знаешь и вывести не можешь.
G>>Ты же суть поста моего уже понять должен был: G>>1) Простой код != простой алгоритм. ПМ>Согласен. Поэтому спрашиваю именно простой алгоритм.
Обращение списка — простой код, алгоритм довольно сложен. Я тут в соседней ветке писал выкладки от начала и до конца, они требуют много знаний.
Без них можно только запомнить алгоритм, но не вывести его.
Ты кстати и сам писал что сначала не мог его сходу написать, а потом, натренировавшись на собеседованиях, запомнил (но не понял).
G>>3) Нет смысла на собеседовании спрашивать написание такого простого кода, так как оно совершенно непоказательно.
ПМ>Очень даже показательно. Есть те, кто могут и те, кто нет.
Ты — не можешь. О чем это говорит?