当我遇到问题时,我该怎么做...¶
科协水群里闲聊时,有人“暴言”:“在贵系有技术问题时,摇人比查文档更方便。”遇到问题时多和其他人交流、避免闷头苦干当然是支持的,但这并不意味着问问题前不需要付出努力(例如在搜索引擎上查找)、问问题时对方有义务替你解答......
—— 摘自 “酒井科协” 公众号 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.