Every developer shares a common need for assisstance at some point in their career path. Java was the first language that I learned and I remember asking lots of questions and using tons of resources to figure out how to do the things I wanted. I’m sure I’ve asked my fair share of “stupid” and “smart” questions. A main problem that arises with asking “stupid” questions is the perception of the one asking to be lazy and disinterested in the subject. A “stupid” question is typically a question that the asker could solve by themselves with a little more effort. Such as finding a file on a system or a questions regarding something already heavily documented. Other instances can include questions that are too generalized and lack enough specificity to even answer. These kinds of questions come off as incredibly lazy and typically leads to hostile answers or are ignored entirely. On the opposite spectrum are “smart” questions. “Smart” questions demonstrate some form of attempt to solve the issue. Typically these questions are incredibly specific and recieve in-depth answers that not only build respect for those asking the questions but can help others that come across the same issue. As software engineering is a very communitive field, it’s important to ask questions that adhere to the principals of a “smart” question.
Ironically, the header of this paragraph can be seen as a “stupid” question. One could Google what a stupid question is and find varying answers. Looking at “What is a “Stupid” question?”, it meets a lot of the “stupid” question factors. It could be easily Googled but it also is incredibly vague. A solution to this, would be specificity. “What is a ‘Stupid’ question” could be changed to “What is a ‘Stupid’ question in Software Engineering”. This change fixes the vagueness of the question. Using this new title in conjunction with thorough research, one could find Eric Steven Raymond’s essay on “How To Ask Questions The Smart Way”. Let’s take a look at an example:
This developer asks a very a vague question and while the body of the question is a bit more in depth, it lacks any real grounds for an attempt. JavaFX is a variation of Java praised for its modern and hardware-accelerated user interface. His problem lies in not being able to find the correct imports to play an mp3 file. Surely he could attempt to look at the documentation or Google search. As a developer, time is money. The faster you find your fix the better. Even looking up his question on Google you can easily find earlier dated questions on StackOverflow or just the outright documentation which contains examplanations to his issue. He lists the imports used but none of the code. This is a lack of context necessary for the volunteers to answer. It also limits the volunteers to what they can answer because now assumptions need to be made for why he has this issue. This results in answers that are basically redirectories to the documentation of JavaFX as well as a link to a “Possible duplicate” meaning a very similar question has already been asked. His question unfortunately fails both in generality and in effort.
As mentioned in the introductory paragraph, the foundational attributes that define a “smart” or “stupid” question are specificity and effort. In which the previous question lacked both. Regarding software engineering, smart questions are imperitive to the efficiency, progress, and collaboration of the programming community. Majority of those answering questions are volunteers. Not only is it morally foul to waste their time but it can also be a waste of your time. “Smart” questions reflect that you as a developer are attempting to form a deeper understanding of your problem and require the aid of others to solve it. “Smart” questions are respectful of others and help maintain professionalism in a learning environment. A solid of example of this:
Just from this developer’s title alone you gain tons of context on his situation. He mentions an property, object, Javascript framework, and library used. Already we have a much clearer image of the developers situation. Better yet, within the body he mentions that he attempted to follow a tutorial made the previous September. Unfortunately there has been updates to both the Angular framework and Rxjs library since his viewing of the tutorial. So now we know a problem could lie in the version incompatibilities. He claims to run into a error when referring to the map and explains his point of confusion after examining the code. He then states a direct question: “Is there a new way in angular 6 or rxjs to achieve what the tutorial is trying to do?”. This is great for the volunteers because now they have a direct question to answer. Beneath that he also shares his code and list of files on the system. All great tools that can aid the volunteers in solving his issue. Because of this, the volunteers respond with direct answers that pertain to the new version he’s using as well as useful suggestions for efficient syntax. They also provided examples of ways he could use the pipe function alongisde his map to get it to work.
At the end of the day, “smart” questions serve as the catalyst for a culture of continuous learning, problem-solving, and respect for other developers. They’re characterized by precision, clarity, and effort to portray accurate descriptions of the problem. Software engineering is foundationally collaboritive and the internet is a vast supplement of knowledge that bridges the experience of all developers. It’s frankly pretty simple, well-crafted questions elicit insightful responses while poorly logged questions receive sass and duplicate links. Ask “smart” questions and help your fellow developer!