It’s very rare in software development a developer can work out things all by him/herself. At least not for me. During my work I have encountered all kinds of problems, puzzled and exhausted by them from time to time. But with the right approach, asking the right question to right people, and lots of luck, most of time I was successful.
First I want to admit I was a bit shy when I started working for my current employer. And I was not very good at programming lanuages C/C++ either. When I encountered some simple problems regarding the syntax, I always tried to figure out myself — don’t want to show my ignorance before my colleagues. I extended this good habit a bit too far. When I have real problems such as algorithm or functionality, I usually spent too much time trying to do it all by myself. Sometimes my project manager/leader had to come to me and rescue me.
On the other hand, I think it’s good for a developer to do his/her own work, get some feel about the real problem, and even have some vague ideas about the solutions before he/she approaches somebody for help. Although these days most companies have the “open-door” policy, which means you can go to your boss’s office or colleagues’ cubicles at any time. You still want to show them you did your homework. Remember they also have their own priorities, you can not expect they give you the answer without any meaningful contribution from you. I think this applies more toward algorithm, functionalities and other meaningful questions. Another factor to consider is “urgency of task”, if your boss need it by yesterday, go ahead and ask for help and get an answer as soon as possible. Otherwise you may want to exercise your brain a little and do more homework before asking for help.
For simple questions related with code conventions, syntax and development environment, you can just go and ask. That will save you some time. I used to be responsible for the development environment of my group. I have a coworker who usually asks me questions about Unix; and another coworker asks me questions about Windows. I believe I saved them some time because I usually solve their problem in a short period.
Sometimes you can get answer yourself just by describing the problem to somebody else. I believe if you formalize things in words (rather than do all work in your head), the answer will become more obvious.
These days Email is used widely in the business world. It has some advantages. Sometime you want to ask questions to multiple people. Because you don’t know who has the expertise, and who will have the answer. Or you want to people to discuss about the problem. Sometimes the person you want to ask is at the other side of the globe. But I still enjoyed “face to face discussion” as much as possible. We programmers communicate with computer all the day, why not leave some time for human interaction? Besides that your colleague maybe bored with his program too.
Another thing about email is that the repliers have different levels. Some people can write a clean answer for a difficult problem; some people can make a problem more confusing. My advice is whether people give you good answer or not, you need to do own homework and solve the problem. You can ask different people for the same problem.
The last thing about asking question is don’t make it accusatory. Suppose you found a bug made by another developer and have some questions about it. Your problem is caused by his/her bug. Don’t take it personal and make the other person look like an idiot; or feel good about other people’s mistakes. Remember you will make mistakes too. Simply point out the problem and politely ask for a fix. This way people are more willing to help you out and you will only get more respect.