Delete 20211021 How to get useful answers to your questions.md

This commit is contained in:
Xingyu.Wang 2021-10-22 10:14:09 +08:00 committed by GitHub
parent 2a1401b57c
commit b8e59474c5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,183 +0,0 @@
[#]: subject: "How to get useful answers to your questions"
[#]: via: "https://jvns.ca/blog/2021/10/21/how-to-get-useful-answers-to-your-questions/"
[#]: author: "Julia Evans https://jvns.ca/"
[#]: collector: "lujun9972"
[#]: translator: " "
[#]: reviewer: " "
[#]: publisher: " "
[#]: url: " "
How to get useful answers to your questions
======
5 years ago I wrote a post called [how to ask good questions][1]. I still really like that post, but its missing a few of the tactics I use to get useful answers like “interrupt people when theyre going off on an irrelevant tangent”.
### what can go wrong when asking questions
Often when I ask a vague or underspecified question, what happens is one of:
1. the person starts by explaining a bunch of stuff I already know
2. the person explains some things which I dont know, but which I dont think are relevant to my problem
3. the person starts giving a relevant explanation, but using terminology that I dont understand, so I still end up being confused
None of these give me the answer to my question and this can be quite frustrating (it often feels condescending when someone embarks on a lengthy explanation of things I already know, even if they had no way of knowing that I already know those things), so lets talk about I try to avoid situations like this and get the answers I need.
Before we talk about interrupting, I want to talk about my 2 favourite question-asking tactics again asking yes/no questions and stating your understanding.
### ask yes/no questions
My favourite tactic is to ask a yes/no question. What I love about this is that theres a much lower chance that the person answering will go off on an irrelevant tangent theyll almost always say something useful to me.
I find that its often possible to come up with yes/no questions even when discussing a complicated topic. For example, here are a bunch of yes/no questions I asked a friend when trying to learn a little bit about databases from them:
* how often do you expect db failovers to happen? like every week?
* do you need to scale up by hand?
* are fb/dropbox both using mysql?
* does fb have some kind of custom proprietary mysql management software?
* is this because mysql and postgres were designed at a time when people didnt think failover was something youd have to do that frequently?
* i still dont really understand that blog post about replsets, like is he saying that mongodb replication is easier to set up than mysql replication?
* is orchestrator a proxy?
* is the goal of the replicas youre talking about to be read replicas for performance?
* do you route queries to a shard based on the id youre searching for?
* is the point that with compression it takes extra time to read but it doesnt matter because you almost never read?
The answers to yes/no questions usually arent just “yes” or “no” for all of those questions my friend elaborated on the answer, and the elaborations were always useful to me.
Youll notice that some of those questions are “check my understanding” questions like “do you route queries to a shard based on the id youre searching for?” was my previous understanding of how database sharding worked, and I wanted to check if it was correct or not.
I also find that yes/no questions get me answers faster because theyre relatively easy to answer quickly.
### state your current understanding
My second favourite tactic is to state my understanding of how the system works.
Heres an example from the “asking good questions” post of a “state your understanding” [email I sent to the rkt-dev mailing list][2]:
> Ive been trying to understand why the tree store / image store are designed the way they are in rkt.
>
> My current understanding of how _Docker_s image storage on disk works right now (from <https://docs.docker.com/engine/userguide/storagedriver/imagesandcontainers/>) is:
>
> * every layer gets one directory, which is basically that layers filesystem
> * at runtime, they all get stacked (via whatever CoW filesystem youre using)
> * every time you do IO, you go through the stack of directories (or however these overlay drivers work)
>
>
> my current understanding of rkts image storage on disk is: (from the “image lifecycle” section here: <https://github.com/coreos/rkt/blob/master/Documentation/devel/architecture.md>)
>
> * every layer gets an image in the image store
> * when you run an ACI file, all the images that that ACI depends on get unpacked and copied into a single directory (in the tree store)
>
>
> guess at why rkt decided to architect its storage differently from Docker:
>
> 1. having very deep overlay filesystems can be expensive
> 2. so if you have a lot of layers, copying them all into a directory (the “tree store”) results in better performance
>
>
> So rkt is trading more space used on disk (every image in the image store gets copied at least once) for better runtime performance (there are no deep chains of overlays)
>
> Is this right? Have I misunderstood what rkt does (or what Docker does?) Are there other reasons for the difference?
This:
* states my goal (understand rkts design choices)
* states my understanding of how rkt and docker work
* makes some guesses at the goal so that people can confirm/deny
This question got a [great reply][3], which among other things pointed out something that Id totally missed that the ACI format is a DAG instead of a linked list, which I think means that you could install Debian packages in any order and not have to rebuild everything if you remove an `apt-get install` in the middle of your Dockerfile.
I also find the process of writing down my understanding is really helpful by itself just to clarify my own thoughts sometimes by the time Im done Ive answered my own question :)
Stating your understanding is a kind of yes/no question “this is my understanding of how X works, is that right or wrong?”. Often the answer is going to be “right in some ways and wrong in others”, but even so it makes the job of the answerer a lot easier.
Okay! Now lets talk about interrupting a little bit.
### be willing to interrupt
If someone goes off on a very long explanation that isnt helping me at all, I think its important to interrupt them. This can feel rude, but ultimately its more efficient for everyone its a waste of both their time and my time to continue.
Usually Ill interrupt by asking a more specific question, because usually if someone has gone off on a long irrelevant explanation its because I asked an overly vague question to start with.
### dont accept responses that dont answer your question
If someone finishes a statement that doesnt answer you question, its important not to leave it there! Keep asking questions!
a couple of ways you can do this:
1. ask a much more specific question (like a yes/no question) thats in the direction of what you actually wanted to know
2. ask them to clarify some terminology you didnt understand (whats an X?)
### take a minute to think
Sometimes when asking someone a question, theyll tell me new information thats really surprising. For example, I recently learned that Javascript async/await isnt implemented with coroutines (I thought it was because AFAIK Python async/await is implemented with coroutines).
I was pretty surprised by this, and I really needed to stop and think about what the implications of that were and what other questions I had about how Javascript works based on that new piece of information.
If this happens in a real-time conversation sometimes Ill literally say something like “wait, thats surprising to me, let me think for a minute” and try to incorporate the new data and come up with another question.
### it takes a little bit of confidence
All of these things being willing to interrupt, not accepting responses that dont answer your questions, and asking for a minute to think require a little bit of confidence!
In the past when Ive struggled with confidence, Ive sometimes thought “oh, this explanation is probably really good, Im just not smart enough to understand it”, and kind of accepted it. And even today I sometimes find it hard to keep asking questions when someone says a lot of words I dont understand.
It helps me to remember that:
1. people usually want to help (even if their first explanation was full of confusing jargon)
2. if I can get even 1 useful piece of information by the end of the conversation, its a victory (like the answer to a yes/no question that I previously didnt know the answer to)
One of the reasons I dislike a lot of “how to ask questions” advice out there is that it actually tries to _undermine_ the readers confidence the assumption is that the people answering the questions are Super Smart Perfect People and youre probably wasting their time with your dumb questions. But in reality (at least when at work) your coworkers answering the questions are probably smart well-meaning people who want to help but arent always able to answer questions very clearly, so you need to ask follow up questions to get answers.
### how to give useful answers
Theres also a lot you can do to try not to be the person who goes off on a long explanation that doesnt help the person youre talking to at all.
I wrote about this already in [how to answer question in a helpful way][4], but the main thing I do is pause periodically and check in. Ill often say something like “does that make sense?“. (though this doesnt always work, sometimes people will say “yes” even if theyre confused)
Its especially important to check in if:
1. You havent explained a concept before (because your initial explanation will probably not be very good)
2. You dont know the person youre talking to very well (because youll probably make incorrect assumptions about what they know / dont know)
### being good at extracting information is a superpower
Some developers know a lot but arent very good at explaining what they know. Im not trying to make a value judgement about that here (different people have different strengths! explaining things is extremely hard to do well!).
Ive found that instead of being mad that some people arent great at explaining things, its more effective for me to get better at asking questions that will get me the answers I need.
This really expands the set of people I can learn from instead of finding someone who can easily give a clear explanation, I just need to find _someone_ who has the information I want and then ask them specific questions until Ive learned what I want to know. And Ive found that most people really do want to be helpful, so theyre very happy to answer questions.
And if you get good at asking questions, you can often find a set of questions that will get you the answers you want pretty quickly, so its a good use of everyones time!
--------------------------------------------------------------------------------
via: https://jvns.ca/blog/2021/10/21/how-to-get-useful-answers-to-your-questions/
作者:[Julia Evans][a]
选题:[lujun9972][b]
译者:[译者ID](https://github.com/译者ID)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://jvns.ca/
[b]: https://github.com/lujun9972
[1]: https://jvns.ca/blog/good-questions/
[2]: https://groups.google.com/g/rkt-dev/c/bhGeR3pUfPY
[3]: https://groups.google.com/g/rkt-dev/c/bhGeR3pUfPY/m/PYEKLIr9AwAJ
[4]: https://jvns.ca/blog/answer-questions-well/