_____________________________ HOW TO ASK BETTER QUESTIONS _____________________________ SECOND DRAFT, RFC Being able to ask better questions is a valuable skill in all areas of life. This document in particular does this from the perspective of solving challenges/problems/questions/levels etc. It is not difficult to come up with good questions, and it is much better than begging for hints. Also, good questions mean that you are much more likely to get a better quality answer that can help you out. 1 Examples of Good Questions ============================ The following sample good questions are almost blatantly ripped off of [io.netgarage]. + Is X Y? + I did X, I got Y, but I expected Z. Which is wrong? + I solved X using Y. On the way I encountered Z, which I don't fully understand. Can you help fill the gaps/provide references to read? + What causes X? + Can X be solved without brute-forcing/guessing? + When solving X, I found Y to be weird. Is it important? Would the challenge still be solvable without it? + I wanted to do X, so I did Y. Is this a valid way to do X? + ... [io.netgarage] 2 How to come up with good questions ==================================== + Prune pointless queries. - "Can I ask you a question?" is a question that needs answering already. It saves time if you ask directly. + More important than the solution is the problem. Trying to understand that is much more useful. - Try not to fall into the [XY Problem] trap. In that case, people may answer Y without pointing out what X you got wrong. + In realistic scenarios, it is rarely helpful to focus on specific parts of solution. + Trying to figure out constraints may be useful (eg: "Is this solvable if XYZ is present/absent" etc) - Might not always be possible to do this in the real world + It is okay to confirm small assumptions. + Many short questions is better than one massive perfect question. + Make questions self contained. This allows you to clearly understand and formalize the assumptions you are making, and possibly even identify any incorrect assumptions you are making by yourself. + Simplify your question as much as possible, without losing core information. - Especially relevant if it involves code. For example, if some code is buggy, then dumping thousands of lines of code and expecting someone to help you debug is asking for too much. Try to come up with a minimal example: 5 lines are easier to read than 500. If it is impossible to shorten from a large code base, giving specific directions to see the problem helps massively (for example, "Line 123 produces X instead of Y", instead of "this code is buggy"). - Make sure to include relevant context. For example, if your question is "simplified" down to "why is XYZ showing up?" without any context of where, or in relation to what, then no one can really help you. Sometimes, it is sufficient to point out a single link, or program, or contest. + Mention what approaches/solutions you've tried - It shows that you've put some effort in - It allows skipping past possibilities that did not work - However, do NOT make it a tragic backstory, and dump it as a story and hope that any vague reference to a mistake is picked up and corrected. + Reformulate your assumptions/discoveries as questions - X means Y --> Does X imply Y? - X is Y, thus Z --> Is X Y? Does Y imply Z? + Do not grovel. It is a waste of time and words. - "I am just a newbie" etc, gains you nothing. [XY Problem] 3 FAQ ===== + Can you help debug? *posts screenshot of code/exploit/etc* - Seriously, can you please stop sending screenshots for code?! *mashes delete button* + I am stuck on Challenge X. - OK. Where? How? Why? What have you tried? How am I supposed to read your mind. I wish I was Professor Xavier, but I am not. + Can I use X to do Y? - I don't know. Why don't you try it and see? If you've tried it and it doesn't work, then mention that, with details of what didn't work. + I got this *posts a random key/phrase/code/website link*. Can you help? - What is this even regarding? How am I supposed to help? What is the context? What do you need help in? I can't read minds. Please re-read the notes above. + Where can I find a program to do X? - [LMGTFY] + I am unable to install/run X. Please help. - [LMGTFY] + Can you help me hack Gmail / FB / Twitter / etc. ? - Not only is this illegal, it is despicable that you are even asking this. + I just installed Kali Linux as my first Linux distro. - Kid. Oh dear kid. Oh kiddie. Stop using Kali. A much better "first" Linux distro is actually [Ubuntu]. Start learning proper fundamentals, if you want to "hack". I strongly recommend [OverTheWire], starting with "Bandit". At some point, also try out [io.netgarage]. [LMGTFY] [Ubuntu] [OverTheWire] [io.netgarage] 4 References ============ + + +