How to put questions to a mentor or a senior developer
Let's talk about the rules for communication between developers. Or, rather, junior developers and senior developers. It doesn't matter whether we speak about the "teacher-student" relations or the "senior-junior" relations, there are specific ways to improve communication between you and more experienced programmer.
Attention: recommendations stated below don't concern interesting questions that are not connected to the specific problem, but connected to understanding important and unevident things that one usually can't find by googling.
Don't ask questions
First of all, you should make sure if the question is worth spending your and your colleague's\mentor's time. That's why you should first ask yourself several questions:
- Have I examined the documentation on the technology I use?
- Have I spent several hours reading sources or solving my problem any other way?
- Have I checked if there is information I need in google?
If the answer to all of these questions is "yes", then you really need your colleague's\mentor's help. Move to the next point.
Describe what you are trying to do.
Describe the problem you are trying to solve and the result you want to get in detail. It will be better to explain additionally why you are trying to solve this problem in the first place (in cases when it is not obvious). Probably you will be offered an entirely different solution.
Describe what you have already tried to do.
It will be easier if the person you turned to knows all you have already tried to do. It will save time for both of you because he won't offer the solutions that definitely won't work as they are already tested.
Give as much details on your attempts as possible, add links to the materials, forums used, StackOverflow etc.
Give some code examples
Show the code that doesn't work to the developer by all means. Don't say "I wrote an application and it doesn't work" under any circumstances. What exactly doesn't work? Which error message? What is in the logs?
Use services like gist.github.com or pastie.org to publish segments of code. The more you publish and show to your victim, the better :)
Ask a question
And now the most important thing: try strongly to avoid simple "What should I do?" Offer some choices. Make a list of possible solutions to the problem and ask if any of them is suitable.
In general, endeavour to reduce the time you and the developer you turned to together spent on solving your problem. Theoretically, after providing all the information and the question itself you should get a specific succinct answer and immediately get back to solving the problem on your own.
I always try to spend several hours minimum on solving the problem by myself. That's the only way you learn something. Appreciate your and your colleague's\mentor's time and learn to solve the problems on your own. :-)
P.S. I wonder if these recommendations are appropriate for the other fields.