2008-11-30 2 views
8

Когда я застрял с проблемой:методы, чтобы следовать, когда вы застряли программирования

  • Я ищу Google для фрагментов кода.
  • Я смотрю на то, чтобы изолировать проблему, чтобы я мог лучше объяснить ее другим, чтобы получить ответы.

Какие методы поиска вы используете, чтобы найти решение проблемы?

Я начал задавать вопросы в переполнении стека.

Какие еще методы или методы вы используете, чтобы быстрее устранить проблему?

ответ

9

Ну есть:

  • Google
  • Google
  • Google
  • Stack Overflow
  • Google
  • Google
  • Может быть, книга, если у меня есть.

Серьезно, я начал программирование в 1980-х годах и даже в середине 90-х годов вам нужно было знать вещи и иметь техническую библиотеку. Затем Google пришел, и Google проще, чем искать документацию по API-интерфейсу (закладка!). Google «java stringbuilder» заставит меня туда быстрее, чем навигация, не говоря уже о реальной книге (электронном или бумажном).

Большинство проблем, которые вы пытаетесь решить, были решены ранее. Много раз.

Остальная часть отладки сводится к разложению, возможно, модульному тестированию (которое связано с декомпозицией) и проверке ваших предположений.

Под «разложением» я имею в виду, что ваше решение структурировано таким образом, что небольшие кусочки можно индивидуально протестировать и легко понять. Если у вас есть метод 7000 строк, вы (вероятно) делаете что-то неправильно.

Понимание того, какие предположения вы сделали, также является ключевым, чтобы вы могли их проверить. Например, когда я начал с PHP, я написал кусок кода, как это:

$fields = $_SESSION["fields"]; // $fields is an associative array 
$fields["blah"] = "foo"; 

и я почесал голову, пытаясь понять, почему он не работает (массив был не обновляется в следующий раз Я запросил $ _SESSION). Я пришел с фона Java, где вы можете это сделать:

Map fields = (Map)httpSession.get("fields"); 
fields.put("blah", "foo"); 

и это определенно сработает. PHP однако копий массив.Рабочий раствор использовать ссылки:

$fields =& $_SESSION["fields"]; // $fields is an associative array 
$fields["blah"] = "foo"; 

или просто:

$_SESSION["fields"]["blah"] = "foo"; 

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

+0

Если Google не получает правильный результат, вы не задаете вопрос правильно. – 2008-11-30 11:02:52

+1

Либо это, либо вопрос включает значительную пунктуацию. – 2008-11-30 14:42:36

3

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

+0

Это работает даже для проблем, с которыми вы сталкиваетесь в 9 утра? – 2008-11-30 14:40:49

23

Идите и сделайте что-нибудь еще. Нет, действительно. Я обнаружил, что устранение проблемы в глубине души помогает. Я не могу сосчитать количество раз, когда я думал о прекрасном решении того, над чем я работал, когда работал над чем-то другим, смотрел телевизор или ел. Кажется, ваш мозг все еще работает над проблемой в фоновом режиме.

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

2

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

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

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

1

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

  1. Положите записку на мониторе и продолжайте идти с чем-то еще
  2. взгляд на записку через выход в ближайшие несколько часов, чтобы держать проблему в задней части моего ума
  3. Google для подобных проблем и методы, используемые
  4. Обратитесь к сослуживцу или друг
  5. Ask на форуме, как StackOverflow
  6. сдавайся и дизайном от решения проблемы или разработать способ обойти эту проблему, так что может быть решены в другое время и ick примечание TODO на месте упомянутого обходного пути
0

Часто лучше очистить голову, выполняя что-то другое, кроме программирования на некоторое время. См. Пример this answer - я сделал это, пытаясь бороться с особенно тернистой ошибкой, и когда я вернулся к проблеме, я решил ее через минуту.

4

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

Иногда вы даже можете найти объяснение до прекратите свое описание.

0

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

0

Попробуйте сначала решить проблему с меньшим объемом проблемы и посмотреть, как вы с этим справитесь. Как только вы это сделаете, большая проблема будет не такой страшной.

-1

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

Peeing for innovation! :)

0

Задайте себе вопрос: решает ли эта конкретная сложная проблема действительно важно, что вы делаете?

Для целей вашего приложения (или какой бы то ни было общей картины) существует аналогичная, но более простая проблема, с которой вы могли бы обратиться, чтобы выполнить в целом то же самое.

0

Обычно я получаю ручку и бумагу и пытаюсь найти детали проблемы там. Если это не поможет, Google. В противном случае я бы сделал что-то еще какое-то время или спросил в Интернете. Работал для меня до сих пор.

0

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

Когда вы вернетесь к своей проблеме, она больше не может существовать.

0

Еще раз, просмотрите, что я думаю, может быть уместным, а затем сделайте сон. Есть еще два ответа, которые говорят о спящем или дремоте, но это заслуживает большего внимания. Теперь известно, что там есть СЕРЬЕЗНАЯ техника, которая работает, когда вы спите. Google ((CBS SCIENCE SLEEP)) предоставит вам отличное бесплатное видео.

0

Если я не могу понять, как решить настоящую проблему, я пытаюсь рассмотреть упрощенную версию проблемы. Чтобы взять простой пример: у меня недавно возникла проблема поиска набора маршрутов доставки, чтобы получить элемент из точки A в точку B, когда нет необходимости прямого маршрута от A до B, но может быть от A до C а затем от C до B или от A до C, от C до D, а затем от D до B. (Я уверен, что авиакомпании и железные дороги делают это все время.) Это было довольно сложно, поэтому я попытался сначала взглянуть на простой Случай: прямой от А до Б. Это было легко. Затем подумайте, как бы я справился с ней с одной остановкой. Затем рассмотрим две остановки. В этот момент я смог увидеть шаблон решения.

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

0

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

  1. Определите проблему: Постарайтесь четко определить в чем проблема, и что ожидается. См. 2, чтобы помочь вам.

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

  3. Reduce your problem. Это справедливо в целом для любого абстрактного моделирования естественных феноменов, но это даже более верно для программирования, потому что программы являются очень сложными сущностями. Вы должны попытаться уменьшить свой код до минимальной программы, которая воспроизводит вашу проблему. Automatedtoolsexist.

  4. Поговорите с кем-то: несколько анекдотов утверждают, что примерно 2/3 ошибок разрешены только путем разговора об этом. См. Helpful Teddy Bear anecdote. Если вы ранее сократили свою программу до минимальной программы и получили четкое определение вашей проблемы, то оба будут полезны для вашего объяснения.

  5. Reach для совместной помощи: поиск в Google и на StackOverflow, и после, если вы не можете найти что-нибудь, что ответы на вашу проблему (но сначала см 1, вы должны иметь четкое определение вашей проблемы).

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

Также вас может заинтересовать курс Coursera Software Debugging, в котором также описаны несколько методов автоматической отладки.