# 如何解决问题

LLMS index: [llms.txt](/wikis/llms.txt)

---

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

> 科协水群里闲聊时，有人“暴言”：“在贵系有技术问题时，摇人比查文档更方便。”遇到问题时多和其他人交流、避免闷头苦干当然是支持的，但这并不意味着问问题前不需要付出努力（例如在搜索引擎上查找）、问问题时对方有义务替你解答......
>
> <right>—— 摘自 “酒井科协” 公众号 2022 年 3 月 25 日文章</right>

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



## 如何使用搜索引擎

### 我应该怎样选用搜索引擎

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

### 我应该如何使用搜索引擎

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

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

参考资料：[How to properly use a search engine](https://www.instructables.com/How-to-Properly-Use-a-Search-Engine/).



## 如何查阅官方文档

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

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

再比如，如果我想快速上手一个名叫 “Carla” 的模拟仿真工具，最合适的方式，应该是搜索 “carla doc”，然后打开[官方文档](https://carla.readthedocs.io/en/latest/)阅读其中 “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](https://cs.github.com)，能够更加精确、全面的搜索公开仓库的代码。

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



## 如何有效地进行提问

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

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

**在你提问之前**

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

**你的提问内容**

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

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

参考资料：[How to ask the question the smart way](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way).
