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

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

1. Собирайте информацию

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

  • Вы понимаете проблему? Если нет, то какие вопросы вы можете задать, чтобы улучшить свое понимание?
  • У вас есть идея, как действовать дальше? Если нет, можете ли вы привести более конкретные примеры? Например, если вас попросили написать функцию, можете ли вы сгенерировать больше примеров ввода/вывода?
  • Вы чувствуете себя подавленным? Если да, то как можно разбить проблему на более мелкие проблемы, с которыми легче справиться?

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

2. Что не работает?

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

Но есть несколько стратегий, которые, надеюсь, помогут вам быстрее найти этот выключатель. Один из подходов, который мне нравится, — это выявление идей, которые точно не будут работать. В конце концов, как однажды сказал Шерлок Хомлс: «Когда вы устраните все невозможное, тогда все, что останется, каким бы невероятным оно ни было, должно быть правдой».

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

3. Перейти к другой части проблемы

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

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

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

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

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

4. Сделайте перерыв

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

5. Просить о помощи

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

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

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

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