Skip to main content

搜索与提问

How To Ask Questions The Smart Way

你是不是经常会看到这样的问题:

  • “救命!我的电脑坏了!”
  • “急!急!急!......”
  • “大佬们,这是发生了什么啊”
  • “为什么我蓝屏了,跪求解答......”

如果你是提出以上问题的人,那我建议........好好看看这篇文章。 以上的提问方法可以明显地看出来是错误的。(虽然例子比较离谱X) 一个正确的问题可以很好地缩短你获得有效回答的时间以及提高你获得的回答的质量。 那么今天我们就来看看,怎么样的提问才是正确的提问,怎么样的搜索才是正确的搜索。 首先我们先贴出传世经典的链接——How To Ask Questions The Smart Way的中文版

https://github.com/tvvocold/How-To-Ask-Questions-The-Smart-Way

OK,相信你看完了之后就会对如何提出一个好问题有了一个比较清晰的认知。 当然,我们在日常情况下不会有如此严苛的要求,你也不必在阅读这篇文章之后就变得束手束脚,不敢发问,这就会导致一些明明问一嘴就会有熟手一语点醒的问题,自己捣鼓了几个小时却还不明所以。 目前而言,相较于搜索引擎,chatGPT回答开发领域问题的效率更高一些,尤其擅长提供“如何实现”类的问题,“为什么这段代码产生了这样的效果”类的问题也有较大可能可以解释清楚,而“这段代码哪里有问题”类的问题有中等概率提供有效的意见。这也不妨作为询问他人之前的一种解决方案。 在实习期,大致可以根据问题的种类来划定解决方式:

  • 这个是什么/怎么用:找官方教程,其次找博客,再次问chatGPT
  • 哪里有bug:优先自己找,实在找不到可以问chatGPT,还不能解决就该提问了
  • 如何实现:综合chatGPT和搜索引擎。如果你觉得对于一项并不复杂的工作,你从网上学的东西产生了大量不必要的麻烦,也可以提问更好的写法
  • 哪种实现方法比较好:优先提问,从网上学来的歪门邪道可能不普适、不优雅、不可读,遇到这类问题进行提问或许可以让你的代码风格与实现方式更好地融入团队。

另外的一些细节

搜索

  • 明确要搜索的主题,想要得到的资源。
    • 当问题过大的时候,拆分为小而具体的问题。逐个解决。
    • 在最开始完全陌生的时候,并不知道遇到的问题应该用什么关键词描述。这时候可以向其他人提问获得关键词,也可以在众多的所搜结果中提取关键词重新进行搜索。
    • 率先搜索第一手问题。
      • 你需要解决xxx的问题,但是你觉得这个xxx问题可以进一步推理至yyy从而搜索/问别人yyy问题。这样的后果可能是你得到的yyy的解决方案根本不适配xxx,甚至可能会将你的思路带歪。
  • 搜索方式。
    • 采用搜索引擎进行搜索。使用google搜索。可以采用'how to', 'turorial'等关键词。利用搜索引擎的规则进行搜索,如精准匹配,在特定网站内部搜索等。
      • 如果你不想因为打个喷嚏而被鉴定为癌症或者下载steam游戏管家(乐),请不要使用百度,bing搜索是很好的日常中文替代搜索引擎
      • 技术问题在使用英文搜索时,往往会得到一些崭新的思路
    • 到官方网站搜索。例如若想在飞书内配置 SSO,必然需要看看飞书的官方文档。语言的新特性等也可在官方网站查看。
    • 到技术论坛内搜索。如 stackoverflow 等。如 xlab 暑期内训文档等。
      • 我们不排斥面向CSDN、博客园等等的问题解决方式,但是需要注意的是,里面的内容可能解决了博主的问题,但是不一定能解决你的问题,甚至不一定是无害、安全的
    • 到代码托管平台搜索。查看项目的 issue 中是否有解决方案存在。
    • 采用AI进行搜索。如ChatGPT,New Bing等。但请注意对搜索得到的结果进行思考与求证,不要鲁莽地相信。
  • 资源
    • pdf电子书资源等。到z-libirary等网站搜索,或者淘宝上购买。
    • 轮子等。到代码托管平台进行搜索。
    • 论文等。到数据库或者论文导航网站进行搜索。
    • 软件等。官网。外国的软件最好是英文官网,曾经出现过有中文官网里面下载的软件带病毒的案例(消息来源:翁恺)

提问

当我们自己无法解决问题,或是解决问题的时间要求非常紧迫的时候,我们需要他人的帮助来帮我们解决问题。当然,也有灵光闪现,值得反复玩味的有趣问题。

  • 提问前
    • 明确提问的问题主题。清晰地知道自己要解决的是什么问题。
    • 使用上文“搜索”当中的方法,查看能否获得问题的解决方法。
    • 确定提问的方式,找人私聊/在公共网站提问,选择合适的平台提问。
    • 对于 X-Y problem,提问 X 问题,而不是“Y 该如何做”。这样可以避免本末倒置。

举个简单的例子

Q) 我怎么用 Shell 取得一个字符串的后 3 位字符?

A) 如果这个字符的变量是 $foo,你可以这样做:echo ${foo:-3} ,为什么你要获取字符串的后 3 位?

Q) 我想要获取文件的扩展名

A) 文件的扩展名并不一定是 3 位啊。那你试试这样做:echo ${foo##*.}

  • 提问时-私聊

    • 真诚坦率。如及时回复,坦率的表示理解情况等。
  • 提问时-公共网站

    • 在英文公共网站提问时,可以在提问中解释英文并非母语,使回答者忽略你的语法上的小问题。
  • 提问时-通用

    • 清晰地表述自己遇到问题,BUG的症状。
    • 附上必要的代码/日志/错误信息片段。采用代码块包围代码会使得可读性更强。
    • 如有必要,需要说明采用的工具、版本号、操作系统等等。
    • 已经采用了哪些方法去解决问题,这些方法收获的结果是什么?
    • 个人是如何理解这个问题的?认为是什么原因导致了这个问题?
  • 提问后

    • 解决问题后,在提问处表明采用了什么方法解决了当前问题。
    • 对花费时间免费帮助你的回复者表示感激 ❤️
    • 如有必要,对问题进行记录,方便日后遇到相同问题时解决。