Have you ever had a question you wanted to ask, but didn't?
Have you ever asked a question then immediately regretted asking it?
Have you ever been asked a question that made you rethink the problem you were trying to solve?
Have you ever struggled along a problem, broke down, asked somebody, and got an immediate answer?
Questions have the power to expose problems, gather information, refine solutions, and save time. Questions can also waste time, make people feel stupid, and shift discussion to the wrong topic. Knowing what questions to ask can be the difference between an average developer and a great developer. Questions cause learning but can also be scary to ask. However, there are times when developers must be brave and ask difficult questions.
Questions Induce Learning
If you don't think critically and ask questions, you won't learn anything. Since learning is a huge part of a developer's job, questions need to be asked on a frequent basis. Three major types of questions asked by developers are about details, concepts, and opinions.
When adding code to a large codebase, it often saves time to ask another developer how the details of some code works. When a developer is asking a question about code, there is a good chance that there is some opportunity to refactor. Like a dog, code is usually only clean if you just got done cleaning it. So make sure to ask questions and refactor accordingly whenever possible.
There are too many concepts for one developer to know in the software industry, so they specialize. Since they can't specialize in everything, questions are a necessity. I have found that passionate developers will never be bothered by questions about their specialty. They love their field and they love sharing knowledge.
Another question you won't see a passionate developer turn down is one that is asked to investigate an opinion. The code in an application is a reflection of the developer's knowledge and opinions. Understanding these opinions is crucial to writing code that matches the rest of the application and forming your own opinions. It is important to understand the intent behind the code before you change it, even if the style is harmful or messy.
Questions Are Terrifying
Nothing gets the nerves firing more than asking a question when you are uncomfortable. When I was an apprentice asking questions was very intimidating at times. The major fear is that I would be exposed as being a complete n00b. That fear was pretty valid because I was a complete n00b. I eventually realized that asking good questions earned myself respect as a developer.
During a code retreat I got to pair with somebody new to developing software. Our pairing session was pretty ineffective because my pair was afraid to ask me questions. He knew conceptually how to solve the problem, but wasn't familiar with Ruby's syntax. When it was his turn to code, he could've walked me through his idea and then asked how to represent that in Ruby. Instead he would spend time writing code that was incorrect syntax and confusing.
In successful companies, employees help each other out for the greater good of the company. If you are in a work environment where questions are seen as an annoyance, get a new job. How can you expect to learn if you get the cold shoulder from a colleague every time you try to learn from him/her? If you get some resistance getting an answer out of somebody, calm them down and persist. Help them understand why it is important that you know something and ask again.
Asking Questions Isn't Always Easy
There are times when asking a question can be extremely difficult. Those are typically the times when it is critical that they are brought up. If you call software your craft, it is your responsibility to ask the difficult questions.
Playing the devil's advocate for somebody with strong opinions can be a very difficult job. Asking questions that go against somebody's beliefs can go wrong very easily. It is hard for the person being questioned to not feel attacked. In this type of situation framing is extremely important. Start off your questions with "I don't understand" or "I think I'm missing something." The person being questioned will likely be more explanatory rather than defensive.
Asking questions in an apathetic environment is also a difficult task. When nobody cares about the topic, it is hard to have a discussion about it. If this is an important topic, you must ask thought provoking or scary implication questions to get their attention. That might sound like a politician's strategy, but if the topic is truly important that is an extremely effective strategy.
Developers rely on asking questions effectively every day. Since questions are so important, developers should be consciously aware of the roles they play in their job. Questions cause learning, can be scary, and are difficult to ask at times. I hope that after reading this blog, you understand the importance of questions and know a little bit more about the role they play in a developers job.