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

Задавая правильные вопросы вы экономите время и себе, и вашим наставникам, и вашим коллегам.

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

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

Какой вопрос, такой ответ.

Совет 1: Начни с вопроса “Почему?”

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

Также вопрос “почему?” полезен и для того, кто задает вопрос. Начинающий программист пытается понять как использовать определенную функцию в своем коде, но не понимая ее сильные и слабые стороны, он может неправильно применить ее. Если же он понимает причины “почему” используют эту функцию, ему будет понятнее когда ее стоит применять, а когда нет.

Начиная с вопроса “почему?” вы также избавляетесь от недоразумений. Когда причина “почему” четко понятна, может оказаться, что вопрос стоит переформулировать или задать полностью другой вопрос.

Примеры

Давайте посмотрим как мы можем улучшить несколько распространенных вопросов начинающих программистов.

Вопрос 1: Как выучить JavaScript? Улучшенная версия: Какой способ изучения JavaScript лучше всего подходит для того, чтобы стать веб-разработчиком?

Вопрос 2: Что не так с моим кодом? Улучшенная версия: Я пытаюсь реализовать функцию, которая даст пользователю возможность загрузить картинку, но картинка не появляется на сайте. Что может быть причиной ошибки?

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

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

Совет 2: Будьте конкретны

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

Например, если вы пытаетесь разобраться почему ваш код работает не так как ожидается, конкретный вопрос “Почему функция submitForm не отправляет данные на сервер?” будет полезнее чем общий вопрос “Почему мой код не работает?”.

Конкретные вопросы также помогают сузить спектр возможных ответов. Например, вопрос “Как изменить цвет кнопки входа в моем iOS приложении?” более вероятно приведет к ответу, чем вопрос “Как улучшить дизайн моего приложения”.

Еще одним примером может быть разработчик, которые пытается понять как работать с определенным АПИ.

Вместо вопроса “Как использовать этот АПИ?”, он может спросить “Я разрабатываю приложение ‘прогноз погоды’ и я хочу использовать OpenWeather API, чтобы получить текущую температуру. Как мне это сделать?”

Совет 3: Сначала поищи ответ сам

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

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

  2. Несколько вариантов решения. В процессе поиска вы можете получить новые идеи, которые приведут к правильному решению.

  3. Разбор контекста. Одна и та же ошибка в разных контекстах может иметь разное решение. Поиск ответа поможет прояснить причину возникновения ошибки.

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

  1. Начинающий программист хочет разобраться как использовать функцию reduce() в JavaScript. Вместо того, чтобы задавать кому-то вопрос сразу же, он ищет документацию и разбирается самостоятельно.

  2. Студент курсов по программированию хочет улучшить производительность своего веб-приложения на React. Вместо того, чтобы задавать вопрос “кто-то может помочь мне улучшить мой код?”, он идет гуглить и находит советы вроде использования функции shouldComponentUpdate(), компонентов высшего порядка, React.memo() или useCallback() хук.

  3. Вы пытаетесь реализовать новую фичу по загрузке файлов на сайт, но не знаете где начать. Вместо того, чтобы сразу же бежать за помощью, вы ищете ответ на Stack Overflow и находите HTML тег <input type="file" />

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

Совет 4: Активное слушание

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

Вот несколько способов практиковать активное слушание при чтении книг или просмотре обучающих видео:

  1. Сосредоточьте свое внимание. Устраните отвлекающие факторы и сосредоточьтесь на книге или видео. Избегайте многозадачности и не позволяйте своему разуму блуждать.

  2. Займитесь материалом. Задавайте себе вопросы во время чтения или просмотра и активно думайте о том, как эта информация соотносится с вашим собственным опытом и знаниями.

  3. Делайте заметки. Это поможет вам сохранить информацию и вернуться к ней позже.

  4. Обобщите ключевые моменты. После прочтения или просмотра попробуйте своими словами обобщить ключевые моменты. Это поможет вам лучше понять и запомнить информацию.

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

Совет 5: Метод резиновой уточки

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

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

Вот как вы можете использовать метод резиновой уточки при изучении JavaScript:

  1. Определите проблему. Четко определите проблему или проблему, с которой вы столкнулись в своем коде. Будьте конкретны и подробно о том, что не работает, и что вы ожидаете, что произойдет.

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

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

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

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

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

Спасибо!

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

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

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