General: How To Ask Questions - Kovalevskyi-Academy/AcademyWiki GitHub Wiki
Как задавать вопросы о непонятном.
Краткий вариант
Выражая просьбу о помощи обязательно следуйте этому алгоритму!
- Обозначь что ты делаешь и чего именно хочешь достичь. Например:
Я пытаюсь скомпилировать свой 'Main.java', уложить его в папочку 'target/classes', а потом запустить на исполнение в 'java'
. - Укажи все детали своих действий! Например:
нахожусь в папке 'myProject'
Путь к файлу: './src/main/java/com/Main.java'
Вот содержимое файла 'Main.java (обязательно используя Markdown):'
package com.trololo; public class Main { public static void main(String... args) { System.out.println("Hello World"); } }
Компилирую командой 'javac src/main/java/com/Main.java -d target/classes', команда проходит без ошибок.
Запускаю скомпилированный класс командой 'java -cp target/classes com.Main'
- Покажите вывод с ошибкой! Например,
в результате команды 'java -cp target/classes com.Main' получаю вот такое в консоли:
$:~/Desktop/myProject$ java -cp target/classes com.Main Error: Could not find or load main class com.Main Caused by: java.lang.ClassNotFoundException: com.Main
- Выскажите свое предположение о причине возникновения ошибки! Например:
Я думаю, что где-то допустил опечатку в команде 'java -cp target/classes com.Main'.
Помните: чем качественнее вопрос, тем качественнее ответ!
Расширенный вариант
В процессе обучения каждый человек сталкивается со сложностями, порой очень непонятными. И что с этим делать? Можно просто сесть и реветь, но это не оптимальная стратегия!
Есть два варианта выхода из непонятной ситуации:
- Забить на нее!
- Постараться разобраться.
Задавать вопросы — это часть процесса во втором варианте.
Я предлагаю алгоритм, который позволит задавать более качественнее вопросы, чтобы получать более качественные ответы. К алгоритму мы подберемся постепенно, наберись терпения, %userName%.
Базовые общие вопросы.
Начнем с простого. Когда человек сталкивается с некой сущностью впервые, у него возникает общий вопрос, например, как у ребенка: “Что такое %someWord%?”, “Почему небо голубое?”, “А откуда берутся дети?”.
У будущих программистов подобным вопросом, например, может быть: “Как вывести hello world на экран?”.
Это все простые вопросы, ответы на которые гуглятся в несколько кликов. Осталось проявить силу воли и внимательность для освоения информации. Простыми они являются только потому, что кто-то уже дал на них подробные ответы.
Но что гуглить, если вопрос/задача звучит как-то так: “написать и собрать свой helloWorld.jar, а потом запустить его в заданном docker-контейнере из примонтированной рабочей директории”? Об этом ниже.
(Да, я понимаю, что для тех, кто в теме — данный вопрос не сложен! Это просто пример.)
Сложные вопросы.
Помните: сложные вопросы уже содержат в себе некую часть ответа! Для тех, кто в теме вопроса/задачи не составит труда подобрать такой поисковый запрос, который максимально приблизит его к ответу (да, в собственной голове уже мало кто ищет ответы). Для новичка странные слова и символы из задачи выше покажутся плодом наркоманского прихода. И мозг сразу же потянется к первому пункту — забить!
Но погодите. Я предлагаю проанализировать задачу.
Видно, что есть как минимум две подзадачи.
Сразу разобьем их:
- написать и собрать свой helloWorld.jar,
- а потом запустить его в заданном docker-контейнере из примонтированной рабочей директории
Начнем с первой половинки. В принципе это уже готовый поисковый запрос. Но я бы его разбил его еще на два подпункта:
- написать свой helloWorld
- собрать jar (или другой пакет, в зависимости от твоего языка программирования)
Это два простых вопроса на которые уже есть хорошие ответы в интернетах и книгах — впитывай, экспериментируй.
Также можно разбить вторую половину задачи на подвопросы:
- кто такой Docker
- как запускать
- как монтировать/пробрасывать директории в контейнер
Уверен, что у новичка возникнут еще подвопросы для каждого из этих трех пунктов. И при должном усердии и внимательности, экспериментах — можно найти все ответы и сложить этот пазл.
Сколько на это должно уходить времени и сил — я не скажу! 😶
Но что если возникает вопрос/задача которая даже при декомпозиции вводит падавана в когнитивный диссонанс?
Вот тут и возникает необходимость общения с людьми и “задавания” вопросов. Но живые люди ленивые, ранимые. И если они слышат вопрос типа: “Как собрать сиреневенький глазовыколупыватель с полувыломанными ножками?”, то обычно отвечают: “А ты гуглить не пробовал?”... Может это и не вежливая реакция, ну а тупо перекидывать свою проблему на другую голову вежливо? Да и вообще — с таким же успехом можно сразу писать такое: “У меня не работает вот та приспособлень, сделай за меня!”.
Какую ты, %userName%, проделал работу и почему тебе должны помогать?
На второй вопрос, из двух последних, отвечу сразу: не должны помогать, это воля и решение другого человека (человеков), по его собственным причинам. А на первый должен ответить ты!
Есть некоторые способы поднять свою карму в глазах потенциальных отвечающих. И таки добиться качественных ответов на свои вопросы. Об одном из них я расскажу ниже.
Так как же задавать вопросы, але!?
Вот мы и добрались к сути — к алгоритму.
Для того чтобы, как минимум, поднять желание дать тебе ответ, %userName%, а как максимум чтобы ответ был найден тобой самостоятельно — рекомендую структурировать свой вопрос по примерно следующим пунктам:
- Что я %userName% пытаюсь сделать: (тут пишем суть задачи своими словами).
- Какие ошибки получаются в результате моих действий (тут нужно дать ключевые или полные стектрейсы ошибок в соответствующем оформлении, а не тупо сплошным текстом). То что ты, %userName%, уже постарался самостоятельно разобраться или хотя бы погуглить эти ошибки — само-собой разумеющийся факт!
- Какие действия я предпринял:
- Написал вот эту штуку.
- Скачал вот ту штуку.
- Прописал вот там конфиг (а вот и содержимое конфига в соответствующем оформлении).
- Запустил вот такой вот командой с вот такими вот аргументами.
- И т.д. пока не будут перечислены все действия от а до я, что касаются задания. Про “попил чаю”, “сходил в туалет” и “с каким успехом” — сообществу знать пока не стоит!
- Мои предположения о возникших ошибках, точнее об их причинах. Возможно вот есть такие вот способы решения (тут пишем дальнейшее видение решения).
Этот алгоритм и прост, и сложен одновременно. Сложно себя заставить ему следовать, а еще сложнее вот это вот все расписывать. Но этот алгоритм упростит решение непонятных вопросов/задач. Данный алгоритм сработает не только на общей задаче, но и на подзадачах к общей задаче. Его стоит прогнать через твою задачу более одного раза, исправляя на каждой итерации найденные баги и неточности. А потом уже стоит изливать свой вопрос в массы.
Еще немного про "помоганов": ответы дают такие же люди, со своими достоинствами и недостатками — сохраняй спокойствие, береги нервы, излучай вежливость.
Помоган — человек изъявивший желание помочь.
Как и почему это работает:
- Срабатывает эффект утенка (просто психологическая штука). Я, например, просто излагаю проблему колежанке или бомжу, главное, чтобы он внимательно слушал.
- При детальном формулировании собственного вопроса — %userName% лучше структурирует задачу и находит потенциальные баги в своих действиях и решениях.
- Человеку, который старается — хочется помогать.
P.S. Я не сам это придумал — это придумали до меня. Я лишь изложил своими словами. Но как только я сам начал следовать алгоритму:
- Я стал быстрее находить информацию.
- Мои коллеги перестали меня избегать.
- Я научился еще лучше формулировать свои мысли.
- Моя шерсть стала мягкой и шелковистой.
- Исчезло желание прокрастинировать, когда задача кажется невыполнимой.
Я надеюсь этот алгоритм нанесет тебе, %userName%, непоправимую пользу.