Задавать вопросы — 80% работы инженера-программиста.

«В школе нужно давать правильные ответы на вопросы. Жизнь, напротив, в основном состоит в том, чтобы с самого начала задавать правильные вопросы». - Скотт Х. Янг.

Что касается кодирования, мы тратим 80% нашего времени на задавание вопросов и 20% на выполнение результата. Таким образом, один из навыков, которыми обладают многие профессиональные разработчики, — задавать правильные вопросы при возникновении проблемы.

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

Каковы характеристики правильных вопросов?

Проявите должную осмотрительность

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

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

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

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

  • Ваше понимание проблемы. Важно сформулировать свои мысли и проблему, а также то, что вы сделали для ее решения.
  • Скриншот ошибки или проблемы.
  • Код, воссоздающий проблему (в описании меньшего потока).
  • Читайте и перечитывайте свои вопросы, прежде чем размещать их в Интернете.

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

Укажите контекст

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

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

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

Рассмотрим эти два способа задать одни и те же вопросы:

  • «Я не могу отправить свою кампанию. Кто-нибудь может помочь?
  • «Я пытался отправить разовую рассылку в 14:00. вчера с титулом X. Я подождал некоторое время, но кампания, похоже, не доходит до моей целевой аудитории. Это идентификатор моей кампании: 12223. Кто-нибудь может посмотреть, что случилось с этим идентификатором кампании?

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

Укажите цель

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

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

Когда я объясню шаги, необходимые для интеграции нашей службы с внешним потоком аутентификации, кто-то спросит: «Почему поток аутентификации реализован именно так?» или «Почему мы используем этот X для наш поток аутентификации?». Возможно, я не знаю ответа на эти вопросы. Однако я часто отвечал: «Почему вы спрашиваете?». Это дает четкое указание на цель вопросов, чтобы легко направить их к правильному ответу.

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

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

Шаблоны о том, как составить хороший вопрос

Ниже приведены некоторые из моих контрольных списков и инструкций по составлению хорошего вопроса:

  1. «Проблема», с которой вы сталкиваетесь, и контекст
  2. Ваши мысли о том, что, по вашему мнению, может быть неправильным, основаны на ваших исследованиях.
  3. Доказательство исследовательских усилий. Изучите и очистите снимки экрана, где это необходимо.
  4. Если это на канале Slack, закончите словами «Пожалуйста, дайте мне знать, если это не тот канал, чтобы задать вопрос!»

Возьмем в качестве примера один вопрос Переполнения стека: у этого разработчика возникла проблема с определением классов case при использовании Akka Actors.

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

Затем, основываясь на своих исследованиях, они описали свои мысли о том, что делать.

Они дают небольшой фрагмент кода в качестве ссылки на то, что они провели некоторые исследования.

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

Они закончили ветку, задав вопросы — куда им поместить фрагмент кода и как лучше всего это сделать?

Давайте возьмем еще один пример вопроса о переполнении стека, который не дает достаточного контекста.

Этот пользователь столкнулся с ошибкой при попытке установить расширение Firebase Stripe Payment с ошибкой. Затем этот пользователь скопировал и вставил необработанное сообщение в вопросы и дал некоторый контекст, который он установил вручную через консоль.

Чтобы прояснить эти вопросы, они могут больше обсудить, какое руководство по установке они использовали, вставив ссылку. Какие действия они предприняли, чтобы разобраться в проблеме, и какие исследовательские усилия (шаги, которые они сами предприняли для устранения ошибки), которые включают другие потоки переполнения стека?

Чтобы превратить это в более качественные вопросы, мы можем начать со слов:

Привет, команда, кто-нибудь когда-нибудь сталкивался с ошибкой 429 «Слишком много одновременных сборок» при установке расширения Firebase Stripe Payment в своем Chrome? Я попробовал [руководство по ручной установке Google Cloud], сначала выполнив X, Y и Z. Когда я пытаюсь запустить A, он выдает слишком много исключений параллельной сборки (снимок экрана ниже).

Больше информации о моей машине:

  • Версия браузера Chrome: 1.0.2
  • Версия консоли GCP: 0.0.2

Пробовал делать BCD по этому Stack Overflow (ссылку прикрепите сюда), но все равно выдавал ту же ошибку.

Пожалуйста, дайте мне знать, если есть какая-либо дополнительная информация, которая необходима. Заранее спасибо!

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

Во-первых, приведенные выше вопросы заранее задают вопросы, если кто-либо когда-либо делал целую ошибку 429 при установке расширения Firebase Stripe Payment. Это уже выдало много контекста в одном предложении. Пользователь столкнулся с ошибкой при установке расширения Firebase Stripe Payment, и это ошибка 429 или «слишком много одновременных сборок».

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

Наконец, пользователь упомянул, что пытался решить проблему по ссылке Stack Overflow, но безуспешно.

Резюме

Задавать вопросы — 80% работы программиста. Хорошие вопросы могут помочь вам сократить время ответа.

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

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

Как и все навыки, написание хороших вопросов требует постоянной практики и постоянной обратной связи. Продолжайте уточнять свой вопрос, описывая «проблемы», с которыми вы сталкиваетесь, свои мысли о том, что вы думаете о проблеме, и доказательства исследований. Я создал хороший шаблон вопросов.

Какие советы вы применили для составления отличных вопросов? Пожалуйста, прокомментируйте их ниже!

Первоначально опубликовано на https://pathtosenior.substack.com.