Несмотря на то, что я не могу перечислить все подводные камни, часто формулирование вопроса и включение его в самостоятельную проблему часто требует столько работы, что к тому времени, когда вы достаточно подготовитесь, вы ответили на свой вопрос более время, чем это заняло бы иначе.
Я испытываю то же самое для> 75% вопросов, которые я публикую.
Тем не менее, это не аргумент, чтобы не беспокоиться об этом. Это эффективно отладка резиновой утки. Вы находите ответы на вопросы, которые, по вашему мнению, могут возникнуть в ответ на ваш вопрос; Это означает, что вы думаете о проблеме с точки зрения разных людей; Это означает, что вы думаете о проблеме со всех возможных направлений; это лучший способ найти недостаток.
В лучшем случае вы убедительно доказали, что явно не можете придумать ответ здесь. В худшем случае вы отвечаете на свой вопрос. Следите за цитатами, потому что это совсем не плохо. Возможно, это было немного неэффективно, но решение проблемы медленнее, чем быстрое решение не решать проблему . В конечном итоге вы быстрее решите проблему.
Дело в точке:
Когда я был начинающим разработчиком, я много раз имел дело со страницей ошибок ASP.Net . Мне нужно было Google сообщение, чтобы выяснить, что не так. может пройти несколько часов, прежде чем я найду правильное решение. Я в основном делал все ошибки в книге, и впоследствии мне пришлось столкнуться с последствиями необходимости отладки проблем.
Теперь, когда появляется ошибка, я уже знаю «обычных подозреваемых» о том, что может быть причиной проблемы. Мой мысленный список «обычных подозреваемых» фактически основан на тех проблемах, с которыми у меня были проблемы больше всего в моей карьере. Если бы я сначала не потратил много времени на поиски в Google, я бы никогда не составил этот список мыслей . Но теперь, когда у меня есть этот список мыслей, я значительно быстрее устраняю неполадки.
Кроме того, хотя я не могу понять, насколько быстро реагирует свободная беседа, я не могу придумать какую-либо текстовую интернет-дискуссию.
Я несколько не согласен здесь. Вы правы, что интернет-коммуникация менее отзывчива, но вы (на мой взгляд) ошибаетесь, что это плохо для вас.
Как одинокий разработчик, вы будете полагаться на отладку резиновой утки. Ключевым компонентом работы RDD является то, что вы ожидаете вопросов, которые может возникнуть у вас у резиновой утки. Вы, очевидно, не можете полагаться на то, что на самом деле говорит резиновая утка.
Когда вы работаете с системами медленного обмена сообщениями (отправка сообщений в StackOverflow или общение посредством написания писем), вы по своей сути заинтересованы в том, чтобы убедиться, что вы правильно поняли это с первого раза. Потому что необходимость исправления ошибки будет медленным и трудным процессом.
Для сравнения, учтите, что в системах быстрого обмена сообщениями (разговор, обмен мгновенными сообщениями) вы можете сразу что-то исправить. Возможность быстро что-то исправить делает людей менее заинтересованными в том, чтобы это было правильно.
Четыре случая:
- Когда я делаю свой личный анализ / список задач как разработчик, я все еще использую ручку и бумагу. Я заметил, что при печати своих заметок я замаскирую предположения и ложь, потому что мой разум думает, что «я могу легко это исправить позже». Однако необходимость исправлять то, что вы написали на бумаге, раздражает, вам нужно вычеркивать и писать между строк, и документ выглядит намного хуже, когда на нем есть надписи. Письмо на бумаге заставляет меня проверять факты, прежде чем я начну писать. Это рано улавливает множество недоразумений, еще до того, как я напишу код, который будет вызывать ошибки.
- Моя бабушка была секретарем (возраст пишущей машинки). Создание опечатки в официальном документе означало необходимость повторного ввода всей страницы. Моя тетя - секретарь (возраст текстового редактора). Она может положиться на автоматическую проверку орфографии, и ошибки могут быть исправлены легко и с минимальными усилиями. Неудивительно, что моя бабушка делает гораздо меньше ошибок при наборе текста и орфографических ошибок по сравнению с моей тетей.
- Видеоигры раньше печатались на картриджах. Исправление ошибки после выпуска было почти невозможно. Вам нужно будет перепечатать все картриджи, распространить их среди всех продавцов и надеяться, что продавцы смогут как-то связаться с покупателями, которые уже купили игру. Это будет стоить кучу денег (удвоить физическую стоимость производства) и все равно не достигнет некоторых клиентов. Сейчас, в эпоху интернет-патчей, разработчики игр значительно меньше инвестировали в тестирование своих игр, чтобы избежать ошибок, связанных с выходом, потому что гораздо проще просто отправить исправление каждому клиенту напрямую. Последствия ошибки сводятся к минимуму до такой степени, что после факта лучше исправить несколько проблем, по сравнению с необходимостью проверки на все возможные ошибки, которые могут возникнуть.
- Раньше я жил в трехэтажной квартире без лифта, и мне приходилось парковать одну или две улицы из моего здания. Я почти никогда не забывал взять что-то из моей машины. Теперь я живу в доме с моей машиной рядом со мной на дороге. Я забываю брать вещи из машины все время .
Основная идея здесь заключается в том, что сложная система обмена побуждает людей к правильным и проверенным фактам обменам . Строгость наказания (= трудный процесс исправления) учит вас не совершать ошибок.
Кроме того, сокрытие деталей, чтобы задать четко определенный вопрос, исключает возможность того, что кто-то обнаружит проблемы, о которых вы даже не думали.
Когда вы делаете MCVE , вы не должны просто создавать его и публиковать в вопросе. Вы должны сначала сделать это для себя , чтобы вы могли изолировать проблему. И затем, когда вы думаете, что проблема больше не может быть уменьшена, и вы все еще не видите причину; тогда у вас есть правильный вопрос для StackOverflow.
Дело в точке:
У меня всегда есть вторая Visual Studio, работающая с простым консольным приложением под названием Sandbox. Всякий раз, когда я сталкиваюсь с технической проблемой, я копирую нарушающий код в песочницу и начинаю играть с ней.
- Что происходит, когда я меняю этот параметр?
- Могу ли я воспроизвести проблему, если укоротю код?
- Какие настройки позволяют / невозможно воспроизвести проблему?
В 90% случаев я нахожу причину проблемы, потому что песочница помогла мне взглянуть на код, вызывающий сбой, не отвлекаясь на окружающий контекст (или, например, на любые неопределенности в отношении значений, которые приходят для разных частей кода.
В остальных 10% случаев у меня остается минимальный код для воспроизведения проблемы, который служит прекрасным примером фрагмента для публикации в StackOverflow.
И последнее, но не менее важное: я не хочу публиковать весь свой проект на весь мир, чтобы посмотреть на него до конца вечности по понятным причинам.
Когда у вас уже есть MCVE, вам не нужно много личной информации (или компании). Если вы делаете, так как код минимален, легко переименовать вещи в более простой пример foo / bar / baz.