At the beginning of this section, we discussed why children ask questions, and how it helps them connect ideas and form a better understanding of the world around them. In a way, most engineers also do this without even thinking about it. By asking the different types of questions you’ve learned about in this section—asking for help and asking for clarification—you’ll naturally learn things from the answers you’re given. You’ll learn why you should choose one software design over another, or why you should consider a certain edge case when you didn’t think it mattered.
In some cases though, you’ll just have curiosity for how something works or why something is the way it is. You won’t necessarily be asking for help or to clarify anything, but you’ll still have questions. In this case, you’re just asking a question for the sake of learning.
Sometimes it’s good to challenge the status quo and ask your teammates why something is the way that it is. In some cases, the answer may be underwhelming. You may receive an answer such as “well, that’s just how we’ve always done it.” In asking these questions, you’re challenging the other engineers to think through why they’ve always done it that way, and what they could do to improve a process or part of the codebase.
In other cases, there may be a very good reason for why something is done a certain way that you may not have realized. There may be historical context that you were unaware of because you joined the team after some important decisions were made. Perhaps you never would have known this had you not asked the question in the first place.
In some cases, asking questions will help you understand your team’s processes, which will help you be a better contributor in the future. Other times, asking questions will help you understand why a part of the system is architected a certain way, which will help you write better software in the future. Or there may be times where asking questions helps you understand someone else’s thought process and how they approach solving a problem. It can be eye-opening to see what considerations and trade-offs someone else takes into account when making decisions, and this can often influence your own thought processes in the future. Asking good questions helps to uncover new ideas, techniques, and processes that you can leverage to become a better software engineer.
Write It Down
When you read about a new idea for the first time or hear an explanation for why some status quo is the way that it is, it can be revealing. In some cases, it can change your perspective on a topic or how you view certain things. Over time, these new ideas may fade out of your memory, and you’ll soon forget about them.
It’s always helpful to have a good note-taking system in place to keep track of small task lists and meeting notes, and a good habit to get into is to document new ideas and concepts as you learn them. This can be in a personal note-taking app or your private space on your company’s knowledge platform.
First, writing things down helps you internalize new concepts and retain new ideas by forcing your brain to process the information in a more detailed way. It’s often said that the best way to learn something is to teach someone else, so try writing your notes in a way that teaches your future self what you want to remember. Not only will it help you internalize what you learn, but you’ll be able to review and reference your notes in the future.
Never Stop Learning
Software engineers are curious creatures. We strive for continuous improvement and are constantly looking to refine our understanding about how the world works around us. We apply years’ worth of experience to the code we write, but more importantly, we never stop learning from the decades’ worth of experience that our colleagues bring with them.
Asking questions is a fundamental aspect of our jobs as software engineers, and asking good questions is equally an art and a science. Over time, you’ll hone your ability to ask better and better questions, but it’s always important to keep in mind which kind of question you’re asking and the context in which you’re asking it. Sometimes you’ll get the answers you were looking for, sometimes you’ll get unexpected answers that change your perceptions, and sometimes you’ll get insufficient answers that will require additional questions. If there’s one thing for certain though, it’s that you should never stop asking questions, because asking why is fundamental to growing as a software engineer.