Like many of the things you do in your lives, Googling is an art. Getting to the right page that you were looking for, with the right set keywords and clicking the right links, all this seems to be quite random and uncertain, but once you get into the groove, things become natural and predictable. Finding that random song you heard on the street is no big deal, and neither is finding the article that you had read couple of years ago, the only part of which you remember was the author's last name. Information is growing each day, and having the right set of tools always within you is so much important. Yes, there's that shiny history feature in you latest Chromium browser with sync, so that you never lose your tracks, but knowing how to find something on a totally random public PC without having to look into your history is very convenient, also cool.

But then, you might ask, what is the point of remembering a whole new set of rules just so that I could type in proper queries on Google's homepage? Yeah, if you think about it this way, not much. Every other site has a search functionality built into it. But, think. Googling for a computer problem with site:stackoverflow.com and searching the same problem on stackoverlow's search is somewhat different. Stackoverflow doesn't invest as much time on search optimization as Google does. That is the case when stackoverflow's search is one of the best you can find on the Internet. Think about others. Now, every site having its own search has its own small set of advance search syntax. Would you go around memorizing rules from each and every site that you visit? Are you not better off memorizing for just one site and using it to find everything else? In my opinion, yes.

And learning how to google or how to search in general doesn't just mean memorizing the dorks, although it does certainly help. It generally means asking better questions. What does that mean? Well, in general, the more you research before asking a question, the more are the chances of you getting a proper and to the point answer. That doesn't just apply to online searches, but also when asking for help to your fellow classmate or colleague. The research helps in a number of ways. Firstly and most importantly, it can spare you the need to ask for help by finding the answer yourself. Secondly, research also helps to properly understand your problem's causes, such that any similar problem can be solved with the same approach. Thirdly, it creates a psychological difference in the mind of the answerer when he or she reads a "this code doesn't work" and a "this code throws a undefined variable error on line 42" and a "the 'name' variable on line 42 is undefined as the async function on the previous line hasn't returned yet.". As you see for yourself, the third problem definition is far more probable to get answered, and the first one is likely to get ignored (or worse, downvoted, if you're on StackExchange).

I have people who send me program source code files in emails and the only line of text inside of the email being the obvious title that 'the code doesn't work'. That is where the problem lies. When all you say is 'it doesn't work', then the only reply that you deserve is 'congratulations on figuring that out'. It's that simple. And to understand the importance of it, you need to value the time of others.

So how does one turn from a naive help addict to his or her own problem solver? The answer is simple, know what the problem is and start searching for already answered questions. You always have documentations and manuals at your disposal, but let's face it, it is not easy to get hold of manuals if you're new to the subject. And even if you're well versed with the topic in hand, you can always save time by searching the popular forums first. So what do you do? You search for the exact problem message, or keyword, keeping it as concise as possible. Trust me, the query string is all that matters, because rarely you'll encounter a problem that somebody else didn't face and asked somewhere. You want to keep the variable count low, and so if you're learning A, use popular libraries and operating systems B and C that would keep the entropy factor low. As an example, if I'm not hacking into linux core and simply programming Javascript, I prefer to use Debian and Nodejs stable, just to make sure that when I fall into a ditch, the ditch is a popular one.

In case you still didn't get a working solution, now start to dig into documents and manuals. It is usually the case when the component that you think is broken, isn't actually broken. Look out for platform specific notes and details. Troubleshoot your way backwards to the line where your code broke. If you manage to find that out, then you know the problem. Start by making a fresh google search for that error. In most of the cases, a forum thread might have the answer, which you can find easily with [SOLVED] in their titles. There are also many instances when if you are working with an open source dependency, you'll find the issue raised by somebody on the project issues section of their repository [like github issues page]. Reading those has helped me countless times.

If even then, in the rare (very rare with computer problems) case that you still haven't found a solution for your problem in the online forums and documentations, start by properly defining the problem. It is time to ask for help. Always, ALWAYS remember, the people you're asking questions to, are busy people. If you want to have a percent chance of getting your question read by experts, value their time. The essential things that must be included in every help request are,

  • Precise problem definition with the problem and the current and expected results.
  • Steps to reproduce it. Code snippet that points the line of error (You should never paste 200 lines of code into the question).
  • What have you tried yet. List of the things that didn't work out.
  • The platform you're running, everything relevant to the problem. More the detail, better is the understanding of your situation by the reader.
  • A paste of your latest logs relevant to the error. Learn to use pastebin like sites to paste large text files.
  • The links to those similar problem-answers that didn't work for you.
Add or remove things depending upon the situation. It may or may not apply every time. Important thing here is, try to be a problem solver. Don't be part of the problem, but try to be part of the possible solution. It is okay if no one answers, but hang there for the first 30 minutes at least, in case someone asks for more details that you didn't provide.

This should really answer your question, and in case not, don't lose hope. There are hundreds of specialized forums that you can head to, if the problem is that important to you. Back to Googling, what is it that some people better at finding stuff on the Internet than others? Now you know the answer to that. See, this is how it generally works. Most good questions are answered. Now that you know how good questions are asked, you know what is inside them. You can make a pretty educated guess about what an existing question may contain. Now your task is as simple as just using those keywords to find that answer. This works. Trust me.

Concluding it, I hope this post was informative. Ask wise questions. People really appreciate when you ask good questions. They say no question is stupid. That is not an excuse to not trying to search from the existing resources, or being a naive help addict. Keep exploring.