❓ 提问的技艺
作为一名软件工程师,常常需要开发新功能或修复程序中的缺陷。有时,你可能会感觉自己缺乏必要的知识、对特定解决方案不够了解,或者对如何完整解决任务清单上的问题感到不确定。这种感觉十分正常,甚至最经验丰富的软件工程师也会遇到这样的挑战。没有人能够完美应对一切,尽管他们可能给人留下了全知的印象。
在coding过程中,寻求帮助和提供帮助是至关重要的一环,它们与coding或code review一样重要。然而,提出问题本身就是一门技巧,需要一定的时间去学习如何在较少的时间内获得更有效的帮助。
提问是一种间接的学习方式
很多人,像我一样,会感到害怕或不好意思提问题。他们担心,提问可能会让同事质疑他们的能力,给他们贴上技术不佳的标签,甚至可能因为提出了一些看似简单的问题而受到不公正的对待。这种担忧在进入新环境时尤为强烈。
然而,如果你所在的环境不鼓励提问,这通常是一个不利的信号,暗示你可能需要重新考虑是否继续留在那里。轻视好奇心、实验精神和提问、随意贴标签的文化很少能够促进智慧的增长。孤芳自赏和抑制知识交流的行为,只会限制个人和团队的发展。
记住,知识来自于学习,而学习往往来自于提问。确保你与那些明白并尊重这一点的人共事。
如果你在提问时感到害羞或缺乏信心,尝试将问题视为展现你求知欲望的机会,而不是无知的标志。
事实上,提问是深入了解一个专题的强大途径。通过探索性的问题,你不仅能够快速掌握知识,还可能获得意料之外的新见解。你也更可能记住那些亲自经历探索过程中找到答案的知识点。
提问的精妙技艺
掌握提出恰当问题的技巧是一项挑战,它不依赖于智力,而是更多地需要不断地实践。它要求持续的实践和主动探究,只有通过积极提问,并专注于那些能够引导你更接近答案的关键细节,你才能逐渐提高提问的能力。
问题的具体性
问题的具体性无非就是相关与不相关两面性
无关的具体性
举一个简单的例子: 如何在 React 中在页面刷新时保持状态管理器中的数据?
虽然你提出了一个非常具体且明确的问题,尝试不要局限于 React 生态系统的答案。如果你将视角拓宽至更广泛的技术生态,便可能识别出一个更广泛应用的核心问题,比如关于数据持久性的通用议题。这样一来,你获得的解答不仅在 React 中适用,也能跨框架和库使用,增加了答案的通用性与价值。
尽管你的问题背景很关键,但有时放开这一限制,可以帮助你找到一条更有可能指向正确答案的途径。
相关的具体性
具体性可能涵盖库名称、浏览器版本、具体设置项、代码示例等。这类详细信息有助于缩减问题调查的范围,让协助你的人能够尽可能地重现问题,从而更快地找到解决方案。然而,关键在于辨识哪些细节是真正有助于问题解决的。
最后
随着时间的积累和提问的经验增长,你会逐渐辨别出哪些技术细节对你至关重要,哪些又显得不那么关键。对此,我没有更高深的忠告,只是鼓励你继续提问,练习使得完美。
提供一个简易示例
错误的提问 ❌
ts
嗨,XXX。
你知道为什么testKeyValues在TestKVStore中会失败吗?
要重新运行这个真的拖慢了我们的构建速度。
谢谢!
正确的提问 ✅
ts
嗨,XXX。
我在调查为什么testKeyValues在TestKVStore中会失败时遇到了一些麻烦(在DistKV的代码库中)。
YYY建议我来问问你。希望你能帮助我。
在我看来,这个测试差不多每执行3次就会失败1次。
这似乎是随机的。我试着单独运行它,但还是失败了,所以我认为这不是测试用例与测试用例之间的问题。
YYY在他的计算机上循环运行了这个测试,但仍无法重现它。
我在源代码中没有看到任何明显的东西能解释这个测试失败的原因。这似乎是某种竞争条件。
有什么想法吗?
有人告诉我这不太可能影响到生产环境,所以并不十分紧急。
但是,每次发生这种情况,拍打测试都会花费我们20到30分钟,所以我很想知道如何解决这个问题。
我附上了显示测试失败的日志和我当前所有的环境设置,以备不时之需。
谢谢!
共识的15分钟规则原则
在提问时要谨慎,避免形成一种习惯,那就是依赖性地将问题全部交给他人。
虽然在困境中寻求援助是必要的,但我们应避免过度依赖。得到所需的帮助和解答固然令人满足,但自立解决问题带来的成就感往往更值得追求。
因此,在求助前,试着自己评估和分析问题。这不仅能避免不必要的提问,还能增强你的独立解决问题的能力,并带来更深的满足感。
在 Artem 的 Blog 《How To Ask Questions?》中提到的 The 15 Minutes Rule 在他职业生涯中的重要性。 我认识到,我们每个人都应该设定一个个性化的计时器,其时长可以根据情况而定。
遇到问题时,不要急于求助,而应先独自专注地花 15分钟 尝试解决。15分钟后,若问题仍然存留,再用接下来的15分钟应对新问题。只有在多次尝试无效后,再向同事或其他开发者寻求帮助。
这条规则极其有效,因为它能提升你的问题质量。在努力解决问题的过程中,即使未能找到答案,你通常也会学到新东西。你获取的知识和尝试的方法不仅能为未来帮助你的人提供线索,从而更精确地解答你的疑问,同时,你的努力也能增加获得他人理解和共鸣的可能性。
耐心
当我们遇到棘手的问题时,如在线上环境中出现的难以追踪的异常或发布前的紧急风险,我们都可能感受到压力。然而,压力本身并不能解决问题或指引我们找到答案。
记住,阐述问题和提出正确问题都是有难度的。所以,请耐心地整理你所掌握的信息,保持冷静和友善。愿意花时间帮助你的人可能会努力寻找最合适的方式来向你传达答案。
给予帮助
不管你觉得自己缺乏经验到什么程度,总有人可能正处在你之前的阶段。他们可能走在与你类似的路上,但对于你已经理解的某些概念、模式或方法尚未完全掌握。当你发现别人对你已经熟悉的主题感到迷茫时,伸出援手。这样做不仅帮助了他人,也在复习和分享过程中加深了你自己的理解和技能。这可能会帮助你发现自己知识中的一些盲点!
归纳
当你成功解决问题并获得答案时,那份满足感是难以言表的。然而,请记得将这些经历铭记心中。提出问题的根本目的在于学习。为了从答案中提取价值,你可能需要重新审视原问题并提炼关键见解:
- 导致问题的根本原因是什么?
- 采取了哪种解决策略?
- 该解决方案是如何直接或间接地解决原因的?
- 在解决问题的过程中,有哪些额外知识对你有所帮助?
- 以上问题的答案有助于你深化理解,并在将来遇到类似挑战时快速应对。
通过理解提问的背景、清晰地表述问题、避免不必要的细节,以及学会从回答中吸取并应用知识,我们可以变得更加自主,并在知识的海洋中航行得更远。
总的来说,提问不仅是一种获取信息的工具,它还能促进思考,深化理解,连接人与人。掌握提问的艺术,就是在掌握解决问题和终身学习的关键。让我们继续提问,继续学习,继续成长,因为每一个好问题都是通往知识宝藏的钥匙。
感谢(题外话)🌸
本节内容参考了 Artem 的 Blog 《How To Ask Questions?》
本节内容参考了 《程序的README》