跳转至

当我遇到问题时,我该怎么做...

约 1875 个字 预计阅读时间 6 分钟

科协水群里闲聊时,有人“暴言”:“在贵系有技术问题时,摇人比查文档更方便。”遇到问题时多和其他人交流、避免闷头苦干当然是支持的,但这并不意味着问问题前不需要付出努力(例如在搜索引擎上查找)、问问题时对方有义务替你解答......

—— 摘自 “酒井科协” 公众号 2022 年 3 月 25 日文章

学习过程中遇到问题是在所难免的,而如何面对遇到的问题,却是值得我们学习的话题。本篇文章我们从“如何使用搜索引擎”、“如何查阅官方文档”、“如何选择常用网站”、“如何有效地进行提问”这几种方式来阐述,“当我在学习过程中遇到问题时,我应该怎样做...”

如何使用搜索引擎

我应该怎样选用搜索引擎

“百度一下,你就知道”诚然是大众的选择,而我们必须指出其在搜索结果呈现时的局限性。具体来说,由于一些商业性因素的限制,它大概率会返回一些与搜索结果不是最强相关的内容。我们在这里推荐两款搜索引擎:如果你因为中国大陆的限制无法访问互联网上的一部分内容,我们推荐你使用 “Bing 国际版”,而如果你可以访问到世界互联网上的内容,我们则推荐你使用 “Google”。我们接下来的讨论均以后者作为基础展开。

我应该如何使用搜索引擎

相信大家都掌握了搜索引擎的基本使用方法,也掌握了例如“搜索关键词”而不是“搜索整句话”的这种基本搜索技巧。接下来我们演示一些较为进阶的搜索方法。

  • 指定网站搜索 site:web.site
  • 精确匹配 "Exact Match"
  • 必须包含 + 与必须不包含 -
  • 任意匹配 *
  • 指定时间范围,例如只获取过去 1 年内的搜索结果,这样可以保证搜索结果的时效性

参考资料:How to properly use a search engine.

如何查阅官方文档

大部分你使用的工具或者库都会有自己的官网网站;有些即使没有官方网站也会有自己的 GitHub Repo 和配套的 Wiki。了解一个工具或者函数库最全面、也是最便利的方法,实际上是读它对应部分的说明文档。

比如,我们想了解怎么在 PyTorch 中实现叉乘,或许我们可以在百度中搜索 pytorch 叉乘,然后点开一个 CSDN 教程,但这远没有 Google 搜索 pytorch cross product,然后打开 pytorch.org 的官方文档进行阅读来的全面而透彻。

再比如,如果我想快速上手一个名叫 “Carla” 的模拟仿真工具,最合适的方式,应该是搜索 “carla doc”,然后打开官方文档阅读其中 “Getting Started” 部分,这样能对这个软件有最基本的了解。之后再根据自己的需要阅读其他部分的内容。

如何选择常用网站

要想搜索不同的内容,我们一般会选择不同的网站。这里我们针对一些常见的问题,列出一些常用的网站:

Runtime Error / Compilation Error

程序运行时遇到了我不了解的报错,即使查看了函数调用栈也不理解最终的报错信息;程序编译不过,其中用了我不理解的编译特性... StackOverflow 是这些问题的好帮手,可以替代 CSDN 作为你的搜索首选。事实上,CSDN 的部分内容是直接从 StackOverflow 上搬运而来,而这些搬运而来的内容在国内网站上又相互爬取、相互展示...

但这也不意味着中文内容都是差的,如果使用 Google 并且语言为中文,通常能查到一些中文个人博客的内容,这些内容一般不会是机器搬运的,可以作为参考。例如如果想要配置 DN42 实验网络,由于官方文档不详细,个人博客的内容也是非常重要的参考。

What is the original paper of XXX...

我们想知道某篇学术论文的出处,或者是其引用格式。这时 scholar.google.com 就可以起到很好的作用。如果你知道这篇论文的全名,你可以直接进行搜索,然后便捷地获取引用格式与论文原文的 PDF 版本。

I want to know whether or not someone has implemented this...

想找过往的轮子?好办,在 GitHub 中进行搜索,你可以看到规模庞大的开源代码...但是,在使用时请务必遵守其对应的 LICENSE。可以尝试使用 GitHub Code Search,能够更加精确、全面的搜索公开仓库的代码。

此外,在学习对应的内容时,我们推荐到对应的官方网站、教程、文档或 Wiki 上进行学习。在学习一些公开课程可能涉及到的知识时(如 CS231n),我们推荐先搜索课程主页,进而在 YouTube 上搜索对应的讲解视频,然后在 B 站与知乎等国内平台上进行检索。

如何有效地进行提问

在你尝试了如上内容无果之后,自己闷头苦干或许已经不能解决你的问题了。是时候进行提问了 —— 打开微信列表,翻出一个人的账号,然后敲下一句“在吗”,等待回复 —— 不,这并不是正确的提问方式,至少对方从一句“在吗”中并没有获得任何的信息增益。他/她可能认为你想邀他/她喝一杯下午茶,而不是帮你还有 24 个小时就到 DDL 的 DSA 编程作业 Debug。

要想有效地进行提问,我们强烈推荐你阅读一遍参考资料。当然,我们在这里列出几点重点:

在你提问之前

  • 请确保你通过搜索引擎检索不到你想问的问题
  • 请确保你查阅了官方文档,其中并没有提及可以直接解决你的问题的答案
  • 请确保你自己做了充分的预实验
    • 比如 这段程序的运行结果是什么?,为什么不自己跑一下呢

你的提问内容

  • 请提供充分的信息给回答者
    • 比如请不要发一个 这段代码有 Bug [捂脸] 的语句给对方,然后附上一个 ~300 行,以文本方式发送在微信聊天框的代码
    • 请至少提供充分的说明:哪段代码?出了什么问题?报错信息是什么?这段代码的目标功能是什么?
    • 如果有可能的话,请给出足够多的注释(不过是代码还是你的思考内容)
  • 请说出你做过了哪些努力
    • 比如按照某个论坛某条回复的方法进行了尝试

即使提问,也不代表问题的主动权放在了对方手里。问题毕竟是你自己的问题,对方没有义务帮助你必须解决掉这个问题,所以继续自行寻找答案也许是需要的...

参考资料:How to ask the question the smart way.