Если ваш алгоритм верен, имеет ли значение, как долго вы его писали? [закрыто]


11

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

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

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

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

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

Это заставило меня задуматься: разве это действительно важно, что это заняло у меня так много времени? Я имею в виду, является ли это признаком того, что я не смогу устроиться на работу в таком месте, как это (не только Facebook, но Google, Fog Creek и т. Д.), И мне нужно снизить свои амбиции, или тот факт, что я действительно прошел с моей первой попытки, хотя это заняло слишком много времени, чтобы быть хорошим?


12
Это имело значение здесь - это достаточно реально для вас?

2
Почему вы считаете, что отсутствие работы на большое имя .com означает, что вы снижаете свои надежды?
Mouviciel

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

5
Программное обеспечение LOL at Fog Creek включено в Facebook и Google.
georgiecasey

Ответы:


42

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

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

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

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


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

@JohnIsaacks Итак, проблема была в том, что вы были незнакомы с Башнями Ханоя. Большинство программистов, которых я знаю, были знакомы с ним, когда их учили о рекурсии (каждое движение диска, по сути, означает «переместить диск над мной на свободный стержень», что прекрасно соответствует рекурсии). Получили ли вы формальное образование и если да, то на каком уровне?

@ ThorbjørnRavnAndersen, я не изучал программирование в школе. Я самоучка, я учился на работе, по книгам, экспериментировал и т. Д. Я не был знаком с игрой (за исключением того, что помнил похожую игру, в которую играют на планете обезьян), мне пришлось Google, чтобы даже знать, что это было называется "Ханойские башни". Я понимаю рекурсию (по крайней мере, я так думаю), и я использовал ее здесь. Но просто решить головоломку было бы намного проще для меня, более сложная часть заключалась в том, «Какой шаблон будет приносить наименьшее количество возможных ходов каждый раз».
Джей Ди Айзекс

Программирование @JohnIsaacks во многом похоже на игру на пианино - вы можете стать хорошими сами по себе, но для того, чтобы стать действительно хорошими, вы должны научиться правильно делать вещи у опытного учителя. Не могли бы вы рассказать о том, как вы могли бы решить головоломку, но с трудом подойти к части «это оптимально»?

Я мог бы создать рекурсивную функцию, которая перемещает фигуру на место, убирает любую блокирующую фигуру с пути, а затем начинает заново со следующей фигуры. Начиная с самого большого куска и заканчивая последним наименьшим. «Это оптимально» - часть, возникающая при перемещении блокирующего элемента. В зависимости от того, куда вы его перемещаете, он может создавать дополнительные ненужные шаги. Например, перемещение 1 на 3 будет блокировать 3, и его нужно будет снова убрать с дороги, когда пришло время переместить 3., но в зависимости от текущей конфигурации этого не избежать.
JD Исаакс

13

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

Я могу думать о пяти различных типах решателей проблем:

Те, кто...

  1. ... может решить проблемы быстро , с чистым и эффективным решением.
  2. ... может решать проблемы быстро , но с грязным и неэффективным решением.
  3. ... может решать проблемы медленно , но в итоге получится чистое и эффективное решение.
  4. ... может решать проблемы медленно , но в итоге получается грязное и неэффективное решение.
  5. ... не может решить проблемы ни быстро, ни медленно.

Тест в стиле Facebook явно отсеивает кандидатов № 3, № 4 и № 5, потому что он имеет временные ограничения, поэтому мы знаем, что этот тест предназначен для работодателей, которые определили, что они должны нанимать только кандидатов № 1 или, возможно, № 2 ( в зависимости от дальнейшей проверки).

Несколько примеров:

  • Такой работодатель, как Facebook, может искать только программистов № 1 , поскольку они могут позволить себе огромные зарплаты для суперзвездных программистов.
  • Работодатель, у которого большой объем разовых продаж (как, например, некоторые магазины веб-дизайна), может пожелать иметь только разработчика № 2 , который дешевле, чем не менее эффективные разработчики № 1.
  • Работодатель, у которого есть специализированная проблемная область (например, написание программного обеспечения для выдачи кредитов), может принять разработчика № 3 вместо разработчика № 1 , поскольку гениальный разработчик с двойным дипломом может быть слишком дорогим, или его может быть трудно найти.
  • Работодатель, который не заботится или имеет ограниченный бюджет по различным причинам, может согласиться с разработчиком №4 .
  • Разработчиков № 5 нанимают фирмы, которые не знают, что ищут, и не могут отсеять этих кандидатов.

5

Ханойская башня? Это было одно из первых заданий по программированию, которое я получил на своем курсе для новичков в университете (сразу после Фибоначчи - да, у меня были занятия с одним из тех уродов функционального программирования :). И я даже не по информатике, я по компьютерной инженерии.

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

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

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

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


3

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

Таким образом, тот факт, что вы не завершили тестирование в отведенное время, не означает, что вы плохой программист; Вы просто не подходите под определение того, что Facebook считает харизматичным. На мой взгляд, все в порядке.


0

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

Рассмотрим следующую математическую задачу: 2 + 2 =?

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


-1

Людям действительно все равно, сколько времени вы проводите, делая что-то; просто уложись в сроки и все хорошо.


7
Поэтому, когда крайний срок «45 минут спустя», а вы заканчиваете четыре часа спустя, людям все равно.

1
Mehrdad означает, что вы можете работать сверхурочно, чтобы уложиться в сроки: D
quant_dev

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

-1

Это довольно напряженно, мне потребуется прочитать о том, что такое Ханойская башня -15 минут, запустить IDE, создать пустое решение -5 минут, так что это всего 25 минут, чтобы решить проблему. Простое написание кода со всеми необходимыми классами, такими как безопасные классы, с хорошим дизайном интерфейса потребовало бы также некоторого времени -10 минут, так что для реальной идеи осталось 15 минут. В зависимости от того, что такое башня на Ханое, этого может быть достаточно, но может и не быть. И иногда мне просто нужно разрешить проблему самому, пока я работаю над другими проблемами, потому что я не вижу решения прямо на месте. Так что это решается бесплатно в параллельном потоке, но это не происходит мгновенно.

В любом случае, это одна из крупнейших компаний, поэтому они могут делать все, что захотят. Но ограничение по времени - один из худших факторов в интервью. ИМХО, я всегда чувствую давление, срочность, не могу все делать чисто и не могу сосредоточиться на всех деталях, которые очень важны при работе. :) Конечно, вы можете решать решения быстро, например, настроить доступ к администрированию, чтобы все работало + 'SELECT * FROM pass WHERE usr == ' + user_input, но для любой безопасной и хорошо написанной задачи, которой я бы гордился, мне понадобилось бы некоторое время, и 45 минут действительно довольно напряженные.


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

Запуск вашей IDE и создание пустого проекта занимает пять минут? Если вы еще не знаете Towers Of Hanoi, по крайней мере, делайте это в обратном порядке, чтобы среда IDE загружалась (очевидно, из виртуальной машины через Интернет) во время исследования!
Брайан Бетчер

В таком тесте они не обязательно ищут «хороший дизайн интерфейса» и «сантехнику» - я ожидаю, что они хотят увидеть ваше понимание проблемы и способность сформировать алгоритм для ее решения. Если бы язык не был ограничением, использование чего-то вроде Java и Eclipse - это последнее, что я бы сделал. Я бы использовал Python и минимальный текстовый редактор / компактную IDE. (Не говоря, что вы будете использовать Java самостоятельно; просто
говорите
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.