Hacker News new | past | comments | ask | show | jobs | submit login
How to Ask Questions the Smart Way (2014) (catb.org)
96 points by chippy 14 days ago | hide | past | favorite | 47 comments

This is a long article and the first bits comes off fairly condescending so I stopped reading…but one thing caught my eye:

“If you are a programmer, try to find an answer by reading the source code”

This is basically a superpower at any large tech co if only because few people do it, even though we’re literally all capable of it. When I inherit or start interfacing with a new service, the first thing I do is checkout the code and peruse through it. Even just 30-45 minutes, for an experienced engineer, is enough to get a feel for the layout of things. Then when you have a question about “How does X service handle Y scenario” you can just go read the code and know the answer exactly.

I can’t tell you how many times I’ve had the answer to a question and get something like “dang rco8786 how do you know so much about how everything works” and invariably my answer is just “I read the code”.

Maybe it's because I'm a less experienced programmer, but I find I have a lot of trouble understanding source code if I'm not trying to find or change something specific. I can't read it like a book, I have to experiment with it.

It's definitely a skill that takes time to develop, but don't be discouraged! Even reading code in the way you are now is helping you develop this skill.

Your ability to navigate a codebase, to able to see how its components relate to each other and to the effects the software has on the external world, is the perhaps the most valuable skill you can develop as a programmer. If you also have strong communication skills, you will go far.

I don’t typically read to understand anything in depth unless im doing something like that. But just poking around the folder structure, seeing what the api looks like, the background jobs (usually pretty descriptive in their names), database structure, etc gives you a good feel for high level functionality and then more importantly when you want to answer a more specific question you know right where to go look.

Sometimes a question will come up during a meeting, nobody knows the answer, so I’ll just pull up the source and because it’s already handy and since I know the structure I can find the answer in a matter of seconds.

From a different set of essays titled How To Be A Programmer ( https://github.com/braydie/HowToBeAProgrammer ) - How to Conduct Experiments https://github.com/braydie/HowToBeAProgrammer/blob/master/en...

The entire set is good and I occasionally go back and revisit them.

If you're willing to consider a piece of advice, even the most complex rude goldberg-style codebases will yield to the program entry point. From there, you can start pulling at the wool and process it one knot a time.

It's tedious, slow work, but you can use note-taking, the REPL, tests (reading, if any, but also writing them), diagrams or any other tool for creating mental models until you manage it.

One thing that can help with certain scenarios is to think of it like debugging. "I thought when I did X, Y would happen, but instead Z happened - let me figure out why".

unfortunately "read the code" doesn't always mean "understand the code".

You can get lost in certain codebases.

Maybe. At the end of the day it’s all just code. Some is easier to understand than others. Sure.

Being able to ask questions well, be it in public online or in the workplace, is a skill worth developing (as is answering such questions). I compiled a shorter and hopefully more actionable list of similar guidelines based on a few different jobs in the tech industry and public sources, including this one.


Thank you for making this, I think it's a good primer.

What a pretentious bunch of gatekeeping nonsense.

Clearly, ESR (and anyone following the tenets of documents like this) are not actually interested in teaching anyone anything. They have a truly transactional perspective on "Question Asking" in that some questions are "worthy of answering" and others aren't. People who "Take without giving back" (his words) are exactly those who you're teaching. They absorb knowledge directly from those providing the answers.

Teaching is the act of understanding where your audience is in the learning process, and leading/guiding them through that journey in a kind and patient way. The truly ignorant don't know how to ask the question. Think of a child who's first learning computer programming. Think of an adult who's studying a foreign language for the first time. Think of the questions of a child who's never experienced snow.

> What we are, unapologetically, is hostile to people who seem to be unwilling to think or to do their own homework before asking questions. People like that are time sinks — they take without giving back, and they waste time we could have spent on another question more interesting and another person more worthy of an answer. We call people like this “losers” (and for historical reasons we sometimes spell it “lusers”).

And this is why "internet hostility" is a thing. Good job creating this horrible culture right from the start.

Please don't follow the advice of this column. Be patient. Encourage anyone and everyone to ask questions, even if they're "duplicates" or "easy to answer". Use the Socratic Method (ask questions that lead to more questions). Actually teach people things.

> Please don't follow the advice of this column. Be patient. Encourage anyone and everyone to ask questions, even if they're "duplicates" or "easy to answer". Use the Socratic Method (ask questions that lead to more questions). Actually teach people things.

That's the thing though, this is advice for people asking questions, not answering them. If you are advising someone on how to ask questions on the internet, telling them how to avoid being called a "luser" is very good advice!

He actually does give advice for people answering questions at the end, and he definitely encourages them to be more gentle and helpful. But it is important not to waste the time of people who are providing what is essentially complex technical consulting for free.

BTW, this is also good advice for asking questions in a professional setting. Not being someone who needs to be spoon-fed information is always going to make you more respectable.

> Teaching is the act of understanding where your audience is in the learning process, and leading/guiding them through that journey in a kind and patient way.

But the article is written as instructions for asking questions to non-teachers, and is a flawed but generally decent guide to that. I'm an educator turned software engineer and one of the difficult parts of that transition was learning that I had to stop answering most questions that weren't "worth answering". While I'd love to teach the people answering these questions I don't have the time, it's not my job, and often the ROI is low (many people asking questions don't want to spend the effort needed to learn, they want a problem to be solved for them).

Edit: OK, I've calmed down. It might not be worth reading what's below this paragraph. The TL;DR is: The cost of helping people is high, it takes time and energy from you. There are people who don't care about your time and energy, they'll use you as much as possible. These people are called help vampires.

>Please don't follow the advice of this column. Be patient. Encourage anyone and everyone to ask questions, even if they're "duplicates" or "easy to answer". Use the Socratic Method (ask questions that lead to more questions). Actually teach people things.

I will not do this unless the person I'm teaching is showing a willingness to dedicate their own resources to the issues at hand. I'll do this for my own child, but if you seriously apply this online at big forums you'll get infested with help vampires. Help vampires F:ing SUCK, for real. You speak with a lot of pathos and like you've never have tried to help people a lot and had to deal with these. These people will do anything to take your energy and time away from you. They'll ask a question that's answerable in the FAQ, you'll direct them there, and they'll say "oh, it's just nicer to speak to people, can't you tell me :)?" or "my situation is very special, it's not answered by the FAQ".

I'm ranting, but holy crap having to deal with help vampires completely destroys your outlook on these things.

It would be better to help zero people than it would be to develop the bitter attitude you've developed - this is because your attitude could prevent people from helping!

I feel you've helped too many people, with too little reward, and for that matter with too little progress in your ability to help.

That's not the fault of the people needing help, though, now is it? So why are you characterizing them as vampires?

IMO rather than embittering people against helping others, you should retire from helping ppl that aren't paying for your help. That way, you'll stop embittering and misguiding helper volunteers, whose jobs literally ARE to help people who don't seem to "get" the docs.

You're denying a person's lived experience and telling them to stop doing what they love. That's not very nice.

And I know what they're talking about. I'll put it a bit more politely: You can't help people who aren't willing to help themselves.

It's a thing. When you start helping out people in forums or on irc or what have you, sooner or later you'll encounter people who either can't be helped or just require far too much energy. No matter how much you'd like to help everyone, you just can't. It happens.

I believe parent poster has already calmed down, but I can understand their feelings. It's frustrating sometimes!

The many people you are able to help make up for it though.

like I said it's better to not help people at all than to evolve the attitude that some people don't want to help themselves. people typically want to help themselves but don't know how, and might have self-defeating habits - that's not a moral failing though, that's just how people are, and what educators must overcome.

When a helper fails to advocate for these people, it's wrong to conclude that they didn't want the help - a moral judgement. The help being offerred might not have been good enough, or the person might not have been ready for help.

In the end, whenever we do get to help someone we should be happy (since that improves the work. But when we fail someone - or we think someone has failed themselves - we should not be bitter, but become better at finding those who we can help, and improving what we offer to those we help.

I don't think you would doubt any of what I said. Instead, I think you're here to defend a morally negative view of students and others who "do not want to work" for the help. And I think that's wrong.

In roughly 90-99% of all cases, we are in agreement. And if you only encounter a few difficult <students> a year, it can definitely be worth the effort.

On the other hand, if you're in a situation where you're encountering random people on the internet at a rate of say 10-100 (or more) per day (possibly never to return); then the way you deal with it is you look for signs that the person has been trying. If they have: you go out of your way to help them, you absolutely do. But if they haven't, sometimes all you can do is hope that one day they'll run across someone like you in real life, who can teach them kindness and respect and humility.

I'm curious now, in what kind of environment have you worked? Are you a teacher?

see also: https://en.wiktionary.org/wiki/help_vampire

I agree with the other commenter, though maybe with less profanity.

Think of it this way, helping people is good, right? So you should help the people who are trying to help you.

> this is because your attitude could prevent people from helping!

Likewise, the attitude of people who put in minimal effort and expect lots of effort from volunteers causes the volunteers to burn out and makes it less likely that people will help you. Heck, even if they don't directly quit, they'll even end up with other people telling them to stop helping people.

Basically the thesis is that we can make needy and hapless students less needy and more self reliant by publicly roasting the most needy and hapless students among them. So basically lets bully the students into being more competent, because we're sad that our naive approach didn't help them.

That's an ethically bankrupt position, and I reject it.

You're simply wrong here. Any teacher who starts to be paranoid about the ineptitude of their students will be MISERABLE. Instead, teachers must establish better boundaries, and better materials and methods for their students.

For instance, I've /been/ the hapless student, and you probably have been too. I've asked silly X-Y questions. I've refused to read the docs before asking questions that have been asked millions of times before. And what helped me was people linking me to articles on how to ask good questions and how to get good answers and generally how to help and be helped.

Throwing in the towel and saying "man these students are just too lazy and expect too much" is not going to help the community, and it's not going to make the students magically ask more insightful and considerate questions. In my experience working with tutors, professors, mentors, and students in both professional, open source, and academic contexts, no skilled and happy teacher thinks or talks this way about their students.

So if you want to relate to students this way, just realize that it's no better than haplessly trying to help everyone in the first place:

- It still burns you out and makes you miserable (in fact, it's the one of the end stages of burnout)

- It still fails to make your students more self-reliant

If that's what you want, please continue to denigrate people who, after all, simply want to be helped and don't know how to be helped.

No one has put forward the thesis that one should roast needy and hapless students!

Rather the opposite. Though this document is written for people who ask questions, see also the section on how to help.

http://www.catb.org/~esr/faqs/smart-questions.html#idm667 (How To Answer Questions in a Helpful Way )

(Of course: this is ESR. He's ... opinionated. But does seem to have his heart in the right place in the end)

You're the one who wants to bully everyone who disagrees with you.

The document is harsh, but not mean, and not wrong.

If you've ever tried helping out large numbers of people online, you'll have encountered most -if not all- of the described situations yourself.

ESR is definitely a bit of a personality though. Better versions of the document appreciated.

I think we mostly agree, except that I'm not sure how it could be improved: it's clear, to the point, and has numerous concrete examples.

Criticisms of tone are more subjective, but I don't think they hold up here either. It lacks the structural characteristics of a flame or rant, nor does it portray anyone in an uncharitable light: both the perspectives and needs of those asking and answering questions are presented fairly.

The article asks for basics like attempting to make a reasonable effort to research an answer on your own first, making sure that your question is appropriate for the place you're asking it, and providing enough information for potential answerers to easily help you. That's not "gatekeeping", that's common courtesy, and I am unable to fathom how anyone could view it otherwise.

This is advice to individuals on how to be more effective at finding answers to their own questions, and how to reduce the burden on those who are willing to help.

If you want to be effective at getting answers, please do follow this advice.

If you don't want to be impolite and entitled, please do follow this advice.

I think this advice is largely geared toward dealing with the "Eternal September" dynamic of a small number of elders/experts being overwhelmed by exposure to the general public in relatively unstructured forums like Usenet and mailing lists (despite being tagged 2014, the original is much older). I'm not sure we really live in that world anymore.

We do still live in that world: in technical mailing lists and forums and even in Q&A sites, asking a good question rewards you with better answers and discussion than asking a badly worded form of the same question.

Genuinely, I think you may be getting upset about the tone more than the contents. The advice is generally good (if outdated). If you follow it you will generally answer more of your own questions faster, and when you do need to ask questions they will be easier to answer because they will highlight your misunderstanding or problem.

I'm saying this as some one who answers newbie programming questions on the internet. Trying to help some one who has not put any effort into understanding is taxing.

> Teaching is the act of understanding where your audience is in the learning process, and leading/guiding them through that journey in a kind and patient way. The truly ignorant don't know how to ask the question. Think of a child who's first learning computer programming. Think of an adult who's studying a foreign language for the first time. Think of the questions of a child who's never experienced snow.

These are all allowed - "I'm trying to learn more about <topic>, I searched for <a,b,c> and the results did not seem related, can some point me in the right direction?".

I agree. The guide is ostensibly written to explain to people how they should ask questions but a "newbie" is unlikely to read this 11,000 word epic. The real purpose of this guide is telling hackers how they should behave, promoting arrogant hacker culture. For example:

"If you can't be bothered to do that, we can't be bothered to pay attention. [If you ask for help, hackers] are likely to return logically impeccable but dismissive answers like “Yes, you can be helped” and “No, there is no help for you.” Claiming urgency is very likely to be counter-productive: most hackers will simply delete such messages as rude and selfish. There is an ancient and hallowed tradition: if you get a reply that reads “RTFM”... [If you screw up] you'll be told exactly how you screwed up, possibly with colourful asides. Hackers are in some ways a very ruthless meritocracy."

The guide also has "yikes" parts such as: "Seriously overusing smileys and color and fonts will make you come off like a giggly teenage girl, which is not generally a good idea unless you are more interested in sex than answers."

The fact the bully agrees with you says nasty things about your opinion.

its unfortunate that ESR has always been a little snooty, but I guess that's what gave him the gumption to go publish and maintain all this internet history.

The fact the bully agrees with you says nasty things about your opinion.

> What a pretentious bunch of gatekeeping nonsense.

So you're opposed to people be respectful of the time and attention of others?

What an interesting and unique perspective.

Please go on.

It’s more easy to just state something you are unsure about as though it was a fact and then wait for someone knowledgeable to object. They always do!

The Barrens Chat Law

It's half of the reason I post on the internet.

While this may be brutally honest. I find the SO version quite approachable and just generally good advice for newcomers. https://stackoverflow.com/help/how-to-ask

How To Answer Questions The Smart Way (2015): https://skippy.net/how-to-answer-questions/


Ok, but in that case please don't replicate the shittiness and bitterness here. We're trying for something else on this site.


I do like this document, but this is worth a read:


It's really not worth the read.

The whole point of the rationalist movement what to develop better intellectual hygiene, which meant taking people at their word and arguing against their ideas in good faith (Scott Alexander being the best demonstration of this).

To see essentially partisan political flame bait penned under the auspices of alleged rationality is pretty off-putting.

It's my impression that RationalWiki and rationalism are quite orthogonal.


But I agree with your comment otherwise.

Ah, that makes more sense. My thanks to you and Kim_Bruning for the clarification!

As far as I know rationalwiki is more of a skeptics wiki (defined as being anti pseudoscience, cranks, etc.). The quality is variable.


* https://rationalwiki.org/wiki/Main_Page

Applications are open for YC Summer 2023

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact